TL;DR
ecs-cli
コマンドでDocker Compose YamlからTaskDefinitionを生成してデプロイが可能です。
ですが、これを使ってFireLensを具体的にどう記述すればよいのか良い記事を見つけられなかったのでメモしておきます。
公式のREADMEで完全に理解できなかった私のような人向けです。
ついでにDatadogの設定方法も記載しておきます。
記述方法
さくっと例を記載します。
docker-compose.yaml
version: '3'
services:
app:
image: nginx
ports:
- "80:80"
# 以下がログ関連設定
## log driverにfirelensを指定
logging:
driver: awsfirelens
options:
Name: datadog
apiKey: "hogehoge"
dd_service: "app-service"
dd_source: "nginx"
dd_tags: "project:example"
provider: "ecs"
# FireLens本体
log_router:
image: 906394416424.dkr.ecr.ap-northeast-1.amazonaws.com/aws-for-fluent-bit:latest
# FireLens自体のログはCloudWatchLogsへ出力
logging:
driver: awslogs
options:
awslogs-group: firelens-container
awslogs-region: ap-northeast-1
awslogs-stream-prefix: firelens
awslogs-create-group: "true"
FireLensのイメージ取得レジストリはリージョンによって異なるので注意してください。
ecs_params.yaml
version: 1
task_definition:
:
省略
:
services:
app:
essential: true
# FireLens設定
log_router:
essential: true
firelens_configuration:
type: fluentbit
options:
enable-ecs-log-metadata: "true"
run_params:
:
省略
基本はこんな感じで動きます。
fluentbitの設定をS3から直接流し込めたりもします。その場合は ecs_params.yaml
を下記のようにしてください。
ecs_params.yaml
version: 1
task_definition:
:
省略
:
services:
app:
essential: true
# FireLens設定
log_router:
essential: true
firelens_configuration:
type: fluentbit
options:
enable-ecs-log-metadata: "true"
# fluentbit設定ファイルをS3に配置して、そのarnを設定
config-file-type: s3
config-file-value: arn:aws:s3:::firelens/extra.conf
run_params:
:
省略
また、ecs-cliのバージョンが 1.15.1
の時に下記エラーが出ました。
When awsfirelens log driver is specified in log configuration, a firelens configuration object must be configured in one of the containers.
その場合はecs-cliのバージョンを上げてください。
少なくとも 1.17.0
では発生しなくなってます。
それでは良いECSライフを。