はじめに
ECS Fargate を利用している場合にコンテナに入りたいと思うことが多々あります。
そういう場合に ECS Exec を利用すると便利です。
事前準備
ECS Exec を利用するには session-manager-plugin
をインストールする必要があります。
また、今回行う PC 環境は Mac で zsh を利用しています。
Session Manager プラグインのインストール
以下のコマンドで pkg をダウンロードしてインストールを行います。
% curl "https://s3.amazonaws.com/session-manager-downloads/plugin/latest/mac/session-manager-plugin.pkg" -o "session-manager-plugin.pkg"
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 3822k 100 3822k 0 0 550k 0 0:00:06 0:00:06 --:--:-- 695k
% sudo installer -pkg session-manager-plugin.pkg -target /
Password:
installer: Package name is session-manager-plugin
installer: Installing at base path /
installer: The install was successful.
インストールが完了したら zsh の設定ファイルに追加し読み込みをします。
% echo 'export PATH=$PATH:/usr/local/sessionmanagerplugin/bin' >> ~/.zshrc
% source ~/.zshrc
以下のように successfully
と表示されればインストール完了です。
% session-manager-plugin
The Session Manager plugin was installed successfully. Use the AWS CLI to start a session.
Execute Command の有効化
今度はタスク側の確認を行います。
ECS Exec コマンドを利用するにはタスク側で Execute Command が有効になっている必要があります。
確認方法は describe-tasks
で出力される enableExecuteCommand の項目で行えます。
% aws ecs describe-tasks --cluster <クラスター名> --tasks <タスクID> --query 'tasks[].enableExecuteCommand' --output text
True
True とあるので今回は有効になっていますが、もし False となっていた場合はサービスを更新する必要があります。
その際にオプションに --enable-execute-command
を付けてアップデートしてください。
aws ecs update-service --cluster <クラスター名> --service <サービス名> --enable-execute-command
コンテナログイン
それではコンテナへログインを行いたいと思います。
ログイン情報の取得
コンテナにログインを行うためには以下の情報が必要になります。
- クラスター名
- タスクID
- コンテナ名
まず初めに、稼働している クラスター名 を確認します。
% aws ecs list-clusters
{
"clusterArns": [
"arn:aws:ecs:ap-northeast-1:012345678901:cluster/<クラスター名>"
]
}
次に クラスター名 から タスクID を取得します。
% aws ecs list-tasks --cluster <クラスター名>
{
"taskArns": [
"arn:aws:ecs:ap-northeast-1:012345678901:task/<クラスター名>/<タスクID>"
]
}
取得したら今度は タスク で稼働してる コンテナ名 を確認します。
% aws ecs describe-tasks --cluster <クラスター名> --tasks <タスクID> --query 'tasks[].containers[].name' --output text
laravel nginx
ここでは laravel と nginx の2つの名前で コンテナ が稼働しています。
ログイン
ということで情報が揃ったのでログインしてみます。
aws ecs execute-command \
--cluster <クラスター名> \
--task <タスクID> \
--container <コンテナ名> \
--interactive \
--command "/bin/sh"
The Session Manager plugin was installed successfully. Use the AWS CLI to start a session.
Starting session with SessionId: ecs-execute-command-mlclvkyb6iz7m2nfcwjk4gunxm
/ #
無事にログインができました。
また、コンテナから抜けるには exit
コマンドを実行すれば OK です。
おわりに
コンテナにログインができることでちょっとした確認などができるのでとても便利なコマンドです。
ただ、セキュリティの観点からはできるだけログインはできない方が良いのかなと思います。
本番は無効にして開発環境のみ有効にするなどが良さそうです。
参考