CloudWatch LogsのログをBigQueryに継続的に転送する体制を構築

CloudWatch LogsのログをBigQueryに継続的に転送する体制を構築

概要

AWS Lambda上で稼働するWebアプリケーションのログをGoogle Cloud BigQueryで分析するために、CloudWatch Logsから継続的に転送する体制を構築しました。

構成

添付画像タップして拡大表示

技術スタック

  • AWS CDK
    • AWSリソースはAWS CDK(TypeScript)を利用してIaC管理しました。
    • 開発者ごとに独立した環境を起動できるようにCDKレイヤーを実装しました。
  • GitHub Actions
    • CI/CDパイプラインの構築にGitHub Actionsを利用しました。
    • プルリクエスト作成時にESLint, Prettier, tscによる静的解析を実行するようにしました。
    • プルリクエスト作成時にJestによるユニットテストを実行するようにしました。
  • Jest
    • Lambda関数にデプロイするTypeScriptコードのユニットテスト実行体制を構築しました。
  • CloudWatch Logs サブスクリプションフィルタ
    • CloudWatch LogsのログをKinesis Data Streamsに流すために利用しました。
  • Kinesis Data Streams
    • CloudWatch Logsに流れてくるログを一時格納し、一定件数をまとめてLambdaで処理していくために利用しました。
  • Google Cloud BigQuery
    • GA4のBigQueryエクスポートを利用しており、開発者が慣れていたため、アプリケーションのログの分析もBigQueryで行う構成としました。

所感

BigQueryはサーバーレスであり、リソースの確保にコストがかからないので利用しやすいです。一方で、AWSからBigQueryにデータを入れる場合、AWSから外部への通信部分で課金されるので、大量のデータを転送する場合はコストも考慮する必要があります。

Amazon CloudWatch
Amazon Kinesis
Kinesis Data Streams
AWS Lambda
CloudWatch Logs