我正在尝试从在另一个非 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'
显示该任务已更新为生命周期价值错误有了这个任务信息价值:
[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 选项
答案1
尽管 S3 控制台界面明确指出S3 无需选择区域在区域选择器下,结果显示 buckets是附加到区域,并且用于此过程的存储桶必须与 RDS 实例位于同一区域。我为此创建了一个新存储桶,并复制了.bak文件来自另一个存储桶;您可以在创建时指定存储桶的区域,即使您无法在管理控制台中看到它。
我还必须放宽文件的权限,这是我所不满意的,但这只是花几分钟来完成恢复。