LoginSignup
11
10

ECS FargateにSSMを利用してSSH接続する(チュートリアル)

Last updated at Posted at 2022-06-15

はじめに

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です!!
スクリーンショット 2022-06-15 18.34.58.png

全体概要

AWS-CLIにSSMのプラグインをインストールし、SSH接続します。細かい説明は下記の通りです。

①Pluginのダウンロード

downloadコマンド
~/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を有効化する必要があります。下記コマンドで有効化しましょう。

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 #  ←これがでていれば接続できています!!!

11
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
10