如何排查 Aurora PostgreSQL 兼容版数据库集群中的快照还原问题?
我想排查从 Amazon Aurora PostgreSQL 兼容版数据库 (DB) 集群快照还原时出现的快照还原错误。
解决方法
**注意:**如果您在运行 AWS 命令行界面 (AWS CLI) 命令时收到错误,请参阅 AWS CLI 错误故障排除。此外,请确保您使用的是最新版本的 AWS CLI。
在对快照还原错误进行故障排除之前,请验证您的快照是否与目标配置兼容,以及您是否具有所需的权限。
在还原之前验证快照兼容性
在还原快照之前,请验证版本兼容性以防止出现错误。
检查快照状态和引擎版本
在还原快照之前,您可以使用控制台或 AWS CLI 来验证版本兼容性。
要使用控制台,请完成以下步骤:
- 打开 Amazon Relational Database Service (Amazon RDS) 控制台。
- 选择 Snapshots(快照)。
- 选择您的快照。
- 选择 Details(详细信息)选项卡,然后确认以下配置:<br id=hardline_break/> 验证引擎参数是否为 aurora-postgresql。<br id=hardline_break/> 确认引擎版本与您的目标版本兼容。<br id=hardline_break/> 确保将 Status(状态)设置为 Available(可用)。
要使用 AWS CLI 列出所有可用的 Aurora PostgreSQL 兼容版本,请运行以下 describe-db-engine-versions 命令:
aws rds describe-db-engine-versions \ --engine aurora-postgresql \ --query "DBEngineVersions[?EngineVersion=='your-snapshot-version'].ValidUpgradeTarget[*].EngineVersion" \ --region your-region
**注意:**请将 your-snapshot-version 替换为快照中的引擎版本,并将 your-region 替换为您的 AWS 区域。
验证 IAM 权限
确保您的 AWS Identity and Access Management (IAM) 用户或角色具有还原快照所需的权限。
要检查您的当前权限,请运行以下 get-user AWS CLI 命令:
aws iam get-user --region your-region
**注意:**请将 your-region 替换为您的 AWS 区域。
IAM 策略示例:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "rds:RestoreDBClusterFromSnapshot", "rds:CreateDBInstance", "rds:DescribeDBSnapshots", "rds:DescribeDBClusters", "rds:DescribeDBInstances" ], "Resource": "*" } ] }
解决 IAM 权限错误
如果缺少所需的 Amazon RDS 权限,您会收到以下错误消息:
"User is not authorized to perform: rds:RestoreDBClusterFromSnapshot"
要解决此错误,请将所需的 Amazon RDS 权限添加到您的 IAM 策略中。完成以下步骤:
-
打开 IAM 控制台。
-
在导航窗格中,选择 Users(用户)或 Roles(角色)。
-
选择您的用户名或角色名。
-
选择 Add permissions(添加权限)。
-
选择 Create inline policy(创建内联策略)或编辑已附加到 IAM 实体的策略。
-
选择 JSON 选项卡。
-
输入包含快照还原所需权限的策略:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "rds:RestoreDBClusterFromSnapshot", "rds:CreateDBInstance", "rds:DescribeDBSnapshots", "rds:DescribeDBClusterSnapshots", "rds:DescribeDBClusters", "rds:DescribeDBInstances" ], "Resource": "*" } ] } -
选择 Next(下一步)。
-
输入策略名称。例如,输入 RDSSnapshotRestorePolicy。
-
选择 Create policy(创建策略)。
解决 AWS KMS 加密权限错误
如果您尝试还原加密快照,但没有相应的 AWS Key Management Service (AWS KMS) 权限,您会收到以下错误消息之一:
"Unable to restore from encrypted snapshot"
"KMS key access denied"
要解决此错误,请检查快照使用的 AWS KMS 密钥,然后将所需的 AWS KMS 权限添加到您的 IAM 策略中。
要检查您的快照使用的 AWS KMS 密钥,请运行以下 describe-db-cluster-snapshots 命令:
aws rds describe-db-cluster-snapshots \ --db-cluster-snapshot-identifier your-snapshot-id \ --region your-region
**注意:**请将 your-snapshot-id 替换为您的快照标识符,并将 your-region 替换为您的 AWS 区域。
然后,将 AWS KMS 权限添加到您的 IAM 策略中:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "kms:Decrypt", "kms:CreateGrant", "kms:DescribeKey", "kms:GenerateDataKey" ], "Resource": "arn:aws:kms:region:account-id:key/key-id" } ] }
**注意:**请将 region 替换为您的 AWS 区域,将 account-id 替换为您的 AWS 账户 ID,并将 key-id 替换为您的 AWS KMS 密钥 ID。
解决未找到快照的错误
如果尝试从不存在或无法访问的快照进行还原,您会收到以下错误消息:
"DBClusterSnapshotNotFoundFault: DBClusterSnapshot snapshot-id not found"
要解决此错误,请验证快照是否存在以及您是否具有访问权限。
要列出账户中的可用快照,请运行以下 describe-db-cluster-snapshots 命令:
aws rds describe-db-cluster-snapshots \ --region your-region
**注意:**请将 your-region 替换为您的 AWS 区域。
如果快照是从另一个 AWS 账户共享的,请验证其是否已与您的账户共享,以及您是否已接受该共享。
解决无效参数的错误
如果在还原过程中指定的实例类不兼容,您会收到以下错误消息:
"InvalidParameterValue: Invalid DB Instance class"
要解决此错误,请为 Aurora PostgreSQL 兼容版本选择兼容的实例类。
要列出目标引擎版本的有效实例类,请运行以下 describe-orderable-db-instance-options 命令:
aws rds describe-orderable-db-instance-options \ --engine aurora-postgresql \ --engine-version your-version \ --region your-region
**注意:**请将 your-version 替换为您的 PostgreSQL 版本,例如 15.4。请将 your-region 替换为您的 AWS 区域。
查看输出并选择支持您的目标引擎版本和所需功能的实例类。
解决子网组错误
如果在还原过程中指定的子网无效,您会收到以下错误消息:
"InvalidSubnet: The requested subnet is not valid"
要解决此错误,请验证您的数据库子网组是否在多个可用区中存在子网。
要检查您的子网组配置,请运行以下 describe-db-subnet-groups 命令:
aws rds describe-db-subnet-groups \ --db-subnet-group-name your-subnet-group \ --region your-region
**注意:**请将 your-subnet-group 替换为您的数据库子网组名称,并将 your-region 替换为您的 AWS 区域。
验证子网组是否包含至少两个可用区中的子网。如果子网组在多个可用区中没有子网,则可以修改子网组以在其他可用区中添加子网。
解决跨账户 AWS KMS 密钥访问错误
如果您尝试还原从另一个 AWS 账户共享的加密快照,但没有相应的 AWS KMS 权限,您会收到以下错误消息:
"AccessDenied: Cross-account pass role is not allowed"
要解决此错误,请确保 AWS KMS 密钥策略允许跨账户访问,并且您的 IAM 角色具有必要的权限。
要检查 AWS KMS 密钥策略,请运行以下 get-key-policy 命令:
aws kms get-key-policy \ --key-id your-key-id \ --policy-name default \ --region your-region
**注意:**请将 your-key-id 替换为您的 AWS KMS 密钥 ID,并将 your-region 替换为您的 AWS 区域。
验证密钥策略是否包含授权您的 AWS 账户解密和创建授权的语句。如果您无法更新 AWS KMS 密钥策略,请联系快照所有者更新 AWS KMS 密钥策略。
对于跨账户加密快照,您无法直接从共享快照还原。请改为使用您自己的 AWS KMS 密钥将共享快照复制到您的账户,然后从副本还原。有关详细信息,请参阅共享加密快照。
解决引擎版本兼容性问题
如果您尝试还原到不兼容的引擎版本,则在还原过程中可能会收到错误。
要解决问题,请确保您的目标版本等于或高于快照的 PostgreSQL 版本。您无法还原到较低版本。
要检查可用的 Aurora PostgreSQL 兼容版本,请运行以下 describe-db-engine-versions 命令:
aws rds describe-db-engine-versions \ --engine aurora-postgresql \ --region your-region
**注意:**请将 your-region 替换为您的 AWS 区域。
查看输出以确定适用于还原目标的兼容引擎版本。
解决实例类兼容性问题
如果您选择的实例类不支持您的目标引擎版本或所需功能,则还原可能会失败。
要解决此问题,请选择具有工作负载所需存储和内存的实例类。验证该实例类是否支持您要还原的 Aurora PostgreSQL 兼容版本,以及是否支持任何特定功能,例如性能详情。
要验证实例类兼容性,请运行 describe-orderable-db-instance-options 命令:
aws rds describe-orderable-db-instance-options \ --engine aurora-postgresql \ --engine-version your-version \ --region your-region
**注意:**请将 your-version 替换为您的 PostgreSQL 版本,例如 15.4。请将 your-region 替换为您的 AWS 区域。
