#1. 初めに
初投稿です!未経験からエンジニアに就職を目指しているshotaと申します。
ポートフォリオ作りでインフラの勉強の為、fargateを利用したデプロイをしていたのですが、データのやりとりが中々上手くいきませんでした。
ローカルでは問題ないのに...
こういった場合、コンテナの中に入ってローカルとの差分を見るのは一つの選択肢にあるのかなと思います。
ecs(ec2)ならec2インスタンスにSSH or SSMでログインしてdockerコマンドで直接ログインする方法があると思います。
ですが,ecs(fargate)の場合は今までに公式的なログイン方法はありませんでした。
そこで、どうにか方法が無いか調べていると、awsからセッションマネージャーを利用して、SSMエージェント経由でクライアントからコンテナへのアクセスができるという素敵なコンテンツが提供されているのを知りました。
https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-exec.html
クラスメソッドさんもとても分かりやすく紹介していました。
https://dev.classmethod.jp/articles/ecs-exec/
使用できる条件があるので公式を見てくれたらと思います。
ECSexecは現在マネジメントコンソールの使用はサポートされていません。(4月11日現在)
aws-cliも対応しているバージョンを上の記事から対応するものをインストールしていただければと思います。
以降、公式の通りにはなるかと思いますが、簡単な順序を書いていきたいと思います。
この記事はハンズオン形式ではありませんので適宜解釈をしていただければと思います。
#2. 方法
初めにiamの権限の付与をします
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ssmmessages:CreateControlChannel",
"ssmmessages:CreateDataChannel",
"ssmmessages:OpenControlChannel",
"ssmmessages:OpenDataChannel"
],
"Resource": "*"
}
]
}
このiamポリシーをタスクロールにアタッチするのですが、既存のタスクロールがある方はそこに追記する形で問題ないかと思います。(名前は適宜変更した方が分かりやすいと思います)
次に、入りたいコンテナのtaskに先ほどのタスクロールを設定します。
あとは、コマンドライン上で--enable-execute-commandを使えるようにするために足りていないものがあれば公式を参考にダウンロードしてください。
私は既にサービスを立ち上げていたのでupdate-serviceコマンドを使用し、再デプロイしました。
$ aws ecs update-service \
--cluster クラスターの名前 \
--service サービスの名前 \
--enable-execute-command
成功していれば、ターミナル上に
"enableExecuteCommand": true,
の表示が出ているかと思いますので,grepなりsedなりで探しましょう。
これで、お目当てのコンテナに入ることができます!
$ aws ecs execute-command \
--cluster あなたのクラスター \
--task あなたのtaskid \
--container コンテナの名前 \
--interactive \
--command "/bin/sh"
コンテナにインストールされているシェルしか使えないので注意しましょう。
#3. おわりに
これでfargateでもコンテナにログインを簡単にすることができますね!
私でも簡単にできたので、もっとecsexecが広まって欲しいなと思い、この記事を書きました。