

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

# 教程：使用 Amazon Ingestion 将数据提取到域中 OpenSearch
<a name="osis-get-started"></a>

本教程向您展示如何使用 Amazon OpenSearch Ingestion 配置简单的管道并将数据提取到亚马逊 OpenSearch 服务域中。*管*道是 OpenSearch Ingestion 预置和管理的资源。您可以使用管道筛选、丰富、转换、标准化和聚合数据，以便在 S OpenSearch ervice 中进行下游分析和可视化。

本教程将指导您完成快速启动并运行管道的基本步骤。有关更全面的说明，请参阅 [创建管道](creating-pipeline.md#create-pipeline)。

在本教程中，您将完成以下步骤：

1. [创建域](#osis-get-started-access)。

1. [创建管道](#osis-get-started-pipeline)。

1. [摄取一些样本数据](#osis-get-started-ingest)。

在本教程中，您将创建以下资源：
+ 管道写入的名为 `ingestion-domain` 的域
+ 名为 `ingestion-pipeline` 的管道

## 所需的权限
<a name="osis-get-started-permissions"></a>

要完成此教程，您的用户或角色必须已经附加[基于身份的策略](security-iam-serverless.md#security-iam-serverless-id-based-policies)，并且具有以下最低权限。这些权限允许您创建管道角色和附加策略（`iam:Create*` 和 `iam:Attach*`）、创建或修改域（`es:*`）以及使用管道（`osis:*`）。

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

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement":[
      {
         "Effect":"Allow",
         "Resource":"*",
         "Action":[
            "osis:*",
            "iam:Create*",
            "iam:Attach*",
            "es:*"
         ]
      },
      {
         "Resource":[
            "arn:aws:iam::111122223333:role/OpenSearchIngestion-PipelineRole"
         ],
         "Effect":"Allow",
         "Action":[
            "iam:CreateRole",
            "iam:AttachRolePolicy",
            "iam:PassRole"
         ]
      }
   ]
}
```

------

## 步骤 1：创建管道角色
<a name="osis-get-started-role"></a>

首先，创建管道将扮演的角色以访问 OpenSearch 服务域接收器。在本教程后面的部分中，您将在管道配置中包含此角色。

**要创建管道角色**

1. 打开 AWS Identity and Access Management 控制台，网址为[https://console.aws.amazon.com/iamv2/](https://console.aws.amazon.com/iamv2/ )。

1. 选择**策略**，然后选择**创建策略**。

1. 在本教程中，您将数据摄取到名为 `ingestion-domain` 的域，该域将在下一步中创建。选择 **JSON**，然后将下面的策略粘贴到编辑器中。使用您的账户 ID 替换 `your-account-id`，并在必要时修改区域。

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

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": "es:DescribeDomain",
               "Resource": "arn:aws:es:us-east-1:111122223333:domain/ingestion-domain"
           },
           {
               "Effect": "Allow",
               "Action": "es:ESHttp*",
               "Resource": "arn:aws:es:us-east-1:111122223333:domain/ingestion-domain/*"
           }
       ]
   }
   ```

------

   如果您想将数据写入*现有*域，请使用您的域名替换 `ingestion-domain`。
**注意**  
为简单起见，本教程使用宽泛的访问策略。但是，在生产环境中，建议您对管道角色应用严格一些的访问策略。有关提供最低所需权限的策略示例，请参阅 [向 Amazon OpenSearch Ingestion 管道授予对域名的访问权限](pipeline-domain-access.md)。

1. 依次选择**下一步**、**下一步**，然后命名您的策略 **pipeline-policy**。

1. 选择**创建策略**。

1. 然后，创建一个角色并将策略附加到该角色。选择 **角色**，然后选择 **创建角色**。

1. 选择**自定义信任策略**，并将以下策略粘贴到编辑器中：

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

****  

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

------

1. 选择**下一步**。然后搜索并选择（您刚刚创建的）**pipeline-policy**。

1. 选择 “**下一步**” 并命名角色**PipelineRole**。

1. 选择**创建角色**。

请记住角色的 Amazon 资源名称（ARN）（例如，`arn:aws:iam::your-account-id:role/PipelineRole`）。您创建管道时需要用到。

## 步骤 2：创建域
<a name="osis-get-started-access"></a>

首先，创建名为 `ingestion-domain` 的域，以向其中摄取数据。

在[https://console.aws.amazon.com/aos/家](https://console.aws.amazon.com/aos/home)中导航至 Amazon S OpenSearch ervice 控制台，[创建一个满足以下要求的域名](createupdatedomains.md)：
+ 正在运行 OpenSearch 1.0 或更高版本，或者运行 Elasticsearch 7.4 或更高版本
+ 使用公有访问
+ 不使用精准访问控制

**注意**  
这些要求是为了让本教程简单易懂。在生产环境中， and/or 您可以使用精细的访问控制来配置具有 VPC 访问权限的域。要使用精细访问控制，请参阅[映射管道角色](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/pipeline-domain-access.html#pipeline-access-domain)。

该域必须具有授予 `OpenSearchIngestion-PipelineRole` IAM 角色权限的访问策略， OpenSearch 服务将在下一步中为您创建该角色。管道将代入此角色，以便将数据发送到域接收器。

确保该域具有以下域-级别访问策略，该策略授予对该域的管道角色访问权限。替换成您自己的区域和账户 ID：

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::111122223333:role/OpenSearchIngestion-PipelineRole"
      },
      "Action": "es:*",
      "Resource": "arn:aws:es:us-east-1:111122223333:domain/ingestion-domain/*"
    }
  ]
}
```

------

有关创建域级访问策略的更多信息，请参阅 [基于资源的策略](ac.md#ac-types-resource)。

如果您已经创建了域，请修改其现有访问策略以向 `OpenSearchIngestion-PipelineRole` 提供上述权限。

## 步骤 3：创建管道
<a name="osis-get-started-pipeline"></a>

现在您已拥有域，即可创建管道。

**创建管道**

1. 在亚马逊 OpenSearch 服务控制台中，从左侧导航窗格中选择 Pipelin **es**。

1. 选择 **Create pipeline（创建管道）**。

1. 选择**空白**管道，然后选择**选择蓝图**。

1. 在本教程中，我们将创建使用 [HTTP 源](https://opensearch.org/docs/latest/data-prepper/pipelines/configuration/sources/http-source/)插件的简单管道。插件接受 JSON 数组格式的日志数据。我们将指定单个 OpenSearch 服务域作为接收器，并将所有数据提取到`application_logs`索引中。

   在**源**菜单中，选择 **HTTP**。对于**路径**，输入 **/logs**。

1. 在本教程中，为简单起见，我们将配置管道的公共访问权限。对于**源网络选项**，选择**公共访问**。有关配置 VPC 访问权限的更多信息，请参阅 [为 Amazon OpenSearch Ingestion 管道配置 VPC 访问权限](pipeline-security.md)。

1. 选择**下一步**。

1. 对于**处理器**，输入**日期**并选择**添加**。

1. 启用**自收到之时起**。将所有其他设置保留为默认值。

1. 选择**下一步**。

1. 配置接收器详细信息。对于**OpenSearch 资源类型**，请选择**托管群集**。然后选择您在上一节中创建的 OpenSearch 服务域。

   在**索引名称**中，输入**应用程序**日志。 OpenSearch 如果此索引尚不存在，Ingestion 会自动在域中创建该索引。

1. 选择**下一步**。

1. 将管道命名为 **ingestion-pipeline**。将容量设置保留为默认值。

1. 对于**管道角色**，选择**创建和使用新的服务角色**。管道角色为管道提供所需权限，使其能够向域接收器写入数据并从基于拉取的源读取数据。选择此选项即表示您允许 OpenSearch Ingestion 为您创建角色，而不是在 IAM 中手动创建角色。有关更多信息，请参阅 [在 Amazon OpenSearch Ingestion 中设置角色和用户](pipeline-security-overview.md)。

1. 对于**服务角色名称后缀**，请输入**PipelineRole**。在 IAM 中，角色采用的格式为 `arn:aws:iam::your-account-id:role/OpenSearchIngestion-PipelineRole`。

1. 选择**下一步**。检查您的管道配置，然后选择**创建管道**。管道需要 5-10 分钟才能变为活动状态。

## 步骤 4：摄取一些示例数据
<a name="osis-get-started-ingest"></a>

当管道状态为 `Active` 时，您可以开始将数据摄取到管道。您必须使用 [Signature 版本 4](https://docs.aws.amazon.com/general/latest/gr/signature-version-4.html) 对向管道发出的所有 HTTP 请求进行签名。使用诸如 [Postman](https://www.getpostman.com/) 或 [awscurl](https://github.com/okigan/awscurl) 之类的 HTTP 工具向管道发送一些数据。与将数据直接索引到域一样，将数据提取到管道始终需要 IAM 角色或 [IAM 访问密钥和私有密钥](https://docs.aws.amazon.com/powershell/latest/userguide/pstools-appendix-sign-up.html)。

**注意**  
签署请求的主体必须具有 `osis:Ingest` IAM 权限。

首先，从**管道设置**页面获取摄取 URL：

![\[Pipeline settings page showing ingestion URL and other configuration details.\]](http://docs.aws.amazon.com/zh_cn/opensearch-service/latest/developerguide/images/pipeline-endpoint.png)


然后，摄取一些示例数据。以下请求使用 [awscurl](https://github.com/okigan/awscurl) 向管道发送单个日志文件：

```
awscurl --service osis --region us-east-1 \
    -X POST \
    -H "Content-Type: application/json" \
    -d '[{"time":"2014-08-11T11:40:13+00:00","remote_addr":"122.226.223.69","status":"404","request":"GET http://www.k2proxy.com//hello.html HTTP/1.1","http_user_agent":"Mozilla/4.0 (compatible; WOW64; SLCC2;)"}]' \
    https://pipeline-endpoint.us-east-1.osis.amazonaws.com/logs
```

您现在会看到 `200 OK` 响应。如果您遇到身份验证错误，可能是因为您从与管道不同的账户提取数据。请参阅[修复权限问题](#osis-get-started-troubleshoot)。

现在，查询 `application_logs` 索引以确保成功提取您的日志条目：

```
awscurl --service es --region us-east-1 \
     -X GET \
     https://search-ingestion-domain.us-east-1.es.amazonaws.com/application_logs/_search | json_pp
```

**示例响应**:

```
{
   "took":984,
   "timed_out":false,
   "_shards":{
      "total":1,
      "successful":5,
      "skipped":0,
      "failed":0
   },
   "hits":{
      "total":{
         "value":1,
         "relation":"eq"
      },
      "max_score":1.0,
      "hits":[
         {
            "_index":"application_logs",
            "_type":"_doc",
            "_id":"z6VY_IMBRpceX-DU6V4O",
            "_score":1.0,
            "_source":{
               "time":"2014-08-11T11:40:13+00:00",
               "remote_addr":"122.226.223.69",
               "status":"404",
               "request":"GET http://www.k2proxy.com//hello.html HTTP/1.1",
               "http_user_agent":"Mozilla/4.0 (compatible; WOW64; SLCC2;)",
               "@timestamp":"2022-10-21T21:00:25.502Z"
            }
         }
      ]
   }
}
```

## 修复权限问题
<a name="osis-get-started-troubleshoot"></a>

如果您按照教程中的步骤进行操作，但在尝试提取数据时仍然看到身份验证错误，则可能是因为写入管道的角色与管道本身 AWS 账户 不同。在这种情况下，您需要创建并[担任一个角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use.html)，该角色让您专门用来摄取数据。有关说明，请参阅[提供跨账户摄取访问权限](configure-client.md#configure-client-cross-account)。

## 相关资源
<a name="osis-get-started-next"></a>

本教程介绍了一个通过 HTTP 摄取单个文档的简单用例。在生产场景中，您将配置客户端应用程序（例如 Fluent Bit、Kubernetes 或 Collect OpenTelemetry or）以将数据发送到一个或多个管道。您的管道可能比本教程展示的简单示例复杂得多。

要开始配置您的客户端并摄取数据，请参阅以下资源：
+ [创建和管理管道](creating-pipeline.md#create-pipeline)
+ [将您的客户端配置为向 OpenSearch Ingestion 发送数据](configure-client.md)
+ [Data Prepper 文档](https://opensearch.org/docs/latest/clients/data-prepper/index/)