ECSでのデバッグが捗るツールを作成しました
この記事はポート株式会社 サービス開発部 Advent Calendar 2024の11日目の記事です。
はじめに
こんにちは。ポート株式会社でSREチームのマネージャーをしているTaiki130です。
今回は、私が開発したECSでのデバッグに役立つツールecsexecをご紹介します。
このツールは、AWS ECS(on Fargate)で稼働するコンテナに対し、インタラクティブにログインできる機能を提供します。普段からECSでの運用やトラブルシューティングに携わっている方々にとって、役立つものになれば幸いです。
Amazon ECS Exec について
概要
Amazon ECS Exec は、AWS Systems Manager (SSM) セッションマネージャーを活用して、コンテナへのシェルアクセスを可能にする機能です。これにより、コンテナ内で直接デバッグ作業ができるようになります。
感じていた課題
ECS Exec を AWS CLI 経由で利用する際、次のような煩雑なコマンドを実行する必要があります。
aws ecs execute-command --cluster $cluster-name \
--task $task-id \
--container $container-name \
--interactive \
--command "/bin/sh"
オプションにECSクラスター名、タスクID、コンテナ名を入力する必要があり、毎回AWSコンソールにログインして確認していました。普通にめんどくさいですよね。
ecsexecとは
ecsexecでは、aws ecs execute-commandをする際に必要なオプション(cluster名など)をインタラクティブなセレクタ経由で指定できます。
そのため、クラスタ名やコンテナ名を把握したり、タスク名を確認し、自分で指定する必要がなくなります。
kubectl
プラグインの kube-iexec
から着想を得ました。
利用前の準備
以下のツールがローカルマシンにインストールされている必要があります(すでにECS Exec を使用している方は準備済みのはずです)
- AWS CLI: コマンドラインから AWS リソースを管理するには、AWS Command Line Interface (CLI) が必要です。インストール手順は、AWS ドキュメントに記載されています。
-
Session Managerプラグイン: ecsexecは内部で
session-manager-plugin
を実行しているため、Session Managerプラグインが必要です。インストール手順は、AWSドキュメントに記載されています。
インストール方法
ecsexec は以下の方法で簡単にインストールできます。
Homebrew を使用する場合
brew install Taiki130/ecsexec/ecsexec
Go を使用する場合
ecsexec
はGo製なので、go install
でインストールできます。
go install -a github.com/Taiki130/ecsexec/cmd/ecsexec@latest
使用方法
特にオプションを指定しないと、インタラクティブなセレクタが表示されます。
% ecsexec
フラグや環境変数でも制御することができます。
# 一部フラグで制御
% ecsexec --region us-east-1 --cluster my-cluster
# 環境変数と併用
% AWS_PROFILE=my-profile ecsexec
% AWS_REGION=us-east-1 ecsexec --cluster my-cluster
フラグと環境変数一覧
% ecsexec -h
NAME:
ecsexec - Access a shell session within a container running in an ECS task.
USAGE:
ecsexec [global options] command [command options]
COMMANDS:
help, h Shows a list of commands or help for one command
GLOBAL OPTIONS:
--region value AWS region name. [$AWS_REGION]
--profile value AWS profile name. [$AWS_PROFILE]
--cluster value ECS cluster name. [$ECSEXEC_CLUSTER]
--service value ECS service name. [$ECSEXEC_SERVICE]
--container value container name. [$ECSEXEC_CONTAINER]
--command value login shell. default: /bin/sh [$ECSEXEC_COMMAND]
--help, -h show help
まとめ
普段の業務でも ecsexecを活用することで、デバッグ作業が効率的になりました。ただし、まだ開発したばかりのツールであり、特にmacOS以外の環境では動作確認が十分ではありません。不具合や改善点が出てくると思います。
問題や提案があれば、ぜひ GitHubリポジトリに Issue や Pull Requestを作成していただけると嬉しいです!
明日のアドベントカレンダーは ayaka さんの「Figmaビジネスプラン契約への道【前編】」です!お楽しみに!
Discussion