はじめに
コンテナって便利ですよね!ECSはexecが使えるようにアップデートされてからコンテナを利用する人も増えたのではないでしょうか?コンテナやサーバレス関連のアップデートは凄まじく、最近はEC2を使う機会がかなり減ってきましたね。今回はECS exec
execエラー確認
最近こんなエラーがでました。
An error occurred (TargetNotConnectedException) when calling the ExecuteCommand operation: The execute command failed due to an internal error. Try again later.
execのエラーが起きた場合は最初に下記の設定ができているか確認してみてください。
・Amazon ECS タスクロールに execute-command コマンドを実行するために必要なアクセス権限がない
・コマンドを実行しているIAMロールまたはユーザーに、必要なアクセス権限がない
・AWS CLIがインストールされている
・Fargateのプラットフォームバージョン「1.4.0」以降を利用している
・「Session Managerプラグイン」をインストールしている
上記の設定すべてを対応してもエラーが解決しない場合も残念ながらあります。。その時は amazon-ecs-exec-checker スクリプトを実行してみてください。 amazon-ecs-exec-checker を使えばAWS CLI 環境および Amazon ECS クラスターまたはタスクを確認、検証できます。このスクリプトは、満たされていない前提条件 についても通知してくれます。
amazon-ecs-exec-checker スクリプト
README.md 記載通りにやれば簡単に利用できます!
今回はnginxとphp-fpmのコンテナを用意して試して見ましたが問題なさそうですね!しかし、それでも最初のエラーが解決しませんでした。。。
結論
原因はタスク定義の環境変数の中に下記値が入っていたからでした。
AWS_ACCESS_KEY
AWS_SECRET_ACCESS_KEY
amazon-ecs-exec-checker スクリプトでも引っかからないので大変でした。。
アプリケーションへの権限付与はIAMユーザーを作成するのではなくタスクロールで権限を付与しましょう!!
参考
https://aws.amazon.com/jp/premiumsupport/knowledge-center/ecs-error-execute-command/