fzfとAWS CLIでFargateへの接続を楽にする

はじめに

以前こちらで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を押してログイン出来れば成功です。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA