WindowsからAmazon ECS Fargateコンテナに接続してみた


この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので十分ご注意ください。

お久しぶりです。協栄情報のきおかです。

 

今回は、Amazon ECS Fargateタイプのコンテナに、Windows PCから接続する方法をご紹介します。

尚、当記事はWindowsユーザー向けです。LinuxやMacOSについては非対応です。

 

下準備

前提

PowerShell(ps)を使います。

ブラウザは基本的に何でもいいです。私はChromeを使いました。

ちなみにECS Fargateへの接続にはECS Execを使います。詳しくはこちらのAWS公式ドキュメントをご確認ください。

 

AWS Command Line Interface(AWS CLI)をインストール

下記をpsに入力してインストールします。

msiexec.exe /i https://awscli.amazonaws.com/AWSCLIV2.msi

インストールが完了したら、下記をpsに入力して、バージョンが表示されることを確認。

aws --version

AWS公式ドキュメントはこちらから

 

 

AWS CLIの設定

こちらのAWS公式ドキュメントから、自分の環境に合うものを選んで設定してください。

私の場合は、テストのためであり一時的に必要だったため、非推奨ですがIAMユーザーで行いました。

IAMユーザーでのセットアップは、aws configureコマンドを使用します。aws configureを入力した後に出てくる4つの項目を入力すれば完了です。

aws configure

↓4つの項目(1行ずつ入力していきます)

AWS Access Key ID [None]: ${ご自身のアクセスキーを入力してください}
AWS Secret Access Key [None]: ${ご自身のシークレットアクセスキーを入力してください}
Default region name [None]: ap-northeast-1
Default output format [None]: json 

 

 

Session Managerプラグインのインストール

以下のURLにブラウザなどでアクセスしてインストールします。

https://s3.amazonaws.com/session-manager-downloads/plugin/latest/windows/SessionManagerPluginSetup.exe

インストールが完了したら、インストールができたか確認します。以下のコマンドをpsで入力します。

C:\> session-manager-plugin

下記のようなメッセージが表示されたらインストール完了です。

The Session Manager plugin is installed successfully. Use the AWS CLI to start a session.

AWS公式ドキュメントはこちらから

 

 

ECSタスクロールにIAMポリシーをアタッチ

以下をタスクロールにアタッチしてください。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "ssmmessages:CreateControlChannel",
        "ssmmessages:CreateDataChannel",
        "ssmmessages:OpenControlChannel",
        "ssmmessages:OpenDataChannel"
      ],
      "Resource": "*"
    }
  ]
}

 

 

 

手順

ここからはすぐ終わります。それぞれ${...を入力してください}のみ編集して、それ以外はコピペで大丈夫です。

 

ECSの情報を変数に格納して入力を楽にする作業

$cl = (aws ecs list-clusters | ConvertFrom-Json).clusterArns[0]
$prefix = $cl -replace '.+cluster\/', ''
$servicearn = (aws ecs list-services --cluster $cl | ConvertFrom-Json).serviceArns[0]
$taskarn = (aws ecs list-tasks --cluster $cl | ConvertFrom-Json).taskArns[0]
$taskid = $taskarn -replace '.+task\/.+\/', ''
$CONTAINER_NAME = "${ご自身のコンテナ名を入力してください}"

以下を入力して、変数にご自身のクラスタ名等が入力されていることを確認します。

Write-Output $cl
Write-Output $prefix
Write-Output $servicearn
Write-Output $taskarn
Write-Output $taskid
Write-Output $CONTAINER_NAME

 

ECS Execの有効化

同様に、以下をpsに入力します。

aws ecs update-service `
 --region ap-northeast-1 `
 --cluster $cl `
 --service $servicearn `
 --enable-execute-command

 

ECS Execの実行

同様に、以下をpsに入力します。

aws ecs execute-command `
 --region    ap-northeast-1 `
 --cluster   $cl `
 --task      $taskarn `
 --container $CONTAINER_NAME `
 --command   "/bin/sh" `
 --interactive

 

SSMを使ってコンテナに接続

最後に以下を入力すれば接続できます。

aws ecs execute-command `
 --region ap-northeast-1 `
 --cluster $cl `
 --task $taskarn `
 --container $CONTAINER_NAME `
 --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-xxxxxxxxxxxx

 

まとめ

ECS FargateのコンテナにWindows PCで接続する方法をご紹介しました。

また便利なものがあれば共有します。

ではまた。

Last modified: 2023-05-25

Author