View a markdown version of this page

RDS para PostgreSQL - OpenSearch Servicio Amazon

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

RDS para PostgreSQL

Complete los siguientes pasos para configurar una canalización de OpenSearch ingestión con Amazon RDS para PostgreSQL.

Requisitos previos de PostgreSQL

Antes de crear su canalización de OpenSearch ingestión, lleve a cabo los siguientes pasos:

  1. Cree un grupo de parámetros de base de datos personalizado en Amazon RDS para configurar la replicación lógica.

    rds.logical_replication=1

    Para obtener más información, consulte Replicación lógica de Amazon RDS para PostgreSQL.

  2. Seleccione o cree una instancia de base de datos de RDS para PostgreSQL y asocie el grupo de parámetros creado en el paso 1 a la instancia de base de datos.

  3. Configure la autenticación de nombre de usuario y contraseña en su instancia de Amazon RDS mediante la administración de contraseñas con Amazon RDS y AWS Secrets Manager. También puedes crear una username/password combinación creando un secreto de Secrets Manager.

  4. Si utiliza la función de instantánea inicial completa, cree una función de IAM AWS KMS key y una función de IAM para exportar datos de Amazon RDS a Amazon S3.

    El rol de IAM debe tener la siguiente política de permisos:

    JSON
    { "Version":"2012-10-17", "Statement": [ { "Sid": "ExportPolicy", "Effect": "Allow", "Action": [ "s3:PutObject*", "s3:ListBucket", "s3:GetObject*", "s3:DeleteObject*", "s3:GetBucketLocation" ], "Resource": [ "arn:aws:s3:::s3-bucket-used-in-pipeline", "arn:aws:s3:::s3-bucket-used-in-pipeline/*" ] } ] }

    El rol también debe tener las siguientes relaciones de confianza:

    JSON
    { "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "export.rds.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
  5. Seleccione o cree un dominio de OpenSearch servicio o una colección OpenSearch sin servidor. Para obtener más información, consulte Creación de dominios OpenSearch de servicio y Creación de colecciones.

  6. Adjunte una política basada en recursos al dominio o una política de acceso a datos a la colección. Estas políticas de acceso permiten a OpenSearch Ingestion escribir datos de su instancia de base de datos de Amazon RDS en su dominio o colección.

Paso 1: configurar el rol de canalización

Una vez configurados los requisitos previos de la canalización de Amazon RDS, configure el rol de la canalización que se usará en la configuración de la canalización. Agregue también los siguientes permisos para el origen de Amazon RDS al rol:

JSON
{ "Version":"2012-10-17", "Statement": [ { "Sid": "allowReadingFromS3Buckets", "Effect": "Allow", "Action": [ "s3:GetObject", "s3:DeleteObject", "s3:GetBucketLocation", "s3:ListBucket", "s3:PutObject" ], "Resource": [ "arn:aws:s3:::s3_bucket", "arn:aws:s3:::s3_bucket/*" ] }, { "Sid": "allowNetworkInterfacesActions", "Effect": "Allow", "Action": [ "ec2:AttachNetworkInterface", "ec2:CreateNetworkInterface", "ec2:CreateNetworkInterfacePermission", "ec2:DeleteNetworkInterface", "ec2:DeleteNetworkInterfacePermission", "ec2:DetachNetworkInterface", "ec2:DescribeNetworkInterfaces" ], "Resource": [ "arn:aws:ec2:*:111122223333:network-interface/*", "arn:aws:ec2:*:111122223333:subnet/*", "arn:aws:ec2:*:111122223333:security-group/*" ] }, { "Sid": "allowDescribeEC2", "Effect": "Allow", "Action": [ "ec2:Describe*" ], "Resource": "*" }, { "Sid": "allowTagCreation", "Effect": "Allow", "Action": [ "ec2:CreateTags" ], "Resource": "arn:aws:ec2:*:111122223333:network-interface/*", "Condition": { "StringEquals": { "aws:RequestTag/OSISManaged": "true" } } }, { "Sid": "AllowDescribeInstances", "Effect": "Allow", "Action": [ "rds:DescribeDBInstances" ], "Resource": [ "arn:aws:rds:us-east-2:111122223333:db:*" ] }, { "Sid": "AllowSnapshots", "Effect": "Allow", "Action": [ "rds:DescribeDBSnapshots", "rds:CreateDBSnapshot", "rds:AddTagsToResource" ], "Resource": [ "arn:aws:rds:us-east-2:111122223333:db:DB-id", "arn:aws:rds:us-east-2:111122223333:snapshot:DB-id*" ] }, { "Sid": "AllowExport", "Effect": "Allow", "Action": [ "rds:StartExportTask" ], "Resource": [ "arn:aws:rds:us-east-2:111122223333:snapshot:DB-id*" ] }, { "Sid": "AllowDescribeExports", "Effect": "Allow", "Action": [ "rds:DescribeExportTasks" ], "Resource": "*", "Condition": { "StringEquals": { "aws:RequestedRegion": "us-east-2", "aws:ResourceAccount": "111122223333" } } }, { "Sid": "AllowAccessToKmsForExport", "Effect": "Allow", "Action": [ "kms:Decrypt", "kms:Encrypt", "kms:DescribeKey", "kms:RetireGrant", "kms:CreateGrant", "kms:ReEncrypt*", "kms:GenerateDataKey*" ], "Resource": [ "arn:aws:kms:us-east-2:111122223333:key/export-key-id" ] }, { "Sid": "AllowPassingExportRole", "Effect": "Allow", "Action": "iam:PassRole", "Resource": [ "arn:aws:iam::111122223333:role/export-role" ] }, { "Sid": "SecretsManagerReadAccess", "Effect": "Allow", "Action": [ "secretsmanager:GetSecretValue" ], "Resource": [ "arn:aws:secretsmanager:*:111122223333:secret:*" ] } ] }

Paso 2: crear la canalización

Configure una canalización de OpenSearch ingesta como la siguiente, que especifica una instancia de RDS para PostgreSQL como fuente.

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
nota

Puede utilizar un esquema de Amazon RDS preconfigurado para crear esta canalización. Para obtener más información, consulte Uso de esquemas.

Para usar RDS para PostgreSQL como fuente, debes configurar el acceso a la VPC para la canalización. La VPC que elija debe ser la misma VPC que usa su fuente de Amazon RDS. A continuación, elija una o varias subredes y uno o varios grupos de seguridad de VPC. Tenga en cuenta que la canalización necesita acceso de red a una base de datos de RDS para PostgreSQL, por lo que también debe comprobar que su instancia de Amazon RDS esté configurada con un grupo de seguridad de VPC que permita el tráfico entrante desde el grupo de seguridad de VPC de la canalización al puerto de la base de datos. Para obtener más información, consulte Control de acceso con grupos de seguridad.

Si la usa Consola de administración de AWS para crear una canalización, también debe adjuntarla a su VPC para poder usar RDS para PostgreSQL como fuente. Para ello, busque la sección Configuración de la red, seleccione Adjuntar a la VPC y elija el CIDR de una de las opciones predeterminadas proporcionadas o seleccione una opción propia. El bloque CIDR debe usar una longitud de prefijo de /24. Puede usar cualquier CIDR de /24 desde un espacio de direcciones privado, tal como se define en las mejores prácticas actuales de la RFC 1918.

Para proporcionar un CIDR personalizado, seleccione Otros en el menú desplegable. Para evitar una colisión de direcciones IP entre la OpenSearch ingestión y Amazon RDS, asegúrese de que el CIDR de la VPC de Amazon RDS sea diferente del CIDR de la ingestión. OpenSearch

Para obtener más información, consulte Configuring VPC access for a pipeline.

Coherencia de datos

La canalización garantiza la coherencia de los datos mediante el sondeo o la recepción continua de los cambios de la instancia de Amazon RDS y la actualización de los documentos correspondientes del índice. OpenSearch

OpenSearch La ingestión admite el reconocimiento de principio a fin para garantizar la durabilidad de los datos. Cuando una canalización lee instantáneas o transmisiones, crea particiones de forma dinámica para el procesamiento paralelo. La canalización marca una partición como completa cuando recibe un acuse de recibo tras ingerir todos los registros del dominio o la OpenSearch colección. Si quieres incorporarlo a una colección de búsquedas OpenSearch sin servidor, puedes generar un identificador de documento en proceso. Si quieres incorporarlo a una colección de series temporales OpenSearch sin servidor, ten en cuenta que la canalización no genera un identificador de documento, por lo que debes omitirlo document_id: "${getMetadata(\"primary_key\")}" en la configuración del sumidero de la canalización.

Una canalización OpenSearch de ingesta también asigna las acciones de los eventos entrantes a las correspondientes acciones de indexación masiva para ayudar a la ingesta de documentos. Esto mantiene la coherencia de los datos, de modo que cada cambio de datos en Amazon RDS se concilie con los cambios en los documentos correspondientes. OpenSearch

Asignación de tipos de datos

OpenSearch La canalización de ingesta asigna los tipos de datos de PostgreSQL a las representaciones adecuadas para que los consuman los dominios o colecciones OpenSearch de servicios. Si no hay ninguna plantilla de asignación definida en OpenSearch, determine OpenSearch automáticamente los tipos de campo con una asignación dinámica basada en el primer documento enviado. También puede definir de forma explícita los tipos de campo que mejor se adapten a sus necesidades OpenSearch mediante una plantilla de mapeo.

La siguiente tabla muestra los tipos de datos de RDS para PostgreSQL y los tipos de campos correspondientes OpenSearch . La columna Tipo de OpenSearch campo predeterminado muestra el tipo de campo correspondiente OpenSearch si no se ha definido ninguna asignación explícita. En este caso, determina OpenSearch automáticamente los tipos de campo con una asignación dinámica. La columna Tipo de OpenSearch campo recomendado es el tipo de campo recomendado correspondiente que se debe especificar de forma explícita en una plantilla de asignación. Estos tipos de campos están más alineados con los tipos de datos de RDS para PostgreSQL y, por lo general, permiten mejorar las funciones de búsqueda disponibles en. OpenSearch

Tipo de datos de RDS para PostgreSQL Tipo de campo predeterminado OpenSearch Tipo OpenSearch de campo recomendado
smallint long short
entero long entero
bigint long long
decimal text doble o palabra
numeric[ (p, s) ] text doble o palabra
real float float
double precision float double
smallserial long short
serial long entero
bigserial long long
money objeto objeto
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 binario
timestamp [ (p) ] [ sin zona horaria ] largo (en milisegundos de época) date
timestamp [ (p) ] con zona horaria largo (en milisegundos de época) date
date largo (en milisegundos de época) date
time [ (p) ] [ sin zona horaria ] largo (en milisegundos de época) date
time [ (p) ] con zona horaria largo (en milisegundos de época) date
intervalo [campos] [(p)] texto (formato ISO8601) text
booleano booleano booleano
point texto (en formato WKT) geo_shape
línea texto (en formato WKT) geo_shape
LSEG texto (en formato WKT) geo_shape
BOX texto (en formato WKT) geo_shape
path texto (en formato WKT) geo_shape
polígono texto (en formato WKT) geo_shape
CIRCLE objeto objeto
cidr text text
inet text text
macaddr text text
macaddr8 text text
bit(n) long byte, corto, entero o largo (según el número de bits)
bit varying(n) long byte, corto, entero o largo (según el número de bits)
json objeto objeto
jsonb objeto objeto
jsonpath text text

Le recomendamos que configure la cola de mensajes muertos (DLQ) en su canalización de ingestión. OpenSearch Si has configurado la cola, el OpenSearch servicio envía todos los documentos fallidos que no se pueden ingerir debido a errores de mapeo dinámico a la cola.

En caso de que las asignaciones automáticos fallen, puede usar template_type y template_content en su configuración de canalización para definir reglas de asignación explícitas. Como alternativa, puede crear plantillas de asignación directamente en su dominio o colección de búsqueda antes de iniciar la canalización.

Limitaciones

Tenga en cuenta las siguientes limitaciones al configurar una canalización de OpenSearch ingesta de RDS para PostgreSQL:

  • La integración solo admite una base de datos PostgreSQL por canalización.

  • Actualmente, la integración no admite la ingesta de datos entre regiones; la instancia y OpenSearch el dominio de Amazon RDS deben estar en el mismo lugar. Región de AWS

  • Por el momento, la integración no admite la ingesta de datos entre cuentas; la instancia de Amazon RDS y la canalización de OpenSearch ingesta deben estar en el mismo lugar. Cuenta de AWS

  • Asegúrese de que la instancia de Amazon RDS tenga habilitada la autenticación mediante AWS Secrets Manager, que es el único mecanismo de autenticación admitido.

  • La configuración de canalización existente no se puede actualizar para incorporar datos de una base de datos diferente o de and/or una tabla diferente. Para actualizar el nombre de la and/or tabla de la base de datos de una canalización, debes detener la canalización y reiniciarla con una configuración actualizada, o crear una canalización nueva.

  • Por lo general, las instrucciones en lenguaje de definición de datos (DDL) no son compatibles. La coherencia de datos no se mantendrá si:

    • Se cambian las claves principales (add/delete/rename).

    • Las tablas son. dropped/truncated

    • Se cambian los nombres de las columnas o los tipos de datos.

  • Si las tablas de PostgreSQL que se van a sincronizar no tienen definidas las claves principales, no se garantiza la coherencia de datos. Deberá definir correctamente la document_id opción OpenSearch y la configuración del sumidero para poder updates/deletes sincronizarlas OpenSearch.

  • No se admiten los clústeres de bases de datos Multi-AZ de RDS.

  • Versiones compatibles: PostgreSQL 16 y versiones posteriores.

CloudWatch Alarmas recomendadas

Se recomiendan las siguientes CloudWatch métricas para supervisar el rendimiento de su proceso de ingestión. Estas métricas pueden ayudarlo a identificar la cantidad de datos procesados a partir de exportaciones y flujos, los errores al procesar eventos de transmisión y exportación y el número de documentos escritos en el destino. Puedes configurar CloudWatch alarmas para que realicen una acción cuando una de estas métricas supere un valor específico durante un período de tiempo específico.

Métrica Description (Descripción)
pipeline-name.rds.CredentialsChanged Esta métrica indica la frecuencia con la que se rotan los secretos. AWS
pipeline-name.rds.executor RefreshErrors Esta métrica indica errores al actualizar los secretos. AWS
pipeline-name.rds.export RecordsTotal Esta métrica indica el número de registros exportados desde Amazon RDS para PostgreSQL.
pipeline-name.rds.export RecordsProcessed Esta métrica indica la cantidad de registros procesados por OpenSearch Ingestion Pipeline.
pipeline-name.rds.export RecordProcessingErrors Esta métrica indica el número de errores de procesamiento en una canalización de OpenSearch ingestión al leer los datos de una instancia de Amazon RDS para PostgreSQL.
pipeline-name.rds.export RecordsSuccessTotal Esta métrica indica el número total de registros de exportación procesados correctamente.
pipeline-name.rds.export RecordsFailedTotal Esta métrica indica el número total de registros que no se han podido procesar.
pipeline-name.rds.bytes recibidos Esta métrica indica el número total de bytes recibidos por una canalización de ingestión. OpenSearch
pipeline-name.rds.BytesProcessed Esta métrica indica el número total de bytes procesados por una canalización de ingestión. OpenSearch
pipeline-name.rds.stream RecordsSuccessTotal Esta métrica indica el número de registros del flujo procesados correctamente.
pipeline-name.rds.stream RecordsFailedTotal Esta métrica indica el número total de registros del flujo que no se han podido procesar.