はじめに
以前のわたくしのブログにて 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タスクロールに以下のポリシーがアタッチされていること
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ssmmessages:CreateControlChannel", "ssmmessages:CreateDataChannel", "ssmmessages:OpenControlChannel", "ssmmessages:OpenDataChannel" ], "Resource": "*" } ] } |
接続してみた
下記の2 STEPで接続が出来ます。2回目以降は②のみで接続可能です。
- ECS Execの有効化(初回のみ)
- 対象コンテナを選択し、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)に下記のような実行ログが出力されます。
このように数クリックでコンテナにコマンド実行が出来ることがお分かりになったかと思います。
感想
メリット
数クリックでコンテナに対してコマンド実行出来るため、CLI以上に手軽さを感じました。
またCLIで実行する際には事前にタスクIDを控えておく必要がありましたが
AWS ToolKitではその手間もなくなるので大変ありがたいです。
デメリット
一方で実行ログを出力するだけですので、下記のようにbashコマンドを実行しても それ以降コマンドを実行することは出来ません。そのためコンテナ内部でファイルを表示や修正等を行いたい場合は、AWS CLIから実行することをオススメします。
(CLIでの設定手順はくどいようですがこちらのブログを参照してください。2回目)
余談
余談ですが、当ブログを検証する際に「Run command in container」を実行したところ
下記のようなエラーログが出て接続に失敗しました。
1 |
[ERROR]: Failed to execute command in container, InvalidParameterException: The execute command failed because execute command was not enabled when the task was run or the execute command agent isn’t running. Wait and try again or run a new task with execute command enabled and try again. |
こうなったらあの子の出番です。
ECS Exec Checker ツールぅぅ(大○のぶ代さん風に)
(使用方法はこちらのブログを参照してください。くどいですね)
こちらですね。
1 |
SSM PrivateLink "com.amazonaws.ap-northeast-1.ssmmessages" not found. You must ensure your task has proper outbound internet connectivity. |
検証用に作成したFargateはプライベートサブネット内で実行していたことを忘れていました。
そうですね、セッションマネージメント用のエンドポイントが必要でしたね。
きちんと設定すると「Run command in container」が実行出来ました!
めでたしめでたし。
参考記事
- AWS Toolkit for VS Code に Amazon ECS のトラブルシューティング用 Amazon ECS Exec のサポートが追加
- AWS Toolkit 簡易ドキュメント
- AWS Toolkit for VisualStudioCodeのユーザーガイド
さいごに
ECSやLambdaといったサーバレス/コンテナ開発は、多くの実績があり得意としています。
開発のご相談等あればお問い合わせ頂ければ幸いです。
投稿者プロフィール
-
2021/2にスカイアーチネットワークスにJoin。
(前職ではAIのシステム開発やPoCなどを主に担当)
2024 Japan AWS Top Engineers (Services)
2024 Japan AWS All Certifications Engineers
現在の業務では主にクラウドネイティブなWebアプリケーション/APIのインフラ構築から開発まで幅広く担当。
好きなAWSサービス:AWS CDK、Amazon Bedrock
趣味:読書と競馬鑑賞