LoginSignup
9
5

More than 3 years have passed since last update.

AWS FireLens を試した

Last updated at Posted at 2019-12-12

概要

コンテナのログを外部にルーティングする機能
TaskDefinition のパラメータで作成する

カスタムログルーティング - AWS

必要な要素

  • ログ収集:FireLens コンテナ
  • ログ対象:LogDriver に awsfirelens を指定したコンテナ
  • ログ送信先:Kinesis Data Firehose や CloudWatch Logs 等

FireLens コンテナの動作

ログ転送ツールとして Fluentd か Fluent Bit を使用

Role

TaskRole と ExecutionRole が必要

  • TaskRole
    • タスクで定義したコンテナからのアクセス権限
      → コンテナ内のアプリケーションが使用する
  • ExecutionRole
    • タスクの展開実行のためのアクセス権限
      → ログ送信先の CloudWatch LogGroup を作成する

作成

ECS/Fargate を利用

環境

Windows 10

AWS CLI 1.16.191
AWS CLI のインストール - AWS

構成図

Nginx のログは FireLens と Firehose を通して S3 へ
FireLens のログは CloudWatch Logs へ送信する
FireLens.png

Kinesis Data Firehose

下記を参考にログの送信先の配信ストリームを作成
Amazon Kinesis Data Firehose 配信ストリームの作成 - AWS

Role

TaskRole

Kinesis Firehose への書き込み権限
Amazon Kinesis Firehose のアクション、リソース、および条件キー - AWS

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "firehose:PutRecord",
                "firehose:PutRecordBatch"
            ],
            "Resource": "*"
        }
    ]
}

ExecutionRole

公式の AmazonECSTaskExecutionRolePolicy に CreateLogGroup を追記
Amazon ECS タスク実行 IAM ロール - AWS

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ecr:GetAuthorizationToken",
                "ecr:BatchCheckLayerAvailability",
                "ecr:GetDownloadUrlForLayer",
                "ecr:BatchGetImage",
                "logs:CreateLogGroup",
                "logs:CreateLogStream",
                "logs:PutLogEvents"
            ],
            "Resource": "*"
        }
    ]
}

CFn で作成

コンテナ定義と注意点だけ記述

ContainerDefinitions:
  - Name: nginx
    Image: 'nginx:latest'
    Essential: true
    PortMappings:
      - Protocol: tcp
        ContainerPort: 80
    LogConfiguration:
      LogDriver: awsfirelens
      Option:
        Name: firehose
        region: ap-northeast-1
        delivery_stream: firelens-stream
  - Name: firelens
    Image: '906394416424.dkr.ecr.ap-northeast-1.amazonaws.com/aws-for-fluent-bit:latest'
    Essential: true
    FirelensConfiguration:
      Type: fluentbit
    LogConfiguration:
      LogDraiver: awslogs
      Option:
        awslogs-create-group: true
        awslogs-region: ap-northeast-1
        awslogs-group: /ecs/firelens-container
        awslogs-stream-prefix: firelens

Nginx コンテナ

  • LogDriver に awsfirelens を指定
    • Option で東京リージョンの firehose の firelens-stream に送信する設定
      → delivery_stream キーは yaml であっても 'snake_case' で記述

FireLens コンテナ

  • FirelensConfiguration キーを追加
    • Type キーの方に fluentbit を指定
      → 階層に注意
  • LogDriver に awslogs を指定
    • Option で東京リージョンの /ecs/firelens-container の firelens ストリームを作成し送信
      → 用意していなければ LogGroup は明示的に作る必要がある

確認

S3
S3-Logs.png
CloudWatch Logs
CloudWatch-Logs.png

総括

新しめのサービスなので試すだけでも割と楽しかった
delivery_stream キーと LogGroup 作成忘れでハマったのでもっと CFn 書き慣れていくべきだなという気持ち

9
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
5