【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