在 Amazon OpenSearch Serverless 中执行重建索引
关键要点
Amazon OpenSearch Serverless 是一种无服务器的部署选项,使搜索和分析工作负载变得更加简单,无需管理基础设施。重建索引的主要用途包括更新或修改索引映射及灾难恢复。Amazon OpenSearch Ingestion 新增了支持 OpenSearch 作为数据源的功能。通过 OpenSearch Ingestion,用户可以轻松地在同一个 Serverless 集合中的两个索引间复制数据。引言
Amazon OpenSearch Serverless 提供了一种便捷的无服务器部署选项,允许客户无需担心基础设施即可运行搜索和分析工作负载。许多 OpenSearch Serverless 用户需要在同一集合内或不同集合之间复制文档,主要出于两种原因:
重建索引 常常需要更新或修改索引映射,以应对不断变化的数据需求或模式变更。灾难恢复 虽然 OpenSearch Serverless 的数据本身具有耐用性,但用户可能希望跨 AWS 区域复制数据,以增强冗余和恢复能力。最近,Amazon OpenSearch Ingestion 引入了支持 OpenSearch 作为数据源的功能。作为一个完全托管的无服务器数据收集器,OpenSearch Ingestion 便于将日志、指标和跟踪数据实时导入 OpenSearch Service 域和 OpenSearch Serverless 集合。我们能够利用这一功能来应对上述两种场合,轻松地在索引间复制数据,简化数据管理任务,消除定制代码的需要。
在本文中,我们将概述在同一个 OpenSearch Serverless 集合中使用 OpenSearch Ingestion 的新源功能来复制数据的步骤。这对于希望更改数据架构的重建索引操作尤为有用。OpenSearch Serverless 和 OpenSearch Ingestion 这两个无服务器服务使用户能够毫不费力地处理数据工作流,从而提供最佳性能和可扩展性。
解决方案概述
下图展示了使用 OpenSearch Ingestion 管道将文档从源索引复制到目标索引的流程。
外网VNP加速实现此解决方案的步骤如下:
创建一个 AWS 身份与访问管理 (IAM) 角色,作为 OpenSearch Ingestion 管道角色。更新附加到 OpenSearch Serverless 集合的数据访问策略。创建一个 OpenSearch Ingestion 管道,简单地从一个索引复制数据到另一个索引,或使用管道创建一个索引模板来定义显式映射,然后根据定义的映射将数据从源索引复制到目标索引。先决条件
开始之前,您需要一个已激活的 OpenSearch Serverless 集合,其中包含您要重建索引复制的索引。有关创建集合的详细信息,请参阅 创建集合。
当集合准备好后,请记录以下详细信息:
OpenSearch Serverless 集合的端点需要复制文档的索引名称如果集合被定义为 VPC 集合,请记下与集合相关联的 网络策略您将在数据摄取管道配置中使用这些详细信息。
创建 IAM 角色作为管道角色
OpenSearch Ingestion 管道需要特定权限,以从源获取数据并写入其目标。在本次演示中,源和目标是相同的,但如果源和目标集合不同,请相应修改策略。
完成以下步骤:
创建一个 IAM 策略 (opensearchingestionpipelinepolicy),为读取数据和将数据发送到 OpenSearch Serverless 集合提供权限。以下是一个示例策略,权限最小化根据需要修改 {accountid}、{region}、{collectionid} 和 {collectionname}:
json{ Version 20121017 Statement [{ Action [ aossBatchGetCollection aossAPIAccessAll ] Effect Allow Resource arnawsaoss{region}{accountid}collection/{collectionid} } { Action [ aossCreateSecurityPolicy aossGetSecurityPolicy aossUpdateSecurityPolicy ] Effect Allow Resource Condition { StringEquals { aosscollection {collectionname} } } }]}
创建一个 IAM 角色 (opensearchingestionpipelinerole),让 OpenSearch Ingestion 管道假设。在创建角色时,使用您创建的策略 (opensearchingestionpipelinepolicy)。角色应具有以下信任关系相应修改 {accountid} 和 {region}:
json{ Version 20121017 Statement [{ Effect Allow Principal { Service osispipelinesamazonawscom } Action stsAssumeRole Condition { StringEquals { awsSourceAccount {accountid} } ArnLike { awsSourceArn arnawsosis{region}{accountid}pipeline/ } } }]}
记录新创建的 IAM 角色的 ARN (arnawsiam111122223333role/opensearchingestionpipelinerole)。
更新附加到 OpenSearch Serverless 集合的数据访问策略
创建 IAM 角色后,您需要更新附加到 OpenSearch Serverless 集合的数据访问策略。数据访问策略控制 OpenSearch Serverless 支持的 OpenSearch 操作的访问,如 PUT ltindexgt 或 GET cat/indices。执行更新,请完成以下步骤:
在 OpenSearch Service 控制台中,导航到 Serverless 下的 Collections。从集合列表中选择你的 OpenSearch Serverless 集合。在 Overview 选项卡的 Data access 部分,选择相关政策。选择 Edit。在 JSON 编辑器中编辑现有 JSON,添加以下 JSON 规则块相应修改 {accountid} 和 {collectionname}:
json{ Rules [{ Resource [ index/{collectionname}/ ] Permission [ aossCreateIndex aossUpdateIndex aossDescribeIndex aossReadDocument aossWriteDocument ] ResourceType index }] Principal [ arnawsiam{accountid}role/opensearchingestionpipelinerole ] Description Provide access to OpenSearch Ingestion Pipeline Role}
您也可以使用视觉编辑器方法选择 Add another rule 并添加上述权限给 arnawsiam{accountid}role/opensearchingestionpipelinerole。
选择 Save。现在您已成功允许 OpenSearch Ingestion 角色对 OpenSearch Serverless 集合执行 OpenSearch 操作。
创建和配置 OpenSearch Ingestion 管道以将数据从一个索引复制到另一个索引
完成以下步骤:
在 OpenSearch Service 控制台中,导航到 Pipelines 下的 Ingestion。选择 Create a pipeline。在 Choose Blueprint 中,选择 OpenSearchDataMigrationPipeline。为 Pipeline name 输入名称例如,sampleingestionpipeline。对于 Pipeline capacity,您可以定义最小和最大容量以扩展资源。此演示中,您可以使用默认值,最小容量为 2 Ingestion OCUs,最大容量为 4 Ingestion OCUs。然而,您可以选择不同的值,因为 OpenSearch Ingestion 会根据您指定的最小和最大 Ingestion OpenSearch Compute UnitsIngestion OCUs根据您的估算工作负载自动扩展管道容量。更新源的以下信息:
解开 hosts 注释,并指定已复制的 OpenSearch Serverless 集合的端点。解开 include 和 indexnameregex 注释,并指定作为源的索引名称在本演示中,我们使用的是 logs20240301。解开 region 注释,并指定 OpenSearch Serverless 集合所在的 AWS 区域例如,useast1。解开 stsrolearn 注释,并指定有权限从 OpenSearch Serverless 集合读取数据的角色例如,arnawsiam111122223333role/opensearchingestionpipelinerole。这与在集合的数据访问策略中添加的角色相同。更新 serverless 标志为 true。如果 OpenSearch Serverless 集合具有 VPC 访问权限,解开 serverlessoptions 和 networkpolicyname 注释,并指定用于集合的网络策略名称。解开 scheduling、interval、indexreadcount 和 starttime 注释,并根据需要修改这些参数。使用这些参数可以确保 OpenSearch Ingestion 管道多次处理索引以获取新文档。 注意:如果指定的接收端集合为 Time series 或 Vector search 类型,可以保持 scheduling、interval、indexreadcount 和 starttime 参数为注释状态。更新目标的以下信息:
解开 hosts 注释,并指定现有 OpenSearch Serverless 集合的端点。解开 stsrolearn 注释,并指定有权限向 OpenSearch Serverless 集合写入数据的角色例如,arnawsiam111122223333role/opensearchingestionpipelinerole。这与在集合的数据访问策略中添加的角色相同。更新 serverless 标志为 true。如果 OpenSearch Serverless 集合具有 VPC 访问权限,解开 serverlessoptions 和 networkpolicyname 注释,并指定用于集合的网络策略名称。更新 index 值,并提供要传输文档的索引名称例如,newlogs20240301。对于 documentid,您可以从源中的文档元数据中获取 ID,并在目标中使用相同的 ID。 但需要注意的是,只有 Search 类型的集合才支持自定义文档 ID。如果您的集合为 Time Series 或 Vector Search 类型,应将 documentid 行注释掉。
可选可以修改 dlq 部分中的 bucket、region 和 stsrolearn 键的值,以在 S3 存储桶中捕获任何失败的请求。 注意:如果配置 DQL,需要为 opensearchingestionpipelinerole 角色提供额外权限。有关所需更改,请参阅 写入死信队列。在本演示中,您不会设置 DQL。可以删除整个 dlq 块。
现在单击 Validate pipeline 验证管道配置。
对于 Network settings,选择您偏好的设置:选择 VPC access,然后选择您的 VPC、子网和安全组以实现私有访问。如果 OpenSearch Serverless 集合具有 VPC 访问权限,建议使用 VPC 终端节点用于所有生产工作负载。选择 Public 使用公共访问。对于本次演示,选择 Public,因为集合也可以从公共网络访问。对于 Log Publishing Option,您可以创建一个新的 Amazon CloudWatch 组或使用现有 CloudWatch 组来写入摄取日志。这提供了有关操作中出现的错误和警告的信息,以便在故障排除时使用。对于本演示,选择 Create new group。选择 Next,确认您为管道设置指定的详细信息。选择 Create pipeline。创建摄取管道需要几分钟时间。管道创建完成后,您将看到在接收端索引例如,newlogs20240301中的文档。所有文档复制完成后,您可以使用 count API 验证文档数量。
完成过程后,您可以选择 停止 或 删除 管道。如果选择保持管道运行,它将根据定义的计划持续从源索引复制新文档。
在本演示中,管道配置中源和接收端的 hosts 参数定义的端点来自同一集合,该集合为 Search 类型。如果集合不同,则需要修改 IAM 角色 (opensearchingestionpipelinerole) 的权限,以便访问两个集合。此外,请确保更新两个集合的数据访问策略,以授予 OpenSearch Ingestion 管道访问权限。
使用 OpenSearch Ingestion 管道创建索引模板以定义映射
在 OpenSearch 中,您可以通过创建 mapping 来定义文档及其字段的存储和索引方式。映射指定文档字段的列表。每个文档中的字段都有一种字段类型,它定义了字段包含的数据类型。如果未定义显式映射,OpenSearch Service 会动态映射每个传入文档中的数据类型。然而,您可以在管道配置中使用 templatetype 参数和 indextemplate 值,以及 templatecontent 参数的 JSON 内容,以定义显式映射规则。您还需要将 indextype 参数定义为 custom。
以下代码展示了管道的接收部分及 indextype、templatetype 和 templatecontent 的使用示例:
yamlsink opensearch # 提供 AWS OpenSearch Service 域的端点 hosts [ ltgt ] aws # 提供具有访问权限的角色 ARN。此角色应与 osispipelinesamazonawscom 具有信任关系 stsrolearn arnawsiam111122223333role/opensearchingestionpipelinerole # 提供域的区域。 region useast1 # 如果接收端是 Amazon OpenSearch Serverless 集合,则启用 serverless 标志 serverless true # serverlessoptions # 在此指定名称以创建或更新无服务器集合的网络策略 # networkpolicyname networkpolicyname # 这将确保源集群中的每个文档写入到目标集群的同一索引 index newlogs20240301 indextype custom templatetype indextemplate templatecontent gt { template { mappings { properties { Data { type text } EncodedColors { type binary } Type { type keyword } LargeDouble { type double } } } } } # 这将确保源集群中的每个文档使用相同的 documentid 写入目标集群 documentid {getMetadata(opensearchdocumentid)} # 如果 AWS OpenSearch Service 域的版本为 Elasticsearch 6x,则启用 distributionversion 设置 # distributionversion es6 # 如果域中的默认压缩设置已更改,请启用并切换 enablerequestcompression 标志。请参阅 https//docsawsamazoncom/op
使用 AWS Snowcone 和 CloudRail 实现安全的 IIoT 次级传感 官方博客
使用AWS Snowcone和CloudRail加强IIoT的二次感测解决方案主要重点在这篇文章中,我们将探讨如何使用AWS Snowcone和CloudRail来安全地整合二次感测技术,解决工业物联...
如何通过解锁 50 个 AWS IoT 事物类型属性来提高设备可发现性 官方博客 物联网
提升设备可发现性:解锁 50 个 AWS IoT 事物类型属性关键要点利用 AWS IoT 事物类型,您可以为设备附加更多属性,提升设备发现能力。AWS IoT Core 默认限制每个设备附加 3 个...