【要約】【AWS】非機能要件「ログの保持とアーカイブ」でCloudWatch LogsのS3エクスポートを担当したら、最も簡単だと思っていた方法が意外と面倒だった話 [Qiita_Trend] | Summary by TechDistill
> Source: Qiita_Trend
Execute Primary Source
// Problem
開発者がCloudWatch Logsの保持期間を短縮する際、既存ログの消失リスクとAPIの制約に直面した。単なる設定変更では、以下の問題が発生する可能性がある。
- ・保持期間の設定により、古いログが即座に削除対象となるリスク。
- ・CreateExportTaskがアカウント・リージョン単位で同時実行1つに制限される制約。
- ・Lambdaの15分制限と、非同期タスクの完了待ち時間の乖離。
- ・S3ライフサイクルにおいて、128KB未満のオブジェクトが移行されない仕様。
// Approach
開発者は、チームの運用経験に基づき、LambdaとSQS FIFOを用いた非同期バッチ処理構成を採用した。以下のステップで実装を行っている。
- ・EventBridge Schedulerで毎日、対象ロググループを抽出しSQSへ投入する。
- ・SQS FIFOにより、ロググループ単位での直列実行とリトライを制御する。
- ・Lambdaでタスクの状態を確認し、べき等性を担保した実装を行う。
- ・Athenaのテーブル定義と保存済みクエリにより、検索基盤を整備する。
// Result
この設計により、ログの安全なアーカイブと、障害調査を容易にする検索環境を両立させた。具体的な成果は以下の通りである。
- ・退避完了後に保持期間を変更することで、過去ログの消失を完全に防いだ。
- ・SQSのDLQとCloudWatch Alarmにより、長時間失敗の検知を自動化した。
- ・Athenaによるパーティション設計により、大量のログに対する低コストな検索を実現した。
Senior Engineer Insight
> 実務上の落とし穴を網羅した、極めて実践的な内容だ。特に「作業順序」や「S3の最小サイズ制限」への言及は、設計の精度を高める上で不可欠な視点である。ただし、状態管理をLambdaで自前実装する手法は、コードの複雑化を招く。大規模なシステムであれば、Step Functionsを用いて状態遷移を宣言的に管理すべきだ。開発体験と運用コストのトレードオフを考慮した選択が求められる。