はじめに
以前こちらでfzfとAWS CLIを使ってEC2インスタンスに簡単に接続する方法をまとめました。
※Elastic Cache版はこちらです
今回は同様な手法でFargateへの接続を簡略化してみたいと思います。
準備
AWS CLIとfzf、jqの3つを使える環境を用意して下さい。先述の記事でインストール方法をまとめております。
またFargateへ接続するにはAWS側でも設定が必要になります。まだFargateインスタンスに接続したことがない場合は先に下記の内容を実行して下さい。
ecs:ExecuteCommand
アクションを許可したIAMポリシーをアタッチ- サービスの実行コマンド有効化
aws ecs update-service --region [リージョン] --cluster [クラスター名] --service [サービス名] --enable-execute-command
- Fargateタスクの再起動
- タスクを一つだけ停止することで更新したサービスが適用されたタスクが起動します
スクリプト
.zshrc
に下記のコードを追記して下さい。その後「クラスター名」「リージョン」「アカウントID」の所をご自身の情報に置き換えて下さい。
ffargate() {
TARGATE_FARGATES=()
COUNT=0
# CLUSTERS=(`aws ecs list-clusters | jq -c '.[][] | { cluster: sub("^arn:aws:ecs:[リージョン]:[アカウントID]:cluster/"; "") }' | tr "\n" " "`)
CLUSTERS=('[クラスター名]' '[クラスター名]')
# クラスター内サービスの取得
for cluster in ${CLUSTERS[@]}
do
SERVICES=(`aws ecs list-services --cluster ${cluster} --launch-type FARGATE | jq -rc '.[][] | sub("^arn:aws:ecs:[リージョン]:[アカウントID]:service/.*/"; "")'`)
# サービス内タスクIDの取得
for service in ${SERVICES[@]}
do
TASK_IDS=(`aws ecs list-tasks --cluster ${cluster} --service ${service} --launch-type FARGATE | jq -cr '.[][] | sub("^arn:aws:ecs:[リージョン]:[アカウントID]:task/.*/"; "")'`)
# fzf表示リストの作成
for taskId in ${TASK_IDS[@]}
do
COUNT=$((++COUNT))
TARGATE_FARGATES+="$cluster,$service,$taskId"
done
done
done
TARGATE_FARGATE=(`echo ${TARGATE_FARGATES} | tr " " "\n" | fzf | tr "," " "`)
echo ${TARGATE_FARGATE[@]}
aws ecs execute-command --region [リージョン] --cluster ${TARGATE_FARGATE[1]} --task ${TARGATE_FARGATE[3]} --container [コンテナ名] --interactive --command "/bin/sh"
}
.zshrc
を再読み込みしてから関数を実行してみて下さい。
$ source ~/.zshrc
$ ffargate
いつものようにfzfの選択ウィンドウが表示されて、Enterを押してログイン出来れば成功です。