AWSお勉強 ECS Exec

2023-10-07

すこしやる気が出てきたときは続けてやらないとやる気出る前以上に忘れるので続けてパクリ14発目!

パクリ元

内容

前回表示できたページが文字化けしていたので(CodeCommitからではなく)直接ECS内のファイルをいじる。

AWS CLI

AWS CLIはAWSをコマンドライン(CUI)から利用するツール。どこからどこまでをCUIなのかGUIなのかが全く分からないが、ECS Exec に関しては必要とのことでインストール。はじめ sudo apt install awscli でインストールしたらバージョン古くてダメだったのでパクリ元2つ目を参考に最新のものを入れる。

~$ curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
~$ unzip awscliv2.zip
~$ sudo ./aws/install
~$ export PATH=$PATH:/usr/local/bin
~$ rm awscliv2.zip

AWS CLI が利用できるように権限を設定する。IAMにてユーザー名 AWSEcsExec でユーザー作成。

「ポリシーを直接アタッチする」を選択して「ポリシーの作成」ボタン押下。

ポリシー作成画面が新しく表示されるのでJSONボタン押下。

パクリ元1つ目のものだとエラーが出たので以下のように修正して「次へ」ボタン押下。

        "Action": [
            "ecs:ExecuteCommand",
            "ssm:StartSession",
            "ecs:DescribeTasks",
            "ecs:DescribeServices",
            "ecs:UpdateService"
        ],
        "Resource": "*"

ポリシー名を「AWSCLI_ECSExec」として「ポリシーの作成」ボタン押下。

ユーザーの作成画面に戻って、「ポリシーの作成」ボタンの左にあるクルクルの更新ボタンを押下してから先ほど作成したポリシーを検索する。チェックをつけて「次へ」ボタン押下してユーザーを作成する。

作成したAWSEcsExecユーザーを選択してセキュリティ認証情報タブをクリックする。

下の方にスクロールして「アクセスキーを作成」ボタンを押下。

「コマンドラインインターフェース(CLI)」を選択して、「上記のレコメンデーションを理解し、アクセスキーを作成します。」にチェックをつけて「次へ」ボタン押下。

一応説明タグに「AWSCLI_ECSExec」と入力して「アクセスキーを作成」ボタンを押下。

やっとアクセスキーとシークレットアクセスキーを取得。これをローカル側に設定する。

~$ aws configure
AWS Access Key ID [None]: 上記のアクセスキー
AWS Secret Access Key [None]: 上記のシークレットアクセスキー
Default region name [None]: ap-northeast-1
Default output format [None]: json

Session Manager plugin for the AWS CLI

ここの Session Manager plugin の意味がいまいち理解していないが、、ECS を Fargate 起動としているのでそこらへんを全て管理しているのを通さんといかんのかな、というイメージ。パクリ元4つ目を参考にインストールする。

~$ curl "https://s3.amazonaws.com/session-manager-downloads/plugin/latest/ubuntu_64bit/session-manager-plugin.deb" -o "session-manager-plugin.deb"
~$ sudo dpkg -i session-manager-plugin.deb
~$ rm session-manager-plugin.deb

タスク定義に紐付くECSタスクロールを修正

前回作成したタスク定義を更新するため、タスク定義>新しいリビジョンの作成 を押下する。

タスクロールを「なし」から「ecsTaskExecutionRole」に変更して「作成」ボタン押下。

タスクロール箇所にある「ecsTaskExecutionRole」を押下。

IAM画面で 許可を追加>インラインポリシーを作成 を押下。

パクリ元1つ目にあるように以下を修正して「次へ」ボタン押下。

       "Action": [
            "ssmmessages:CreateControlChannel",
            "ssmmessages:CreateDataChannel",
            "ssmmessages:OpenControlChannel",
            "ssmmessages:OpenDataChannel"
       ],
      "Resource": "*"

ポリシー名 ECSExec として「ポリシーの作成」ボタン押下。

「ecsTaskExecutionRole」ロールに作成したポリシーが追加される。

ECS Exec 有効化

タスクとサービスに対して有効化するので、前回作ったクラスターからサービスを立ち上げる。

ECS Exec を有効化する。

~$ aws ecs describe-services --cluster EcsTest --services NginxTaskServiceTest | grep enableExecuteCommand
        "enableExecuteCommand": false
~$ aws ecs update-service --cluster EcsTest --service NginxTaskServiceTest --enable-execute-command | grep enableExecuteCommand
        "enableExecuteCommand": true

ECSサービスの強制デプロイ

ECS Exec を有効化したのでサービスを更新する。「新しいデプロイの強制」にチェックをつけて「更新」ボタン押下。

タスクタブからタスクを選択してタスクIDを確認する。また、前回同様ネットワーキングタブからパブリックIPを取得しておく。

一旦ページ確認

前回同様、指定されているセキュリティグループの80番を許可してからパブリックIPにアクセスする。

ECS Exec 実行

先ほど取得したタスクIDを使用して ECS Exec を実行する。

~$ aws ecs execute-command --cluster EcsTest --task ae15c31578634c67b35925a275e2d6b4 --container NginxTestContainer --interactive --command "/bin/bash"

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

Starting session with SessionId: ecs-execute-command-03bb272e6eb5e3a1c
root@ip-172-31-1-129:/#

おお、コンテナに入れたようだ。コンテナには何もコマンドが入っていないためvimを入れてファイルを更新する。

root@ip-172-31-1-129:/# apt update
root@ip-172-31-1-129:/# apt install -y vim
root@ip-172-31-1-129:/# vi /usr/share/nginx/html/index.html

meta タグの1行を追加する。

/usr/share/nginx/html/index.html
<meta charset="UTF-8">
<h1>Hello 周回遅れのパクリ学習</h1>

ページ 確認

再度先ほどのパブリックIDをブラウザで確認!

おおおおおお。コンテナ内の更新ができたことを確認。当然だがECRに反映していないので再度サービスを立ち上げたら元に戻ることになるが、ちょっと確認したいとかにはいいだろう。

後片付け

前回同様、追加したデフォルトセキュリティグループへのルールの削除と、立ち上げたECS サービスを削除しておく。

雑感

少しやるだけでもいろいろ大変。

AWS,Docker,ECS,ECS Exec

Posted by ak