こんにちはSREチームの森原です。テックブログ投稿は今回が初めてですが、今後は高頻度で投稿する予定です!
今回は、タイトルそのままですが「KPI集計のために秒単位の正確性でAuroraのスナップショットを作成する仕組み」を作ったのでご紹介します。
背景
ニーリーでは毎月特定の日時のDBのスナップショットをKPIの集計に使用しています。以前はAWS Backupを用いて毎月のスナップショットを作成していましたが、こんな課題がありました。
- 作成時刻に最大1時間のズレが起きる
- AWS Backupのバックアップウィンドウによるもの
- 手動のオペレーションがありセキュリティ的によろしくない
- 自動取得している日時以外にも取りたいことがあるが、手作業でスナップショットを作成する必要がある
この課題を解決するために、秒単位で時間指定したスナップショットを作成できる&手動トリガーもできる仕組みを構築することにしました。
全体構成
以下の構成図の通り、作成したスナップショットをParquetのフォーマットでS3に出力し、その後BigQueryに取り込んでいます。定期実行はAmazon EventBridge Scheduler、急な依頼等でスナップショットが必要な場合はスクリプト実行となっています。作業工数とリターンの観点から下の構成図のS3へのエクスポートまでを自動化することにしました。
Step Functions
Park DirectではデータベースにAmazon Auroraを採用しています。Auroraにはポイントインタイムリカバリ(PITR)という機能が存在します。この機能を使えば復元期間内であれば1秒単位で日時を指定しDBを復元することができます。まずPITRでDBを復元し、復元したDBのスナップショットをとることで秒単位の正確性でスナップショットを作成することができます。またKPI作成の都合上スナップショットをParquetに変換しS3に送信する必要があり、それらをStep Functionsでまとめて実現しました。
セキュリティ
KPI作成にはもちろん本番データを使うので、データの取り扱いには注意が必要です。 手作業でのスナップショット作成をなくすことでヒューマンエラーによるインシデントの防止に繋がります。またその他にもセキュリティ周りで幾つかの設定をしました。
- Step Functionsを実行できる人の限定
- 特定のIAMロールのみに実行権を与え、特定の開発者のみ実行可能にする
- S3周りの設定
- S3バケットポリシーで特定のIAMロール/ユーザーのみにアクセスを許可
- ライフサイクルルールで一定期間経つとオブジェクトが自動で削除される設定(本番データのコピーを不用意に増やしたくないため)
さいごに
今回はAuroraのポイントインタイムリカバリとStep Functionsを利用してスナップショット作成を自動化した事例を紹介しました。小さな仕組みではありますがデータ分析の際のセキュリティ及び生産性向上につながりました。 同じような課題を抱えている方の参考になれば幸いです!