FRMSKI開発ブログ

AWS、iOS、AR/VRなど開発メモ

【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のタスク(下画面)のコンテナから

f:id:frmski:20190703215804p:plain

タスク詳細を見てみると、

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のクラスターからプロジェクトを選択し、ネットワーク構成では

f:id:frmski:20190703220616p:plain

パブリック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