🙆‍♂️

CloudFrontのアクセスログのパーティショニングを目指したLambdaからStepFunctionsへの移行

2024/12/26に公開

CloudFrontのアクセスログをAthenaで効率よくクエリするために、ログファイルを日付別のプレフィックスに移動する方法を考えました。初めは、この作業を自動化するLambda関数を作成したのですが、より良い方法を考えて、StepFunctionsに移行しました。

初めはLambdaで実装

初めには、毎日作成されるCloudFrontのアクセスログを検知し、ファイルをyyyy/mm/ddの形式に移動するLambdaを実装しました。これにより、Athenaのクエリでパーティショニンを最適化できるようにしました。

ただし、Lambdaはランタイムバージョンに依存するため、バージョンアップが必要になることを懸念していました。

StepFunctionsへの移行

この実装は、Lambdaに限らずStepFunctionsでも実現可能なため、完全にStepFunctionsに移行することにしました。

StepFunctionsを使用することで、ランタイムのバージョンアップに依存しない自動化が実現できます。これにより、未来のAWSサービスの進化に対してもより活用的に対御できるソリューションになりました。

ステートマシーンの図


PassステートでStepFunctionsの組み込み関数を駆使し、API実行と併用して実現。

実装したパッケージ(公開)

View on Construct Hub

ただし…日々の進化に注意

StepFunctionsの実装を行っている間に、AWSより「Amazon CloudFront がアクセスログの追加のログ形式と宛先のサポートを開始」というアナウンスがあり、思わずしょっぱい感を抱きました。

これは、日々AWSサービスの進化が迅速である事実を再認識させられる事例でした。こういった新規機能や便利な機能を見落とさないためにも、日々のアンテナの実質の見直しが必要です。

つまり:実装の対策とオプション

ドキュメントを読み込んだところ、現状ではCloudFormationには未対応のため、CDKのL1、L2では実装できないことが分かりました。このため、AWSのコンソールかCloudWatch APIを実行して実装する必要があります。

Configure standard logging (v2)

ただ、実装を待つよりも、すぐに使用を始める方が簡便です。また、CloudWatch APIを実行するカスタムリソースを作成する手もありますが、その検討は以降のタスクとして残します。

Discussion