我正在尝试从在不同的非 RDS 服务器上创建的完整备份文件将 SQL Server 数据库还原到 AWS RDS 实例。我正在从同一 VPC 中的 EC2 Windows Server 实例运行该操作(我们希望保留禁用外部连接的 RDS 实例)。该 EC2 上的 SSMS 可以毫无问题地连接到 RDS 实例。EC2 实例有一个应用的 IAM 角色,允许它从 S3 读取,我可以从那里看到带有 .bak 文件的存储桶(例如,使用 CLI 工具)。RDS 实例还具有允许 S3 读取的 IAM 角色。
当我在 SSMS 中打开 RDS 实例上的查询窗口并运行命令时
exec msdb.dbo.rds_restore_database
@restore_db_name = 'database_name'
, @s3_arn_to_restore_from = 'arn:aws:s3:::bucket-name/FULL_database_name_20210316050151.bak'
创建还原任务。但是在两到四分钟后exec msdb.dbo.rds_task_status @db_name = 'database_name'
的任何地方,都显示任务已更新为生命周期值ERROR并带有以下task_info值:
[2021-05-15 16:27:41.183] Aborted the task because of a task failure or a concurrent RESTORE_DB request. [2021-05-15 16:27:41.213] Task has been aborted [2021-05-15 16:27:41.213] A WebException with status ConnectFailure was thrown.
一个小时的谷歌搜索抛出了一个状态为 ConnectFailure 的 WebException 并没有发现与我的案例相关的任何内容,AWS 文档一直将我指向我已经创建的 IAM 角色。我错过了这个难题的哪一部分?
全面披露:我不是经验丰富的系统管理员;我在一家没有专门管理员的小商店工作,第一次将网站迁移到 AWS。所以请不要以为我已经尝试过所有简单的事情,因为我完全有可能不知道所有简单的事情是什么。
编辑:应用的选项组确实包括 SQLSERVER_BACKUP_RESTORE 选项
虽然 S3 控制台界面明确表示S3 不需要在区域选择器下选择区域,但事实证明,存储桶附加到区域,并且用于此过程的存储桶必须与 RDS 实例位于同一区域。为此,我创建了一个新存储桶,并从另一个存储桶中复制了.bak文件;您可以在创建时指定存储桶的区域,即使您在管理控制台中看不到它。
我还不得不放松对文件的权限,超出了我的满意程度,但这只是完成恢复所需的几分钟。