

# 复制 Amazon RDS Custom for SQL Server 数据库快照
<a name="custom-copying-snapshot-sqlserver"></a>

使用 RDS Custom for SQL Server，可以复制自动备份和手动数据库快照。复制快照后，您创建的副本为手动快照。可以创建自动备份或手动快照的多个副本，但每个副本必须具有唯一的标识符。

只能在 RDS Custom for SQL Server 可用的不同 AWS 区域中复制同一 AWS 账户中的快照。目前不支持以下操作：
+ 在同一个 AWS 区域中复制数据库快照。
+ 跨 AWS 账户复制数据库快照。

RDS Custom for SQL Server 支持增量快照复制。有关更多信息，请参阅 [增量快照复制的注意事项](USER_CopySnapshot.md#USER_CopySnapshot.Incremental)。

**Topics**
+ [限制](#custom-copying-snapshot-sqlserver.Limitations)
+ [处理加密](#custom-copying-snapshot-sqlserver.Encryption)
+ [跨区域复制](#custom-copying-snapshot-sqlserver.XRCopy)
+ [使用自定义引擎版本（CEV）创建的数据库实例的快照](#custom-copying-snapshot-sqlserver.CEVSnap)
+ [为您的 IAM 主体授予所需的权限](#custom-copying-snapshot-sqlserver.GrantPermIAM)
+ [复制数据库快照](#custom-copying-snapshot-sqlserver.CopyingDBSnapshot)

## 限制
<a name="custom-copying-snapshot-sqlserver.Limitations"></a>

以下限制适用于复制 RDS Custom for SQL Server 的数据库快照：
+ 如果您在目标快照可用之前删除了源快照，则快照复制会失败。在删除源快照之前，请确保目标快照的状态为 `AVAILABLE`。
+ 不能在数据库快照复制请求中指定选项组名称或复制选项组。
+ 如果在复制过程之前或期间删除源数据库快照的任何相关 AWS 资源，则复制快照请求可能会异步失败。
  + 如果您删除源数据库实例的服务主密钥（SMK）备份文件（存储在您账户的 RDS Custom 托管式 S3 存储桶中），则数据库快照复制将异步成功。但是，依赖于 SMK 的 SQL Server 功能（例如启用 TDE 的数据库）会遇到问题。有关更多信息，请参阅 [对 RDS Custom for SQL Server 中启用 TDE 的数据库的 PENDING\$1RECOVERY 状态进行故障排除](custom-troubleshooting-sqlserver.md#custom-troubleshooting-sqlserver.pending_recovery)。
+ 目前不支持在同一 AWS 区域中复制数据库快照。
+ 目前不支持跨 AWS 账户复制数据库快照。

复制 Amazon RDS 的数据库快照的限制也适用于 RDS Custom for SQL Server。有关更多信息，请参阅 [限制](USER_CopySnapshot.md#USER_CopySnapshot.Limitations)。

## 处理加密
<a name="custom-copying-snapshot-sqlserver.Encryption"></a>

所有 RDS Custom for SQL Server 数据库实例和数据库快照都使用 KMS 密钥进行加密。只能将加密快照复制到加密快照，因此，必须为数据库快照复制请求指定在目标 AWS 区域中有效的 KMS 密钥。

源快照在复制过程中保持加密状态。Amazon RDS 使用信封加密，来在复制操作期间通过指定的目标 AWS 区域 KMS 密钥保护数据。有关更多信息，请参阅《AWS Key Management Service 开发人员指南》**中的[信封加密](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#enveloping)。

## 跨区域复制
<a name="custom-copying-snapshot-sqlserver.XRCopy"></a>

您可以跨 AWS 区域复制数据库快照。但是，跨区域快照复制具有某些限制和注意事项。

### 授权 RDS 跨 AWS 区域通信以进行快照复制
<a name="custom-copying-snapshot-sqlserver.XRCopy.Authorize"></a>

成功处理跨区域数据库快照复制请求后，RDS 将开始复制。此时将创建供 RDS 访问源快照的授权请求。此授权请求将源数据库快照链接到目标数据库快照。这支持 RDS 仅复制到指定的目标快照。

RDS 使用服务相关的 IAM 角色中的 `rds:CrossRegionCommunication` 权限对授权进行验证。如果复制操作获得授权，则 RDS 可以与源区域通信并完成复制操作。

RDS 无权访问之前未经 CopyDBSnapshot 请求授权的数据库快照。复制完成后，将撤销授权。

RDS 使用服务链接的角色来验证源区域中的授权。如果在复制过程中删除了服务相关角色，则复制将失败。

有关更多信息，请参阅《AWS Identity and Access Management 用户指南》**中的[使用服务相关角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/using-service-linked-roles.html)。

### 使用 AWS Security Token Service 凭证
<a name="custom-copying-snapshot-sqlserver.XRCopy.STS"></a>

来自全局 AWS Security Token Service (AWS STS) 端点的会话令牌仅在默认启用的 AWS 区域（商业区域）中有效。在 `assumeRole` 中使用来自 AWS STS API 操作的凭证时， 如果源区域是选择加入区域，请使用区域端点。否则，请求将失败。您的凭证必须在这两个区域中都有效，仅当您使用区域 AWS STS 端点时，这一点才适用于选择加入区域。

要使用全局端点，请确保在操作中为两个区域都启用了该端点。在 AWS STS 账户设置中，将全局端点设置为“在所有 AWS 区域 区域均 `Valid`”。

有关更多信息，请参阅《AWS Identity and Access Management 用户指南》**中的[管理 AWS 区域中的 AWS STS](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_enable-regions.html)。

## 使用自定义引擎版本（CEV）创建的数据库实例的快照
<a name="custom-copying-snapshot-sqlserver.CEVSnap"></a>

对于使用[自定义引擎版本（CEV）](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/custom-cev-sqlserver.html)的数据库实例的数据库快照，RDS 会将 CEV 与数据库快照关联。要跨 AWS 区域复制与 CEV 关联的源数据库快照，RDS 会将 CEV 与源数据库快照一起复制到目标区域。

如果要将与同一 CEV 关联的多个数据库快照复制到同一个目标区域，则第一个复制请求会复制关联的 CEV。后续请求的复制过程会找到最初复制的 CEV，并将其与以下数据库快照副本相关联。现有 CEV 副本必须处于 `AVAILABLE` 状态，才能与数据库快照副本相关联。

要复制与 CEV 关联的数据库快照，请求者的 IAM 策略必须具有相应的权限，来授权复制数据库快照和复制关联的 CEV。请求者的 IAM 策略中需要以下权限，才能支持复制关联的 CEV：
+ `rds:CopyCustomDBEngineVersion` - 请求者 IAM 主体需要具有相应的权限，可将源 CEV 与源数据库快照一起复制到目标区域。如果请求者 IAM 主体未获得复制源 CEV 的授权，则快照复制请求将由于授权错误而失败。
+ `ec2:CreateTags` - 源 CEV 的底层 EC2 AMI 将复制到目标区域，以作为 CEV 副本的一部分。在复制 AMI 之前，RDS Custom 会尝试使用 `AWSRDSCustom` 标签来标记 AMI。确保请求者 IAM 主体有权针对源区域中源 CEV 底层的 AMI 创建标签。

有关 CEV 复制权限的信息，请参阅[为您的 IAM 主体授予所需的权限](#custom-copying-snapshot-sqlserver.GrantPermIAM)。

## 为您的 IAM 主体授予所需的权限
<a name="custom-copying-snapshot-sqlserver.GrantPermIAM"></a>

确保您有足够的访问权限来复制 RDS Custom for SQL Server 数据库快照。使用控制台或 CLI 复制数据库快照的 IAM 角色或用户（称为 IAM 主体）必须具有以下任一策略，才能成功创建数据库实例：
+ `AdministratorAccess` 策略，或者
+ 具有以下其他权限的 `AmazonRDSFullAccess` 策略：

  ```
  s3:CreateBucket
  s3:GetBucketPolicy
  s3:PutBucketPolicy
  kms:CreateGrant
  kms:DescribeKey
  ec2:CreateTags
  ```

RDS Custom 在跨 AWS 区域复制快照期间使用这些权限。这些权限在您的账户中配置执行 RDS Custom 操作所需的资源。有关 `kms:CreateGrant` 权限的更多信息，请参阅 [AWS KMS key 管理](Overview.Encryption.Keys.md)。

除 `AmazonRDSFullAccess` 策略外，以下 JSON 策略示例还授予所需的权限。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "CreateS3BucketAndReadWriteBucketPolicy",
            "Effect": "Allow",
            "Action": [
                "s3:CreateBucket",
                "s3:PutBucketPolicy",
                "s3:GetBucketPolicy"
            ],
            "Resource": "arn:aws:s3:::do-not-delete-rds-custom-*"
        },
        {
            "Sid": "CreateKmsGrant",
            "Effect": "Allow",
            "Action": [
                "kms:CreateGrant",
                "kms:DescribeKey"
            ],
            "Resource": "*"
        },
        {
            "Sid": "CreateEc2Tags",
            "Effect": "Allow",
            "Action": [
                "ec2:CreateTags"
            ],
            "Resource": "*"
        }
    ]
}
```

------

**注意**  
确保列出的权限不受服务控制策略（SCP）、权限边界或与 IAM 主体关联的会话策略的限制。

如果您在请求者的 IAM 策略中使用带有上下文密钥的条件，则某些条件可能会导致请求失败。有关由于 IAM 策略条件而导致的常见陷阱的更多信息，请参阅[请求跨区域数据库快照复制](USER_CopySnapshot.md#USER_CopySnapshot.AcrossRegions.Policy)。

## 复制数据库快照
<a name="custom-copying-snapshot-sqlserver.CopyingDBSnapshot"></a>

使用以下过程复制数据库快照。对于每个 AWS 账户，一次最多可以从一个 AWS 区域向另一个区域复制 20 个数据库快照。如果您将数据库快照复制到另一个 AWS 区域，则可创建保留在该 AWS 区域中的手动数据库快照。从源 AWS 区域复制出数据库快照会产生 Amazon RDS 数据传输费用。有关数据传输定价的更多信息，请参阅 [Amazon RDS 定价](https://aws.amazon.com/rds/pricing/)。

在新 AWS 区域中创建数据库快照副本后，该数据库快照副本的行为与该 AWS 区域中所有其他数据库快照的行为相同。

可以使用 AWS 管理控制台、AWS CLI 或 Amazon RDS API 来复制数据库快照。

------
#### [ Console ]

以下过程使用 AWS 管理控制台复制 RDS Custom for SQL Server 数据库快照。

1. 登录 AWS 管理控制台 并通过以下网址打开 Amazon RDS 控制台：[https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)。

1. 在导航窗格中，选择**快照**。

1. 选择要复制的 RDS Custom for SQL Server 数据库快照。

1. 在**操作**下拉列表中，选择**复制快照**。  
![\[Amazon RDS 控制台中的复制快照页面。设置已加载到页面中。\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/XRSC-Snapshot-Copy.png)

1. 要将数据库快照复制到其他 AWS 区域，请将**目标区域**设置为所需的值。
**注意**  
目标 AWS 区域必须具有与源 AWS 区域相同的可用数据库引擎版本。

1. 对于**新数据库快照标识符**，输入数据库快照的唯一名称。可以创建自动备份或手动快照的多个副本，但每个副本必须具有唯一的标识符。

1. (可选) 选择 **Copy Tags (复制标签)** 将标签和值从快照复制到快照的副本。

1. 对于**加密**，指定用于加密数据库快照副本的 KMS 密钥标识符。
**注意**  
RDS Custom for SQL Server 对所有数据库快照进行加密。您无法创建不加密的数据库快照。

1. 选择**复制快照**。

RDS Custom for SQL Server 在您选择的 AWS 区域中创建数据库实例的数据库快照副本。

------
#### [ AWS CLI ]

可以使用 AWS CLI 命令 [https://docs.aws.amazon.com/cli/latest/reference/rds/copy-db-snapshot.html](https://docs.aws.amazon.com/cli/latest/reference/rds/copy-db-snapshot.html) 复制 RDS Custom for SQL Server 数据库快照。如果您将快照复制到新 AWS 区域，请在新 AWS 区域中运行命令。以下选项用于复制数据库快照。并非所有情况下都需要所有选项。
+ `--source-db-snapshot-identifier` – 源数据库快照的标识符。
  + 如果源快照与副本位于不同 AWS 区域，则指定有效的数据库快照 ARN。例如 `arn:aws:rds:us-west-2:123456789012:snapshot:instance1-snapshot-12345678`。
+ `--target-db-snapshot-identifier` – 数据库快照的新副本的标识符。
+ `--kms-key-id` – 加密的数据库快照的 KMS 密钥标识符。KMS 密钥标识符是 Amazon Resource Name (ARN)、密钥标识符或 KMS 密钥的别名。
  + 如果将加密快照复制到不同 AWS 区域，必须为目标 AWS 区域指定 KMS 密钥。KMS 密钥特定于在其中创建它们的 AWS 区域，您无法将一个 AWS 区域中的加密密钥用于另一个 AWS 区域，除非使用多区域密钥。有关多区域 KMS 密钥的更多信息，请参阅[在 AWS KMS 中使用多区域密钥](https://docs.aws.amazon.com/kms/latest/developerguide/multi-region-keys-overview.html)。
+ `--copy-tags` – 将源快照中的标签和值包含到快照的副本中。

不支持使用以下选项来复制 RDS Custom for SQL Server 数据库快照：
+ `--copy-option-group `
+ `--option-group-name`
+ `--pre-signed-url`
+ `--target-custom-availability-zone`

以下代码示例将加密的数据库快照从美国西部（俄勒冈州）区域复制到美国东部（弗吉尼亚州北部）。在目标 (us-east-1) 区域运行该命令。

对于 Linux、macOS 或 Unix：

```
aws rds copy-db-snapshot \
     --region us-east-1 \
    --source-db-snapshot-identifier arn:aws:rds:us-west-2:123456789012:snapshot:instance1-snapshot-12345678 \
    --target-db-snapshot-identifier mydbsnapshotcopy \
    --kms-key-id a1b2c3d4-1234-5678-wxyz-a1b2c3d4d5e6
```

对于 Windows：

```
aws rds copy-db-snapshot ^
     --region us-east-1 ^
    --source-db-snapshot-identifier arn:aws:rds:us-west-2:123456789012:snapshot:instance1-snapshot-12345678 ^
    --target-db-snapshot-identifier mydbsnapshotcopy ^
    --kms-key-id a1b2c3d4-1234-5678-wxyz-a1b2c3d4d5e6
```

------
#### [ RDS API ]

可以使用 Amazon RDS API 操作 [CopyDBSnapshot](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_CopyDBSnapshot.html) 复制 RDS Custom for SQL Server 数据库快照。如果您将快照复制到新 AWS 区域，请在新 AWS 区域中执行操作。以下参数用于复制数据库快照。并非所有参数都是必需的。
+ `SourceDBSnapshotIdentifier` – 源数据库快照的标识符。
  + 如果源快照与副本位于不同 AWS 区域，则指定有效的数据库快照 ARN。例如 `arn:aws:rds:us-west-2:123456789012:snapshot:instance1-snapshot-12345678`。
+ `TargetDBSnapshotIdentifier` – 数据库快照的新副本的标识符。
+ `KmsKeyId` – 加密的数据库快照的 KMS 密钥标识符。KMS 密钥标识符是 Amazon Resource Name (ARN)、密钥标识符或 KMS 密钥的别名。
  + 如果将加密快照复制到不同 AWS 区域，必须为目标 AWS 区域指定 KMS 密钥。KMS 密钥特定于在其中创建它们的 AWS 区域，您无法将一个 AWS 区域中的加密密钥用于另一个 AWS 区域，除非使用多区域密钥。有关多区域 KMS 密钥的更多信息，请参阅[在 AWS KMS 中使用多区域密钥](https://docs.aws.amazon.com/kms/latest/developerguide/multi-region-keys-overview.html)。
+ `CopyTags` – 将此参数设置为 `true`，来将标签和值从源快照复制到快照的副本。默认值为 `false`。

不支持使用以下选项来复制 RDS Custom for SQL Server 数据库快照：
+ `CopyOptionGroup`
+ `OptionGroupName`
+ `PreSignedUrl`
+ `TargetCustomAvailabilityZone`

以下代码使用新名称 `mydbsnapshotcopy`，在 US East (N. Virginia) 区域中创建快照的副本。

```
https://rds.us-east-1.amazonaws.com/
    ?Action=CopyDBSnapshot
    &KmsKeyId=a1b2c3d4-1234-5678-wxyz-a1b2c3d4d5e6
    &SourceDBSnapshotIdentifier=arn%3Aaws%3Ards%3Aus-west-2%3A123456789012%3Asnapshot%3Ainstance1-snapshot-12345678
    &TargetDBSnapshotIdentifier=mydbsnapshotcopy
    &Version=2014-10-31
    &X-Amz-Algorithm=AWS4-HMAC-SHA256
    &X-Amz-Credential=AKIADQKE4SARGYLE/20161117/us-east-1/rds/aws4_request
    &X-Amz-Date=20161117T221704Z
    &X-Amz-SignedHeaders=content-type;host;user-agent;x-amz-content-sha256;x-amz-date
    &X-Amz-Signature=da4f2da66739d2e722c85fcfd225dc27bba7e2b8dbea8d8612434378e52adccf
```

------