自分用メモとして残す。
ECS が動作しないときに確認すべきポイント
-
起動タイプ(EC2 or Fargate)
-
SG/NACL のネットワーク設定 (443が開いているか)
-
IAM ロールの権限
-
EC2 の場合、コンテナインスタンス
/etc/ecs/ecs.config
でクラスターの指定を行っているか -
EC2 の場合、ECS Agent が動作しているか
-
カスタムAMIを使用する場合
- 固有のデータをクリーンアップする必要がある
プロキシ
- ECS on EC2 だとプロキシ経由で ECR からのイメージを pull できる。
- ユースケースとしては、すでにプロキシが存在し、VPCeを設けたくない場合など
- ECS on Fargate だとプロキシ経由で ECR イメージは pull できない
- Fargateタスクで実行されているアプリケーションにおいては、環境変数
HTTP_PROXY
を利用してプロキシ経由でアクセスすることは可能
- Fargateタスクで実行されているアプリケーションにおいては、環境変数
安全なコンテナの終了方法
- タスクが停止すると ECS エージェントは、各コンテナのエントリプロセス (Dockerfile の ENTRYPOINT、CMD) に
SIGTERM
シグナルを送信する。デフォルトで 30s にSIGKILL
シグナルを送信する。 - コンテナでは、エントリプロセスが全てのプロセスの親になる。
- エントリポイントに
sh
を設定していると注意が必要。デフォルトでは、shell はSIGTERM
シグナルを無視する。
ECS Execの方法 (ざっくり)
- ECSExecRoleをタスク定義で設定
- ECS Exec を有効化する(確か、新タスクを起動する必要あり)
aws ecs update-service --region <リージョン名> --cluster <クラスタ名> --service <サービス名> --enable-execute-command
- ECS Exe でアクセスする
aws ecs execute-comand --region <リージョン名> --cluster <クラスタ名> --task <タスクID> --container <コンテナ名> --interactive --command "/bin/sh"
Blue/Greenデプロイ
Application AutoScaling と B/G デプロイを組み合わせて同時使用することは難しい。デプロイ時には一時的に Application AutoScaling は停止した方が良い