【AWS】Cloud9からECS ExecでFargateのコンテナにアクセスする

Cloud9からSSM経由でECS上のFargateのコンテナにECS Execを使ってアクセスしたので手順をメモ

Cloud9に「session-manager-plugin」をインストール

デフォルトではこれはインストールされていないので、まずは「session-manager-plugin」をインストールします。Cloud9のOSによってコマンドが違うので、まずはベースとなっているプラットフォームを確認する

確認出来たら以下のリンクから自分のプラットフォームが該当するリンクを押下。今回の自分のケースだと赤枠のリンクになるのでそちらへ移動。

docs.aws.amazon.com

すると「session-manager-plugin」のインストールコマンドがあるので、コピーボタンを押してクリップボードにコピーし、Cloud9のターミナルに貼りつけて実行します。ちなみにAmazon Linux2以降でないと機能しないみたいなので注意。

するとダーっと流れてすぐにインストールが完了。

ECS Execが実行できるようにサービス/タスクの権限/設定を更新

ECSのタスク定義から、「タスクロール」を開きます。※ちなみに「タスク実行ロール」というのはタスクを起動するときに必要な権限を持たせるロールで、「タスクロール」はタスク自体が実行に必要な権限を持たせるロール、という役割の違いがある

「ポリシーを追加」で「AmazonSSMFullAccess」を検索し追加します。

その後Cloud9のターミナルで以下のコマンドを実行して、ECS execを有効化してやる

aws ecs update-service --region ap-northeast-1 --cluster [クラスター名] --service [サービス名] --enable-execute-command

タスクの再起動

ECS execの有効化は既存のタスクには適用されず、設定後新たに起動したタスクでのみ適用されるため、タスクを再起動します。ECSのサービスの画面から「サービスを更新」ボタンを押下し、「新しいデプロイの強制」にチェックを入れて更新します。

タスクが再起動されたらようやく準備完了です。

ECS execでコンテナに入る

まずはアクセスしたいタスクのタスクIDをクリップボードにコピーします。

それからCloud9のターミナルで以下のコマンドを実行([ ]内は自身の環境に合わせて適宜置き換え)。コンテナ名は↑のタスクIDのリンクを押下した先の最下部に書いてます。

aws ecs execute-command --region ap-northeast-1 --cluster [クラスター名] --task [タスク ID] --container [コンテナ名] --interactive --command "/bin/sh"

接続できると以下のようなセッションIDが表示されます。

無事接続できましたでしょうか、お疲れ様でした!