跳至内容

如何排查 Aurora PostgreSQL 兼容版数据库集群中的快照还原问题?

3 分钟阅读
0

我想排查从 Amazon Aurora PostgreSQL 兼容版数据库 (DB) 集群快照还原时出现的快照还原错误。

解决方法

**注意:**如果您在运行 AWS 命令行界面 (AWS CLI) 命令时收到错误,请参阅 AWS CLI 错误故障排除。此外,请确保您使用的是最新版本的 AWS CLI

在对快照还原错误进行故障排除之前,请验证您的快照是否与目标配置兼容,以及您是否具有所需的权限。

在还原之前验证快照兼容性

在还原快照之前,请验证版本兼容性以防止出现错误。

检查快照状态和引擎版本

在还原快照之前,您可以使用控制台或 AWS CLI 来验证版本兼容性。

要使用控制台,请完成以下步骤:

  1. 打开 Amazon Relational Database Service (Amazon RDS) 控制台
  2. 选择 Snapshots(快照)。
  3. 选择您的快照。
  4. 选择 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 策略中。完成以下步骤:

  1. 打开 IAM 控制台

  2. 在导航窗格中,选择 Users(用户)或 Roles(角色)。

  3. 选择您的用户名或角色名。

  4. 选择 Add permissions(添加权限)。

  5. 选择 Create inline policy(创建内联策略)或编辑已附加到 IAM 实体的策略。

  6. 选择 JSON 选项卡。

  7. 输入包含快照还原所需权限的策略:

    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Action": [
                    "rds:RestoreDBClusterFromSnapshot",
                    "rds:CreateDBInstance",
                    "rds:DescribeDBSnapshots",
                    "rds:DescribeDBClusterSnapshots",
                    "rds:DescribeDBClusters",
                    "rds:DescribeDBInstances"
                ],
                "Resource": "*"
            }
        ]
    }
  8. 选择 Next(下一步)。

  9. 输入策略名称。例如,输入 RDSSnapshotRestorePolicy

  10. 选择 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 区域。

相关信息

从数据库集群快照还原

共享数据库集群快照

加密 Amazon Aurora 资源

IAM JSON 策略元素: Action

AWS 官方已更新 5 个月前