Amazon ECS での CloudWatch エージェントと X-Ray デーモンのデプロイ
Amazon ECS では、メトリクスを収集するために、CloudWatch エージェントをサイドカーとしてアプリケーションコンテナにデプロイします。CloudWatch エージェントは、SSM Parameter Store を使用して設定できます。
IAM ロールの作成
IAM ロールを 2 つ作成する必要があります。これらのロールをすでに作成している場合は、アクセス許可を追加する必要があります。
-
ECS タスクロール – コンテナは、このロールを使用して実行します。アクセス許可は、アプリケーションが必要とするものと、CloudWatchAgentServerPolicy と AWSXRayDaemonWriteAccess である必要があります。
-
ECS タスク実行ロール – Amazon ECS は、このロールを使用してコンテナを起動および実行します。このロールを既に作成している場合は、[AmazonSSMReadOnlyAccess]、[AmazonECSTaskExecutionRolePolicy]、および [CloudWatchAgentServerPolicy] ポリシーをアタッチします。
使用する Amazon ECS のより機密性の高いデータを保存する必要がある場合は、「機密データの指定」を参照してください。
IAM ロールの作成についての詳細は、「IAM ロールの作成」を参照してください。
SSM Parameter Store にエージェント設定を保存する
エージェント設定ファイルに次のセクションがあることを確認し、それを SSM Parameter Store にアップロードする必要があります。
{ "logs": { "metrics_collected": { "emf": {} } } }
エージェント設定を SSM Parameter Store にアップロードするには
-
エージェント設定コンテンツをローカルファイル
/tmp/ecs-cwagent.json
に格納する -
以下のコマンドを入力します。
region
をクラスターのリージョンに置き換えます。aws ssm put-parameter \ --name "ecs-cwagent" \ --type "String" \ --value "`cat /tmp/ecs-cwagent.json`" \ --region "
region
"
タスク定義を作成して、タスクを起動する
このタスクのステップは、EC2 起動タイプと Fargate 起動タイプのどちらを使用するかによって異なります。
EC2 起動タイプ
まず、タスク定義を作成します。この例では、コンテナ「demo-app」は、X-Ray SDK メトリクスを CloudWatch エージェントに送信し、トレース情報を X-Ray デーモンに送信します。
次のタスク定義を /tmp/ecs-cwagent-ec2.json
などのローカル JSON ファイルにコピーします。次のプレースホルダーを置き換えます。
{{ecs-task-role}}
を、ECS タスクロールの ARN に置き換えます。{{ecs-task-execution-role}}
を ECS タスク実行ロールの ARN に置き換えます。{{demo-app-image}}
を X-Ray SDK 統合が有効になっているアプリケーションイメージに置き換えます。demo-app から独自のアプリケーション名に名前を変更します。{{region}}
をコンテナのログを送信する AWS リージョンの名前に置き換えます。例えば、us-west-2
です。
{ "family": "ecs-cwagent-ec2", "taskRoleArn": "
{{ecs-task-role}}
", "executionRoleArn": "{{ecs-task-execution-role}}
", "networkMode": "bridge", "containerDefinitions": [ { "name": "demo-app", "image": "{{demo-app-image}}
", "links": [ "cloudwatch-agent", "xray-daemon" ], "logConfiguration": { "logDriver": "awslogs", "options": { "awslogs-create-group": "True", "awslogs-group": "/ecs/ecs-cwagent-ec2", "awslogs-region": "{{region}}
", "awslogs-stream-prefix": "ecs" } } }, { "name": "xray-daemon", "image": "public.ecr.aws/xray/aws-xray-daemon:latest", "logConfiguration": { "logDriver": "awslogs", "options": { "awslogs-create-group": "True", "awslogs-group": "/ecs/ecs-cwagent-ec2", "awslogs-region": "{{region}}
", "awslogs-stream-prefix": "ecs" } } }, { "name": "cloudwatch-agent", "image": "public.ecr.aws/cloudwatch-agent/cloudwatch-agent:latest", "secrets": [ { "name": "CW_CONFIG_CONTENT", "valueFrom": "ecs-cwagent" } ], "logConfiguration": { "logDriver": "awslogs", "options": { "awslogs-create-group": "True", "awslogs-group": "/ecs/ecs-cwagent-ec2", "awslogs-region": "{{region}}
", "awslogs-stream-prefix": "ecs" } } } ], "requiresCompatibilities": [ "EC2" ], "cpu": "256", "memory": "256" }
次のコマンドを使用して、タスク定義を作成します。{{region}}
をクラスターのリージョンに置き換えます。
aws ecs register-task-definition \ --cli-input-json file:///tmp/ecs-cwagent-ec2.json \ --region
{{region}}
以下のコマンドを入力して、タスクを起動します。{{cluster-name}}
および {{region}}
をクラスターの名前とリージョンに置き換えます。
aws ecs run-task \ --cluster
{{cluster-name}}
\ --task-definition ecs-cwagent-ec2 \ --region {{region}} \ --launch-type EC2
Fargate 起動タイプ
まず、タスク定義を作成します。この例では、コンテナ「demo-app」は、X-Ray SDK メトリクスを CloudWatch エージェントに送信し、トレース情報を X-Ray デーモンに送信します。
次のタスク定義を /tmp/ecs-cwagent-ec2.json
などのローカル JSON ファイルにコピーします。次のプレースホルダーを置き換えます。
{{ecs-task-role}}
を、ECS タスクロールの Amazon リソースネーム (ARN) に置き換えます。{{ecs-task-execution-role}}
を ECS タスク実行ロールの ARN に置き換えます。{{demo-app-image}}
を X-Ray SDK 統合が有効になっているアプリケーションイメージに置き換えます。demo-app から独自のアプリケーション名に名前を変更します。{{region}}
をコンテナのログを送信する AWS リージョンの名前に置き換えます。例えば、us-west-2
です。
{ "family": "ecs-cwagent-fargate", "taskRoleArn": "
{{ecs-task-role}}
", "executionRoleArn": "{{ecs-task-execution-role}
}", "networkMode": "awsvpc", "containerDefinitions": [ { "name": "demo-app", "image": "{{demo-app-image}}
", "logConfiguration": { "logDriver": "awslogs", "options": { "awslogs-create-group": "True", "awslogs-group": "/ecs/ecs-cwagent-fargate", "awslogs-region": "{{region}}
", "awslogs-stream-prefix": "ecs" } } }, { "name": "xray-daemon", "image": "public.ecr.aws/xray/aws-xray-daemon:latest", "logConfiguration": { "logDriver": "awslogs", "options": { "awslogs-create-group": "True", "awslogs-group": "/ecs/ecs-cwagent-fargate", "awslogs-region": "{{region}}
", "awslogs-stream-prefix": "ecs" } } }, { "name": "cloudwatch-agent", "image": "public.ecr.aws/cloudwatch-agent/cloudwatch-agent:latest", "secrets": [ { "name": "CW_CONFIG_CONTENT", "valueFrom": "ecs-cwagent" } ], "logConfiguration": { "logDriver": "awslogs", "options": { "awslogs-create-group": "True", "awslogs-group": "/ecs/ecs-cwagent-fargate", "awslogs-region": "{{region}}
", "awslogs-stream-prefix": "ecs" } } } ], "requiresCompatibilities": [ "FARGATE" ], "cpu": "512", "memory": "1024" }
次のコマンドを使用して、タスク定義を作成します。{{region}}
をクラスターのリージョンに置き換えます。
aws ecs register-task-definition \ --cli-input-json file:///tmp/ecs-cwagent-fargate.json \ --region
{{region}}
Fargate クラスターを既にセットアップしている場合は、先ほど作成したタスク定義を使用してタスクを起動できます。Fargate クラスターがまだない場合、Fargate のセットアップの残りのステップの詳細については、「サービスの設定」を参照してください。