既存で運用する AWS Fargate で ECS Exec 機能を有効にしてコンテナアクセスするまでの手順
前提
すでに Fargate 使って運用してるサービスがあることが前提です。
新規でサービスを作る場合は AWS 公式ブログにある Amazon ECS Exec による AWS Fargate, Amazon EC2 上のコンテナへのアクセス が非常に参考になります。
また、 AWS CLI を使う必要があります。以下 バージョン1 or 2 の最新版を使います。
AWS CLI のインストール、更新、アンインストール - AWS Command Line Interface
ECS Exec を動かすまでの準備
ECS タスクロールのポリシー設定
ECS タスクロールに以下 IAM ポリシーをアタッチします。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ssmmessages:CreateControlChannel",
"ssmmessages:CreateDataChannel",
"ssmmessages:OpenControlChannel",
"ssmmessages:OpenDataChannel"
],
"Resource": "*"
}
]
}
既存で IAM ロールを使っていれば、そのロールに↑を追加しましょう。
ロール使ってなければ以下を参考に定義してください。
タスク用の IAM ロール - Amazon Elastic Container Service
既存のサービスで ECS Exec の機能を有効にする
こちらは AWS CLI で 実行します。
$ aws ecs update-service \
--cluster example-cluster \
--service example-service \
--enable-execute-command
既存のサービスに ECS Exec のオプションだけ追加したければ、↑の通り --enable-execute-command
のオプションを付与します。
CLI の結果 "enableExecuteCommand": true
となっていれば OK です。
{
"service": {
"serviceArn": "arn:aws:ecs:us-west-2:XXXXX:service/xxx",
"serviceName": "xxx",
...skipping...
"enableExecuteCommand": true
}
}
上記変更を確認後、既存サービスの運用方法に従いタスクを起動します。
AWS ドキュメントであれば以下を参考に。
Amazon ECS タスクのスケジューリング - Amazon Elastic Container Service
ECS Exec を使って Fargate コンテナに入る
以下の execute-command
を実行します。
$ aws ecs execute-command \
--cluster example-clustr \
--task XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX \
--container xxx \
--interactive \
--command "/bin/sh"
ECS のタスクで複数コンテナを使用している場合は、どのコンテナに入るかを --container
オプションでコンテナ名指定します。
以下のような表示が出てれば成功です。
The Session Manager plugin was installed successfully. Use the AWS CLI to start a session.
Starting session with SessionId: ecs-execute-command-XXXXXXXXXXXXXXXXX
/ #
後始末
コンテナ入る必要が無くなれば、以下のコマンドで ECS Exec 機能を無効にできます。
$ aws ecs update-service \
--cluster example-cluster \
--service example-service \
--disable-execute-command
{
"service": {
"serviceArn": "arn:aws:ecs:us-west-2:XXXXX:service/xxx",
"serviceName": "xxx",
...skipping...
"enableExecuteCommand": false
}
}
"enableExecuteCommand": false
になっていれば ECS Exec 機能が無効になったとみなせます。
Discussion