はじめに
ECS FargateからMongodb Atlasに接続するアプリケーションを作成したときに、エラーの原因がわからず、結局Fargateにログインして確認した。以下、ログインしたときの手順のメモ。
大まかには、次のような流れでログインした。
- Session Manager pluginをインストールする
- タスク実行ロールにSession Manager 機能のアクセス許可を追加
- ECS Exec機能を有効にする
- ECSタスクのARNの確認
- コンテナ名を取得する
- ECS Fargateにログイン
前提
- AWS CLIはインストール済み
- OSはWindows 11
手順
1. Session Manager pluginをインストールする
Curlコマンドで次のURLからインストーラをダウンロードして実行する。
curl https://s3.amazonaws.com/session-manager-downloads/plugin/latest/windows/SessionManagerPluginSetup.exe -o SessionManagerPluginSetup.exe
ダウンロードしたインストラーを実行する。
./SessionManagerPluginSetup.exe
2.タスク実行ロールにSession Manager 機能のアクセス許可を追加
ECSのタスク実行ロールに設定しているロールに対して、Systems Manager のSession Manager 機能のアクセス許可を追加する。
ECSのタスク実行ロールに設定しているロールに対して、IAMから次のポリシーを設定する。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ssmmessages:CreateControlChannel",
"ssmmessages:CreateDataChannel",
"ssmmessages:OpenControlChannel",
"ssmmessages:OpenDataChannel"
],
"Resource": "*"
}
]
}
3. ECS Exec機能を有効にする
コマンドプロンプトからAWS CLIを使用して、ECS Execコマンドを機能を有効にする。
aws ecs update-service --cluster <クラスター名> --service <サービス名> --enable-execute-command
ECS Execコマンド機能が有効になったかどうかは、次のコマンドで確認する。
aws ecs describe-services <クラスター名> --service <サービス名> | findstr enableExecuteCommand
有効の場合、enableExecuteCommandがtrueにになっている。
"enableExecuteCommand": true
4. ECSタスクのARNの確認
ログイン時に必要となる、ECSタスクのARNを次のコマンドで取得する。
aws ecs list-tasks --cluster <クラスター名> --query "taskArns[]" --output text
5. コンテナ名を取得する
次のコマンドでコンテナ名も取得する。
aws ecs describe-tasks --cluster SQSCluster --tasks <タスクのARN> --query "tasks[].containers[].name" --output text
6. ECS Fargateにログイン
次のコマンドでFargateにログイン
aws ecs execute-command --cluster <クラスタ名> --task <タスクのARN> --container <コンテナ名> --interactive --command "/bin/bash"
おわりに
Fargateにログインすることで、コマンドラインによる接続確認、ネットワークツールのダウンロード等、直接サーバを調べることができ、不具合調査をすすめることができた。