はじめに
最近、オンプレ環境のSQL ServerをRDSインスタンスにリストアする機会がありました。
その手順のメモです。
環境
- オンプレ(移行前)
- DB:SQL Server Standard Edition 15.x
- Windows:Windows Server 2019
- SSMS(SQL Server Microsoft Studio)
- aws cli
- AWS(移行先|手順の中で作成)
- RDS:SQL Server Standard Edition 15.x
- EC2:Windows Server 2019
- SSMS(SQL Server Microsoft Studio)
リストア手順
1. オンプレ環境でバックアップを取得
オンプレ環境で、リストアしたいDBのバックアップを取得します。
取得したバックアップファイルは、適当なファイル名で適当な場所に保存しておきます。
2. S3バケットを作成
バックアップを一時的に保管する場所としてS3バケットが必要です。
名前は何でもいいので適当に作成します。
3. 取得したバックアップをS3に転送
取得したバックアップファイルを、S3バケットに転送します。
S3への転送方法はいくつかありますが、今回はシンプルにaws cliを利用してインターネット経由で転送します。
1.対象S3にPutObjectできる権限を持つIAM Userを作成
2.IAM Userからアクセスキーを取得
3.オンプレWIndowsサーバーでconfig/credentialsを設定
[profile default]
region = ap-northeast-1
output = json
[default]
aws_access_key_id = ?????????
aws_secret_access_key = ????????
4.aws cliを実行して転送
aws s3 mv "<先ほど作成したバックアップファイルのpath>" s3://<s3-bucket-name>
4. リストア用のIAM Roleを作成
SQL Serverのリストアを行うためには、専用のRDSオプション、IAM Role、そしてS3バケットが必要です。
以下のPolicyを持つIAM Roleを作成します。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:ListBucket",
"s3:GetBucketLocation"
],
"Resource": "arn:aws:s3:::<s3-buckett-name>"
},
{
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:PutObject",
"s3:ListMultipartUploadParts",
"s3:AbortMultipartUpload"
],
"Resource": "arn:aws:s3:::<s3-bucket-name>/*"
}
]
}
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "",
"Effect": "Allow",
"Principal": {
"Service": "rds.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
5. オプショングループを作成&オプションの追加
sqlserver-se(v 15.00)
のオプショングループを作成し、そこにリストア用のオプションを追加します。
6. RDSインスタンスを作成
リストア先となるRDSインスタンスを作成します。
最低限以下の設定を守り、あとは適当な設定にします。
- エンジン:SQL Server Standard Edittion
- バージョン:15.00.4073.23.v1
- オプショングループ:前手順で作成したオプショングループ
注意:バックアップファイルのサイズに合わせてストレージのサイズUPが必要
7. Windows ServerのAMIからEC2を作成し、そこにSSMSをインストール
RDSを操作するためには、EC2などのサーバーから接続する必要があります。
セキュリティグループの設定などは、各自でいい感じに設定してください。
EC2からSSMSを利用してRDSに接続
作成したEC2に接続し、SSMSを起動します。
RDSエンドポイント、RDS作成時に決めたマスタユーザー名/パスワードを入力して接続します。
9. リストア用のストアドプロシージャを実行
接続できたら「New Query」でエディタを開き、以下のストアドプロシージャを書いて実行します。
実行タスクが成功すれば、程なくしてDBが作成されます。
exec msdb.dbo.rds_restore_database
@restore_db_name='<作成したいdb名>',
@s3_arn_to_restore_from='arn:aws:s3:::<s3-bucket-name>/<backup-file-name>'
最後に
SQL ServerをRDSにリストアする基本的な流れを残しました。
もっと詳しく知りたい方はAWS公式ページをご覧ください。