RDS上のSQL ServerのインスタンスのデータベースをS3バケットにバックアップする方法です。
AWSはマネジメントコンソールで操作します。
なお、SQL Serverの操作はバックアップのためのプロシージャを実行するだけです。ここではAzure Data Studioを使います。
TL;DR
- S3バケットを作成
- オプション
SQLSERVER_BACKUP_RESTPORE
が利用可能なオプショングループを作成 - オプショングループをRDSインスタンスに適用
- バックアップのプロシージャを実行
S3バケットの作成
バックアップを保存するS3バケットをあらかじめ作成してください。
既存のバケットに保存したい場合は作成する必要はありません。
オプショングループの作成
AWSのマネジメントコンソールにログインしたら、RDSのページにアクセスします。
左側のメニューより、「オプショングループ」のページにアクセスし、そのまま「グループを作成」をクリックします。
フォームに必要事項を入力していきます。
その際、エンジン
とメジャーエンジンバージョン
の選択には注意してください。
これらの情報はこれからバックアップしようとしているRDSインスタンスの情報と一致させます。
入力したら「作成」をクリックします。
作成するとオプショングループの一覧画面に戻りますが、このとき先ほど作成したオプショングループをクリックします。
少しスクロールすると、「オプション」のセクションがあるため、「オプションの追加」をクリックして追加画面に進みます。
オプションの追加画面にて、バックアップに必要なオプションを追加します。
「オプションの詳細」では SQLSERVER_BACKUP_RESTPORE
を選択します。
「IAMロール」では、バックアップを保存するS3バケットにアクセス可能なIAMロールを指定します。
そのようなIAMロールを用意していない場合は、「新しいロールの作成」を選択することで、自動で作成されます。
「S3送信先」には、バックアップを保存するS3バケットを指定します。
なお、「IAMロール」で「新しいロールの作成」を選択した場合は、ここで指定したバケットにアクセスできるようなIAMロールが作成されます。
あとは、暗号化やスケジューリングについてそれぞれ設定してください。
最後に「オプションの追加」ボタンをクリックします。
これでオプショングループの作成は完了です。
オプショングループをRDSインスタンスに適用
RDSのサイドメニューから「データベース」のページにアクセスし、バックアップしたいインスタンスのページにアクセスします。
インスタンスの画面の右上にある「変更」をクリックして、インスタンスの設定を変更します。
「追加設定」のセクションのなかにオプショングループの選択があります。
ここで、先ほど作成したオプショングループを選択します。
※選択できない場合は、オプショングループを作成したときに設定した「エンジン」や「メジャーエンジンバージョン」が適用しようとしているインスタンスのそれと一致していない可能性が高いです。その場合、オプショングループを作り直してください。
変更後、保存してください。なお、スケジュールで「すぐに適用」を選択した場合でも、オプショングループの付け替えには数分かかります。
当該インスタンスのオプショングループの状態が「同期中」になるのを待ちます。
バックアップのプロシージャを実行
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