RDS for MySQL - Amazon OpenSearch Service

RDS for MySQL

Realice los siguientes pasos para configurar una canalización de OpenSearch Ingestion con Amazon RDS para RDS for MySQL.

Requisitos previos de RDS para MySQL

Antes de crear su canalización de OpenSearch Ingestion, realice los siguientes pasos:

  1. Cree un grupo de parámetros de base de datos personalizado en Amazon RDS para configurar el registro binario y establecer los siguientes parámetros.

    binlog_format=ROW binlog_row_image=full binlog_row_metadata=FULL

    Compruebe también que el parámetro binlog_row_value_options no esté establecido en PARTIAL_JSON.

    Para obtener más información, consulte Configuración del registro binario de RDS para MySQL.

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

  3. Compruebe que las copias de seguridad automáticas están activadas en la base de datos. Para obtener más información, consulte Habilitación de copias de seguridad automatizadas.

  4. Configure la retención de registros binarios con tiempo suficiente para que se produzca la replicación, por ejemplo, 24 horas. Para obtener más información, consulte Configuración y visualización de la configuración de registros binarios en la Guía del usuario de Amazon RDS.

  5. 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 puede crear una combinación de nombre de usuario y contraseña mediante la creación de un secreto de Secrets Manager.

  6. Si utiliza la característica de instantáneas iniciales completa, cree una AWS KMS key y un rol 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" } ] }
  7. Seleccione o cree un dominio de OpenSearch Service o una colección de OpenSearch sin servidor. Para obtener más información, consulte Creating OpenSearch Service domains y Creating collections.

  8. 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 Ingestion similar a la siguiente. La canalización de ejemplo especifica una instancia de Amazon RDS como origen.

version: "2" rds-mysql-pipeline: source: rds: db_identifier: "instance-id" engine: 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 RDS preconfigurado para crear esta canalización. Para obtener más información, consulte Uso de esquemas.

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.

Si utiliza la Consola de administración de AWS para crear la canalización, también debe adjuntar la canalización a la VPC para poder usar Amazon Aurora como origen. 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.

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

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

Coherencia de datos

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

OpenSearch Ingestion admite el reconocimiento integral 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 reconocimiento después de incorporar todos los registros en el dominio o la colección de OpenSearch. Si desea incorporarlos a una colección de búsquedas de OpenSearch sin servidor, puede generar un ID de documento en la canalización. Si quiere ingerirlos en una colección de series temporales de OpenSearch sin servidor, tenga en cuenta que la canalización no genera un ID de documento, de modo que debe omitir document_id: "${getMetadata(\"primary_key\")}" en la configuración del receptor de la canalización.

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

Asignación de tipos de datos

La canalización de OpenSearch Ingestion asigna los tipos de datos de MySQL a representaciones que son adecuadas para el consumo de los dominios o las colecciones de OpenSearch Service. Si no se ha definido ninguna plantilla de asignación en OpenSearch, OpenSearch determina automáticamente los tipos de campo con una asignación dinámica 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 en OpenSearch mediante una plantilla de asignación.

En la siguiente tabla, se muestran los tipos de datos de MySQL y los tipos de campos de OpenSearch correspondientes. La columna Tipo de campo de OpenSearch predeterminado muestra el tipo de campo correspondiente en OpenSearch si no se ha definido una asignación explícita. En este caso, OpenSearch determina automáticamente los tipos de campo mediante una asignación dinámica. La columna Tipo de campo de OpenSearch recomendado es el tipo de campo correspondiente que se recomienda 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 MySQL y, por lo general, pueden habilitar mejores características de búsqueda disponibles en OpenSearch.

Tipo de datos de MySQL Tipo de campo de OpenSearch predeterminado Tipo de campo de OpenSearch 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_shape
GEOMETRYCOLLECTION texto (en formato WKT) geo_shape
LINESTRING texto (en formato WKT) geo_shape
MULTILINESTRING texto (en formato WKT) geo_shape
MULTIPOINT texto (en formato WKT) geo_shape
MULTIPOLYGON texto (en formato WKT) geo_shape
POINT texto (en formato WKT) geo_point o geo_shape
POLYGON texto (en formato WKT) geo_shape
JSON text objeto

Le recomendamos configurar la cola de mensajes fallidos (DLQ) en su canalización de OpenSearch Ingestion. Si ha configurado la cola, OpenSearch Service envía todos los documentos con errores que no se pueden incorporar debido a errores de asignación dinámica.

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

Tenga en cuenta las siguientes limitaciones cuando configure una canalización de OpenSearch Ingestion para RDS para 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; la instancia de Amazon RDS y el dominio de OpenSearch deben estar en la misma Región de AWS.

  • Actualmente, la integración no admite la ingesta de datos entre cuentas; la instancia de Amazon RDS y la canalización de OpenSearch Ingestion deben estar en la misma Cuenta de AWS.

  • Asegúrese de que la instancia de Amazon RDS 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 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 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 (agregar/eliminar/cambiar el nombre).

    • 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 opción document_id personalizada en la configuración del receptor de OpenSearch para poder sincronizar las actualizaciones o eliminaciones con OpenSearch.

  • No se admiten las referencias a claves externas con acciones de eliminación en cascada y pueden provocar inconsistencias en los datos entre RDS for MySQL y OpenSearch.

  • No se admiten los clústeres de bases de datos de zonas de disponibilidad múltiple de Amazon RDS.

  • Versiones compatibles: MySQL 8.0 y versiones posteriores.

Alarmas de CloudWatch recomendadas

Se recomiendan las siguientes métricas de CloudWatch para supervisar el rendimiento de la canalización de ingesta. 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. Puede configurar las alarmas de CloudWatch para que lleven a cabo una acción cuando una de estas métricas supere un valor especificado durante un periodo de tiempo determinado.

Métrica Descripción
pipeline-name.rds.credentialsChanged Esta métrica indica la frecuencia con la que se rotan los secretos de AWS.
pipeline-name.rds.executorRefreshErrors Esta métrica indica errores al actualizar los secretos de AWS.
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 el número de registros procesados por la canalización de OpenSearch Ingestion.
pipeline-name.rds.exportRecordProcessingErrors Esta métrica indica el número de errores de procesamiento en una canalización de OpenSearch Ingestion 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.bytesReceived Esta métrica indica el número total de bytes recibidos por una canalización de OpenSearch Ingestion.
pipeline-name.rds.bytesProcessed Esta métrica indica el número total de bytes procesados por una canalización de OpenSearch Ingestion.
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.