

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

# Zero-ETL 与亚马逊 OpenSearch 服务集成
<a name="openSearch-zero-etl"></a>

**Topics**
+ [以亚马逊 OpenSearch 服务为目的地](#openSearch-0etl-destination)
+ [限制](#docdb-openSearch-limitations)

## 以亚马逊 OpenSearch 服务为目的地
<a name="openSearch-0etl-destination"></a>

OpenSearch 与 Amazon DocumentDB 的服务集成使您能够将满负荷事件和更改数据事件流式传输到 OpenSearch 域中。摄取基础设施以摄取管道的形式托管，它提供了一种高规模、低延迟的机制，可以持续流式传输来自 Amazon Doc OpenSearch umentDB 馆藏的数据。

在满载期间，Zero-ETL 集成首先 OpenSearch 使用摄取管道提取历史满载数据。载入满载数据后，摄取管道将开始从 Amazon Doc OpenSearch umentDB 变更流中读取数据，并最终赶上，以保持 Amazon DocumentDB 和之间近乎实时的数据一致性。 OpenSearch OpenSearch 将文档存储在索引中。从 Amazon DocumentDB 集合传入的数据可以发送到一个索引，也可以分割成不同的索引。采集管道会将 Amazon DocumentDB 集合中的所有创建、更新和删除事件与相应的文档创建、更新和删除 OpenSearch 事件同步，以使两个数据系统保持同步。可以将摄取管道配置为从一个集合中读取数据并写入一个索引，或者从一个集合中读取数据并按条件路由到多个索引。

可以将摄取管道配置为使用以下方法将数据从 Amazon DocumentDB 流式传输到 OpenSearch 亚马逊服务：
+ 仅完全加载
+ 从 Amazon DocumentDB 流式传输变更流事件而不完全加载
+ 完全加载，然后是来自 Amazon DocumentDB 的变更流

要设置摄取管道，请执行以下步骤：

### 步骤 1：创建 Amazon OpenSearch 服务域名或 OpenSearch 无服务器集合
<a name="create-openSearch-domain"></a>

需要具有相应数据读取权限的 Amazon OpenSearch 服务集合。要创建集[合，请参阅《亚马逊 OpenSearch 服务](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/gsg.html)开发者指南》中的 “[亚马逊* OpenSearch 服务入门” 或 “亚马逊 OpenSearch *无服务器](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/serverless-getting-started.html)入门”。请参阅《[亚马逊* OpenSearch 服务开发者指南》中的 Amazon OpenSearch * Ingest](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/ingestion.html) ion，创建具有访问集合或域名写入数据的正确权限的 AIM 角色。

### 步骤 2：在 Amazon DocumentDB 集群上启用变更流
<a name="enablechage-streams"></a>

确保在 Amazon DocumentDB 集群中的所需集合上启用变更流。有关更多信息，请参阅[将变更流与 Amazon DocumentDB 结合使用](change_streams.md)。

### 步骤 3：设置管道角色，使其拥有写入 Amazon S3 存储桶和目标域或集合的权限
<a name="pipeline-role"></a>

在创建 Amazon DocumentDB 集合并启用变更流后，设置要在管道配置中使用的管道角色，并在该角色中添加以下权限：

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "allowReadAndWriteToS3ForExport",
            "Effect": "Allow",
            "Action": [
                "s3:GetObject",
                "s3:AbortMultipartUpload",
                "s3:PutObject",
                "s3:PutObjectAcl"
            ],
            "Resource": [
                "arn:aws:s3:::my-bucket/export/*"
            ]
        }
    ]
}
```

------

为了使 OpenSearch 管道能够将数据写入 OpenSearch 域，该域必须具有允许 **sts\_role\_arn 管道角色**访问该域的域级访问策略。以下示例域访问策略允许您在上一步中创建的名为 `pipeline-role` 的管道角色向名为 `ingestion-domain` 的域写入数据：

```
{
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::{your-account-id}:role/{pipeline-role}"
      },
      "Action": ["es:DescribeDomain", "es:ESHttp*"],
      "Resource": "arn:aws:es:{region}:{your-account-id}:domain/{domain-name}/*"
    }
  ]
}
```

### 步骤 4：添加要创建的管道角色所需的权限 X-ENI
<a name="add-perm-xeni"></a>



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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ec2:AttachNetworkInterface",
                "ec2:CreateNetworkInterface",
                "ec2:CreateNetworkInterfacePermission",
                "ec2:DeleteNetworkInterface",
                "ec2:DeleteNetworkInterfacePermission",
                "ec2:DetachNetworkInterface",
                "ec2:DescribeNetworkInterfaces"
            ],
            "Resource": [
                "arn:aws:ec2:*:420497401461:network-interface/*",
                "arn:aws:ec2:*:420497401461:subnet/*",
                "arn:aws:ec2:*:420497401461:security-group/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "ec2:DescribeDhcpOptions",
                "ec2:DescribeRouteTables",
                "ec2:DescribeSecurityGroups",
                "ec2:DescribeSubnets",
                "ec2:DescribeVpcs",
                "ec2:Describe*"
            ],
            "Resource": "*"
        },
        { 
            "Effect": "Allow",
            "Action": [ "ec2:CreateTags" ],
            "Resource": "arn:aws:ec2:*:*:network-interface/*",
            "Condition": { 
               "StringEquals": { "aws:RequestTag/OSISManaged": "true" } 
            } 
        }
    ]
}
```

------

### 步骤 5：创建管道
<a name="create-opensearch-pipeline"></a>

配置一个将亚马逊文档数据库指定为来源的 OpenSearch 摄取管道。此示例管道配置假设采用变更流获取机制。有关更多信息，请参阅[ OpenSearch 《亚马逊*服务开发者*指南》中的在 Amazon DocumentDB 中使用采集管道](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/configure-client-docdb.html)。 OpenSearch 

## 限制
<a name="docdb-openSearch-limitations"></a>

以下限制适用于亚马逊 DocumentDB 集成 OpenSearch ：
+ 每个管道仅支持将一个 Amazon DocumentDB 集合作为源。
+ Cross-region 不支持数据摄取。您的 Amazon DocumentDB 集群和 OpenSearch 域必须位于同一 AWS 区域。
+ Cross-account 不支持数据摄取。您的 Amazon DocumentDB 集群和 OpenSearch 采集管道必须位于同一个账户中。 AWS 
+ 不支持 Amazon DocumentDB 弹性集群。仅支持 Amazon DocumentDB 基于实例的集群。
+ 确保 Amazon DocumentDB 集群启用了使用 AWS 密钥的身份验证。 AWS 机密是唯一支持的身份验证机制。
+ 无法更新现有的管道配置以从不同的数据库 and/or 中提取不同集合的数据。要更新管道的数据库 and/or 集合名称，必须创建新的管道。