本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
RDS for PostgreSQL
完成以下步骤,使用适用于 PostgreSQL 的 Amazon RDS 配置 OpenSearch 摄取管道。
RDS for PostgreSQL 先决条件
在创建 OpenSearch 摄取管道之前,请执行以下步骤:
-
在 Amazon RDS 中创建自定义数据库参数组以配置逻辑复制。
rds.logical_replication=1有关更多信息,请参阅 Performing logical replication for Amazon RDS for PostgreSQL。
-
选择或创建 RDS for PostgreSQL 数据库实例,并将步骤 1 创建的参数组与该数据库实例相关联。
-
使用 Amazon RDS 和 AWS Secrets Manager的密码管理,在 Amazon RDS 实例上设置用户名和密码身份验证。您也可以通过创建密钥管理器密钥来创建 username/password 组合。
-
如果您使用完整的初始快照功能,请创建一个 AWS KMS key 和一个 IAM 角色以将数据从 Amazon RDS 导出到 Amazon S3。
IAM 角色还必须具有以下权限策略:
该角色还应拥有以下信任关系:
-
选择或创建 OpenSearch 服务域或 OpenSearch 无服务器集合。有关更多信息,请参阅创建 OpenSearch 服务域和创建集合。
-
将基于资源的策略附加到域,或将数据访问策略附加到集合。这些访问策略允许 OpenSearch Ingestion 将数据从 Amazon RDS 数据库实例写入您的域或集合。
步骤 1:配置管道角色
完成 Amazon RDS 管道先决条件设置后,配置管道角色,以便在管道配置中使用。还需为该角色添加以下针对 Amazon RDS 源的权限:
步骤 2:创建管道
按如下方式配置 OpenSearch 摄取管道,该管道将 RDS for PostgreSQL 实例指定为源。
version: "2" rds-postgres-pipeline: source: rds: db_identifier: "instance-id" engine: postgresql database: "database-name" tables: include: - "schema1.table1" - "schema2.table2" s3_bucket: "bucket-name" s3_region: "bucket-region" s3_prefix: "prefix-name" export: kms_key_id: "kms-key-id" iam_role_arn: "export-role-arn" stream: true aws: sts_role_arn: "arn:aws:iam::account-id:role/pipeline-role" region: "us-east-1" authentication: username: ${{aws_secrets:secret:username}} password: ${{aws_secrets:secret:password}} sink: - opensearch: hosts: ["https://search-mydomain.us-east-1.es.amazonaws.com"] index: "${getMetadata(\"table_name\")}" index_type: custom document_id: "${getMetadata(\"primary_key\")}" action: "${getMetadata(\"opensearch_action\")}" document_version: "${getMetadata(\"document_version\")}" document_version_type: "external" aws: sts_role_arn: "arn:aws:iam::account-id:role/pipeline-role" region: "us-east-1" extension: aws: secrets: secret: secret_id: "rds-secret-id" region: "us-east-1" sts_role_arn: "arn:aws:iam::account-id:role/pipeline-role" refresh_interval: PT1H
注意
您可以使用预先配置的 Amazon RDS 蓝图,以创建此管道。有关更多信息,请参阅 使用蓝图。
要使用适用于 PostgreSQL 的 RDS 作为源,您需要为管道配置 VPC 访问权限。您选择的 VPC 应与您的 Amazon RDS 源所使用的 VPC 相同。然后选择一个或多个子网以及一个或多个 VPC 安全组。请注意,管道需要通过网络访问适用于 PostgreSQL 的 RDS 数据库,因此您还应验证您的 Amazon RDS 实例是否配置了 VPC 安全组,该安全组允许从管道的 VPC 安全组到数据库端口的入站流量。有关更多信息,请参阅使用安全组控制访问权限。
如果您使用创建管道,则还必须将管道连接到 VPC,才能使用适用于 PostgreSQL 的 RDS 作为源。 AWS 管理控制台 要执行此操作,请找到网络配置部分,选择连接到 VPC,然后从提供的任意一个默认选项中选择 CIDR,或者选择自己的 CIDR。CIDR 块必须使用 /24 前缀长度。您可以使用 RFC 1918 最佳现行实践中定义的私有地址空间中的任何 /24 CIDR。
要提供自定义 CIDR,请从下拉菜单中选择其他。为避免 OpenSearch Ingestion 和 Amazon RDS 之间的 IP 地址冲突,请确保 Amazon RDS VPC CIDR 与用于摄取的 CIDR 不同。 OpenSearch
有关更多信息,请参阅为管道配置 VPC 访问权限。
数据一致性
该管道通过持续轮询或接收来自 Amazon RDS 实例的更改以及更新 OpenSearch索引中的相应文档来确保数据一致性。
OpenSearch 摄取支持端到端确认,以确保数据的耐久性。管道读取快照或流时,它会动态创建分区以进行并行处理。当管道在载入 OpenSearch 域或集合中的所有记录后收到确认时,该管道将分区标记为已完成。如果您想采集到 OpenSearch 无服务器搜索集合中,则可以在管道中生成文档 ID。如果您想采集到 OpenSearch Serverless 时间序列集合中,请注意,该管道不会生成文档 ID,因此您必须在流水线接收器配置document_id: "${getMetadata(\"primary_key\")}"中省略。
OpenSearch 摄取管道还将传入的事件操作映射到相应的批量索引操作中,以帮助采集文档。这样可以保持数据的一致性,这样 Amazon RDS 中的每项数据更改都会与中 OpenSearch相应的文档更改保持一致。
映射数据类型
OpenSearch 摄取管道将 PostgreSQL 数据类型映射到适合 OpenSearch 服务域或集合使用的表示形式。如果中未定义映射模板 OpenSearch,则根据第一个发送的文档使用
下表列出了适用于 PostgreSQL 的 RDS 数据类型和相应的 OpenSearch 字段类型。 OpenSearch 如果未定义显式映射,则默认 OpenSearch 字段类型列显示中对应的字段类型。在这种情况下,使用动态映射 OpenSearch 自动确定字段类型。推荐 OpenSearch 字段类型列是在映射模板中明确指定的相应推荐字段类型。这些字段类型与 RDS for PostgreSQL 中的数据类型更加一致,通常可以在中启用更好的搜索功能。 OpenSearch
| RDS for PostgreSQL 数据类型 | 默认 OpenSearch 字段类型 | 推荐的 OpenSearch 字段类型 |
|---|---|---|
| smallint | 长整数 | short |
| integer | 长整数 | integer |
| bigint | 长整数 | 长整数 |
| decimal | text | 双精度或关键字 |
| numeric[ (p, s) ] | text | 双精度或关键字 |
| real | float | 浮点数 |
| double precision | 浮点数 | double |
| smallserial | 长整数 | short |
| Serial | 长整数 | integer |
| bigserial | 长整数 | 长整数 |
| money | object | object |
| character varying(n) | text | text |
| varchar(n) | text | text |
| character(n) | text | text |
| char(n) | text | text |
| bpchar(n) | text | text |
| bpchar | text | text |
| text | text | text |
| enum | text | text |
| bytea | text | binary |
| timestamp [ (p) ] [没有时区] | 长整数(以 epoch 毫秒为单位) | date |
| 有时区的 timestamp [ (p) ] | 长整数(以 epoch 毫秒为单位) | date |
| date | 长整数(以 epoch 毫秒为单位) | date |
| time [ (p) ] [没有时区] | 长整数(以 epoch 毫秒为单位) | date |
| 有时区的 time [ (p) ] | 长整数(以 epoch 毫秒为单位) | date |
| interval [ fields ] [ (p) ] | 文本(ISO8601 格式) | text |
| 布尔值 | 布尔值 | 布尔值 |
| point | 文本(采用 WKT 格式) | geo_shape |
| 折线图 | 文本(采用 WKT 格式) | geo_shape |
| lseg | 文本(采用 WKT 格式) | geo_shape |
| box | 文本(采用 WKT 格式) | geo_shape |
| path | 文本(采用 WKT 格式) | geo_shape |
| 多边形 | 文本(采用 WKT 格式) | geo_shape |
| circle | object | object |
| cidr | text | text |
| inet | text | text |
| macaddr | text | text |
| macaddr8 | text | text |
| bit(n) | 长整数 | 字节、短整数、整数或长整数(具体取决于位数) |
| bit varying(n) | 长整数 | 字节、短整数、整数或长整数(具体取决于位数) |
| json | object | object |
| jsonb | object | object |
| jsonpath | text | text |
我们建议您在摄取管道中配置死信队列 (DLQ)。 OpenSearch 如果您已配置队列,则 OpenSearch 服务会将所有因动态映射失败而无法提取的失败文档发送到队列。
如果自动映射失败,则可以在管道配置中使用 template_type 和 template_content 来定义显式映射规则。或者,您可以在启动管道之前直接在搜索域或集合中创建映射模板。
限制
为适用于 PostgreSQL 的 RDS 设置 OpenSearch 摄取管道时,请考虑以下限制:
-
该集成仅支持每个管道一个 PostgreSQL 数据库。
-
该集成目前不支持跨区域数据提取;您的 Amazon RDS 实例和 OpenSearch 域必须处于同一位置。 AWS 区域
-
该集成目前不支持跨账户数据提取;您的 Amazon RDS 实例和 OpenSearch 摄取管道必须处于同一位置。 AWS 账户
-
确保 Amazon RDS 实例启用了使用身份验证 AWS Secrets Manager,这是唯一支持的身份验证机制。
-
无法更新现有流水线配置以从不同的数据库或不同的表中 and/or 提取数据。要更新管道的数据库 and/or表名称,必须停止管道并使用更新的配置重新启动管道,或者创建新的管道。
-
通常不支持数据定义语言(DDL)语句。以下情况下,数据一致性将无法得到保证:
-
主键已更改(add/delete/重命名)。
-
表格是 dropped/truncated。
-
列名或数据类型已发生更改。
-
-
如果要同步的 PostgreSQL 表未定义主键,则无法保证数据一致性。您需要在中正确定义自定义
document_id选项 OpenSearch 和接收器配置才能同步 updates/deletes 到 OpenSearch。 -
不支持 RDS 多可用区数据库集群。
-
支持的版本:PostgreSQL 16 及更高版本。
推荐 CloudWatch 警报
建议使用以下 CloudWatch 指标来监控您的摄取管道的性能。这些指标可帮助您确定处理的导出数据量、处理的流事件量、处理导出和流事件时的错误数以及写入目标的文档数量。您可以设置 CloudWatch 警报,以便在其中一个指标在指定时间内超过指定值时执行操作。
| 指标 | 说明 |
|---|---|
pipeline-name.rds.credentials已更改 |
该指标表示 AWS 密钥轮换的频率。 |
pipeline-name.rds.executor RefreshErrors |
此指标表示无法刷新 AWS 密钥。 |
pipeline-name.rds.export RecordsTotal |
该指标表示从适用于 PostgreSQL 的亚马逊 RDS 导出的记录数量。 |
pipeline-name.rds.export RecordsProcessed |
该指标表示 OpenSearch 摄取管道处理的记录数量。 |
pipeline-name.rds.export RecordProcessingErrors |
该指标表示从适用于 PostgreSQL 的 Amazon RDS 实例读取数据时, OpenSearch 摄取管道中出现的处理错误数量。 |
pipeline-name.rds.export RecordsSuccessTotal |
该指标指示成功处理的导出记录总数。 |
pipeline-name.rds.export RecordsFailedTotal |
该指标指示处理失败的导出记录总数。 |
pipeline-name.rds.bytes 已接收 |
此指标表示 OpenSearch 摄取管道接收的总字节数。 |
pipeline-name.rds.bytes已处理 |
此指标表示 OpenSearch 摄取管道处理的总字节数。 |
pipeline-name.rds.stream RecordsSuccessTotal |
该指标指示该流中成功处理的记录总数。 |
pipeline-name.rds.stream RecordsFailedTotal |
该指标指示该流中处理失败的记录总数。 |