はじめに
ECS Fargateにデプロイしたはいいけど、コンテナ内にアクセスできなくてデバッグできなくて困ることはしばしば。EC2 on ECSならばSSH接続できるけど、Fargateではどう接続すれば良いのか。。。そこで、今回はSessionManagerを利用してFargateのコンテナ内にアクセスする方法を説明します。
SSM(Session managerとは??)
Session Manager はフルマネージド AWS Systems Manager 機能です。Session Manager を使って、Amazon Elastic Compute Cloud (Amazon EC2) インスタンス、エッジデバイス、オンプレミスサーバー、仮想マシン (VM) を管理できます。インタラクティブ・ワンクリック ブラウザ ベースのシェル、または AWS Command Line Interface (AWS CLI) を使用できます。Session Manager は安全かつ監査可能なノード管理を実現し、インバウンドポートを開いたり、踏み台ホストを維持したり、SSH キーの管理したりする必要はありません。また Session Manager はマネージドノードの制御されたアクセス、厳格なセキュリティプラクティス、ノードアクセス詳細がある完全監査可能なログを要件とする社内ポリシーの尊守を実現しつつ、エンドユーザーが簡単なワンクリック・クロス プラットフォームアクセスによってマネージドノードの使用を実現します。
→公式の説明を上に載せていますが、AWSのIAMロールを利用する事で、SSHポートを利用せずにSSH接続できると考えてもらえればOKです!!
全体概要
AWS-CLIにSSMのプラグインをインストールし、SSH接続します。細かい説明は下記の通りです。
①Pluginのダウンロード
~/Desktop $ curl "https://s3.amazonaws.com/session-manager-downloads/plugin/latest/mac/sessionmanager-bundle.zip" -o "sessionmanager-bundle.zip"
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 3499k 100 3499k 0 0 143k 0 0:00:24 0:00:24 --:--:-- 189k
②Pluginの解凍
~/Desktop $ unzip sessionmanager-bundle.zip
Archive: sessionmanager-bundle.zip
creating: sessionmanager-bundle/
inflating: sessionmanager-bundle/LICENSE
inflating: sessionmanager-bundle/NOTICE
extracting: sessionmanager-bundle/VERSION
creating: sessionmanager-bundle/bin/
inflating: sessionmanager-bundle/bin/session-manager-plugin
inflating: sessionmanager-bundle/THIRD-PARTY
inflating: sessionmanager-bundle/install
inflating: sessionmanager-bundle/README.md
inflating: sessionmanager-bundle/RELEASENOTES.md
inflating: sessionmanager-bundle/seelog.xml.template
③Pluginのインストール
~/Desktop $ sudo ./sessionmanager-bundle/install -i /usr/local/sessionmanagerplugin -b /usr/local/bin/session-manager-plugin
Password:
Creating install directories: /usr/local/sessionmanagerplugin/bin
Creating Symlink from /usr/local/sessionmanagerplugin/bin/session-manager-plugin to /usr/local/bin/session-manager-plugin
Installation successful!
④Pluginのインストール確認
~/Desktop $ session-manager-plugin
The Session Manager plugin was installed successfully. Use the AWS CLI to start a session.
はい、これでSSMのプラグインは追加できました。次は実際にECSのコンテナ内に接続する手順を記載します。
ECS(Fargate)のコンテナに接続する。
ECSExecの有効化
ECSのコンテナに接続するには、ECSExecを有効化する必要があります。下記コマンドで有効化しましょう。
aws ecs update-service --region ap-northeast-1 --cluster クラスター名 --service サービス名 --enable-execute-command
→はい、これで有効化できました。最後に"enableExecuteCommand": true
と表示されていればできています。
もしも、下記エラーがでた場合はタスク定義のロールに誤りがあります。タスク定義のタスクロールを「ecsTaskExecutionRole」に変更してみてください。
An error occurred (InvalidParameterException) when calling the UpdateService operation: The service couldn't be updated because a valid taskRoleArn is not being used. Specify a valid task role in your task definition and try again.
SSMを利用しコンテナに接続する。
aws ecs execute-command --region ap-northeast-1 --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-XXXXXXXX
/app # ←これがでていれば接続できています!!!