🏸

「AWS RDSをダンプしてSQLファイルをS3保存」をCDK7行で実現する

2023/07/18に公開

はじめに

皆さんはリレーショナルデータベース(AWSですとRDS, Aurora)のバックアップ管理をどのように行っていますか?
RDSの標準機能としてスナップショットを使うのが無難ですが、正直ダンプしてSQLファイルで管理できると楽だなあ..って筆者はよく思っています。
ただ、その際には踏み台EC2にアクセスして手動でダンプしたり、定期的なダンプのためのスクリプトを書いたり、、やや手間です。

今回は、そんな手間を省きつつも柔軟性を持たせるために作られた、AWS CDK向けのライブラリ、「cdk-rds-dump」をご紹介します。

cdk-rds-dumpとは?

「cdk-rds-dump」は、AWS CDK向けのConstructsライブラリで、以下の要素を一気に構築してくれます。

  • RDSをdumpするlambda
      - secrets managerからの接続情報取得も可能
  • dumpしたSQLファイルを保存するS3バケット
  • lambdaを定期実行するEvent Bridge
    これにより、RDSからのダンプファイルを自動的に生成し、保存する作業を簡単に行うことができます。

使用方法

npmからインストールできます:

npm i cdk-rds-dump

CDK実装例はこちら

import { RdsDump } from 'cdk-rds-dump';

declare const rdsCluster: rds.DatabaseCluster;
new RdsDump(this, 'MyRdsDump', {
  dbEngine: "mysql",
  rdsCluster: rdsCluster,
  schedule: events.Schedule.cron({ minute: "0", hour: "0" }),
  databaseName: 'myDatabase',
  createSecretsManagerVPCEndpoint: false,
});

ポイント

  1. ちょっと扱いづらいスナップショットよりも、直感的なSQLファイルでバックアップを管理できます!
  2. RDSからダンプを取得し、S3に保存する一連の環境を一発で構築できるので便利!
  3. secrets manager上の接続情報取得に対応しているため、Auroraが自動生成したSecretのIDを渡すだけで動きます!もちろん、ユーザ名&パスワードを直接渡しても動作します(が、非推奨です)
  4. 15分以上かかるような大規模なDBのdumpはできません...
  5. まだmysqlだけしか対応していません

まとめ

AWS RDSを使ったDB運用時のプチニーズを「cdk-rds-dump」は満たしてくれるはずです。
というか、私のプチニーズを満たすために作りました。笑
はじめてCDK Constructをライブラリとして公開してみました。まだまだとりあえず動く程度の段階なので、issueやPRもお待ちしております。

Discussion