はじめに

ECS Execを利用し、Fargateに接続するまでに必要な準備内容が多かったので健忘録として残します。
ゴールはタイトルの通り「Fargate内に入ってParameter Storeの環境変数を確認すること」です。

前提

・Fargateで動かすサービス内容:Webサーバー(Apache)
・Fargateサービスはプライベートサブネットに配置
・タスク定義にてログ収集は有効
・コンテナリポジトリはECRを利用
・Parameter Storeで設定した変数:hoge=test

準備内容

VPCエンドポイント編

com.amazonaws.ap-northeast-1.ecr.dkr
com.amazonaws.ap-northeast-1.ecr.api
com.amazonaws.ap-northeast-1.logs
com.amazonaws.ap-northeast-1.ssm
com.amazonaws.ap-northeast-1.ssmmessages
com.amazonaws.ap-northeast-1.s3
上記エンドポイントを空ける(多い、、、)

AWS CLI編

Session Manager プラグインをインストールする
参考:https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/install-plugin-macos-overview.html

Fargate Service編

ECS Execを利用可能にするためにAWS CLIで以下コマンドを実行する

aws ecs update-service \
--cluster cluster-name \
--service service-name \
--enable-execute-command

サービスを「新しいデプロイの強制」にて更新する
ECS Execが利用可能になったかどうか確認するためにAWS CLIで以下コマンドを実行する

aws ecs describe-tasks \
--cluster cluster-name \
--task task-id \
| grep enableExecuteCommand

タスク定義編

JSONから変更で、「initProcessEnabled:true」を追加する

{
"containerDefinitions": [
{
"linuxParameters": {
"initProcessEnabled": true
}
}
]
}

タスクロール編

下記ポリシーを持つように設定する

{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ecs:ExecuteCommand"
],
"Resource": "*"  ←対象は絞ろう
},
{
"Effect": "Allow",
"Action": [
"ssmmessages:CreateControlChannel",
"ssmmessages:CreateDataChannel",
"ssmmessages:OpenControlChannel",
"ssmmessages:OpenDataChannel"
],
"Resource": "*"  ←対象は絞ろう
}
]
}

タスク実行ロール編

下記ポリシーを持つように設定する

{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ecr:*"
],
"Resource": "*" ←対象は絞ろう
},
{
"Effect": "Allow",
"Action": [
"logs:PutLogEvents",
"logs:CreateLogStream"
],
"Resource": "*" ←対象は絞ろう
},
{
"Effect": "Allow",
"Action": [
"ssm:GetParameters"
],
"Resource": "*" ←対象は絞ろう
}
]
}

Fargate接続

Fargate接続編

以下コマンドを実行

aws ecs execute-command \
--cluster cluster-name \
--task task-id \
--container container-name \
--interactive \
--command "/bin/sh"

出力内容

The Session Manager plugin was installed successfully. Use the AWS CLI to start a session.
Starting session with SessionId: ecs-execute-command-0a78f6c705edff860
#

envコマンドで環境変数を確認

# env
hoge=test

お疲れ様でした、、!!