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