📌 結論:ECS Execで何ができる?
実行中のECSコンテナに直接接続してコマンドを実行できる!
リアルタイムデバッグ
実行中のコンテナ内で
コマンドを直接実行
ログ確認・設定チェックが即座に可能
コマンドを直接実行
ログ確認・設定チェックが即座に可能
トラブルシューティング
問題発生時に
コンテナ内部を調査
原因特定が劇的に高速化
コンテナ内部を調査
原因特定が劇的に高速化
セキュアなアクセス
SSHポート不要
IAMで認証・認可
全操作がCloudTrailに記録
IAMで認証・認可
全操作がCloudTrailに記録
即座に利用可能
追加インフラ不要
AWS CLIから簡単実行
Fargate/EC2両対応
AWS CLIから簡単実行
Fargate/EC2両対応
🏨 ホテルのマスターキーで理解するECS Exec
🏨 ECSクラスター(ホテル全体)
🖥️ タスク1
(3階)
(3階)
🔑
Web
コンテナ
コンテナ
🔑
API
コンテナ
コンテナ
🖥️ タスク2
(5階)
(5階)
🔑
Worker
コンテナ
コンテナ
🔑
Cache
コンテナ
コンテナ
ECS Exec = マスターキー
管理人(あなた)がマスターキーを使って
任意の客室(コンテナ)に入れる!
🏨 ホテル = ECSクラスター
ホテル全体がECSクラスターです。複数のフロア(タスク)があり、各フロアには複数の客室(コンテナ)があります。
🚪 客室 = コンテナ
各客室は独立したコンテナ。通常は鍵がかかっていて中が見えません。問題が起きても外からは原因がわからない...
🔑 マスターキー = ECS Exec
ECS Execはマスターキー。適切な権限(IAM)があれば、任意のコンテナに入って状況を確認できます!
📝 入室記録 = CloudTrail
誰がいつどの部屋に入ったか全て記録されます。セキュリティと監査のために重要です。
⚙️ ECS Execの仕組み
AWS Systems Manager (SSM) Session Managerを使用してセキュアに接続
あなた
管理者/開発者
➡️
AWS CLI
ecs execute-command
➡️
SSM
Session Manager
➡️
SSM Agent
コンテナ内で動作
➡️
コンテナ
シェルアクセス
💡 ポイント:SSHとの違い
❌ 従来のSSH
- SSHポート(22)を開放
- 鍵ファイルの管理が必要
- セキュリティリスク増大
✅ ECS Exec
- インバウンドポート不要
- IAMで認証・認可
- 全操作が監査ログに記録
📋 利用するための前提条件
ECS Execを使うために4つの準備が必要です
1. プラットフォーム要件
Fargate:プラットフォームバージョン 1.4.0 以降
EC2:SSM Agentがインストール済み
EC2:SSM Agentがインストール済み
# Fargateの場合、自動でSSM Agentが含まれる
2. タスクロールのIAM権限
タスクロールにSSM関連の権限が必要です。
ssmmessages:CreateControlChannel
ssmmessages:CreateDataChannel
ssmmessages:OpenControlChannel
ssmmessages:OpenDataChannel
ssmmessages:CreateDataChannel
ssmmessages:OpenControlChannel
ssmmessages:OpenDataChannel
3. 実行者のIAM権限
CLIを実行するユーザー/ロールに権限が必要です。
ecs:ExecuteCommand
ecs:DescribeTasks
ecs:DescribeTasks
4. サービス/タスクでの有効化
ECS Execを明示的に有効化する必要があります。
--enable-execute-command
🚀 セットアップ手順
1
タスクロールにIAMポリシーをアタッチ
タスク定義で指定しているタスクロールに、SSM用の権限を追加します。
# タスクロール用のIAMポリシー(JSON)
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ssmmessages:CreateControlChannel",
"ssmmessages:CreateDataChannel",
"ssmmessages:OpenControlChannel",
"ssmmessages:OpenDataChannel"
],
"Resource": "*"
}
]
}
2
サービスでECS Execを有効化
既存のサービスを更新するか、新規作成時に有効化フラグを指定します。
# 既存サービスの更新
aws ecs update-service \
--cluster my-cluster \
--service my-service \
--enable-execute-command
# 新規サービス作成時
aws ecs create-service \
--cluster my-cluster \
--service-name my-service \
--task-definition my-task:1 \
--enable-execute-command \
...
3
タスクを再起動(重要!)
ECS Execの有効化は既存タスクには適用されません。新しいタスクが起動するまで待つか、手動で再起動します。
# サービスの強制デプロイ(タスク再起動)
aws ecs update-service \
--cluster my-cluster \
--service my-service \
--force-new-deployment
4
有効化の確認
タスクでECS Execが有効になっているか確認します。
# タスクの詳細を確認
aws ecs describe-tasks \
--cluster my-cluster \
--tasks arn:aws:ecs:... \
--query 'tasks[0].enableExecuteCommand'
# 結果: true なら有効化済み
💻 実際の使い方
対話型シェルを開く
コンテナ内でbashやshを起動して、自由にコマンドを実行できます。
aws ecs execute-command \
--cluster my-cluster \
--task タスクID \
--container コンテナ名 \
--interactive \
--command "/bin/bash"
単発コマンドを実行
特定のコマンドを1回だけ実行して結果を取得します。
# 環境変数を確認
aws ecs execute-command \
--cluster my-cluster \
--task タスクID \
--container app \
--interactive \
--command "env"
ログファイルを確認
コンテナ内のログファイルを直接確認できます。
# アプリケーションログを表示
aws ecs execute-command \
... \
--command "tail -f /var/log/app.log"
# 最新100行を取得
--command "tail -100 /var/log/app.log"
プロセスを確認
実行中のプロセスやリソース使用状況を確認します。
# 実行中のプロセス一覧
--command "ps aux"
# メモリ使用状況
--command "free -m"
# ディスク使用状況
--command "df -h"
🎯 実践的なユースケース
アプリケーションデバッグ
本番環境で発生している問題を、実際のコンテナ内で調査。設定ファイル、環境変数、ログを直接確認できます。
例:「なぜかDBに接続できない」→ コンテナ内からDB接続テストを実行
ネットワーク接続確認
コンテナから外部サービスへの接続をテスト。DNS解決、ポート到達性などを確認します。
例:curl, ping, nslookup でAPI接続をテスト
ファイルシステム確認
コンテナ内のファイル構成、パーミッション、ディスク容量を確認。マウントボリュームの状態も確認できます。
例:「アップロードファイルが見つからない」→ 実際のパスを確認
緊急パッチ適用
緊急時に一時的な設定変更やスクリプト実行が可能。ただし、再デプロイで消えることに注意。
例:一時的にログレベルをDEBUGに変更して詳細ログを取得
パフォーマンス調査
CPU、メモリ、ディスクI/Oなどのリソース使用状況をリアルタイムで確認。
例:top, htop でCPU使用率の高いプロセスを特定
セキュリティ調査
不審なプロセス、ファイル変更、ネットワーク接続などをセキュリティ観点で調査。
例:netstat でアクティブな接続を確認
🛡️ セキュリティ考慮事項
全操作がログに記録
CloudTrailで誰がいつどのコンテナにアクセスしたかが記録されます。S3やCloudWatch Logsに詳細な操作ログを出力することも可能。
IAMによる細かい制御
特定のクラスター、サービス、タスクへのアクセスをIAMポリシーで細かく制御可能。最小権限の原則を適用しましょう。
通信の暗号化
SSM Session Managerを経由するため、全通信がTLSで暗号化。さらにKMSでセッションデータを暗号化することも可能。
セッションタイムアウト
アイドル状態が続くとセッションは自動終了。SSM設定でタイムアウト時間をカスタマイズ可能。
⚠️ 本番環境での注意点
- 必要最小限のアクセス:本番環境では限られたメンバーのみにECS Exec権限を付与
- 変更は一時的:コンテナ内での変更はタスク再起動で消えます(イミュータブル)
- ログを必ず有効化:誰がどんなコマンドを実行したか追跡できるようにする
- 定期的な権限レビュー:不要になった権限は速やかに削除
📊 他の接続方法との比較
| 比較項目 | 🔧 ECS Exec | 🔑 SSH接続 | 📋 docker exec |
|---|---|---|---|
| セットアップ難易度 | ⭐⭐ 中程度 | ⭐⭐⭐ やや複雑 | ⭐ 簡単(EC2のみ) |
| Fargateサポート | ✅ | ❌ | ❌ |
| 追加ポート開放 | 不要 ✅ | 22番ポート必要 | 不要(ホストアクセス必要) |
| IAM認証 | ✅ | ❌ 鍵ファイル | ❌ |
| 監査ログ(CloudTrail) | ✅ 自動記録 | ❌ 追加設定必要 | ❌ |
| 通信暗号化 | ✅ TLS + KMS対応 | ✅ SSH | ⚠️ ホスト依存 |
| AWS推奨度 | 🏆 推奨 | ⚠️ 非推奨 | ⚠️ EC2限定 |
🔧 よくあるトラブルと解決法
❓
「The execute command failed」エラーが出る
ECS Execが有効化されていない可能性があります。以下を確認してください:
解決策:
1. サービスで
2. タスクロールにSSM権限があるか確認
3. タスクが再起動されているか確認(有効化後に起動したタスクのみ対応)
1. サービスで
--enable-execute-command が設定されているか確認2. タスクロールにSSM権限があるか確認
3. タスクが再起動されているか確認(有効化後に起動したタスクのみ対応)
❓
「SessionManagerPlugin is not installed」エラー
AWS CLIでECS Execを使うにはSession Managerプラグインが必要です。
解決策:
Session Managerプラグインをインストール:
Session Managerプラグインをインストール:
Mac: brew install --cask session-manager-pluginLinux/Windows: AWS公式ドキュメントを参照
❓
「/bin/bash: not found」エラー
軽量コンテナイメージ(Alpine等)にはbashがインストールされていないことがあります。
解決策:
ほとんどのコンテナでshは利用可能です。
--command "/bin/sh" を使用してください。ほとんどのコンテナでshは利用可能です。
❓
Fargateでタイムアウトする
ネットワーク設定の問題の可能性があります。
解決策:
1. VPCエンドポイント(ssmmessages, ssm)が設定されているか確認
2. または、パブリックサブネット + NATゲートウェイ/IGWが設定されているか確認
3. セキュリティグループでアウトバウンド443が許可されているか確認
1. VPCエンドポイント(ssmmessages, ssm)が設定されているか確認
2. または、パブリックサブネット + NATゲートウェイ/IGWが設定されているか確認
3. セキュリティグループでアウトバウンド443が許可されているか確認
❓ よくある質問
🤔
ECS Execは追加料金がかかる?
いいえ、ECS Exec自体は無料です。
ただし、セッションログをS3やCloudWatch Logsに保存する場合は、それらのサービスの料金が発生します。
ただし、セッションログをS3やCloudWatch Logsに保存する場合は、それらのサービスの料金が発生します。
🤔
コンテナ内で変更した内容は永続化される?
いいえ、タスクが再起動すると変更は消えます。
コンテナはイミュータブルです。永続的な変更はタスク定義やコンテナイメージを更新してください。ECS Execは調査・デバッグ用途に使いましょう。
コンテナはイミュータブルです。永続的な変更はタスク定義やコンテナイメージを更新してください。ECS Execは調査・デバッグ用途に使いましょう。
🤔
同時に複数のセッションを開ける?
はい、可能です。
同じコンテナに複数のセッションを同時に開くことができます。別のターミナルウィンドウからそれぞれ接続できます。
同じコンテナに複数のセッションを同時に開くことができます。別のターミナルウィンドウからそれぞれ接続できます。
🤔
Windows Containerでも使える?
はい、Windows Containerもサポートされています。
--command "powershell.exe" を使用してPowerShellセッションを開くことができます。
🎓 まとめ
ECS Execとは
実行中のコンテナに
セキュアに接続
ホテルのマスターキー
セキュアに接続
ホテルのマスターキー
セキュリティ
IAM認証
TLS暗号化
全操作がログ記録
TLS暗号化
全操作がログ記録
主な用途
デバッグ
トラブルシューティング
パフォーマンス調査
トラブルシューティング
パフォーマンス調査
メリット
SSHポート不要
Fargate対応
AWS推奨方式
Fargate対応
AWS推奨方式