💻

AWS Fargate で動作しているコンテナへ Go で作成した CLI で接続する

2022/08/06に公開

課題

色々な AWS アカウントの Fargate で動作しているコンテナへ接続する必要があり、AWS CLI と peco と jq を駆使したシェルスクリプトを作成し利用していましたが、ECSの各種データ取得時のレスポンスがちょぴり遅いです。

解決策

何かしらのコマンド一発で CLI(と Session manager plugin)を利用し接続できるようなると便利な気がします、バイナリファイルにして homebrew でインストールできれば配布も便利そうだなと思い、今回は Golang で実装します。

自分要件

  1. 環境変数 AWS_DEFAULT_PROFILE に設定されているプロファイル名から AWS 接続情報を取得する、取得できない場合は defult プロファイルの AWS 接続情報を利用する。
  2. クラスター名 => サービス名 => タスク名(Task ARN) => コンテナを CLI で選択

実装

fexec(仮)というコマンド名にしました。

homebrew でのインストールは以下です。

brew tap gajirou/fexec
brew install fexec

ソースコードは以下のリポジトリに上げています。
https://github.com/gajirou/fexec

プロンプトの実装については、以下のライブラリを利用させていただきました、感謝。
https://github.com/AlecAivazis/survey

まとめ

・はまった点
ExecuteCommand のレスポンスで受け取ったセッションを、Session manager plugin に渡す方法が今いちわからず、Session manager plugin のソースを確認し対応しました。

それなりに動作するようになったので、今後はリファクタリングや諸々の修正、機能追加等を進めていきたいと思います。

その後

パラメータで接続プロファイルを指定できるようにしました。
https://zenn.dev/gaji/articles/f0defe77826349
Github Actions と GoReleaser で CI/CD を実装しました。
https://zenn.dev/gaji/articles/b9a83aad25b84d

Discussion