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

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

Amazon ECS 対応 FireLens では、タスク定義パラメータを使用して AWS のサービスや AWS パートナーネットワーク (APN ) の宛先にログをルーティングし、ログを保存および分析できます。FireLens は Fluentd および Fluent Bitで動作します。提供されている AWS for Fluent Bit イメージを使用することも、独自の Fluentd または Fluent Bit イメージを使用することもできます。

FireLens 設定を使用した Amazon ECS タスク定義の作成は、AWS SDK、AWS CLI、および AWS Management Console でサポートされています。

考慮事項

Amazon ECS 対応 FireLens を使用する際は、以下の点を考慮してください。

  • FireLens for Amazon ECS は、AWS Fargate と Amazon EC2 の両方でホストされるタスクでサポートされています。

  • Amazon ECS の FireLensは、AWS CloudFormation テンプレートでサポートされています。詳細については、AWS CloudFormation ユーザーガイド の「AWS:: ECS::TaskDefinition FirelensConfiguration」を参照してください。

  • FireLens はポート 24224 でリッスンするため、タスクの外部で FireLens ログルーターに確実に到達できないようにするには、タスクが使用するセキュリティグループのポート 24224 で入力トラフィックを許可しないでください。awsvpc ネットワークモードを使用するタスクの場合、これはタスクに関連付けられたセキュリティグループです。host ネットワークモードを使用するタスクの場合、これはタスクをホストする Amazon EC2 インスタンスに関連付けられたセキュリティグループです。bridge ネットワークモードを使用するタスクでは、ポート 24224 を使用するポートマッピングを作成しないでください。

  • bridge ネットワークモードを使用するタスクの場合、FireLens 設定のコンテナは、それに依存するアプリケーションコンテナが開始する前に開始する必要があります。コンテナの開始順序を制御するには、タスク定義の依存関係条件を使用します。詳細については、「コンテナの依存関係」を参照してください。

    注記

    FireLens 設定のコンテナ定義で依存関係条件パラメータを使用する場合は、各コンテナに START または HEALTHY 条件要件があることを確認してください。

  • Amazon ECS 最適化された Bottlerocket AMI は FireLens をサポートしていません。

必要な IAM アクセス許可

この機能を使用するには、タスク用の IAM ロールを作成し、AWS のサービスを使用するために必要なアクセス許可をタスクに付与する必要があります。たとえば、コンテナから Kinesis Data Firehose にログをルーティングする場合、タスクには firehose:PutRecordBatch API を呼び出すためのアクセス許可が必要です。詳細については、IAM ユーザーガイドの「IAM ID アクセス許可の追加と削除」を参照してください。

次の IAM ポリシー例では、ログを Kinesis Data Firehose にルーティングするために必要なアクセス許可を追加します。

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

以下の場合は、タスクに Amazon ECS タスク実行ロールが必要になることもあります。詳細については、「Amazon ECS タスク実行 IAM ロール」を参照してください。

  • タスクが Fargate でホストされていて、Amazon ECR からコンテナイメージをプルしたり、ログ設定で AWS Secrets Manager の機密データを参照したりする場合は、タスク実行 IAM ロールを含める必要があります。

  • Amazon S3 でホストされるカスタム設定ファイルを指定する場合、タスク実行 IAM ロールには、設定ファイル用の s3:GetObject アクセス許可と、ファイルが格納されている Amazon S3 バケットに対する s3:GetBucketLocation アクセス許可を含める必要があります。詳細については、Amazon Simple Storage Service コンソールユーザーガイドの「ポリシーでのアクセス許可の指定」を参照してください。

    次の IAM ポリシー例では、Amazon S3 からファイルを取得するために必要なアクセス許可を追加します。Amazon S3 バケットの名前と設定ファイル名を指定します。

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:GetObject" ], "Resource": [ "arn:aws:s3:::examplebucket/folder_name/config_file_name" ] }, { "Effect": "Allow", "Action": [ "s3:GetBucketLocation" ], "Resource": [ "arn:aws:s3:::examplebucket" ] } ] }

TCP を介した Fluent ロガーライブラリまたは Log4j の使用

awsfirelens ログドライバーがタスク定義で指定されている場合、Amazon ECS コンテナエージェントは次の環境変数をコンテナに挿入します。

FLUENT_HOST

FireLens コンテナに割り当てられた IP アドレス。

FLUENT_PORT

Fluent Forward プロトコルがリッスンしているポート。

FLUENT_HOST 環境変数および FLUENT_PORT 環境変数を使用すると、stdout を介することなく、コードからログルーターに直接ログを記録できます。詳細については、GitHub の「flluent-logger-golang」 を参照してください。

トピック