
クラウド事業推進部の石倉です。
表題の通りではありますが、AWS FargateでECS Execを使用するための必要な設定作業についてまとめてみました。
Amazon ECSをAmazon EC2で利用する場合はEC2インスタンスをこちらで管理できるのでEC2インスタンスに入りコンテナとやり取りできますが、AWS Fargateの場合それができません。
そのため、AWS Fargateでコンテナとやり取りする際はECS Execが必要になりますが、この際にはいくつかの設定作業が必要になります。
毎回「何をすればいいんだっけ?」と調べ直している自分がいたので改めてまとめてみました。
ECS Execを使用するために必要な設定作業
ECS Execを使えるようにするためには大きく以下の作業が必要になります。
- AWS CLIのインストールと設定
- AWS CLI のセッションマネージャープラグインのインストール
- タスクロールの設定
- ECS Execの有効化
- VPCエンドポイントの作成(Fargateをプライベートサブネットに配置してNATゲートウェイを利用しない場合)

1. AWS CLIのインストールと設定
ECS ExecをCloudShellなどから使用する場合は必要ありませんが、ローカルのPCなどからECS Execを使用する場合はAWS CLIを使える状態にする必要があります。 下記ドキュメントを参考にAWS CLIのインストールと設定を行います。
AWS CLI の最新バージョンのインストールまたは更新 - AWS Command Line Interface
AWS CLI の設定 - AWS Command Line Interface
ちなみにECS Execを使用する(execute-commandを実行する)ために必要なユーザー権限は最低限以下が必要になります。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ecs:ExecuteCommand",
"ecs:DescribeTasks"
],
"Resource": "*"
}
]
}
2. AWS CLI のセッションマネージャープラグインのインストール
こちらもCloudShellなどの場合は既にインストールされているので必要ありませんが、ローカルのPCなどの場合は対応が必要になります。
AWS CLI 用の Session Manager プラグインをインストールする - AWS Systems Manager
3. タスクロールの設定
ECSで利用するタスク定義に次のような信頼ポリシーおよびIAMポリシーを設定したIAMロールをタスクロールに設定する必要があります。 ECS ExecはSSMセッションマネージャーを利用してコンテナと接続するためSSMサービスへのアクセス許可のIAMポリシーを設定します。
信頼ポリシー
{
"Version":"2012-10-17",
"Statement":[
{
"Effect":"Allow",
"Principal":{
"Service":[
"ecs-tasks.amazonaws.com"
]
},
"Action":"sts:AssumeRole",
"Condition":{
"ArnLike":{
"aws:SourceArn":"arn:aws:ecs:<region>:111122223333:*"
},
"StringEquals":{
"aws:SourceAccount":"111122223333"
}
}
}
]
}
IAMポリシー
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ssmmessages:CreateControlChannel",
"ssmmessages:CreateDataChannel",
"ssmmessages:OpenControlChannel",
"ssmmessages:OpenDataChannel"
],
"Resource": "*"
}
]
}
Amazon ECS タスクの IAM ロール - Amazon Elastic Container Service
4. ECS Execの有効化
ECSサービス、タスクに対してECS Execを有効にする必要があります。
以下の確認コマンドで"enableExecuteCommand": falseとなっている場合はECS Execが無効になっているのでECS Execを使うことができません。
## サービスに対してECS Execが有効かどうか
aws ecs describe-services --cluster {クラスター名} --services {サービス名} | grep enableExecuteCommand
## タスクに対してECS Execが有効かどうか
aws ecs describe-tasks --cluster {クラスター名} --tasks {タスクID} | grep enableExecuteCommand
無効になっている場合はECS Execを有効にする必要があります。
aws ecs update-service --cluster {クラスター名} --service {サービス名} --enable-execute-command
先ほどの確認コマンドで"enableExecuteCommand": trueとなっていればECS Execが有効になっています。
ですが既存のタスクに対しては無効となったままなのでタスクを再度立ち上げ直す必要があります。
ちなみにコンソール上からもECS Execが有効かどうかを確認することができます。


5. VPCエンドポイントの作成(Fargateをプライベートサブネットに配置してNATゲートウェイを利用しない場合)
ECS ExecはSSMセッションマネージャーを利用するためインターネット接続できる必要があります。そのためFargateをパブリックサブネットに配置している、もしくはプライベートサブネットに配置してNATゲートウェイを利用する場合は必要ありませんが、Fargateをプライベートサブネットに配置してNATゲートウェイを利用しない場合は、FargateがSSMセッションマネージャーと通信ができるようにVPCエンドポイントの作成が必要になります。
その場合はssmmessagesのインターフェイスVPCエンドポイントを作成します。
ステップ 6: (オプション) AWS PrivateLink を使用して Session Manager の VPC エンドポイントを設定する - AWS Systems Manager
ECS Execを使用してみる
ここまでの設定が完了していればECS Execが使用できるようになっているはずです。
~ $ aws ecs execute-command --cluster dev-ishikura-fargate --task cd73df94e5c4476dbfa0831bccd13d9d --container nginx --interactive --command "/bin/sh" The Session Manager plugin was installed successfully. Use the AWS CLI to start a session. Starting session with SessionId: ecs-execute-command-nxzkgu2yvuyr8qy8bgtpbzyhc4 #
最後に
ECS Execを使用するためにはこのようにいくつか設定作業が必要になるので「何をすればいいんだっけ?」となる方の手助けになれば幸いです。
参考
ECS Exec を使用して Amazon ECS コンテナをモニタリングする - Amazon Elastic Container Service
ecs — AWS CLI 2.28.6 Command Reference
おまけ
AWS Documentation MCP Serverを使ってFargateでECS Execを使用するための必要な設定作業について聞いてみたところ、上記の作業含め前提条件やオプションまで教えてくれました。うーんすごい。
