💻
AWS Fargate で動作しているコンテナへ Go で作成した CLI で接続する
課題
色々な AWS アカウントの Fargate で動作しているコンテナへ接続する必要があり、AWS CLI と peco と jq を駆使したシェルスクリプトを作成し利用していましたが、ECSの各種データ取得時のレスポンスがちょぴり遅いです。
解決策
何かしらのコマンド一発で CLI(と Session manager plugin)を利用し接続できるようなると便利な気がします、バイナリファイルにして homebrew でインストールできれば配布も便利そうだなと思い、今回は Golang で実装します。
自分要件
- 環境変数 AWS_DEFAULT_PROFILE に設定されているプロファイル名から AWS 接続情報を取得する、取得できない場合は defult プロファイルの AWS 接続情報を利用する。
- クラスター名 => サービス名 => タスク名(Task ARN) => コンテナを CLI で選択
実装
fexec(仮)というコマンド名にしました。
homebrew でのインストールは以下です。
brew tap gajirou/fexec
brew install fexec
ソースコードは以下のリポジトリに上げています。
プロンプトの実装については、以下のライブラリを利用させていただきました、感謝。
まとめ
・はまった点
ExecuteCommand のレスポンスで受け取ったセッションを、Session manager plugin に渡す方法が今いちわからず、Session manager plugin のソースを確認し対応しました。
それなりに動作するようになったので、今後はリファクタリングや諸々の修正、機能追加等を進めていきたいと思います。
その後
パラメータで接続プロファイルを指定できるようにしました。
Github Actions と GoReleaser で CI/CD を実装しました。
Discussion