Closed1

【DOP】ECS コンテナインスタンスとタスクのコンテナログをCloudWatch Logsに送信したい

kenryokenryo

https://docs.aws.amazon.com/ja_jp/AmazonECS/latest/developerguide/using_cloudwatch_logs.html
https://docs.aws.amazon.com/ja_jp/AmazonECS/latest/developerguide/using_awslogs.html

概要

コンテナインスタンスおよびタスクがCloudWatchLogsにログを送信する方法をそれぞれ記載します。

コンテナインスタンスからログを送信する設定手順

ロールの作成

AmazonEC2ContainerServiceforEC2Role管理ポリシーをアタッチしてください。
PrincipalにEC2を追加し、以下の信頼関係となっていることを確認してください。

{
  "Version": "2008-10-17",
  "Statement": [
    {
      "Sid": "",
      "Effect": "Allow",
      "Principal": {
        "Service": "ec2.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

IAMポリシーの作成とロールへのアタッチ

以下のJsonを参考にポリシーを作成してください。
作成したポリシーを上記で生成したロールにアタッチしてください。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "logs:CreateLogGroup",
                "logs:CreateLogStream",
                "logs:PutLogEvents",
                "logs:DescribeLogStreams"
            ],
            "Resource": [
                "arn:aws:logs:*:*:*"
            ]
        }
    ]
}

CloudWatchエージェントのインストール

ここを参考に、コンテナインスタンスにCloudWatchエージェントをインストールしてください。

タスクからログを送信する設定手順

awslogsログドライバーを使用することで、標準出力、標準エラーに出力されたログをCloudWatchLogsに送信することができます。

Fargete起動タイプの場合、タスク定義にlogConfigurationを追加することでログ送信ができるようになります。以下はタスク定義のJson例です。

{
    "containerDefinitions": [
        {
            "name": "wordpress",
            "links": [
                "mysql"
            ],
            "image": "wordpress",
            "essential": true,
            "portMappings": [
                {
                    "containerPort": 80,
                    "hostPort": 80
                }
            ],
            "logConfiguration": {
                "logDriver": "awslogs",
                "options": {
                    "awslogs-group": "awslogs-wordpress",
                    "awslogs-region": "us-west-2",
                    "awslogs-stream-prefix": "awslogs-example"
                }
            },
            "memory": 500,
            "cpu": 10
        },
        {
            "environment": [
                {
                    "name": "MYSQL_ROOT_PASSWORD",
                    "value": "password"
                }
            ],
            "name": "mysql",
            "image": "mysql",
            "cpu": 10,
            "memory": 500,
            "essential": true,
            "logConfiguration": {
                "logDriver": "awslogs",
                "options": {
                    "awslogs-group": "awslogs-mysql",
                    "awslogs-region": "us-west-2",
                    "awslogs-stream-prefix": "awslogs-example"
                }
            }
        }
    ],
    "family": "awslogs-example"
}

logDriverにはawslogsを指定します。
awslogs-regionはログを送信するリージョンを指定します。
awslogs-stream-prefixにはCloudWatchLogsで生成されるログストリームのプレフィックスを指定します。
ログストリームの形式は以下の通りです。

prefix-name/container-name/ecs-task-id

このスクラップは2022/02/06にクローズされました