Amazon ECS での CloudWatch エージェントと X-Ray デーモンのデプロイ - Amazon CloudWatch

Amazon ECS での CloudWatch エージェントと X-Ray デーモンのデプロイ

Amazon ECS では、メトリクスを収集するために、CloudWatch エージェントをサイドカーとしてアプリケーションコンテナにデプロイします。CloudWatch エージェントは、SSM Parameter Store を使用して設定できます。

IAM ロールの作成

IAM ロールを 2 つ作成する必要があります。これらのロールをすでに作成している場合は、アクセス許可を追加する必要があります。

  • ECS タスクロール – コンテナは、このロールを使用して実行します。アクセス許可は、アプリケーションが必要とするものと、CloudWatchAgentServerPolicyAWSXRayDaemonWriteAccess である必要があります。

  • ECS タスク実行ロール – Amazon ECS は、このロールを使用してコンテナを起動および実行します。このロールを既に作成している場合は、[AmazonSSMReadOnlyAccess]、[AmazonECSTaskExecutionRolePolicy]、および [CloudWatchAgentServerPolicy] ポリシーをアタッチします。

    使用する Amazon ECS のより機密性の高いデータを保存する必要がある場合は、「機密データの指定」を参照してください。

IAM ロールの作成についての詳細は、「IAM ロールの作成」を参照してください。

SSM Parameter Store にエージェント設定を保存する

エージェント設定ファイルに次のセクションがあることを確認し、それを SSM Parameter Store にアップロードする必要があります。

{ "logs": { "metrics_collected": { "emf": {} } } }
エージェント設定を SSM Parameter Store にアップロードするには
  1. エージェント設定コンテンツをローカルファイル /tmp/ecs-cwagent.json に格納する

  2. 以下のコマンドを入力します。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 のセットアップの残りのステップの詳細については、「サービスの設定」を参照してください。