AWS Firelensにカスタム設定を適応する方法

AWS FirelensはECSのタスク定義でログルーターの統合を有効にするだけで簡単に
FluentBitまたはFluentdのサイドカーコンテナをタスクに追加してログの操作を移譲できます。

バックエンドはFluentBitかFluentdが選択可能ですが今回はFluentBitを選択します。
Firelensで使用されるFluentBitのDockerイメージはaws-for-fluent-bitという名称でAmazon ECRやDocerHubで提供されています。

今回は、Firelensで動作するFluentBitコンテナに独自のカスタム設定を追加する方法をまとめます。

カスタム設定を書く場所

Dockerイメージを取得してコンテナを立ち上げてみると/fluent-bit/etc/fluent-bit.confに設定があります。

[INPUT]
    Name        forward
    Listen      0.0.0.0
    Port        24224

[OUTPUT]
    Name cloudwatch
    Match   **
    region us-east-1
    log_group_name fluent-bit-cloudwatch
    log_stream_prefix from-fluent-bit-
    auto_create_group true

このファイルはECSタスク起動時に差し替えられログルーターとして機能するようになっています。
その為、Dockerコンテナ上でいくらfluent-bit.confを編集しても最終的には差し替えられてしまうため別のファイルで作成することになります。

Fargateの場合には後述する制約があるのでコンテナから参照できる場所にファイルを配置することになります。
/fluent-bit/etc/xxxx.confのような。

カスタム設定適応方法

ECSタスク定義のコンテナの所でカスタム設定ファイルの定義を追加するとカスタム設定を適応できます。

         "firelensConfiguration":{
            "type":"fluentbit",
            "options":{
               "config-file-type":"s3 | file",
               "config-file-value":"arn:aws:s3:::mybucket/fluent.conf | filepath"
            }
         }
FireLens 設定を使用するタスク定義の作成 - Amazon ECS

Fargateで動作させる場合には制約があります。

AWS Fargate でホストされるタスクは、file 設定ファイルタイプのみをサポートします。

FireLens 設定を使用するタスク定義の作成 - Amazon ECS

EC2であればS3から参照することもできるようですがFargateなのでコンテナ内からファイルを参照できる必要があります。

あとはカスタム設定を記載した設定ファイルを内包したDockerイメージが作成できたらECRにアップロードして、
タスク定義のFirelens統合で指定されているコンテナイメージを自分で作成したものに変更すれば完了です。

Hisense 液晶テレビ 65U7F買ってました

Hisenseの65型液晶テレビ65U7Fを買ってから半年くらい経ちました。
価格はポイント還元など色々含めると実質45000円くらいです。
今の所、文句が特にないし画面がでかくなったのでいい買い物をしました。
ゲームの臨場感上げるために画面はデカければデカいほどいいと考えてはいましたが今は65インチが限界でした。


設置したての写真がこれ。今まで使っていたモニタは32インチなんですが相手にならんすね...

設置して少しの間は画面デカイなと感じていましたが、今となってはもう慣れてしまいました。
慣れって恐ろしいネ

テレビスタンドはこれです。スッキリ置けて満足しています。

Amazon ECS サービスで複数のロードバランサーを関連付ける

ECSにて実際にコンテナが動作するのはECSタスクという単位ですが、長期的にタスクを運用する場合にはECSサービスを利用することが推奨されています。
サービスでは必要とするタスク数を指定することで常に指定した数にタスクの実行数を保つことができる為保守面でかなり便利です。
そして、オプションとしてロードバランサーを設定することもできサービス管理下で動作しているタスクにトラフィックを分散させることが可能です。

現在マネジメントコンソールからでは、1つのターゲットグループしか指定することができませんがCLIやCloudFormation(以下Cfn)を使用すれば1つのサービスに対して複数(最大5つまでできるようです)のターゲットグループを指定することが可能です。

複数のターゲットグループを関連付けることで何が嬉しいかというと、ドキュメントに記載の例の通りで

  • 外部トラフィックと内部トラフィックで経路は分けたいが1つのコンテナで処理したい
  • 同じコンテナで複数ポートで異なるアプリケーションを提供している

などのケースで1つのサービスだけで実現できることです。

参考サイトではCFnを使って設定しているので今回はCLIを用いて設定します。

サービスを作成する際にload-balancersを複数指定するだけです。

aws ecs create-service \
--cluster {cluster_name} \
--service-name {service_name} \
--task-definition {task_defintion_arn} \
--load-balancers '[{"targetGroupArn": "TARGET1_ARN", "containerName": "CONTAINER1", "containerPort": 80}, {"targetGroupArn": "TARGET2_ARN", "containerName": "CONTAINER2", "containerPort": 8080}]' \
--network-configuration '{"awsvpcConfiguration": {"subnets": ["SUBNET1_ID", "SUBNET2_ID", "SUBNET3_ID"], "securityGroups": ["SECURITY_GROUP1_ID"]}}' \
--desired-count {task_count} \
--launch-type FARGATE \
--platform-version LATEST \
--enable-execute-command \
--scheduling-strategy REPLICA