こんにちは フリューのピクトリンク開発をしているあわたです。
ECSのタスクにexecする為に毎回コンソールで情報確認してターミナルに戻るっていうのが面倒になったのでラッパーを書いてみました。
以外と便利だったので公開しておきます(半分以上覚え書きですが…)
※1 voyagerとかpictlinkとかはプロジェクト名だっりサービス名だったりします。
※2 クラスターリストとかタスクリストが表示されてる状態です。
実行環境について
- aws-cliの実行環境ができていること
ということでスクリプトの掲載です。
#!/usr/bin/env bash Usage() { echo %0 -p AWSプロファイル名 exit 0 } PROFILE= # 引数解析 while getopts p:d OPT; do case $OPT in "p") PROFILE=$OPTARG;; "d") DEBUG="echo";; *) Usage;; esac done # profile指定があるときの追加パラメータ # 無いときはdefaultかAWS_PROFILE指定だと思うので無視 if [ "${PROFILE}" != "" ]; then PARAMETER="--profile ${PROFILE}" fi echo "クラスターを選択" select CLUSTER in $(AWS_PAGER="" aws ecs list-clusters ${PARAMETER} --output text | sed -e 's@.*cluster\/@@' | sort) exit do if [ "${CLUSTER}" = "exit" ]; then echo "やっぱやめます" exit 0; fi break; done echo "タスクを選択" select TASK in $(AWS_PAGER="" aws ecs list-tasks --cluster ${CLUSTER} ${PARAMETER} --output text | sed -e 's@.*cluster\/@@' | sort) exit do if [ "${TASK}" = "exit" ]; then echo "やっぱやめます" exit 0; fi break; done echo "コンテナを選択" select CONTAINER in $(AWS_PAGER="" aws ecs describe-tasks --cluster ${CLUSTER} --tasks ${TASK} ${PARAMETER} --output json | jq -r ".tasks[].containers[].name") exit do if [ "${CONTAINER}" = "exit" ]; then echo "やっぱやめます" exit 0; fi break; done ${DEBUG} aws ecs execute-command --cluster ${CLUSTER} --task ${TASK} --container ${CONTAINER} --interactive --command "/bin/bash" ${PARAMETER}
たいしたことはしていないので、スクリプトをファイルに保存して実行権限を付ければ動くと思います。
各項目の選択は数字で行う事だけ知っていれば使い方に悩むこともあまり無いかと。
3回も呼出ししているので少々時間はかかるけれども、コンソールを開くことに比べれば… という感じですね。
おまけ
上のやつを実行するとクラスターがスクロールアウトしてしまって見辛い、選択しにくいという問題が…
そこで fzf で選択するように修正したのもあるので貼り付けておきます。
#!/usr/bin/env bash Usage() { echo %0 -p AWSプロファイル名 exit 0 } PROFILE= # 引数解析 while getopts p:d OPT; do case $OPT in "p") PROFILE=$OPTARG;; "d") DEBUG="echo";; *) Usage;; esac done # profile指定があるときの追加パラメータ # 無いときはdefaultかAWS_PROFILE指定だと思うので無視 if [ "${PROFILE}" != "" ]; then PARAMETER="--profile ${PROFILE}" fi echo "クラスターを選択" CLUSTER=$(AWS_PAGER="" aws ecs list-clusters ${PARAMETER} --output text | sed -e 's@.*cluster\/@@' | sort | fzf) if [ "${CLUSTER}" = "" ]; then echo "やっぱやめます" exit 0; fi echo "タスクを選択" TASK=$(AWS_PAGER="" aws ecs list-tasks --cluster ${CLUSTER} ${PARAMETER} --output text | sed -e 's@.*cluster\/@@' | sort | fzf) if [ "${TASK}" = "" ]; then echo "やっぱやめます" exit 0; fi echo "コンテナを選択" CONTAINER=$(AWS_PAGER="" aws ecs describe-tasks --cluster ${CLUSTER} --tasks ${TASK} ${PARAMETER} --output json | jq -r ".tasks[].containers[].name" | fzf) if [ "${CONTAINER}" = "" ]; then echo "やっぱやめます" exit 0; fi ${DEBUG} aws ecs execute-command --cluster ${CLUSTER} --task ${TASK} --container ${CONTAINER} --interactive --command "/bin/bash" ${PARAMETER}
やってることは一緒だけど、少しシンプルになりました。
絞り込みをして選択できるのでこっちの方が便利かもしれない!