

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.

# Uso de una canalización OpenSearch de ingestión con Amazon Aurora
<a name="configure-client-aurora"></a>

Puede usar una canalización de OpenSearch ingestión con Amazon Aurora para exportar los datos existentes y transmitir los cambios (como crear, actualizar y eliminar) a los dominios y colecciones de Amazon OpenSearch Service. La canalización de OpenSearch ingestión incorpora una infraestructura de captura de datos de cambios (CDC) para proporcionar una forma de alta escala y baja latencia de transmitir datos de forma continua desde Amazon Aurora. Aurora MySQL y Aurora PostgreSQL son compatibles.

Existen dos formas de utilizar Amazon Aurora como origen para procesar datos: con o sin una instantánea inicial completa. Una instantánea inicial completa es una instantánea de las tablas especificadas y esta instantánea se exporta a Amazon S3. A partir de ahí, una canalización de OpenSearch ingestión los envía a un índice de un dominio o los divide en varios índices de un dominio. Para mantener la OpenSearch coherencia de los datos en Amazon Aurora, la canalización sincroniza todos los eventos de creación, actualización y eliminación de las tablas de los clústeres de Amazon Aurora con los documentos guardados en el OpenSearch índice o los índices.

Cuando utiliza una instantánea inicial completa, la canalización de OpenSearch ingestión primero ingiere la instantánea y, a continuación, comienza a leer los datos de las transmisiones de cambios de Amazon Aurora. Con el tiempo, recupera y mantiene la coherencia de los datos casi en tiempo real entre Amazon Aurora y OpenSearch. 

También puede utilizar la integración de OpenSearch Ingestion con Amazon Aurora para realizar un seguimiento de los cambios, capturar datos e ingerir todas las actualizaciones de Aurora. OpenSearch Elija esta opción si ya tiene una instantánea completa de algún otro mecanismo o si solo quiere capturar todos los cambios en los datos del clúster de Amazon Aurora. 

Si elige esta opción, debe [configurar el registro binario para Aurora MySQL](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/USER_LogAccess.MySQL.BinaryFormat.html) o [configurar la replicación lógica para Aurora PostgreSQL](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/AuroraPostgreSQL.Replication.Logical.Configure.html) en el clúster. 

**Topics**
+ [Aurora MySQL](aurora-mysql.md)
+ [Aurora PostgreSQL](aurora-PostgreSQL.md)

# Aurora MySQL
<a name="aurora-mysql"></a>

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

**Topics**
+ [Requisitos previos de Aurora MySQL](#aurora-mysql-prereqs)
+ [Paso 1: configurar el rol de canalización](#aurora-mysql-pipeline-role)
+ [Paso 2: crear la canalización](#aurora-mysql-pipeline)
+ [Coherencia de datos](#aurora-mysql-pipeline-consistency)
+ [Asignación de tipos de datos](#aurora-mysql-pipeline-mapping)
+ [Limitaciones](#aurora-mysql-pipeline-limitations)
+ [Alarmas recomendadas CloudWatch](#aurora-mysql-pipeline-metrics)

## Requisitos previos de Aurora MySQL
<a name="aurora-mysql-prereqs"></a>

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

1. [Cree un grupo de parámetros de clúster de base de datos de Aurora en Amazon Aurora para configurar el registro binario](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/zero-etl.setting-up.html#zero-etl.parameters).

   ```
   aurora_enhanced_binlog=1
   binlog_backup=0
   binlog_format=ROW
   binlog_replication_globaldb=0
   binlog_row_image=full
   binlog_row_metadata=full
   ```

   Además, compruebe que el parámetro `binlog_transaction_compression` no esté establecido en `ON` y que el parámetro `binlog_row_value_options` no esté establecido en `PARTIAL_JSON`.

1. [Seleccione o cree un clúster de base de datos Aurora MySQL](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/CHAP_GettingStartedAurora.CreatingConnecting.Aurora.html) y asocie el grupo de parámetros creado en el paso anterior al clúster de base de datos.

1. [Configure la retención de registros binarios en 24 horas o más](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/mysql-stored-proc-configuring.html). 

1. Configure la autenticación con nombre de usuario y contraseña en su clúster de Amazon Aurora mediante la [administración de contraseñas con Aurora y AWS Secrets Manager](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/rds-secrets-manager.html). También puedes crear una username/password combinación [creando un secreto de Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/create_secret.html).

1. Si utiliza la función de instantáneas iniciales completa, cree una función de IAM AWS KMS key y una función de IAM para exportar datos de Amazon Aurora 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"
           }
       ]
   }
   ```

------

1. 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](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/createupdatedomains.html#createdomains) y [Creación de colecciones](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/serverless-manage.html#serverless-create).

1. Adjunte una [política basada en recursos](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/ac.html#ac-types-resource) al dominio o una [política de acceso a datos](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/serverless-data-access.html) a la colección. Estas políticas de acceso permiten a OpenSearch Ingestion escribir datos de su clúster de base de datos de Amazon Aurora en su dominio o colección.

## Paso 1: configurar el rol de canalización
<a name="aurora-mysql-pipeline-role"></a>

Una vez configurados los requisitos previos de la canalización de Amazon Aurora, [configure el rol de la canalización](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/pipeline-security-overview.html#pipeline-security-sink) que se usará en la configuración de la canalización. Agregue también los siguientes permisos para el origen de Amazon Aurora 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": "AllowDescribeClusters",
    "Effect": "Allow",
    "Action": [
    "rds:DescribeDBClusters"
    ],
    "Resource": [
    "arn:aws:rds:us-east-2:111122223333:cluster:DB-id"
    ]
    },
    {
    "Sid": "AllowSnapshots",
    "Effect": "Allow",
    "Action": [
    "rds:DescribeDBClusterSnapshots",
    "rds:CreateDBClusterSnapshot",
    "rds:AddTagsToResource"
    ],
    "Resource": [
    "arn:aws:rds:us-east-2:111122223333:cluster:DB-id",
    "arn:aws:rds:us-east-2:111122223333:cluster-snapshot:DB-id*"
    ]
    },
    {
    "Sid": "AllowExport",
    "Effect": "Allow",
    "Action": [
    "rds:StartExportTask"
    ],
    "Resource": [
    "arn:aws:rds:us-east-2:111122223333:cluster:DB-id",
    "arn:aws:rds:us-east-2:111122223333:cluster-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
<a name="aurora-mysql-pipeline"></a>

Configure una canalización OpenSearch de ingestión similar a la siguiente. La canalización de ejemplo especifica un clúster de Amazon Aurora como origen. 

```
version: "2"
aurora-mysql-pipeline:
  source:
    rds:
      db_identifier: "cluster-id"
      engine: aurora-mysql
      database: "database-name"
      tables:
        include:
          - "table1"
          - "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
```

Puede utilizar un esquema de Amazon Aurora preconfigurado para crear esta canalización. Para obtener más información, consulte [Uso de esquemas](pipeline-blueprint.md).

A fin de utilizar Amazon Aurora como origen, debe configurar el acceso a la VPC para la canalización. La VPC que elija debe ser la misma que usa su origen de Amazon Aurora. 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 Aurora MySQL, por lo que también debe comprobar que el clúster de Aurora esté configurado 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](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Overview.RDSSecurityGroups.html).

Si utiliza la Consola de administración de AWS para crear su canalización, también debe adjuntarla a la VPC para poder utilizar Amazon Aurora como fuente. Para ello, busque la sección **Configuración de la red**, seleccione la casilla **Adjuntar a la VPC** y elija el CIDR de una de las opciones predeterminadas proporcionadas o seleccione una opción propia. Puede usar cualquier CIDR de un espacio de direcciones privado, tal como se define en [RFC 1918 Best Current Practice](https://datatracker.ietf.org/doc/html/rfc1918).

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

Para obtener más información, consulte [Configuring VPC access for a pipeline](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/pipeline-security.html#pipeline-vpc-configure).

## Coherencia de datos
<a name="aurora-mysql-pipeline-consistency"></a>

La canalización garantiza la coherencia de los datos mediante el sondeo continuo o la recepción de cambios del clúster de Amazon Aurora y la actualización de los documentos correspondientes del OpenSearch índice.

OpenSearch La ingestión apoya el end-to-end reconocimiento 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 después de ingerir todos los registros del dominio o la OpenSearch colección. Si quieres incorporarlos a una colección de búsquedas OpenSearch sin servidor, puedes generar un identificador de documento en la canalización. 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 colector de canalizaciones. 

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

## Asignación de tipos de datos
<a name="aurora-mysql-pipeline-mapping"></a>

OpenSearch La canalización de ingestión asigna los tipos de datos de MySQL a representaciones que son adecuadas para el consumo de los dominios o colecciones de OpenSearch servicios. Si no hay ninguna plantilla de mapeo definida OpenSearch, determina OpenSearch automáticamente los tipos de campo con un [mapeo dinámico](https://opensearch.org/docs/latest/field-types/#dynamic-mapping) en función del 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 MySQL y los tipos de OpenSearch campo correspondientes. La columna *Tipo de OpenSearch campo predeterminado* muestra el tipo de campo correspondiente OpenSearch si no se ha definido un mapeo explícito. En este caso, determina OpenSearch automáticamente los tipos de campo con un mapeo dinámico. La columna *Tipo de OpenSearch campo recomendado* es el tipo de campo correspondiente que se recomienda especificar de forma explícita en una plantilla de mapeo. Estos tipos de campos están más alineados con los tipos de datos de MySQL y, por lo general, pueden habilitar mejores funciones de búsqueda disponibles en OpenSearch.


| Tipo de datos de MySQL | Tipo OpenSearch de campo predeterminado | Tipo OpenSearch de campo recomendado | 
| --- | --- | --- | 
| BIGINT | long | long | 
| BIGINT UNSIGNED | long | largo sin signo | 
| BIT | long | byte, corto, entero o largo según el número de bits | 
| DECIMAL | text | doble o palabra | 
| DOUBLE | float | double | 
| FLOAT | float | float | 
| INT | long | entero | 
| INT UNSIGNED | long | long | 
| MEDIUMINT | long | entero | 
| MEDIUMINT UNSIGNED | long | entero | 
| NUMERIC | text | doble o palabra | 
| SMALLINT | long | short | 
| SMALLINT UNSIGNED | long | entero | 
| TINYINT | long |  byte | 
| TINYINT UNSIGNED | long | short | 
| BINARIO | text | binario | 
| BLOB | text | binario | 
| CHAR | text | text | 
| ENUM | text | palabra clave | 
| LONGBLOB | text | binario | 
| LONGTEXT | text | text | 
| MEDIUMBLOB | text | binario | 
| MEDIUMTEXT | text | text | 
| SET | text | palabra clave | 
| TEXT | text | text | 
| TINYBLOB | text | binario | 
| TINYTEXT | text | text | 
| VARBINARY | text | binario | 
| VARCHAR | text | text | 
| DATE | largo (en milisegundos de época) | date | 
| DATETIME | largo (en milisegundos de época) | date | 
| TIME | largo (en milisegundos de época) | date | 
| TIMESTAMP | largo (en milisegundos de época) | date | 
| YEAR | largo (en milisegundos de época) | date | 
| GEOMETRY | texto (en formato WKT) | geo\$1shape | 
| GEOMETRYCOLLECTION | texto (en formato WKT) | geo\$1shape | 
| LINESTRING | texto (en formato WKT) | geo\$1shape | 
| MULTILINESTRING | texto (en formato WKT) | geo\$1shape | 
| MULTIPOINT | texto (en formato WKT) | geo\$1shape | 
| MULTIPOLYGON | texto (en formato WKT) | geo\$1shape | 
| POINT | texto (en formato WKT) | geo\$1point o geo\$1shape | 
| POLYGON | texto (en formato WKT) | geo\$1shape | 
| JSON | text | objeto | 

Te recomendamos que configures la cola de mensajes sin salida (DLQ) en tu canal de ingestión. OpenSearch Si has configurado la cola, el OpenSearch servicio envía a la cola todos los documentos fallidos que no se puedan ingerir debido a errores de mapeo dinámico.

Si las asignaciones automáticas fallan, 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
<a name="aurora-mysql-pipeline-limitations"></a>

Tenga en cuenta las siguientes limitaciones al configurar una canalización OpenSearch de ingestión para Aurora MySQL:
+ La integración solo admite una base de datos MySQL por canalización.
+ Actualmente, la integración no admite la ingesta de datos entre regiones; el clúster y el OpenSearch dominio de Amazon Aurora deben estar en el mismo lugar. Región de AWS
+ Actualmente, la integración no admite la ingesta de datos entre cuentas; el clúster de Amazon Aurora y la canalización de OpenSearch ingestión deben estar en el mismo lugar. Cuenta de AWS
+ Asegúrese de que el clúster de Amazon Aurora tenga habilitada la autenticación mediante Secrets Manager, que es el único mecanismo de autenticación admitido.
+ La configuración de canalización existente no se puede actualizar para ingerir datos de una base and/or de datos diferente o de una tabla diferente. Para actualizar la base de datos o el nombre de la tabla de una canalización, debe 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 se eliminan o se truncan.
  + Se cambian los nombres de las columnas o los tipos de datos.
+ Si las tablas MySQL 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 personalizada en la configuración del OpenSearch sumidero para poder updates/deletes sincronizarla OpenSearch.
+ No se admiten las referencias a claves externas con acciones de eliminación en cascada y pueden provocar inconsistencias en los datos entre Aurora MySQL y. OpenSearch
+ Versiones compatibles: Aurora MySQL 3.05.2 y versiones posteriores.

## Alarmas recomendadas CloudWatch
<a name="aurora-mysql-pipeline-metrics"></a>

Se recomiendan las siguientes CloudWatch métricas para supervisar el rendimiento del 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 realizar 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. Se han modificado las credenciales | Esta métrica indica la frecuencia con la que se rotan los secretos. AWS  | 
| pipeline-name.rds. executorRefreshErrors | Esta métrica indica errores al actualizar AWS los secretos. | 
| pipeline-name.rds. exportRecordsTotal | Esta métrica indica el número de registros exportados desde Amazon Aurora. | 
| pipeline-name.rds. exportRecordsProcessed | Esta métrica indica la cantidad de registros procesados por la canalización OpenSearch de ingestión. | 
| pipeline-name.rds. exportRecordProcessingErrores | Esta métrica indica el número de errores de procesamiento en una canalización de OpenSearch ingestión al leer los datos de un clúster de Amazon Aurora. | 
| pipeline-name.rds. exportRecordsSuccessTotal | Esta métrica indica el número total de registros de exportación procesados correctamente. | 
| pipeline-name.rds. exportRecordsFailedTotal | 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.bytes procesados | Esta métrica indica el número total de bytes procesados por una canalización de ingestión. OpenSearch  | 
| pipeline-name.rds. streamRecordsSuccessTotal | Esta métrica indica el número de registros del flujo procesados correctamente. | 
| pipeline-name.rds. streamRecordsFailedTotal | Esta métrica indica el número total de registros del flujo que no se han podido procesar. | 

# Aurora PostgreSQL
<a name="aurora-PostgreSQL"></a>

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

**Topics**
+ [Requisitos previos de Aurora PostgreSQL](#aurora-PostgreSQL-prereqs)
+ [Paso 1: configurar el rol de canalización](#aurora-mysql-pipeline-role)
+ [Paso 2: crear la canalización](#aurora-PostgreSQL-pipeline)
+ [Coherencia de datos](#aurora-mysql-pipeline-consistency)
+ [Asignación de tipos de datos](#aurora-PostgreSQL-pipeline-mapping)
+ [Limitaciones](#aurora-PostgreSQL-pipeline-limitations)
+ [CloudWatch Alarmas recomendadas](#aurora-mysql-pipeline-metrics)

## Requisitos previos de Aurora PostgreSQL
<a name="aurora-PostgreSQL-prereqs"></a>

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

1. [Cree un grupo de parámetros de clúster de base de datos personalizado](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/CHAP_GettingStartedAurora.CreatingConnecting.Aurora.html) en Amazon Aurora para configurar la replicación lógica.

   ```
   rds.logical_replication=1
       aurora.enhanced_logical_replication=1
       aurora.logical_replication_backup=0
       aurora.logical_replication_globaldb=0
   ```

1. [Seleccione o cree un clúster de base de datos Aurora PostgreSQL](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/CHAP_GettingStartedAurora.CreatingConnecting.Aurora.html) y asocie el grupo de parámetros creado en el paso 1 al clúster de base de datos.

1. Configure la autenticación con nombre de usuario y contraseña en su clúster de Amazon Aurora mediante la [administración de contraseñas con Aurora y AWS Secrets Manager](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/rds-secrets-manager.html). También puedes crear una username/password combinación [creando un secreto de Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/create_secret.html).

1. Si utiliza la función de instantáneas iniciales completa, cree una función de IAM AWS KMS key y una función de IAM para exportar datos de Amazon Aurora 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"
               }
           ]
       }
   ```

------

1. 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](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/createupdatedomains.html#createdomains) y [Creación de colecciones](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/serverless-manage.html#serverless-create).

1. Adjunte una [política basada en recursos](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/ac.html#ac-types-resource) al dominio o una [política de acceso a datos](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/serverless-data-access.html) a la colección. Estas políticas de acceso permiten a OpenSearch Ingestion escribir datos de su clúster de base de datos de Amazon Aurora en su dominio o colección.

## Paso 1: configurar el rol de canalización
<a name="aurora-mysql-pipeline-role"></a>

Una vez configurados los requisitos previos de la canalización de Amazon Aurora, [configure el rol de la canalización](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/pipeline-security-overview.html#pipeline-security-sink) que se usará en la configuración de la canalización. Agregue también los siguientes permisos para el origen de Amazon Aurora 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": "AllowDescribeClusters",
    "Effect": "Allow",
    "Action": [
    "rds:DescribeDBClusters"
    ],
    "Resource": [
    "arn:aws:rds:us-east-2:111122223333:cluster:DB-id"
    ]
    },
    {
    "Sid": "AllowSnapshots",
    "Effect": "Allow",
    "Action": [
    "rds:DescribeDBClusterSnapshots",
    "rds:CreateDBClusterSnapshot",
    "rds:AddTagsToResource"
    ],
    "Resource": [
    "arn:aws:rds:us-east-2:111122223333:cluster:DB-id",
    "arn:aws:rds:us-east-2:111122223333:cluster-snapshot:DB-id*"
    ]
    },
    {
    "Sid": "AllowExport",
    "Effect": "Allow",
    "Action": [
    "rds:StartExportTask"
    ],
    "Resource": [
    "arn:aws:rds:us-east-2:111122223333:cluster:DB-id",
    "arn:aws:rds:us-east-2:111122223333:cluster-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
<a name="aurora-PostgreSQL-pipeline"></a>

Configure una canalización de OpenSearch ingestión como la siguiente, que especifique el clúster de Aurora PostgreSQL como origen. 

```
version: "2"
aurora-postgres-pipeline:
  source:
    rds:
      db_identifier: "cluster-id"
      engine: aurora-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 Aurora preconfigurado para crear esta canalización. Para obtener más información, consulte [Uso de esquemas](pipeline-blueprint.md).

A fin de utilizar Amazon Aurora como origen, debe configurar el acceso a la VPC para la canalización. La VPC que elija debe ser la misma que usa su origen de Amazon Aurora. 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 Aurora MySQL, por lo que también debe comprobar que el clúster de Aurora esté configurado 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](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Overview.RDSSecurityGroups.html).

Si utiliza la Consola de administración de AWS para crear su canalización, también debe adjuntarla a la VPC para poder utilizar Amazon Aurora 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. Puede usar cualquier CIDR de un espacio de direcciones privado, tal como se define en [RFC 1918 Best Current Practice](https://datatracker.ietf.org/doc/html/rfc1918).

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

Para obtener más información, consulte [Configuring VPC access for a pipeline](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/pipeline-security.html#pipeline-vpc-configure).

## Coherencia de datos
<a name="aurora-mysql-pipeline-consistency"></a>

La canalización garantiza la coherencia de los datos mediante el sondeo continuo o la recepción de cambios del clúster de Amazon Aurora y la actualización de los documentos correspondientes del OpenSearch índice.

OpenSearch La ingestión apoya el end-to-end reconocimiento 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 después de ingerir todos los registros del dominio o la OpenSearch colección. Si quieres incorporarlos a una colección de búsquedas OpenSearch sin servidor, puedes generar un identificador de documento en la canalización. 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 colector de canalizaciones. 

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

## Asignación de tipos de datos
<a name="aurora-PostgreSQL-pipeline-mapping"></a>

OpenSearch La canalización de ingestión asigna los tipos de datos de Aurora PostgreSQL a representaciones que son adecuadas OpenSearch para el consumo de los dominios o colecciones de servicios. Si no hay ninguna plantilla de mapeo definida OpenSearch, determine OpenSearch automáticamente los tipos de campo con un [mapeo dinámico](https://opensearch.org/docs/latest/field-types/#dynamic-mapping) basado 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 Aurora PostgreSQL y OpenSearch los tipos de campo correspondientes. La columna *Tipo de OpenSearch campo predeterminado* muestra el tipo de campo correspondiente OpenSearch si no se ha definido un mapeo explícito. En este caso, determina OpenSearch automáticamente los tipos de campo con un mapeo dinámico. La columna *Tipo de OpenSearch campo recomendado* es el tipo de campo que se recomienda especificar de forma explícita en una plantilla de mapeo. Estos tipos de campos están más alineados con los tipos de datos de Aurora PostgreSQL y, por lo general, pueden habilitar mejores funciones de búsqueda disponibles en. OpenSearch


| Tipo de datos de Aurora 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 (ISO8601 formato) | text | 
| booleano | booleano | booleano | 
| point | texto (en formato WKT) | geo\$1shape | 
| línea | texto (en formato WKT) | geo\$1shape | 
| LSEG | texto (en formato WKT) | geo\$1shape | 
| BOX | texto (en formato WKT) | geo\$1shape | 
| path | texto (en formato WKT) | geo\$1shape | 
| polígono | texto (en formato WKT) | geo\$1shape | 
| 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 | 

Te recomendamos que configures la cola de mensajes sin salida (DLQ) en tu canal de ingestión. OpenSearch Si has configurado la cola, el OpenSearch servicio envía a la cola todos los documentos fallidos que no se puedan ingerir debido a errores de mapeo dinámico.

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
<a name="aurora-PostgreSQL-pipeline-limitations"></a>

Tenga en cuenta las siguientes limitaciones al configurar una canalización de OpenSearch ingestión para Aurora PostgreSQL:
+ La integración solo admite una base de datos PostgreSQL de Aurora por canalización.
+ Actualmente, la integración no admite la ingesta de datos entre regiones; el clúster y el OpenSearch dominio de Amazon Aurora deben estar en el mismo lugar. Región de AWS
+ Actualmente, la integración no admite la ingesta de datos entre cuentas; el clúster de Amazon Aurora y la canalización de OpenSearch ingestión deben estar en el mismo lugar. Cuenta de AWS
+ Asegúrese de que el clúster de Amazon Aurora 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 ingerir datos de una base and/or de datos diferente o de una tabla diferente. Para actualizar la base de datos o el nombre de la tabla de una canalización, debe 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 se eliminan o se truncan.
  + Se cambian los nombres de las columnas o los tipos de datos.
+ Si las tablas de PostgreSQL de Aurora 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 receptor para poder updates/deletes sincronizarla OpenSearch.
+ Versiones compatibles: Aurora PostgreSQL 16.4 y versiones posteriores. 

## CloudWatch Alarmas recomendadas
<a name="aurora-mysql-pipeline-metrics"></a>

Se recomiendan las siguientes CloudWatch métricas para supervisar el rendimiento del 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 realizar 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. Se han modificado las credenciales | Esta métrica indica la frecuencia con la que se rotan los secretos. AWS  | 
| pipeline-name.rds. executorRefreshErrors | Esta métrica indica errores al actualizar AWS los secretos. | 
| pipeline-name.rds. exportRecordsTotal | Esta métrica indica el número de registros exportados desde Amazon Aurora. | 
| pipeline-name.rds. exportRecordsProcessed | Esta métrica indica la cantidad de registros procesados por la canalización OpenSearch de ingestión. | 
| pipeline-name.rds. exportRecordProcessingErrores | Esta métrica indica el número de errores de procesamiento en una canalización de OpenSearch ingestión al leer los datos de un clúster de Amazon Aurora. | 
| pipeline-name.rds. exportRecordsSuccessTotal | Esta métrica indica el número total de registros de exportación procesados correctamente. | 
| pipeline-name.rds. exportRecordsFailedTotal | 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.bytes procesados | Esta métrica indica el número total de bytes procesados por una canalización de ingestión. OpenSearch  | 
| pipeline-name.rds. streamRecordsSuccessTotal | Esta métrica indica el número de registros del flujo procesados correctamente. | 
| pipeline-name.rds. streamRecordsFailedTotal | Esta métrica indica el número total de registros del flujo que no se han podido procesar. | 