ECSで起動したコンテナに対して、docker execのようにコンテナの中にログインして操作する機能を試したので、そのメモです。私が試したのはFargateになります。
事前準備
ECS Execするクライアント端末にツールをインストールすると共に、IAMロールを設定します。
- クライアントで
session-manager-plugin
を実行し、結果を確認する。 - 未インストールの場合、Session Manager プラグインをインストールする。
- 以下のIAMポリシーを作成し、ECSタスクを実行するIAMロールにアタッチする。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ssmmessages:CreateControlChannel",
"ssmmessages:CreateDataChannel",
"ssmmessages:OpenControlChannel",
"ssmmessages:OpenDataChannel"
],
"Resource": "*"
}
]
}
ECSの設定
ECS側の設定を行います。一部の手順はAWS CLIで実施します。
- ECSタスクに上記のIAMロールを設定する。
- すでに設定されているロールにポリシーを追加した場合は、ポリシーの適用にタスクの再デプロイが必要。ただし後の手順でも再デプロイする。
- AWS CLIで
aws ecs update-service --cluster <CLUSTER_NAME> --service <SERVICE_NAME> --enable-execute-command
を実行する。 - タスクを(再)デプロイする。
- AWS CLIで
aws ecs execute-command --cluster <CLUSTER_NAME> --task <TASK ID> --container <CONTAINER NAME> --interactive --command "/bin/sh"
を実行する。
これでコンテナにログインして、Shellでログの参照や状態の確認をすることができるようになります。
ちなみに私はWindows 10で試しましたが、GitについてきたBashから実行したところエラーが発生し、PowerShellから実行したらログインできました。原因は追求していません。