まごんの駄文

ぽんこつSEが勉強したことをアウトプットするためだけのブログです。

ECS Execを実行するときの注意点

環境

AWS Cloud9から、ECS(FARGATE)で動いてるタスクにexecute-commandする。

または

WindowsCLIとSSMプラグインを入れてタスクにexecute-commandする。

環境作成時の注意点(Cloud9の場合)

作成の方法はググっていただくとして、注意点だけ。

  • Environment Typeはaccess via System Managerを選択
  • VPCとSubnetはECSと通信できるように選択

環境作成時の注意点(CLIの場合)

接続するときは毎回credentialsを作らないといけない。

IAMユーザー作成時のアクセスキーとシークレットキーをセットしたcredentialsで、SSM接続時のcredentialsを作る。

このcredentialsが有効なのは一時的なので(デフォだと12時間)、繋がらなくなったら作り直す必要がある。

実行方法

想定されるエラー
An error occurred (TargetNotConnectedException) when calling the ExecuteCommand operation: The execute command failed due to an internal error. Try again later.

よくわからないけど接続できないときはこのエラーが出るけど、「Try again later.」と言われても待っても解決しない。

実行失敗する時の確認事項

タスクでExecuteCommandは有効になっているか?

aws ecs describe-tasksを実行。

「ExecuteCommandAgent」が「RUNNING」で、「enableExecuteCommand」が「ture」。

なってなかったらtrueにしてタスクを起動しなおす。起動中のtrueの設定は反映されない。

ポリシー許可しているか?

デバッグ用にAmazon ECS Exec を使用 - Amazon ECS

IAMポリシーでコマンドが拒否されてないか?

調べ方:IAM Policy Simulatorで確認する。

https://policysim.aws.amazon.com/

ECSのExecuteCommandが通るか。

通らなかったら、何が悪いか確認できる。

環境確認ツールを使う

amazon-ecs-exec-checker

GitHub - aws-containers/amazon-ecs-exec-checker: 🚀 Pre-flight checks for ECS Exec

このツールでも途中で止まるようなら、都度IAM Policy Simulatorで確認していく。

最終手段

どこも問題無いのに、それでもexecute-commandが通らなければタスクを再起動する。

やり方はECS→クラスター→サービス→更新

「新しいデプロイの強制」にチェックを入れる。

自分もこれで行けた。