おひとり

できる限りひとりで楽しむための情報やプログラミング情報など。

RDSのSQL ServerのDBをS3にバックアップする

f:id:hitoridehitode:20211201210039p:plain
RDSのSQL ServerのDBをS3にバックアップする

RDS上のSQL ServerのインスタンスのデータベースをS3バケットにバックアップする方法です。
AWSはマネジメントコンソールで操作します。
なお、SQL Serverの操作はバックアップのためのプロシージャを実行するだけです。ここではAzure Data Studioを使います。

TL;DR

  1. S3バケットを作成
  2. オプションSQLSERVER_BACKUP_RESTPOREが利用可能なオプショングループを作成
  3. オプショングループをRDSインスタンスに適用
  4. バックアップのプロシージャを実行

S3バケットの作成

バックアップを保存するS3バケットをあらかじめ作成してください。
既存のバケットに保存したい場合は作成する必要はありません。

オプショングループの作成

AWSのマネジメントコンソールにログインしたら、RDSのページにアクセスします。

左側のメニューより、「オプショングループ」のページにアクセスし、そのまま「グループを作成」をクリックします。

フォームに必要事項を入力していきます。
その際、エンジンメジャーエンジンバージョンの選択には注意してください。
これらの情報はこれからバックアップしようとしているRDSインスタンスの情報と一致させます。

f:id:hitoridehitode:20211201201324p:plain
オプショングループの設定。エンジンとそのバージョンの指定に注意する。

入力したら「作成」をクリックします。

作成するとオプショングループの一覧画面に戻りますが、このとき先ほど作成したオプショングループをクリックします。

少しスクロールすると、「オプション」のセクションがあるため、「オプションの追加」をクリックして追加画面に進みます。

f:id:hitoridehitode:20211201201652p:plain
「オプションを追加」からオプションの追加ページに進める。

オプションの追加画面にて、バックアップに必要なオプションを追加します。

「オプションの詳細」では SQLSERVER_BACKUP_RESTPOREを選択します。

f:id:hitoridehitode:20211201201848p:plain
「SQLSERVER_BACKUP_RESTPORE」を選択

「IAMロール」では、バックアップを保存するS3バケットにアクセス可能なIAMロールを指定します。
そのようなIAMロールを用意していない場合は、「新しいロールの作成」を選択することで、自動で作成されます。

f:id:hitoridehitode:20211201202123p:plain
適切なIAMロールがなければ、新規作成しよう。

「S3送信先」には、バックアップを保存するS3バケットを指定します。
なお、「IAMロール」で「新しいロールの作成」を選択した場合は、ここで指定したバケットにアクセスできるようなIAMロールが作成されます。

あとは、暗号化やスケジューリングについてそれぞれ設定してください。
最後に「オプションの追加」ボタンをクリックします。

これでオプショングループの作成は完了です。

オプショングループをRDSインスタンスに適用

RDSのサイドメニューから「データベース」のページにアクセスし、バックアップしたいインスタンスのページにアクセスします。
インスタンスの画面の右上にある「変更」をクリックして、インスタンスの設定を変更します。

「追加設定」のセクションのなかにオプショングループの選択があります。
ここで、先ほど作成したオプショングループを選択します。

※選択できない場合は、オプショングループを作成したときに設定した「エンジン」や「メジャーエンジンバージョン」が適用しようとしているインスタンスのそれと一致していない可能性が高いです。その場合、オプショングループを作り直してください。

変更後、保存してください。なお、スケジュールで「すぐに適用」を選択した場合でも、オプショングループの付け替えには数分かかります。
当該インスタンスのオプショングループの状態が「同期中」になるのを待ちます。

f:id:hitoridehitode:20211201202938p:plain
オプショングループの状態は「設定」から確認できます。

バックアップのプロシージャを実行

Azure Data StudioやSSMSなどのアプリからSQL Serverにログインします。
ログインしたら以下のクエリでバックアップのプロシージャを実行します。

exec msdb.dbo.rds_backup_database
    @source_db_name='database_name', 
    @s3_arn_to_backup_to='arn:aws:s3:::bucket_name/file_name.extension'

source_db_nameにはバックアップするデータベース名を指定します。
s3_arn_to_backup_toにはバックアップを保存するS3のARNを指定します。

全てのオプションは以下のドキュメントを参照してください。

Importing and exporting SQL Server databases - Amazon Relational Database Service

実行したら、task_idが返ってくるので、これを覚えておくと良いです。

実行結果はすぐに返ってくるものの、バックアップするタスクそのものは時間がかかります。
現在のタスクの状態を確認するには以下のプロシージャを実行します。

exec msdb.dbo.rds_task_status
    @task_id=ID_number;

task_idには先ほどのmsdb.dbo.rds_backup_databaseを実行したときに返ってきたtask_idを指定します。
詳しい説明は以下にあります。

Importing and exporting SQL Server databases - Amazon Relational Database Service

lifecycleの値が「SUCCESS」になっていれば、バックアップは完了です。送信先のS3バケットにバックアップが保存されていることを確認してください。

なお、このバックアップタスクをキャンセルしたい場合は以下のドキュメントを参照。

Importing and exporting SQL Server databases - Amazon Relational Database Service

参考ページ

docs.aws.amazon.com

qiita.com