カスタムログルーティング - Amazon Elastic Container Service

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

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

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

Considerations

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」 を参照してください。

トピック