

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# AWS DMS 无服务器组件
<a name="CHAP_Serverless.Components"></a>

为了管理执行复制所需的资源， AWS DMS Serverless 具有精细的状态，可以显示服务采取的不同内部操作。启动复制时， AWS DMS Serverless 会根据以下复制状态计算容量负载，预置计算出的容量，然后开始数据复制。

下图显示了 AWS DMS 无服务器复制的状态转换。

![\[AWS DMS 无服务器复制状态\]](http://docs.aws.amazon.com/zh_cn/dms/latest/userguide/images/datarep-replicationstate_updated.png)

+ 在您开始复制后，第一个状态是**正在初始化**。在此状态下将初始化所有必需的参数。
+ 紧随其后的状态包括**正在准备元数据资源**、**正在测试连接**和**正在获取元数据**。在这些状态下， AWS DMS Serverless 会连接到您的源数据库以获取预测所需容量所需的信息。
  + 当复制状态为 “**测试连接**” 时， AWS DMS Serverless 会验证与源数据库和目标数据库的连接是否已成功建立。
  + **正在测试连接**之后的复制状态为**正在获取元数据**。在这里， AWS DMS 检索计算容量所需的信息。
  +  AWS DMS 检索到必要信息后，下一个状态为 “**计算容量**”。此时，系统计算执行复制所需的底层资源的大小。
+ 在**正在计算容量**之后，状态转换为**正在预置容量**。当复制处于这种状态时， AWS DMS Serverless 会初始化底层计算资源。
+ 成功预置所有资源后的复制状态为**复制开始**。在这种状态下， AWS DMS Serverless 开始复制数据。复制过程包括以下几个阶段：
  + **完全加载：**在此阶段，DMS 会复制源数据存储，就像复制开始时那样。
  + **CDC（初始）：**在此阶段，DMS 会复制在“完全加载”阶段对源数据存储所做的更改。仅当 `StopTaskCachedChangesNotApplied` 任务设置为 `false` 时，DMS 才会运行此阶段。
  + **CDC（持续）：**在初始 CDC 阶段之后，DMS 会复制源数据库上发生的更改。仅当 `StopTaskCachedChangesApplied` 任务设置为 `false` 时，DMS 才会在 CDC 初始阶段之后继续运行复制。
+ 最终状态为**正在运行**。在**正在运行**状态下，数据复制正在进行中。
+ 您停止的复制进入**已停止**状态。对于成功完成的仅完全加载复制任务，复制可能会进入停止状态。在停止或失败状态下恢复或重新启动复制时，需要考虑以下情况：
  + 由于 AWS DMS 取消了资源配置，因此您无法重新启动已经 48 小时未启动的复制。

**Topics**
+ [支持的端点](#CHAP_Serverless.SupportedVersions)
+ [创建无服务器复制](#CHAP_Serverless.create)
+ [修改 AWS DMS 无服务器复制](#CHAP_Serverless.modify)
+ [Compute Config](#CHAP_Serverless.computeconfig)
+ [了解无服务器中的 AWS DMS 自动扩展](#CHAP_Serverless.autoscaling)
+ [监控 AWS DMS 无服务器复制](#CHAP_Serverless.monitoring)
+ [提高了 Oracle 到 Amazon Redshift 和 Amazon S3 的完全加载迁移的吞吐量](#CHAP_Serverless.Throughput)
+ [了解无服务器中的 AWS DMS 存储自动扩展](#CHAP.Serverless.storage.autoscaling)

对于 AWS DMS 无服务器， AWS DMS 控制台的左侧导航面板有一个新选项，即**无服务器**复制。对于**无服务器复制**，您可以指定*复制*，而不是指定复制实例类型或任务来定义复制。此外，您可以指定希望 DMS 为复制配置的最大和最小 DMS 容量单位 (DCUs)。一个 DCU 是 2GB 的内存。 AWS DMS 为您的复制当前使用的每个 DCU 向您的账户收费。有关 AWS DMS 定价的信息，请参阅 [AWS Database Migration Service 定价](https://aws.amazon.com/dms/pricing/)。

AWS DMS 然后根据您的表映射和预测的工作负载大小自动配置复制资源。此容量单位是在您指定的最小和最大容量单位值范围内的值。

## 支持的端点
<a name="CHAP_Serverless.SupportedVersions"></a>

使用 AWS DMS Serverless，您无需选择和管理引擎版本，因为该服务会处理该设置。 AWS DMS 无服务器支持以下来源：
+ MongoDB
+ Amazon DocumentDB (with MongoDB compatibility)
+ Microsoft SQL Server
+ PostgreSQL 兼容数据库
+ MySQL 兼容数据库
+ MariaDB
+ Oracle
+ Amazon S3
+ IBM Db2

AWS DMS 无服务器支持以下目标：
+ Microsoft SQL Server
+ PostgreSQL
+ MySQL 兼容数据库
+ Oracle
+ Amazon S3
+ Amazon Redshift
+ Amazon DynamoDB
+ Amazon Kinesis Data Streams
+ Amazon Managed Streaming for Apache Kafka
+ 亚马逊 OpenSearch 服务
+ Amazon DocumentDB（兼容 MongoDB）
+ Amazon Neptune



作为 AWS DMS Serverless 的一部分，您可以访问控制台命令，这些命令允许您创建、配置、启动和管理 AWS DMS 无服务器复制。要使用控制台的**无服务器复制**部分运行这些命令，您需要执行以下操作之一：
+ 设置新的 AWS Identity and Access Management (IAM) 策略和 IAM 角色以将其附加到该策略。
+ 使用 AWS CloudFormation 模板提供所需的访问权限。

AWS DMS Serverless 需要您的账户中存在服务关联角色 (SLR)。 AWS DMS 管理此角色的创建和使用。有关确保您拥有所需 SLR 的更多信息，请参阅[的服务相关角色 AWS DMS](slr-services-sl.md)。

## 创建无服务器复制
<a name="CHAP_Serverless.create"></a>

要在两个现有 AWS DMS 端点之间创建无服务器复制，请执行以下操作。有关创建 AWS DMS 终端节点的信息，请参阅[创建源和目标终端节点](CHAP_Endpoints.Creating.md)。

**创建无服务器复制**

1. 登录 AWS 管理控制台 并在 [https://console.aws.amazon.com/dms/v2](https://console.aws.amazon.com/dms/v2/)/上打开 AWS DMS 控制台。

1. 在导航窗格上，选择**无服务器复制**，然后选择**创建复制**。

1. 在**创建复制**页面上，指定您的无服务器复制配置：    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/dms/latest/userguide/CHAP_Serverless.Components.html)

   在**设置**部分中，设置复制所需的设置。

   在**表映射**部分中，设置表映射以定义选择和筛选所要复制的数据的规则。在指定映射之前，请确保查看有关源数据库和目标数据库之间的数据类型映射的文档部分。有关源数据库和目标数据库的数据类型映射的信息，请参阅 [使用 AWS DMS 终端节点](CHAP_Endpoints.md)主题中源和目标端点类型的“数据类型”部分。

   在**计算设置**部分中，设置以下设置。有关 Compute Config 设置的信息，请参阅 [Compute Config](#CHAP_Serverless.computeconfig)。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/dms/latest/userguide/CHAP_Serverless.Components.html)

   保留**维护**设置不变。

1. 选择**创建复制**。

AWS DMS 创建无服务器复制来执行迁移。

## 修改 AWS DMS 无服务器复制
<a name="CHAP_Serverless.modify"></a>

要修改您的复制配置，请使用 `modify-replication-config` 操作。您只能修改处于`CREATED``STOPPED`、或`FAILED`状态的 AWS DMS 复制配置。有关该`modify-replication-config`操作的信息，请参阅 *AWS Database Migration Service API 参考[ModifyReplicationConfig](https://docs.aws.amazon.com/dms/latest/APIReference/API_ModifyReplicationConfig.html)*中的。

**要修改无服务器复制配置，请使用 AWS 管理控制台**

1. 登录 AWS 管理控制台 并在 [https://console.aws.amazon.com/dms/v2](https://console.aws.amazon.com/dms/v2/)/上打开 AWS DMS 控制台。

1. 在导航窗格中，选择**无服务器复制**。

1. 选择您要修改的复制。下表描述了根据复制的当前状态，您可以进行的修改。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/dms/latest/userguide/CHAP_Serverless.Components.html)

**注意**  
当 DMS 任务状态为正在启动或正在运行时，您无法修改与其关联的端点。

## Compute Config
<a name="CHAP_Serverless.computeconfig"></a>

您可以使用 Compute Config 参数或控制台部分配置复制预置。Compute Config 对象中的字段包括以下内容：


| 选项 | 描述 | 
| --- | --- | 
|   **MinCapacityUnits**   | 这是要配置的 DMS 容量单位 (DCU) 的最小数量。 AWS DMS 这也是自动缩放可以缩减到的最小 DCU。 | 
|   **MaxCapacityUnits**   | 这是 AWS DMS 可以预置的最大 DMS 容量单位（DCU），具体取决于对您复制的容量预测。这也是自动缩放可以纵向扩展到的最大 DCU。 | 
|   **KmsKeyId**   | 选择要用于加密复制存储和连接信息的加密密钥。如果您选择（默认）aws/dms，则 AWS DMS 使用与您的账户关联的默认 KMS 密钥和。 AWS 区域将显示说明和您的账号以及密钥的 ARN。有关使用加密密钥的更多信息，请参阅[设置加密密钥并指定 AWS KMS 权限](CHAP_Security.md#CHAP_Security.EncryptionKey)。在本教程中，选择（默认）aws/dms。 | 
|   **ReplicationSubnetGroupId**   | 在选定 VPC 中要在其中创建复制的复制子网组。如果源数据库位于 VPC 中，请选择包含源数据库的子网组作为复制的位置。有关复制子网组的更多信息，请参阅[创建复制子组](CHAP_ReplicationInstance.VPC.md#CHAP_ReplicationInstance.VPC.Subnets)。 | 
|   **VpcSecurityGroupIds**   | 在 VPC 中创建复制实例。如果源数据库位于 VPC 中，请选择一个 VPC 安全组，该安全组提供对数据库所在的数据库实例的访问权限。 | 
|   **PreferredMaintenanceWindow**   | 此参数定义每周可以进行系统维护的时间范围，采用通用协调时间（UTC）。默认值是从每个 8 小时的时间段中随机选择一个 30 分钟的窗口 AWS 区域，发生在一周中的随机某一天。 | 
|   **MultiAZ**   | 设置此可选参数可在另一个可用区中创建复制的备用副本以支持失效转移。如果您打算使用更改数据捕获（CDC）或持续复制，建议您启用该选项。 | 

## 了解无服务器中的 AWS DMS 自动扩展
<a name="CHAP_Serverless.autoscaling"></a>

在您配置复制并使其处于`RUNNING`状态后，该 AWS DMS 服务将管理底层资源的容量以适应不断变化的工作负载。此管理功能根据以下复制设置扩展复制资源：
+ `MinCapacityUnits`
+ `MaxCapacityUnits`

在超过利用率阈值上限一段时间后，复制会纵向扩展；当容量利用率在较长一段时间内低于容量利用率阈值下限时，复制会纵向缩减。

**注意**  
在完全加载过程中，Serverless 复制无法自动缩减。

### 在无服务器中 AWS DMS 调整自动缩放
<a name="CHAP_Serverless.autoscaling.tuning"></a>

要调整您的复制自动缩放参数，我们建议您将设置`MaxCapacityUnits`为最大值，然后让 AWS DMS 管理资源的配置。建议您选择最大的 DCU 最大容量设置来适应事务量的峰值，以便从自动扩缩中获得最大的好处。如果您的复制持续使用最大 DCU，则定价计算器会显示每月的最大成本。最大 DCU 并不代表实际成本，因为您只需为使用的容量付费。

如果您的复制未在满负荷状态下使用其资源，则 AWS DMS 会逐渐取消资源配置以节省成本。但是，由于预置和取消预置资源需要时间，因此我们建议您将 `MinCapacityUnits` 设置为能够应对预计复制工作负载中会出现的任何突然峰值的值。这样可以防止您的复制资源不足，同时 AWS DMS 为更高的工作负载级别配置资源。

如果复制资源的预置不足，最大容量设置太低，无法满足数据需求，或者最小容量太低，无法处理复制工作负载突然激增，则您的 `CapacityUtilization` 指标可能会始终保持在最大值。这可能会导致您的复制失败。如果由于资源配置不足而导致复制失败，则会在复制日志中 AWS DMS 创建一个 out-of-memory事件。当由于复制工作负载突然激增或调整后的配置而出现 out-of-memory情况时，系统具有内置的自动缩放功能来处理这种情况并恢复处理。但是，这种自动恢复机制不是即时的，可能需要一些时间才能生效。为了更快地恢复，您可以通过修改任务配置执行手动操作，具体方法为增加 `MinCapacityUnits` 值，然后恢复任务运行。与等待自动缩放过程相比，这种手动干预可以更快地解决 out-of-memory错误。

## 监控 AWS DMS 无服务器复制
<a name="CHAP_Serverless.monitoring"></a>

AWS 提供了多种用于监控您的 AWS DMS 无服务器复制和响应潜在事件的工具：
+ [AWS DMS 无服务器复制指标](#CHAP_Serverless.monitoring.metrics)
+ [AWS DMS 无服务器复制日志](#CHAP_Serverless.monitoring.logs)

### AWS DMS 无服务器复制指标
<a name="CHAP_Serverless.monitoring.metrics"></a>

无服务器复制监控包括以下统计数据的 Amazon CloudWatch 指标。这些统计数据按每个无服务器复制进行分组。


|  指标  |  单位  |  说明  | 
| --- | --- | --- | 
| CapacityUtilization | 百分比 |  无服务器复制使用的内存百分比  | 
| CDCIncoming改动 | 百分比 |  a 上等待应用于目标 point-in-time的更改事件总数。请注意，这与源终端节点的事务更改速率指标不同。此指标的数字过大 AWS DMS 通常表示无法及时应用捕获的更改，从而导致目标延迟过高。  | 
| CDCLatency来源 | 秒 |  从源端点捕获的最后一个事件与 AWS DMS 实例的当前系统时间戳之间的间隔，以秒为单位。 CDCLatency来源表示源实例和复制实例之间的延迟。High S CDCLatency ource 表示从源捕获更改的过程被延迟。要确定正在进行的复制过程中的延迟，您可以将此指标与 Targe CDCLatency t 一起查看。如果 CDCLatency源和 CDCLatency目标均为高，请先调查 CDCLatency源。 CDCLatency如果源和复制之间没有复制延迟，则源可以为 0。 CDCLatency当复制尝试读取源事务日志中的下一个事件并且与上次从源读取时相比没有新事件时，源也可能变为零。发生这种情况时，复制会将 CDCLatency源重置为 0。  | 
| CDCLatency目标 | 秒 |  在目标上等待提交的第一个事件时间戳与 AWS DMS 实例的当前系统时间戳之间的间隔（秒）。目标延迟是复制实例服务器时间，与转发到目标组件的最早未经确认的事件 ID 时间之间的差异。换句话说，目标延迟是复制实例的时间戳，与已应用但未经 TRG 端点确认的最早事件之间的时间戳之差（99%）。当 CDCLatency Target 为高时，表示将更改事件应用于目标的过程已延迟。要确定正在进行的复制过程中的延迟，您可以将此指标与 S CDCLatency ource 一起查看。如果 CDCLatency Target 为高但 CDCLatency源不高，请调查是否： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/dms/latest/userguide/CHAP_Serverless.Components.html)  | 
| CDCThroughputBandwidthTarget | KB/秒 |  目标的传出数据传输速率，以每秒 KB 数为单位。 CDCThroughput带宽记录采样点上传输的传出数据。如果未找到网络流量，则该值为零。由于 CDC 不发布长时间运行的事务，可能不会记录网络流量。  | 
| CDCThroughputRowsSource | 行/秒 |  源的传入更改速率，以每秒行数为单位。  | 
| CDCThroughputRowsTarget | 行/秒 |  目标的传出更改速率，以每秒行数为单位。  | 
| FullLoadThroughputBandwidthTarget | KB/秒 |  目标在满负载情况下的传出数据传输速率，以每秒 KB 数为单位。  | 
| FullLoadThroughputRowsTarget | 行/秒 |  目标上的完全加载的传出更改，以行/秒为单位。  | 

### AWS DMS 无服务器复制日志
<a name="CHAP_Serverless.monitoring.logs"></a>

在 AWS DMS 迁移过程中 CloudWatch ，您可以使用 Amazon 记录复制信息。您可以在选择复制设置时启用日志记录。

无服务器复制会将状态日志上传到您的 CloudWatch 帐户，以提高对复制进度的可见性并帮助进行故障排除。

AWS DMS 将无服务器链接的日志上传到带有前缀的专用日志组。`dms-serverless-replication-<your replication config resource ID>`在此日志组中，有一个名为的 `dms-serverless-replication-orchestrator-<your replication config resource ID>` 日志流。此日志流报告您的复制的复制状态，并显示一条相关消息，提供有关其在此阶段所做工作的更多详细信息。有关日志条目的示例，请参阅下文的 [无服务器复制日志示例](#CHAP_Serverless.monitoring.logs.examples)。

**注意**  
AWS DMS 在运行复制之前，不会创建日志组或流。 AWS DMS 如果您只创建复制，则不会创建日志组或流。

要查看所运行复制的日志，请按照下列步骤操作：

1. 打开 AWS DMS 控制台，然后从导航窗格中选择**无服务器复制**。将出现**无服务器复制**对话框。

1. 转到**配置**部分，然后在“常规”列中选择**查看无服务器日志**。 CloudWatch 日志组打开。

如果复制失败，则 AWS DMS 会创建一个复制状态为的日志条目`failed`，并显示一条描述失败原因的消息。作为排除复制失败故障的第一步，您应该检查 CloudWatch 日志。

**注意**  
与 AWS DMS Standard 一样，您可以选择对数据迁移本身的进度（即底层复制任务发出的日志）启用更精细的日志记录。您可以在复制设置中，通过将 `Logging` 字段中的 `EnableLogging` 设置为`true` 来启用这些日志，如以下 JSON 示例所示：  

```
{
  "Logging": {
    "EnableLogging": true
  }
}
```
如果您启用这些日志，它们将仅在无服务器复制的 `running` 阶段开始出现。它们将与之前的日志流出现在同一个日志组中，但会出现在新的日志流 `dms-serverless-serv-res-id-{unique identifier}` 下。有关如何解释无服务器复制日志的信息，请参阅以下章节。

#### 无服务器复制日志示例
<a name="CHAP_Serverless.monitoring.logs.examples"></a>

本节包括用于无服务器复制的日志条目示例。

##### 示例：复制开始
<a name="CHAP_Serverless.monitoring.logs.examples.start"></a>

运行无服务器复制时， AWS DMS 会创建一个类似于以下内容的日志条目：

```
{'replication_state':'initializing', 'message': 'Initializing the replication workflow.'}
```

##### 示例：复制失败
<a name="CHAP_Serverless.monitoring.logs.examples.fail"></a>

如果复制的其中一个端点配置不正确，则 AWS DMS 会创建一个类似于以下内容的日志条目：

```
{'replication_state':'failed', 'message': 'Test connection failed for endpoint X.', 'failure_message': 'X'}
```

如果在出现故障后，您在日志中看到此消息，请确保指定的端点运行正常且配置正确。

## 提高了 Oracle 到 Amazon Redshift 和 Amazon S3 的完全加载迁移的吞吐量
<a name="CHAP_Serverless.Throughput"></a>

AWS DMS 显著提高了从 Oracle 到 Amazon Redshift 和 Amazon S3 的满负荷迁移的吞吐量性能。DMS 会自动为表映射中没有自定义 `parallel-load` 选项的表启用此功能。对于具有自定义并行加载选项的表，DMS Serverless 会根据给定的表映射配置来分配表负载。要使用增强的吞吐量，请执行以下操作：
+ 提供不引用分区或边界的选择规则。例如，如果表映射中的表设置包含 `parallel-load`，则 DMS Serverless 将不会使用增强的吞吐量特征。有关更多信息，请参阅 [选择规则和操作](CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.Selections.md)。
+ 将 `MaxFileSize` 和 `WriteBufferSize` 设置为 64 MB。有关更多信息，请参阅 [使用 Amazon Redshift 作为目标时的终端节点设置 AWS DMS](CHAP_Target.Redshift.md#CHAP_Target.Redshift.ConnectionAttrib)。
+ 对于包含稀疏数据的数据存储，建议将 `CompressCsvFiles` 设置为 `true`；对于包含密集数据的数据存储，则设置为 `false`。
+ 将以下任务设置设为 `0`：
  + `ParallelLoadThreads`
  + `ParallelLoadQueuesPerThread`
  + `ParallelApplyThreads`
  + `ParallelApplyQueuesPerThread`
  + `ParallelLoadBufferSize`
+ 将 `MaxFullLoadSubTasks` 设置为 `49` 以支持并行数据迁移。
+ 将 `LOB mode` 设置为 `inline`。有关更多信息，请参阅 [在任务中为源数据库设置 LOB 支持 AWS DMS](CHAP_Tasks.LOBSupport.md)。

AWS DMS 不为以下复制提供增强的吞吐量性能：
+ 使用并行加载对表进行复制。有关更多信息，请参阅 [对所选表、视图和集合使用并行加载](CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.Tablesettings.md#CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.Tablesettings.ParallelLoad)。
+ 使用数据转换规则进行复制。
+ 使用筛选规则进行复制。
+ 使用 转换规则进行复制。
+ 以 Amazon Redshift Serverless 为目标进行复制。

## 了解无服务器中的 AWS DMS 存储自动扩展
<a name="CHAP.Serverless.storage.autoscaling"></a>

当您启动复制过程时， AWS DMS Serverless 会为复制分配 100GB 的初始存储空间。存储空间主要由日志文件和缓存的事务消耗。对于缓存事务，仅在需要将缓存的事务写入磁盘时消耗存储空间。因此， AWS DMS Serverless 不会使用大量存储空间。一些例外情况包括：
+ 产生大量事务负载的超大型表。加载大型表可能需要花费一些时间，因此，在大型表加载期间，很有可能将缓存的事务写入磁盘。
+ 配置为在加载缓存的事务之前暂停的任务。在此情况下，将缓存所有事务，直到为所有表完成完全加载。在使用此配置时，缓存的事务可能会占用大量存储空间。
+ 使用将加载到 Amazon Redshift 中的表配置的任务。在目标为 Amazon Aurora 的情况下，此配置不会成为问题。

因此， AWS DMS Serverless 每 15 分钟监控一次存储利用率。一旦分配的存储利用率达到90％， AWS DMS Serverless就会通过额外的存储来扩大复制范围。如果复制的存储空间用量达到 100%，并且复制任务在扩缩过程之前或期间失败，则成功完成扩缩后，DMS Serverless 会恢复这些任务。

**注意**  
  
当您继续执行先前停止的任务时，对于任何未完成的表，将从头开始重新启动完全加载操作。
存储扩缩事件期间对 DMS 任务性能没有影响。
两次存储自动扩缩事件之间没有冷却期。