

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

# 创建以 Neptune 为目标的 Amazon DMS 复制任务
<a name="dms-neptune-replication"></a>

创建表映射和图形映射配置后，使用以下过程将数据从源存储加载到 Neptune。有关问题的更多详细信息，请查阅 Amazon DMS 文档。 APIs 

## 创建 Amazon DMS 复制实例
<a name="dms-neptune-replication-instance"></a>

在运行 Neptune 数据库集群的 VPC 中创建 Amazon DMS 复制实例（参见《 Amazon DMS 用户[指南》[CreateReplicationInstance](https://docs.amazonaws.cn/dms/latest/APIReference/API_CreateReplicationInstance.html)中的 “使用 Amazon DMS 复制实例](https://docs.amazonaws.cn/dms/latest/userguide/CHAP_ReplicationInstance.html)”）。你可以使用如下 Amazon CLI 命令来做到这一点：

```
aws dms create-replication-instance \
    --replication-instance-identifier {{(the replication instance identifier)}} \
    --replication-instance-class {{(the size and capacity of the instance, like 'dms.t2.medium')}} \
    --allocated-storage {{(the number of gigabytes to allocate for the instance initially)}} \
    --engine-version {{(the DMS engine version that the instance should use)}} \
    --vpc-security-group-ids {{(the security group to be used with the instance)}}
```

## 为源数据库创建 Amazon DMS 终端节点
<a name="dms-neptune-source-endpoint"></a>

下一步是为您的源数据存储创建一个 Amazon DMS 终端节点。你可以 Amazon CLI 这样使用 Amazon DMS [CreateEndpoint](https://docs.amazonaws.cn/dms/latest/APIReference/API_CreateEndpoint.html)API：

```
aws dms create-endpoint \
    --endpoint-identifier {{(source endpoint identifier)}} \
    --endpoint-type source \
    --engine-name {{(name of source database engine)}} \
    --username {{(user name for database login)}} \
    --password {{(password for login)}} \
    --server-name {{(name of the server)}} \
    --port {{(port number)}} \
    --database-name {{(database name)}}
```

## 设置 Amazon S3 存储桶以供 Neptune 用于暂存数据
<a name="dms-neptune-s3-staging-bucket"></a>

如果您没有可用于暂存数据的 Amazon S3 桶，请按照以下说明创建一个桶：《Amazon S3 入门指南》中的[创建桶](https://docs.amazonaws.cn/AmazonS3/latest/userguide/CreatingABucket.html)，或《控制台用户指南》中的[如何创建 S3 桶？](https://docs.amazonaws.cn/AmazonS3/latest/userguide/create-bucket.html)。

如果您还没有创建用于授予对桶的 `GetObject`、`PutObject`、`DeleteObject` 和 `ListObject` 权限的 IAM policy，则需要创建此策略：

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "ListObjectsInBucket",
      "Effect": "Allow",
      "Action": [
        "s3:ListBucket"
      ],
      "Resource": [
        "arn:aws:s3:::{{amzn-s3-demo-bucket}}"
      ]
    },
    {
      "Sid": "AllObjectActions",
      "Effect": "Allow",
      "Action": [
        "s3:GetObject",
        "s3:PutObject",
        "s3:DeleteObject"
      ],
      "Resource": [
        "arn:aws:s3:::{{amzn-s3-demo-bucket}}/*"
      ]
    }
  ]
}
```

------

如果 Neptune 数据库集群启用了 IAM 身份验证，则还需要包括以下策略：

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "VisualEditor0",
      "Effect": "Allow",
      "Action": "neptune-db:*",
      "Resource": "arn:aws:neptune-db:{{us-east-1}}:{{111122223333}}:{{cluster-resource-id}}/*"
    }
  ]
}
```

------

创建 IAM 角色作为将策略附加到的可信文档：

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "",
      "Effect": "Allow",
      "Principal": {
        "Service": "dms.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    },
    {
      "Sid": "neptune",
      "Effect": "Allow",
      "Principal": {
        "Service": "rds.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}
```

------

将策略附加到角色后，将该角色附加到您的 Neptune 数据库集群。这将允许使用存储桶 Amazon DMS 来暂存正在加载的数据。

## 在 Neptune VPC 中创建 Amazon S3 端点
<a name="dms-neptune-s3-endpoint"></a>

现在，在您的 Neptune 集群所在的 VPC 中，为中间 Amazon S3 桶创建 VPC 网关端点。您可以使用 Amazon Web Services 管理控制台 或 Amazon CLI 来执行此操作，如[创建网关终端节点](https://docs.amazonaws.cn/vpc/latest/userguide/vpce-gateway.html#create-gateway-endpoint)中所述。

## 为 Neptune 创建 Amazon DMS 目标端点
<a name="dms-neptune-target-endpoint"></a>

为您的目标 Neptune 数据库集群创建 Amazon DMS 终端节点。你可以将 Amazon DMS [CreateEndpoint](https://docs.amazonaws.cn/dms/latest/APIReference/API_CreateEndpoint.html)API 与`NeptuneSettings`参数配合使用，如下所示：

```
aws dms create-endpoint \
    --endpoint-identifier {{(target endpoint identifier)}} \
    --endpoint-type target \
    --engine-name neptune \
    --server-name {{(name of the server)}} \
    --port {{(port number)}} \
    --neptune-settings '{ \
      "ServiceAccessRoleArn": "{{(ARN of the service access role)}}", \
      "S3BucketName": "{{(name of S3 bucket to use for staging files when migrating)}}", \
      "S3BucketFolder": "{{(name of the folder to use in that S3 bucket)}}", \
      "ErrorRetryDuration": {{(number of milliseconds to wait between bulk-load retries)}}, \
      "MaxRetryCount": {{(the maximum number of times to retry a failing bulk-load job)}}, \
      "MaxFileSize": {{(maximum file size, in bytes, of the staging files written to S3)}}, \
      "IamAuthEnabled": {{(set to true if IAM authentication is enabled on the Neptune cluster)}} }'
```

在`NeptuneSettings`参数中传递给 Amazon DMS `CreateEndpoint` API 的 JSON 对象具有以下字段：

****
+ **`ServiceAccessRoleArn`** – *（必需）*IAM 角色的 ARN，该角色允许对用于暂存迁移到 Neptune 的数据的 S3 桶进行精细访问。如果对 Neptune 数据库集群启用了 IAM 授权，则此角色还应有权访问该数据库集群。
+ **`S3BucketName`** – *（必需）*对于完全加载迁移，复制实例会将所有 RDS 数据转换为 CSV、四元组文件并将其上传到 S3 中的此暂存桶，然后将其批量加载到 Neptune。
+ **`S3BucketFolder`** – *（必需）*要在 S3 暂存桶中使用的文件夹。
+ **`ErrorRetryDuration`** – *（可选）*Neptune 请求失败后在发出重试请求之前等待的毫秒数。默认值是 250。
+ **`MaxRetryCount`**—*（可选）*在可重试失败后 Amazon DMS 应发出的最大重试请求数。默认值为 5。
+ **`MaxFileSize`** – *（可选）*在迁移期间，保存到 S3 的各个暂存文件的最大大小（以字节为单位）。默认值是 1048576 KB（1 GB）。
+ **`IsIAMAuthEnabled`** – *（可选）*如果在 Neptune 数据库集群上启用了 IAM 身份验证，则设置为 `true`，否则设置为 `false`。默认值为 `false`。

## 测试与新端点的连接
<a name="dms-neptune-test-endpoints"></a>

你可以使用 Amazon DMS [TestConnection](https://docs.amazonaws.cn/dms/latest/APIReference/API_TestConnection.html)API 测试与每个新端点的连接，如下所示：

```
aws dms test-connection \
    --replication-instance-arn {{(the ARN of the replication instance)}} \
    --endpoint-arn {{(the ARN of the endpoint you are testing)}}
```

## 创建 Amazon DMS 复制任务
<a name="dms-neptune-replication-task"></a>

成功完成上述步骤后，使用如下所示的 Amazon DMS [CreateReplicationTask](https://docs.amazonaws.cn/dms/latest/APIReference/API_CreateReplicationTask.html.html)API 创建用于将数据从源数据存储迁移到 Neptune 的复制任务：

```
aws dms create-replication-task \
    --replication-task-identifier {{(name for the replication task)}} \
    --source-endpoint-arn {{(ARN of the source endpoint)}} \
    --target-endpoint-arn {{(ARN of the target endpoint)}} \
    --replication-instance-arn {{(ARN of the replication instance)}} \
    --migration-type full-load \
    --table-mappings {{(table-mapping JSON object or URI like 'file:///tmp/table-mappings,json')}} \
    --task-data {{(a GraphMappingConfig object or URI like 'file:///tmp/graph-mapping-config.json')}}
```

`TaskData` 参数提供 [GraphMappingConfig](dms-neptune-graph-mapping.md)，用于指定所复制的数据应如何存储在 Neptune 中。

## 启动 Amazon DMS 复制任务
<a name="dms-neptune-start-task"></a>

现在，您可以启动复制任务：

```
aws dms start-replication-task
    --replication-task-arn {{(ARN of the replication task started in the previous step)}}
    --start-replication-task-type start-replication
```