ecs-cliの操作中に「InvalidParameterException: At least one of maximumPercent or minimumHealthyPercent must be present in DeploymentConfiguration status」でエラーが出た時の対処法


ecs-cliでECSを操作している際に以下のエラーが発生して、サービスの削除も追加もできない状態になってしまいました。

```shell
$ ecs-cli compose --file docker-compose.test.yml service down
ERRO[0000] Error updating service                        error="InvalidParameterException: At least one of maximumPercent or minimumHealthyPercent must be present in DeploymentConfiguration\n\tstatus code: 400, request id: ad136f04-c544-11e8-845c-12345" service=test-app
FATA[0000] InvalidParameterException: At least one of maximumPercent or minimumHealthyPercent must be present in DeploymentConfiguration
    status code: 400, request id: ad136f04-c544-11e8-845c-12345
```

結論から言うと、一度scaleを0にしてから`service rm`することで対処することができました。


```shell
$ ecs-cli compose --file docker-compose.test.yml service scale 0 --deployment-max-percent 200 --deployment-min-healthy-percent 50
INFO[0000] Updated ECS service successfully              deployment-max-percent=200 deployment-min-healthy-percent=50 desiredCount=0 serviceName=test-app
INFO[0000] Service status                                desiredCount=0 runningCount=2 serviceName=test-app
INFO[0015] Service status                                desiredCount=0 runningCount=0 serviceName=test-app
INFO[0015] (service test-app) has stopped 2 running tasks: (task 70bbc563-36cf-42b8-bd45-12345) (task 8fc51952-acb8-4de2-8c2c-12345).  timestamp="2018-10-01 07:11:52 +0000 UTC"
INFO[0015] (service test-app) has reached a steady state.  timestamp="2018-10-01 07:12:02 +0000 UTC"
INFO[0015] ECS Service has reached a stable state        desiredCount=0 runningCount=0 serviceName=test-app

$ ecs-cli compose --project-name test-app --file docker-compose.test.yml service rm
INFO[0000] Deleted ECS service                           service=test-app
INFO[0000] ECS Service has reached a stable state        desiredCount=0 runningCount=0 serviceName=test-app

$  ecs-cli ps
Name                                       State                  Ports       TaskDefinition  Health
70bbc563-36cf-42b8-bd45-12345/ruby  STOPPED ExitCode: 137  80->80/tcp  test-app:3    UNKNOWN
```

このエラーはdeploymentConfigurationを定義しなかったことにより、Rolling updateがうまく動作しなかったことが原因なのではないかと思ったので、以下のドキュメントを再度確認して適切な設定を試みました。

[サービス定義パラメーター \- Amazon Elastic Container Service](https://docs.aws.amazon.com/ja_jp/AmazonECS/latest/developerguide/service_definition_parameters.html)


> deploymentConfiguration
> デプロイ時に実行されるタスクの数と、タスクの停止および開始の順序を制御するオプションのデプロイパラメーター。
>
> maximumPercent
> maximumPercent パラメーターは、デプロイ時に RUNNING または PENDING 状態にできるサービスのタスクの上限数を desiredCount のパーセント値 (最も近い整数に切り下げ) で表します。このパラメーターを使用すると、デプロイのバッチサイズを定義できます。たとえば、レプリカサービスで desiredCount が 4 タスク、maximumPercent 値が 200% とすると、スケジューラは 4 つの古いタスクを停止する前に、4 つの新しいタスクを開始できます (そのために必要なクラスターリソースを使用できることが前提)。レプリカサービスの maximumPercent のデフォルト値は 200% です。
>
>デーモンサービスタイプを使用している場合、maximumPercent はデフォルト値の 100% のままにする必要があります。
>
>デプロイ時のタスクの最大数は、desiredCount に maximumPercent/100 を乗算したもので、最も近い整数値に切り下げられます。

デプロイ時におけるサービスのタスクの上限数ということで、リソースに余裕があるのであれば早さを重視して200%でいいですね。

>minimumHealthyPercent
minimumHealthyPercent は、デプロイ時に RUNNING 状態に保つ必要のあるサービスのタスクの下限数を desiredCount のパーセント値 (最も近い整数値に切り上げ) で表します。このパラメーターにより、追加のクラスターキャパシティーを使用せずにデプロイできます。たとえば、サービスで desiredCount が 4 タスク、minimumHealthyPercent が 50% とすると、スケジューラは 2 つの新しいタスクを開始する前に、2 つの既存のタスクを停止してクラスターのキャパシティーを解放できます。ロードバランサーを使用しないサービスのタスクは、RUNNING 状態にある場合、正常と見なされます。ロードバランサーを使用するサービスのタスクは、タスクが RUNNING 状態にあり、ロードバランサーをホストするコンテナインスタンスが正常と報告された場合に、正常と見なされます。レプリカサービスの minimumHealthyPercent のデフォルト値は、AWS マネジメントコンソール では 50%、AWS CLI、AWS SDK、API では 100% です。デーモンサービスの minimumHealthyPercent のデフォルト値は、AWS CLI、AWS SDK、API では 0%、AWS マネジメントコンソール では 50% です。

>デプロイ時の正常なタスクの最小数は、desiredCount に minimumHealthyPercent/100 を乗算したもので、最も近い整数値に切り上げられます。

こちらはサービスが半分維持できていればいいので50％でよさそうです。

ということで、maximumPercentは200、minimumHealthyPercentは50で定義しました。
（ドキュメント中にはデフォルト値が同じ値で定義されていると書いてあるので、もしかすると直接の原因ではなかったかもしれません。）