はじめに
以前の記事で、ECS on Fargateを用いてWebサイトの構築を行いました。
何か問題が起きた際に既存Fargateに接続したいということがあるかと思います。
そこで、Serverworks様の記事を参考に、Fargateに接続できるまでの手順をまとめていきたいと思います。
個人環境
- Windows10
AWS CLIのインストール
AWS CLIがインストールされていない場合は、公開されているインストール手順を参考に、AWS CLIのインストールを行います。
※特に変更などせずデフォルトのままインストールを行っています。
※AWS CLIに任意の認証情報を設定してください。
AWS CLI用のSession Managerプラグインのインストール
Session Managerプラグインがインストールされていない場合は、公開されているインストール手順を参考に、Session Managerプラグインのインストールを行います。
個人環境はWindowsなので、Windows での Session Manager プラグインのインストールを参考にして、インストールを行いました。
※画面に従い、デフォルトのままインストールを行っています。
タスク定義でタスク用ロールを付与する
タスクロール名 | AWSのサービス | IAMポリシー |
---|---|---|
ECS-Exec-Fargate-role | Elastic Container Service Task | ECS-Exec-Fargate |
- IAMポリシーを作成します。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": [
"ssmmessages:CreateDataChannel",
"ssmmessages:OpenDataChannel",
"ssmmessages:OpenControlChannel",
"ssmmessages:CreateControlChannel"
],
"Resource": "*"
}
]
}
前回の記事を参考に、タスク定義の内容を編集して試していきます。
タスクロールを事前に作成したIAMロール「ECS-Exec-Fargate-role」を指定し、他は変更しないで「タスクの作成」を行います。
IAMユーザ名 | IAMポリシー |
---|---|
ecsexec-iam-acc-key01 | ECS-Exec-from-pc |
- IAMポリシーを作成します。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": [
"ecs:UpdateService",
"ecs:ExecuteCommand",
"ecs:DescribeTasks",
"ecs:DescribeServices"
],
"Resource": "*"
}
]
}
- タスクとサービスに対する ECS Exec をオンにする
aws ecs update-service --cluster <クラスター名> --service <サービス名> --enable-execute-command
- ECS Exec機能がオンとなっていることを確認する
aws ecs describe-services --cluster <クラスター名> --service <サービス名> | Select-String -Pattern "enableExecuteCommand"
- ECS ExceでFargateに接続する
aws ecs execute-command --cluster <クラスター名> --task <タスクID> --container <コンテナ名> --interactive --command "/bin/sh"
【番外編】ECS Exce接続ログを有効化する
ECS Exceで接続した際のログをCloudWatchロググループやS3に保存することができます。
今回は事前に作成したCloudWatchロググループにログを保存するように設定を行います。
ECS Exce接続ログの有効化
ECS Exce接続ログの有効化を行います。
aws ecs update-cluster --cluster <クラスター名> --configuration executeCommandConfiguration="{ logging=OVERRIDE, logConfiguration={ cloudWatchLogGroupName=<CloudWatchロググループ名> } }
接続ログが有効化されていることを確認
cloudWatchLogGroupNameにECS Exce接続ログ有効化の際に指定したCloudWatchロググループの名前が記載されていることを確認する。
aws ecs describe-clusters --clusters <クラスター名> --include CONFIGURATIONS
ECS Exceログの有効化を行う際は、ECSタスクロールやIAMユーザに適切な権限がついていることを確認したうえで作業します。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": "logs:DescribeLogStreams",
"Resource": "arn:aws:logs:*:<AWSアカウントID>:log-group:*"
},
{
"Sid": "VisualEditor1",
"Effect": "Allow",
"Action": [
"logs:CreateLogStream",
"logs:PutLogEvents"
],
"Resource": "arn:aws:logs:*:<AWSアカウントID>:log-group:*:log-stream:*"
},
{
"Sid": "VisualEditor2",
"Effect": "Allow",
"Action": "logs:DescribeLogGroups",
"Resource": "*"
}
]
}
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": [
"ecs:UpdateCluster",
"ecs:DescribeClusters"
],
"Resource": "arn:aws:ecs:*:<AWSアカウントID>:cluster/*"
}
]
}
さいごに
コンテナ内にSSHなどをインストールせずに、コンテナに接続することができました。
何か問題が発生した際にECS Execでコンテナに接続して色々とできそうですね。
参考にしたURL