この記事は、エアークローゼットアドベントカレンダー2024の日18目の記事です。
今日は、ECSコンテナへのアクセス方法を紹介したいので、ぜひ参考にしてください!
この記事のまとめ
・ECSとは?
・ECS Exec
・事前条件
・Execコマンド
ECSとは?
Amazon Elastic Container Service (ECS) は、Dockerコンテナを管理・実行するための高度なコンテナオーケストレーションサービスです。ECSを使用すると、アプリケーションを複数のDockerコンテナに分割し、それらを効率的かつスケーラブルに実行できます。また、タスクスケジューリングや自動スケーリングなどの機能も備えています。
ECS Exec
ECS ExecはAWS Systems Manager(SSM)を活用しています。
具体的にはSSMセッションマネージャーを利用して、「exec」コマンドを開始するデバイスとターゲットコンテナの間に安全なチャネルを作成します。
この機能はClientでもServerでもSSMの機能が必要なため、事前に設定する必要があります。これにより次のセクションに行きましょう。
事前条件
1. Client-Side
AWS CLIを使用してexecコマンドを開始する場合、インストールする必要があるパッケージはAWS CLI用のSSMセッションマネージャプラグインだけです。使用しているプラットフォーム(Linux、Mac、Windows)に応じて、指示に従って適切なバイナリを設定する必要があります。
2. Server-side(AWS Fargate)
Fargateソフトウェアスタックは、「プラットフォームバージョン」と呼ばれるものを介して管理されているため、最新バージョンである 1.4(ECS Execの前提条件が含まれているバージョン)を使用していることを確認するだけです。
サービスをデプロイする際には、「exec」の実行コマンドを有効にすることが必要です。
aws ecs update-service --service <SERVICE_NAME> --cluster <CLUSTER_NAME> \
--enable-execute-command \
--force-new-deployment
AnsibleまたはEcspressoを使用している場合は、この構成があることを確認してください。
"enableExecuteCommand": true
3. IAM
次のアクセス権限をタスクIAMロールに追加し、タスクIAMロールをタスク定義に含める必要があります。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ssmmessages:CreateControlChannel",
"ssmmessages:CreateDataChannel",
"ssmmessages:OpenControlChannel",
"ssmmessages:OpenDataChannel"
],
"Resource": "*"
}
]
}
ECSタスクロールレベル(role level)でIAM権限を設定する必要です(ECSタスク実行ロールレベルではなく)。これは、SSMと同じコンテナ内で実行されるためです。他のAWSサービスに対してそれらのアクションを実行するためには、コンテナ自体にIAM権限を付与するべきです。
Execコマンド
もし上記のすべての手順を完了したなら、ECS Fargateに接続する準備ができていると思います。以下のコマンドを参考してください。
aws ecs execute-command --cluster <CLUSTER_NAME> --task <TASK_ID> --container <CONTAINER_NAME> --interactive --command "sh"
最後までご覧いただきありがとうございました!
エアークローゼット Advent Calendar 2024はまだまだ続きますので、ぜひ他のエンジニア, デザイナー, PMの記事もご覧いただければと思います