【AWS】ECSのservice up時に「Deployment has not completed」が出た場合の対処法
ECSのservice upコマンドを実行すると、
NFO[0001] Updated ECS service successfully desiredCount=1 force-deployment=false service=myappproject INFO[0016] (service myappproject) has started 1 tasks: (task 95f042ea-6a93-4729-b89b-c0eebee4d32a). timestamp="2019-07-02 13:28:15 +0000 UTC" FATA[0304] Deployment has not completed: Running count has not changed for 5.00 minutes
「Deployment has not completed」でタイムアウトエラー
ECSのタスク(下画面)のコンテナから

タスク詳細を見てみると、
CannotPullContainerError: Error response from daemon: Get https://294598740507.dkr.ecr.ap-northeast-1.amazonaws.com/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
とエラーが出ていることが判明。
Docker Imageの取得時のネットワークアクセスが許可されていないようでした。
ECSのクラスターからプロジェクトを選択し、ネットワーク構成では

パブリックIPの自動割り当てがDISABLEになっています。NATゲートウェイを使って外部にインターネット接続する方法もありますが、今回は自動割り当てをENABLEにすることで対処。
ビルド時のパラメータを指定するecs-params.ymlに「assign_public_ip: ENABLED」を追加することで解決しました。
version: 1
task_definition:
ecs_network_mode: awsvpc
task_execution_role: ecs-task-execution
task_size:
cpu_limit: 256
mem_limit: 512
services:
myapp:
essential: true
nginx:
essential: true
run_params:
network_configuration:
awsvpc_configuration:
subnets:
- subnet-096df842a99829e4f
- subnet-07c7f04d0b61c3346
security_groups:
- sg-09d046dd7faac15f4
assign_public_ip: ENABLED