Fargate環境でembulkを使ってS3からBigQueryへのALBとCloudFrontのログ転送

住まい暮らしメディアLIMIAで開発を担当している樋口(@mahiguch1)です。
LIMIAではBigQueryを使ってデータ分析を行なっています。
前回MySQLからBigQueryへのデータ転送に関する記事を書いたところ、S3にあるALBやCloudFrontのログの転送について質問を受けたため、それについて共有します。

ALBログ転送設定

ALBログのSchemaは決まっているため、以下のようにしています。

files/etc/embulk/schema/alb_access_log.json

ALBのアクセスログは、S3に格納されています。
S3にあるので、embulk-input-s3が使えそうです。
EC2で動かしていたときはそれで問題なかったのですが、ECS/Fargateで動かすと権限不足とのエラーが出て出て上手く行きませんでした。
そこで、awscliを使ってファイルを足元に転送して、それをBigQueryに格納する設定を行いました。

files/etc/embulk/logs/production/access-log-elb-limia-jp-alb.yml.liquid

CloudFrontログ転送設定

ALB同様CloudFrontのSchemaは固定的なので、以下のようにしました。

files/etc/embulk/schema/cloudfront_access_log.json

転送設定もALB同様、足元のファイルを転送するものです。

files/etc/embulk/logs/production/access-log-cloudfront-d-limia-jp.yml.liquid

スクリプト

前回のスクリプトにログ転送処理を追加しました。
具体的には、引数に logs が渡されたら、 LIMIA_ENV.sh を実行します。

files/entrypoint.sh

entrypointから呼び出されるshell scriptは、以下のようになります。
awscliを使って、前日分のログを足元に転送し、embulkを実行しています。

files/etc/embulk/logs/production.sh

まとめ

ALBやCloudFrontのログをBigQueryに転送する方法を共有しました。
同じような問題に遭遇した方の役に立てば幸いです。