【AWS ECS】コンテナログをS3に直接出力手順
■ 目次
■ 目次1. はじめに2. 【IAM ロール】編3. 【ECS タスク定義】編3.1. 【ログルーターの統合】 にて3.2. 【コンテナの定義】 にて3.3. 【LogS3-lxc】 コンテナ側3.4. 【log_router】 コンテナ側3.5. サンプル json4. 実際の画面5. 参考記事
1. はじめに
この記事を投稿する10日前にいつも通り朝活として、YouTube のサバワチャンネルで動画を見ていたら、『コンテナログを S3 に直接出力!』というパワーワードを知ってしまって・・・これはやらなきゃ!!!っという事で実際にやって書きました。
CloudWatch のログに書き込みを行うと0.76USD/GB掛かって辛いですよね・・・
2. 【IAM ロール】編
- IAMロールのコンソールにアクセスして【ecsTaskExecutionRole】を検索して選択
- 別のタスクロールの場合は、そちらを指定
- 【ecsTaskExecutionRole】のロールにて、【インラインポリシー】を選択して下記コードを追加
内容としては、「S3に書き込み」です。
実際に追加された際の画面
3. 【ECS タスク定義】編
- ECS のコンソールページにアクセス
- 【タスク定義】を選択
- 既存のタスク定義を選択
- 【新しいリビジョンの作成】を選択
3.1. 【ログルーターの統合】 にて
ログルーターの統合にて【FireLens の統合を有効にする】にチェックを入れて、編集せずに【適用】を選択
3.2. 【コンテナの定義】 にて
項目 | 値 |
---|---|
LogS3-lxc | Myサービスコンテナ側 |
log_router | AWS for Fluent Bit コンテナ側 |
3.3. 【LogS3-lxc】 コンテナ側
『ストレージとログ』の所にて下記の用に変更を実施
- ログドライバー :【awslogs】から【awsfirelens】切り替え
- ログオプション : 下記テーブルを参考
- region : ECS サービスを動かすリージョンを指定
- bucket : 自分で作成したバケット名を記述
- total_file_size : 1M だと動かなった模様
KEY | VALUE |
---|---|
Name | s3 |
region | ap-northeast-1 |
bucket | tabiya-logs |
total_file_size | 250M |
3.4. 【log_router】 コンテナ側
『ストレージとログ』の所にて下記の用に変更を実施
- ログドライバー :【awsfirelens】から【awslogs】切り替え
- ログオプション : 下記テーブルを参考
KEY | VALUE |
---|---|
awslogs-group | firelens-container |
awslogs-region | ap-northeast-1 |
awslogs-stream-prefix | firelens |
awslogs-create-group | true |
3.5. サンプル json
- 上の群 : log_router コンテナ
- 下の群 : ogS3-lxc コンテナ
4. 実際の画面
S3の該当バケットにアクセスすると下記の階層で表示されます。
基本的には10分に一度バケットに書き込まれる