この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので十分ご注意ください。
お久しぶりです。株式会社協栄情報システム3部所属の寺尾です。
Fargateコンテナ上で原因不明のエラーが起きた際、結構困りますよね。
コンテナの中に入って原因を突き止めたくなります。
というわけで、今回はFargateコンテナにシェルでアクセスしましたのでそちらの方法の紹介をしようと思います。
それではよろしくお願いします。
目次
Amazon ECS Execを利用してFargateコンテナにアクセスします。
Amazon ECS ExecによるFargateコンテナへのアクセスは、タスクロールとコンテナ起動時のオプションを追加するだけで簡単にアクセスできるようになります。
今回は以下の手順で進めていきます。
- IAMroleの作成
- AWS CLI バージョン 2 のインストール
- Session Manager プラグインをインストール
- タスク定義とクラスターの作成
- コンテナの起動とアクセス
ECS Execについて
Amazon ECS で、Amazon EC2 または AWS Fargate で実行されているコンテナでのコマンドの実行が可能に
1. IAMroleの作成
今回利用するIAMロールは以下になります。
AWS Configureを利用し、EC2インスタンスに認証情報を書き込む場合はIRL-ECSaccessは不要です。(セキュリティ面から非推奨の方法です)
IAMロール名 | 付与先サービス | 目的 |
---|---|---|
IRL-Fagateaccess | Elastic Container Service Task | execute-command エージェントと SSM サービス間の通信に必要なアクセス許可を コンテナに付与するため |
IRL-ECSaccess | EC2 | ECSの操作権限をEC2に与えるため |
また、IAMロールに付与するIAMポリシーは以下になります。
IAMロール | IAMポリシー |
---|---|
IRL-Fargateaccess | IPL-Fagateaccess |
IRL-ECSaccess | AmazonECS_FullAccess |
- IPL-Fargateaccess
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ssmmessages:CreateControlChannel", "ssmmessages:CreateDataChannel", "ssmmessages:OpenControlChannel", "ssmmessages:OpenDataChannel" ], "Resource": "*" } ] }
1.サービス→IAM→ポリシー→ポリシーを作成から前述の設定に従ってポリシーを作成しましょう。
2.ロール→ロールを作成から前述の設定に従ってロールを作成しましょう。
2. AWS CLI バージョン 2 のインストール
今回はIRL-ECSaccessをアタッチしたAmazonLinux2を用意し、そちらからアクセスしていきます。
用意したAmazonLinux2にアクセスして必要なソフトをインストールしましょう。
まずはCLIのバージョンが
- AWS CLI v1 バージョン 1.19.28以上
- AWS CLI v2 バージョン 2.1.31以上
である必要があるので、最新版をインストールします。
1.下記のコマンドでインストーラをダウンロードします。
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
2.解凍コマンド
unzip awscliv2.zip
3.インストールします。
sudo ./aws/install
4.現在のバージョンを確認します。
もし最新版になっていなければ一度再起動をしてみましょう。
aws --version
3. Session Manager プラグインをインストール
1.下記のコマンドでプラグインをダウンロードします。
curl "https://s3.amazonaws.com/session-manager-downloads/plugin/latest/linux_64bit/session-manager-plugin.rpm" -o "session-manager-plugin.rpm"
2.成功したら次のコマンドでインストールしましょう。
sudo yum install -y session-manager-plugin.rpm
3.次のコマンドでプラグインがインストールされたか確認できます。
session-manager-plugin
インストールに成功していた場合の結果は以下になります。
The Session Manager plugin is installed successfully. Use the AWS CLI to start a session.
4. タスク定義とクラスターの作成
設定項目 | 設定値 |
---|---|
タスク定義名 | 任意 |
起動タイプ | Fargate |
タスクロール | IRL-Fargateaccess |
タスクメモリ | 任意 |
タスクCPU | 任意 |
コンテナ名 | 任意 |
イメージ | 任意 |
1.サービス→Elastic Container Service→タスク定義→新しいタスク定義の作成から
上記の設定に従ってタスク定義を作成します。
今回は実験用ですのでメモリ、CPUは最小値で作成しました。
タスクロールさえIRL-Fargateaccessであればいいので既存のタスク定義を修正する形でも大丈夫です。
2.コンテナを追加します。
私はwordpress Official Imageを利用しました。
3.サービス→Elastic Container Service→クラスター→クラスターの作成から
ネットワーキングのみのクラスターを作成しました。
5. コンテナの起動とアクセス
1.「–enable-execute-command」オプションを付けてコンテナを起動しましょう。
-
サービスから起動するパターン
aws ecs create-service \ --cluster クラスター名 \ --service-name サービス名 \ --task-definition タスク定義名:バージョン \ --desired-count 1 \ --launch-type "FARGATE" \ --network-configuration "awsvpcConfiguration={subnets=[サブネットID],securityGroups=[セキュリティグループID],assignPublicIp=ENABLED}" \ --region リージョン名 \ --enable-execute-command
-
サービスをアップデートするパターン(タスクは再デプロイが必要です)
aws ecs update-service \ --cluster サービス名 \ --service fargateaccess \ --enable-execute-command "enableExecuteCommand": true
-
タスクだけで起動するパターン
aws ecs run-task \ --cluster クラスター名 \ --task-definition タスク定義名:バージョン \ --network-configuration "awsvpcConfiguration={subnets=[サブネットID],securityGroups=[セキュリティグループID],assignPublicIp=ENABLED}" \ --enable-execute-command \ --launch-type FARGATE \ --platform-version '1.4.0' \ --region リージョン名
2.以下のコマンドでコンテナにアクセスできます。
aws ecs execute-command \
--cluster クラスター名 \
--task タスクID \
--container コンテナ名 \
--interactive \
--command "/bin/bash"
3.以下の表示がされればアクセス成功です。
The Session Manager plugin was installed successfully. Use the AWS CLI to start a session.
Starting session with SessionId: ecs-execute-command-07e2184e59094a847
root@ip-00-00-00-00:/var/www/html#
おわりに
ここまで読んでいただきありがとうございました。
間違いなどあればぜひご指摘ください。
この記事が誰かの助けとなれば幸いです。