VS CodeでECS Execが実行出来るようになりました

はじめに

以前のわたくしのブログにて ECS Execの素晴らしさをお伝えしましたが
この度VS CodeにECS Execのサポートを読んで簡単にECS Execが出来ると知りトライしてみました。

目次

Amazon Toolkit for VS Codeについて

AWS Toolkitは、 AWSとの対話を可能にするVisual Studio Codeの拡張機能です。 (以下 VS Code)
本ブログで紹介するECSサービス以外にも様々なサービスに対応しています。
詳細はこちらを参照してみてください。

利用方法

VS Code及びECSで、それぞれ以下の条件である必要があります。

1. VS Code

  • AWS Toolkitプライグイン(v1.34.0以上)を有効化

    筆者のAWS Toolkitはv1.36.0となっていますが
    ECS Exec のサポートはv1.34.0で追加となったようです。

  • Credentials Profileを選択
    「AWS: Choose AWS Profile...」より接続したいAWSアカウント/ユーザを選択しましょう

2. ECS

  • Fargateのプラットフォームバージョンが1.4.0以降であること
  • ECSタスクロールに以下のポリシーがアタッチされていること

接続してみた

下記の2 STEPで接続が出来ます。2回目以降は②のみで接続可能です。

  1. ECS Execの有効化(初回のみ)
  2. 対象コンテナを選択し、Run Commandを実行

1.ECS Execの有効化(初回のみ)

ECSサービスに対してECS Execの有効化を行う必要があります。
現時点(2022/03/24)ではAWS コンソールでの設定は出来ないため、これまではCLIにて設定する必要がありました。
(CLIでの設定手順はこちらのブログを参照してください)

ですがこの度、CLIに加え VS Codeでも簡単に設定が出来るようになりました。

AWS Toolkit -> ECS -> 対象クラスターを開きます。
対象サービスで右クリック -> Enable Command Executionを選択します。

するとこのような注意メッセージが出ました。
どうやら内部でサービスの停止や再起動が行われるようです。
そのため本番環境でのECS Exec有効化設定を使用しないことをオススメします

注意メッセージ内の「Yes」をクリックすると無事にECS Execの有効化が行われます。

2.対象コンテナを選択し、Run Commandを実行

ECS Execの有効化が完了すると、あとは対象コンテナからRun Commandを実行するだけです。
対象コンテナを右クリック -> Run command in containerを選択します。

するとVS Codeの上段にこのような画面が表示されます。
こちらで対象となるタスクIDを選択します。

次に実行したいコマンドを入力します。
例として面白みに欠けますが「hostname」を入力してみました。

そうするとVS Codeの出力タブ(OUTPUT)に下記のような実行ログが出力されます。

psコマンドを実行した場合はこのように出力されます。

このように数クリックでコンテナにコマンド実行が出来ることがお分かりになったかと思います。

感想

メリット

数クリックでコンテナに対してコマンド実行出来るため、CLI以上に手軽さを感じました。
またCLIで実行する際には事前にタスクIDを控えておく必要がありましたが
AWS ToolKitではその手間もなくなるので大変ありがたいです。

デメリット

一方で実行ログを出力するだけですので、下記のようにbashコマンドを実行しても それ以降コマンドを実行することは出来ません。そのためコンテナ内部でファイルを表示や修正等を行いたい場合は、AWS CLIから実行することをオススメします。
(CLIでの設定手順はくどいようですがこちらのブログを参照してください。2回目)

余談

余談ですが、当ブログを検証する際に「Run command in container」を実行したところ
下記のようなエラーログが出て接続に失敗しました。

こうなったらあの子の出番です。
ECS Exec Checker ツールぅぅ(大○のぶ代さん風に)
(使用方法はこちらのブログを参照してください。くどいですね)

なんか出てますね。どれどれ。

こちらですね。

検証用に作成したFargateはプライベートサブネット内で実行していたことを忘れていました。
そうですね、セッションマネージメント用のエンドポイントが必要でしたね。
きちんと設定すると「Run command in container」が実行出来ました!
めでたしめでたし。

参考記事

さいごに

ECSやLambdaといったサーバレス/コンテナ開発は、多くの実績があり得意としています。
開発のご相談等あればお問い合わせ頂ければ幸いです。

投稿者プロフィール

tsuji
2021/2にスカイアーチネットワークスにJoin。
(前職ではAIのシステム開発やPoCなどを主に担当)

2024 Japan AWS Top Engineers (Services)
2024 Japan AWS All Certifications Engineers

現在の業務では主にクラウドネイティブなWebアプリケーション/APIのインフラ構築から開発まで幅広く担当。

好きなAWSサービス:AWS CDK、Amazon Bedrock
趣味:読書と競馬鑑賞

ABOUTこの記事をかいた人

2021/2にスカイアーチネットワークスにJoin。 (前職ではAIのシステム開発やPoCなどを主に担当) 2024 Japan AWS Top Engineers (Services) 2024 Japan AWS All Certifications Engineers 現在の業務では主にクラウドネイティブなWebアプリケーション/APIのインフラ構築から開発まで幅広く担当。 好きなAWSサービス:AWS CDK、Amazon Bedrock 趣味:読書と競馬鑑賞