#RDS for Microsoft SQL Serverに.bakをリストアできない
社内DBをRDSへ移行しようとした際に、.bakをそのままリストアする方法として下記を参考にさせて頂きました。
■RDS for SQL Server へのインポート
https://qiita.com/nis_nagaid_1984/items/99870c7a6e9ea5b777a4
■RDS for Microsoft SQL Serverのバックアップ・リストアが簡単にできるようになりました!
https://dev.classmethod.jp/cloud/aws/import-export-mssql-by-s3-bak-file/
■Setting Up for Native Backup and Restore
https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/SQLServer.Procedural.Importing.html#SQLServer.Procedural.Importing.Native.Enabling
#エラーになるけどどうしたらいいの?
上記で紹介した記事で、下記の手順が紹介されていました。
実際の手順は前述の記事で紹介されているので省略しますが、簡単な流れとしては下記の通りです。
・S3にバケット作成してそこにファイルをアップしておく
・RDSインスタンスにオプショングループ(SQLSERVER_BACKUP_RESTORE)の追加
・SSMSでRDSのストアド[rds_restore_database]を実行する
私の場合、ストアドを実行してもエラーで終了してしまい、対処方法がわかりませんでした。
ステータス確認ストアド[rds_task_status]に表示されるエラーメッセージから、オプショングループ(SQLSERVER_BACKUP_RESTORE)で追加したIAMロールの問題のように思えましたので、下記の確認を行いました。
すると、ポリシーに記載されているS3のバケットが.bakの保存先とは別のバケットだけが記載されていました。
ここに.bakの保存先バケットを追加してみました。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:ListBucket",
"s3:GetBucketLocation"
],
"Resource": [
"arn:aws:s3:::□□□□□□□□□", ← カンマも追加
"arn:aws:s3:::□□□□□□□□" ← .bakの保存先追加
]
},
{
"Effect": "Allow",
"Action": [
"s3:GetObjectMetaData",
"s3:GetObject",
"s3:PutObject",
"s3:ListMultipartUploadParts",
"s3:AbortMultipartUpload"
],
"Resource": [
"arn:aws:s3:::□□□□□□□□□/□□□□□/*", ← カンマも追加
"arn:aws:s3:::□□□□□□□□/□□□/*" ← .bakの保存先追加
]
}
]
}
##結果
再度ストアド[rds_restore_database]を実行してステータスを確認すると、見事成功となっておりました。
DBインスタンスにオプショングループを追加した際にどのバケットが初期値として指定されるのか不明ですが、IAMロールからであれば明示的にバケットを指定できました。
どなたかのお役に立つことがあれば幸いです。