aws ecs

CloudWatchでECSのログを確認する方法をまとめました。

サムネイル

参考

前提

  • プロジェクトがECSにデプロイされている
    LaravelプロジェクトをECSにデプロイする方法についてはこちらをご覧ください。

設定手順

  1. logConfigurationを追加する
  2. VPCエンドポイントを作成する
  3. ECSタスク実行用IAMロールを編集する

1. logConfigurationを追加する

task-definition.jsonlogConfiguration を追加します。

task-definition.json:

{
    "requiresCompatibilities": [
        "FARGATE"
    ],
    "family": "my-fargate",
    "containerDefinitions": [
        {
            "name": "my-container",
            ...
            // logConfigurationを追加
            "logConfiguration": {
                "logDriver": "awslogs",
                "options": {
                    "awslogs-create-group": "true",
                    "awslogs-group": "my-log-group",
                    "awslogs-region": "ap-northeast-1",
                    "awslogs-stream-prefix": "my-container"
                }
            },
            ...

各オプションの説明は以下の通りです。

オプション 説明
awslogs-create-group true にするとロググループが自動的に作成されます。
awslogs-group ログを送信するロググループ名を指定します。
awslogs-region ロググループがあるリージョンを指定します。
awslogs-stream-prefix ログストリームにつけるプレフィックスを指定します。

2. VPCエンドポイントを作成する

ECSのコンテナがプライベートサブネットにある場合、CloudWatch Logs用のVPCエンドポイントを作成する必要があります。

AWSマネジメントコンソールのVPCに移動します。
「Endpoints」をクリックします。

AWSマネジメントコンソールのVPC

「Create endpoint」をクリックします。

エンドポイント一覧画面

名前を入力し、「Type」には「AWS services」を選択します。

エンドポイント作成画面1

com.amazonaws.region.logs を選択します。

エンドポイント作成画面2

VPC、プライベートサブネット、プライベート用のセキュリティグループを選択します。

「Create endpoint」をクリックします。

3. ECSタスク実行用IAMロールを編集する

ECSタスク実行用IAMロールにロググループの作成を許可するポリシーを追加します。
このIAMロールの詳細についてはこちらの記事を参照してください。

次のようなポリシーを追加します。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": "logs:CreateLogGroup",
            "Resource": "arn:aws:logs:<ロググループのリージョン>:<アカウントID>:log-group:*"
        }
    ]
}

もしECSタスク実行ロールに logs:CreateLogStreamlogs:PutLogEvents が含まれていない場合は上記のポリシーに追加してください。

これでサービスをデプロイするとCloudWatchでECSのログを確認できるようになります。

関連記事