図A システム構成図
%docker container exec -it コンテナ名 bash
のようなことが、ECS Execの機能を利用してFargateでも可能です。
1. ECS Execの仕組み
ECS ExecはSystems Manager Session Managerの機能を利用して実現しています。 ECS Execは追加費用なしで利用が可能です
2. 必要なツール
(1)AWS CLI
%curl https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip -o "awscliv2.zip"
%unzip awscliv2.zip
%sudo ./aws/insstall 又は
%sudo ./aws/insstall --update # updateの場合
(2)Session Manager plugin for the AWS CLI
%curl "https://s3.amazonaws.com/session-manager-downloads/plugin/latest/linux_64bit/session-manager-plugin.rpm" -o "session-manager-plugin.rpm"
%sudo yum install -y session-manager-plugin.rpm
以下のコマンドを実行
session-manager-plugin
The Session Manager plugin was installed successfully. Use the AWS CLI to start a session. と出力されれば、OK
##amazon Linux2の場合です。他のディストリビューションは未調査です。
3. 必要な権限
(1)ECSのタスクロールに以下の権限を追加(ecsTaskExecutionRole )にカスタムポリシーとして追加
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ssmmessages:CreateControlChannel",
"ssmmessages:CreateDataChannel",
"ssmmessages:OpenControlChannel",
"ssmmessages:OpenDataChannel"
],
"Resource": "*"
}
]
}
(2) fargateにログインするEC2に権限を追加
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ecs:ExecuteCommand",
"ssm:StartSession",
"ecs:DescribeTasks"
],
"Resource": "*"
}
]
}
4. タスクとサービスに対する ECS Execの有効確認
以下のコマンドでタスクをサービスに対するECS Execが有効化どうか確認
%aws ecs describe-services \
--cluster クラスター名 \
--services サービス名 | grep enableExecuteCommand
"enableExecuteCommand": true であれば OK
trueでない場合は、trueにする以下のコマンドを実行
%aws ecs update-service \
--cluster クラスター名 \
--service サービス名 \
--enable-execute-command
変更した場合は、fargateを再起動する必要があります。
図 B タスクの再起動
5. fargateにログインする為にタスク名とコンテナ名の取得します
%aws ecs list-tasks --cluster クラスター名 --query "taskArns[]" --output text
arn:aws:ecs:ap-northeast-1:123456789012:task/xxxxx-cluster/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
%aws ecs describe-tasks --cluster クラスター名 --tasks 上記コマンドで出力されたタスク名 --query "tasks[].containers[].name" --output text
6. Fargateにログインします
%aws ecs execute-command --cluster クラスター名 \
--task タスク名 \
--container コンテナ名 \
--interactive \
--command "/bin/bash" \
図C fargateにログイン
fargateにログインできました。コマンド一発とはならないですが、目的は達成!
docker container exec -it コンテナ名 bash と同じことができました。
何故、fargateにログインしたかったか?
コンテナ(今回はRedmine)のデータベース環境database.yml、mail送信環境のconfigration.ymlの中身を確認したかったからです。
関連