Amazon RDS for SQL Server の データベースバックアップを毎日取得する。

記事タイトルとURLをコピーする

こんにちは。 技術課の山本です。
秋も深まり、もう初冬の様相ですね。
11月10日に富士山5合目(富士宮)までの車道が冬季通行止めになると聞いて、出勤前にサラッと富士山に登ってきました。 マイナス6度の割と寒い中で見る朝焼け、そして雲海に感動し、冬を感じました。
久々に履く冬用の登山靴が重く、想定よりも時間がかかったものの、登頂後には無事に出勤できました。

Microsoft SQL Server の データベースバックアップ

一般的な Microsoft SQL Server においては、 拡張子 .bak のファイルを使用して、データベースをバックアップしたり、リストアすることができます。
仮想マシンのスナップショット機能と異なり、データベースのみのバックアップ・リストアが可能なため、仮想マシンのスナップショットと比較して迅速なバックアップとリストアが可能です。
データベースの障害復旧時に重宝します。

learn.microsoft.com

以下のツールを使って、ハードディスクやテープ、Azure Blob Storageに データベースのバックアップ(.bak ファイル)を保存できます。

  • Transact-SQL
  • SQL Server Management Studio
  • Powershell

Amazon RDS for SQL Server の データベースバックアップ

AWS サービスの Amazon RDS for SQL Server をご利用の際にも .bak ファイルを使用した データベースのバックアップ・リストアを実施可能です。
バックアップ(.bak ファイル)を S3 バケットに保管可能です。
S3 バケットに置いたファイルは、ユーザーが意識しなくても複数のデータセンター群にコピーして保管されるため、可用性が高くて安心です。

  • Amazon RDS for SQL Server はデータベースバックアップ作成用にストアドプロシージャ(msdb.dbo.rds_backup_database)を用意しており、バックアップを S3 バケットに取得可能です。
  • バックアップの状況をストアドプロシージャ(msdb.dbo.rds_task_status)から確認可能です。
  • S3 バケット上のバックアップから、ストアドプロシージャ(msdb.dbo.rds_restore_database)を使用して、リストア可能です。

詳細は、下のドキュメントを参考にしてください。

Amazon RDS for SQL Server の データベースバックアップを毎日取得する。

上に紹介したデータベースバックアップ作成用のストアドプロシージャ(msdb.dbo.rds_backup_database)を定期的に実行できないかと考えてみました。
以下のような SQL になります。

exec msdb.dbo.rds_backup_database @source_db_name=<バックアップ対象のデータベース名>, @s3_arn_to_backup_to='<S3バケットのARN>/<.bakファイルのファイル名>', @overwrite_s3_backup_file=1;

補足:「S3バケットのARN」はAWSマネジメントでの該当箇所

Amazon RDS for SQL Server では SQL Server Agent を使用できます。(Express エディションを除く)
SQL Server Agent のジョブ機能を使うと SQL を定期的に実行できます。

docs.aws.amazon.com

SQL Server Management Studio 2018 から、SQL Server Agent のジョブ機能を使っていきます。
(SQL Server Management Studio 2018 からの接続方法等は割愛します。)

「ジョブ」を右クリックし「新しいジョブ」をクリックします。

左ペインの「全般」で、「名前」「説明」を入力します。

左ペインの「ステップ」で、「新規作成」を押下します。

「ステップ名」と「コマンド」を入力します。 コマンドは、データベースバックアップ作成用のストアドプロシージャ(msdb.dbo.rds_backup_database)を入力します。 入力したら「OK」を押下します。

exec msdb.dbo.rds_backup_database @source_db_name=<バックアップ対象のデータベース名>, @s3_arn_to_backup_to='<S3バケットのARN>/<.bakファイルのファイル名>', @overwrite_s3_backup_file=1;

「OK」を押した後の画面です。

左ペインの「スケジュール」を押下し、「新規作成」を押下します。

毎日17時に実行するように設定します。
画像は誤って 18 時になっています。気にしないでください。
様々な設定ができます。

「OK」を押します。

補足: 結果のメール通知をする場合は左ペインの「通知」から設定可能です。
ただし、事前にメール通知先をアドレス帳に登録することが必要です。
方法については、以下を参照ください。

Amazon RDS for SQL Server でのデータベースメールの使用 - Amazon Relational Database Service

時間になると、S3 バケットにデータベースバックアップを取得できていました。

まとめ

データベースバックアップを 毎日 S3 に取得する仕組みを ノーコード (ストアドプロシージャの実行SQL以外) で簡単に実装できました。

山本 哲也 (記事一覧)

カスタマーサクセス部のエンジニア(一応)

好きなサービス:ECS、ALB

趣味:トレラン、登山(たまに)