🔧 ECS Exec 完全ガイド

ホテルのマスターキーで理解する!コンテナモニタリングの決定版

📌 結論:ECS Execで何ができる?

実行中のECSコンテナに直接接続してコマンドを実行できる!

🔍
リアルタイムデバッグ
実行中のコンテナ内で
コマンドを直接実行
ログ確認・設定チェックが即座に可能
🛠️
トラブルシューティング
問題発生時に
コンテナ内部を調査
原因特定が劇的に高速化
🔒
セキュアなアクセス
SSHポート不要
IAMで認証・認可
全操作がCloudTrailに記録
即座に利用可能
追加インフラ不要
AWS CLIから簡単実行
Fargate/EC2両対応

🏨 ホテルのマスターキーで理解するECS Exec

🏨 ECSクラスター(ホテル全体)
🖥️ タスク1
(3階)
🔑
📦
Web
コンテナ
🔑
📦
API
コンテナ
🖥️ タスク2
(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がインストール済み
# Fargateの場合、自動でSSM Agentが含まれる
🔑
2. タスクロールのIAM権限
タスクロールにSSM関連の権限が必要です。
ssmmessages:CreateControlChannel
ssmmessages:CreateDataChannel
ssmmessages:OpenControlChannel
ssmmessages:OpenDataChannel
👤
3. 実行者のIAM権限
CLIを実行するユーザー/ロールに権限が必要です。
ecs:ExecuteCommand
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. サービスで --enable-execute-command が設定されているか確認
2. タスクロールにSSM権限があるか確認
3. タスクが再起動されているか確認(有効化後に起動したタスクのみ対応)
「SessionManagerPlugin is not installed」エラー
AWS CLIでECS Execを使うにはSession Managerプラグインが必要です。
解決策:
Session Managerプラグインをインストール:
Mac: brew install --cask session-manager-plugin
Linux/Windows: AWS公式ドキュメントを参照
「/bin/bash: not found」エラー
軽量コンテナイメージ(Alpine等)にはbashがインストールされていないことがあります。
解決策:
--command "/bin/sh" を使用してください。
ほとんどのコンテナでshは利用可能です。
Fargateでタイムアウトする
ネットワーク設定の問題の可能性があります。
解決策:
1. VPCエンドポイント(ssmmessages, ssm)が設定されているか確認
2. または、パブリックサブネット + NATゲートウェイ/IGWが設定されているか確認
3. セキュリティグループでアウトバウンド443が許可されているか確認

❓ よくある質問

🤔 ECS Execは追加料金がかかる?
いいえ、ECS Exec自体は無料です。
ただし、セッションログをS3やCloudWatch Logsに保存する場合は、それらのサービスの料金が発生します。
🤔 コンテナ内で変更した内容は永続化される?
いいえ、タスクが再起動すると変更は消えます。
コンテナはイミュータブルです。永続的な変更はタスク定義やコンテナイメージを更新してください。ECS Execは調査・デバッグ用途に使いましょう。
🤔 同時に複数のセッションを開ける?
はい、可能です。
同じコンテナに複数のセッションを同時に開くことができます。別のターミナルウィンドウからそれぞれ接続できます。
🤔 Windows Containerでも使える?
はい、Windows Containerもサポートされています。
--command "powershell.exe" を使用してPowerShellセッションを開くことができます。

🎓 まとめ

🔧
ECS Execとは
実行中のコンテナに
セキュアに接続
ホテルのマスターキー
🛡️
セキュリティ
IAM認証
TLS暗号化
全操作がログ記録
🎯
主な用途
デバッグ
トラブルシューティング
パフォーマンス調査
メリット
SSHポート不要
Fargate対応
AWS推奨方式
🏨 ホテルのマスターキー = ECS Exec

🔑 適切な権限(IAM)があれば、任意のコンテナに入れる
📝 入室記録(CloudTrail)で全てが追跡可能
🔒 SSHより安全、管理も簡単

コンテナのデバッグに困ったら、
ECS Execでサクッと調査しよう!🚀

Created by SSuzuki1063

AWS SAP Learning Resources