

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# RDS para MySQL
<a name="rds-mysql"></a>

Conclua as etapas a seguir para configurar um pipeline OpenSearch de ingestão com o Amazon RDS for RDS for MySQL.

**Topics**
+ [Pré-requisitos do RDS para MySQL](#rds-mysql-prereqs)
+ [Etapa 1: configurar a função do pipeline](#rds-mysql-pipeline-role)
+ [Etapa 2: Criar o pipeline](#rds-mysql-pipeline)
+ [Consistência de dados](#rds-mysql-pipeline-consistency)
+ [Mapear tipo de dados](#rds-mysql-pipeline-mapping)
+ [Limitações](#rds-mysql-pipeline-limitations)
+ [CloudWatch Alarmes recomendados](#aurora-mysql-pipeline-metrics)

## Pré-requisitos do RDS para MySQL
<a name="rds-mysql-prereqs"></a>

Antes de criar seu pipeline OpenSearch de ingestão, execute as seguintes etapas:

1. Crie um grupo personalizado de parâmetros de banco de dados no Amazon RDS para configurar o registro em log binário e definir os parâmetros a seguir.

   ```
   binlog_format=ROW
   binlog_row_image=full
   binlog_row_metadata=FULL
   ```

   Além disso, certifique-se de que o parâmetro `binlog_row_value_options` não seja definido como `PARTIAL_JSON`.

   Para saber mais, consulte [Configurar o registro em log binário do RDS for MySQL](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_LogAccess.MySQL.BinaryFormat.html).

1. [Selecione ou crie uma instância do banco de dados do RDS para MySQL](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_CreateDBInstance.html) e associe o grupo de parâmetros criado na etapa anterior à instância do banco de dados.

1. Verifique se os backups automatizados estão habilitados no banco de dados. Para saber mais, consulte [Habilitando backups automatizados](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_WorkingWithAutomatedBackups.Enabling.html). 

1. Configure a retenção de registros em log binário com tempo suficiente para que a replicação ocorra, por exemplo, 24 horas. Para saber mais, consulte [Definir e exibir a configuração de logs binários](https://docs.aws.amazon.com//AmazonRDS/latest/UserGuide/mysql-stored-proc-configuring.html) no *Guia do usuário do Amazon RDS*.

1. Configure a autenticação de nome de usuário e senha na instância do Amazon RDS usando o [gerenciamento de senhas com o Amazon RDS e o AWS Secrets Manager](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/rds-secrets-manager.html). Você também pode criar uma username/password combinação [criando um segredo do Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/create_secret.html).

1. Se você usar o recurso de snapshot inicial completo, crie uma função AWS KMS key e uma do IAM para exportar dados do Amazon RDS para o Amazon S3.

   O perfil do IAM também deve ter a seguinte política de permissão:

------
#### [ 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}}/*"
               ]
           }
       ]
   }
   ```

------

   O perfil também deve ter a seguinte relação de confiança:

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Principal": {
                   "Service": "export.rds.amazonaws.com"
               },
               "Action": "sts:AssumeRole"
           }
       ]
   }
   ```

------

1. Selecione ou crie um domínio OpenSearch de serviço ou uma coleção OpenSearch sem servidor. Para obter mais informações, consulte [Criação OpenSearch de domínios de serviço](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/createupdatedomains.html#createdomains) e [Criação de coleções](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/serverless-manage.html#serverless-create).

1. Anexe uma [política baseada em recursos](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/ac.html#ac-types-resource) ao seu domínio ou uma [política de acesso a dados](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/serverless-data-access.html) à sua coleção. Essas políticas de acesso permitem que o OpenSearch Inestion grave dados da sua instância de banco de dados Amazon RDS em seu domínio ou coleção.

## Etapa 1: configurar a função do pipeline
<a name="rds-mysql-pipeline-role"></a>

Depois de configurar os pré-requisitos de pipeline do Amazon RDS, [configure o perfil do pipeline](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/pipeline-security-overview.html#pipeline-security-sink) para usar na configuração do pipeline. Adicione também as seguintes permissões para a origem do Amazon RDS ao perfil:

------
#### [ 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:*"
    ]
    }
    ]
    }
```

------

## Etapa 2: Criar o pipeline
<a name="rds-mysql-pipeline"></a>

Configure um pipeline de OpenSearch ingestão semelhante ao seguinte. O exemplo de pipeline especifica uma instância do Amazon RDS como a origem. 

```
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
```

Você pode usar um esquema pré-configurado do Amazon RDS para criar esse pipeline. Para saber mais, consulte [Trabalhar com esquemas](pipeline-blueprint.md).

Para usar o Amazon Aurora como origem, você precisa configurar o acesso à VPC para o pipeline. A VPC escolhida deve ser a mesma VPC que a origem do Amazon Aurora usa. Depois, selecione uma ou mais sub-redes e um ou mais grupos de segurança da VPC. Observe que o pipeline precisa de acesso de rede a um banco de dados MySQL do Aurora, por isso, você também deve se certificar de que o cluster do Aurora esteja configurado com um grupo de segurança da VPC que permita tráfego de entrada do grupo de segurança da VPC do pipeline para a porta do banco de dados. Para saber mais, consulte [Controlar o acesso com grupos de segurança](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Overview.RDSSecurityGroups.html).

Se você estiver usando o Console de gerenciamento da AWS para criar seu pipeline, você também deve anexar seu pipeline à sua VPC para usar o Amazon Aurora como fonte. Para fazer isso, encontre a seção **Configuração de rede**, marque a caixa de seleção **Anexar à VPC** e escolha seu CIDR em uma das opções padrão fornecidas ou selecione a sua própria. Você pode usar qualquer CIDR de um espaço de endereço privado, conforme definido em [Melhor prática atual RFC 1918](https://datatracker.ietf.org/doc/html/rfc1918).

Para fornecer um CIDR personalizado, selecione **Outro** no menu suspenso. Para evitar uma colisão de endereços IP entre OpenSearch Ingestão e Amazon RDS, certifique-se de que o CIDR VPC do Amazon RDS seja diferente do CIDR para Ingestão. OpenSearch 

Para saber mais, consulte [Configurar o acesso à VPC para um pipeline](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/pipeline-security.html#pipeline-vpc-configure).

## Consistência de dados
<a name="rds-mysql-pipeline-consistency"></a>

O pipeline garante a consistência dos dados pesquisando continuamente ou recebendo alterações da instância do Amazon RDS e atualizando os documentos correspondentes no OpenSearch índice.

OpenSearch A ingestão suporta o end-to-end reconhecimento para garantir a durabilidade dos dados. Quando um pipeline lê snapshots ou fluxos, ele cria partições dinamicamente para processamento paralelo. O pipeline marca uma partição como concluída quando ela recebe uma confirmação após a ingestão de todos os registros no OpenSearch domínio ou na coleção. Se quiser fazer a ingestão em uma coleção de pesquisa OpenSearch sem servidor, você pode gerar uma ID de documento no pipeline. Se você quiser fazer a ingestão em uma coleção de séries temporais OpenSearch sem servidor, observe que o pipeline não gera uma ID de documento, portanto, você deve omiti-lo `document_id: "${getMetadata(\"primary_key\")}"` na configuração do coletor do pipeline. 

Um pipeline OpenSearch de ingestão também mapeia as ações de eventos recebidos em ações de indexação em massa correspondentes para ajudar a ingerir documentos. Isso mantém os dados consistentes, de modo que cada alteração de dados no Amazon RDS seja reconciliada com as alterações correspondentes no documento. OpenSearch

## Mapear tipo de dados
<a name="rds-mysql-pipeline-mapping"></a>

OpenSearch O pipeline de ingestão mapeia os tipos de dados do MySQL em representações que são adequadas OpenSearch para o consumo de domínios ou coleções de serviços. Se nenhum modelo de mapeamento estiver definido em OpenSearch, determina OpenSearch automaticamente os tipos de campo com [mapeamento dinâmico](https://docs.opensearch.org/latest/field-types/#dynamic-mapping) com base no primeiro documento enviado. Você também pode definir explicitamente os tipos de campo que funcionam melhor para você por OpenSearch meio de um modelo de mapeamento. 

A tabela abaixo lista os tipos de dados do MySQL e os tipos de OpenSearch campo correspondentes. A coluna *Tipo de OpenSearch campo padrão* mostra o tipo de campo correspondente OpenSearch se nenhum mapeamento explícito for definido. Nesse caso, determina OpenSearch automaticamente os tipos de campo com mapeamento dinâmico. A coluna *Tipo de OpenSearch campo recomendado* é o tipo de campo correspondente que é recomendado especificar explicitamente em um modelo de mapeamento. Esses tipos de campo estão mais alinhados com os tipos de dados no MySQL e geralmente podem permitir melhores recursos de pesquisa disponíveis no. OpenSearch


| Tipo de dados MySQL | Tipo de OpenSearch campo padrão | Tipo de OpenSearch campo recomendado | 
| --- | --- | --- | 
| BIGINT | longo | longo | 
| BIGINT UNSIGNED | longo | unsigned long | 
| BIT | longo | byte, short, integer ou long dependendo do número de bits | 
| DECIMAL | texto | double ou keyword | 
| DOUBLE | flutuação | double | 
| FLOAT | flutuação | flutuação | 
| INT | longo | integer | 
| INT UNSIGNED | longo | longo | 
| MEDIUMINT | longo | integer | 
| MEDIUMINT UNSIGNED | longo | integer | 
| NUMERIC | texto | double ou keyword | 
| SMALLINT | longo | curto | 
| SMALLINT UNSIGNED | longo | integer | 
| TINYINT | longo | byte | 
| TINYINT UNSIGNED | longo | curto | 
| BINARY | texto | binary | 
| BLOB | texto | binary | 
| CHAR | texto | texto | 
| ENUM | texto | palavra-chave | 
| LONGBLOB | texto | binary | 
| LONGTEXT | texto | texto | 
| MEDIUMBLOB | texto | binary | 
| MEDIUMTEXT | texto | texto | 
| SET | texto | palavra-chave | 
| TEXT | texto | texto | 
| TINYBLOB | texto | binary | 
| TINYTEXT | texto | texto | 
| VARBINARY | texto | binary | 
| VARCHAR | texto | texto | 
| DATE | long (em milissegundos epoch) | date | 
| DATETIME | long (em milissegundos epoch) | date | 
| TIME | long (em milissegundos epoch) | date | 
| TIMESTAMP | long (em milissegundos epoch) | date | 
| YEAR | long (em milissegundos epoch) | date | 
| GEOMETRY | text (em formato WKT) | geo\_shape | 
| GEOMETRYCOLLECTION | text (em formato WKT) | geo\_shape | 
| LINESTRING | text (em formato WKT) | geo\_shape | 
| MULTILINESTRING | text (em formato WKT) | geo\_shape | 
| MULTIPOINT | text (em formato WKT) | geo\_shape | 
| MULTIPOLYGON | text (em formato WKT) | geo\_shape | 
| POINT | text (em formato WKT) | geo\_point ou geo\_shape | 
| POLYGON | text (em formato WKT) | geo\_shape | 
| JSON | texto | objeto | 

Recomendamos que você configure a fila de mensagens mortas (DLQ) em seu pipeline de ingestão. OpenSearch Se você configurou a fila, o OpenSearch Service envia todos os documentos com falha que não podem ser ingeridos devido a falhas de mapeamento dinâmico para a fila.

Se os mapeamentos automáticos não funcionarem, será possível usar `template_type` e `template_content` na configuração do pipeline para definir regras de mapeamento explícitas. Como alternativa, é possível criar modelos de mapeamento diretamente no seu domínio de pesquisa ou na sua coleção antes de iniciar o pipeline.

## Limitações
<a name="rds-mysql-pipeline-limitations"></a>

Considere as seguintes limitações ao configurar um pipeline de OpenSearch ingestão para RDS for MySQL:
+ A integração é compatível com apenas um banco de dados MySQL por pipeline.
+ Atualmente, a integração não oferece suporte à ingestão de dados entre regiões; sua instância e OpenSearch domínio do Amazon RDS devem estar nos mesmos. Região da AWS
+ Atualmente, a integração não oferece suporte à ingestão de dados entre contas; sua instância do Amazon RDS e seu pipeline de OpenSearch ingestão devem estar no mesmo nível. Conta da AWS
+ Certifique-se de que a autenticação esteja habilitada na instância do Amazon RDS usando o Secrets Manager, que é o único mecanismo de autenticação compatível.
+ A configuração existente do pipeline não pode ser atualizada para ingerir dados de um banco de dados diferente ou de and/or uma tabela diferente. Para atualizar o banco de dados e/ou o nome da tabela de um pipeline, você deve criar um novo pipeline.
+ Instruções em Data Definition Language (DDL) não são compatíveis em geral. A consistência de dados não será mantida se:
  + As chaves primárias são alteradas (add/delete/rename).
  + As tabelas forem eliminadas/truncadas.
  + Os nomes das colunas ou os tipos de dados forem alterados.
+ Se as tabelas MySQL a serem sincronizadas não tiverem chaves primárias definidas, a consistência de dados não será garantida. Você precisará definir a `document_id` opção personalizada na configuração do OpenSearch coletor corretamente para poder updates/deletes sincronizar com OpenSearch.
+ Referências de chave estrangeira com ações de exclusão em cascata não são suportadas e podem resultar em inconsistência de dados entre o RDS for MySQL e. OpenSearch
+ Clusters de banco de dados de zona de multidisponibilidade do Amazon RDS não são compatíveis.
+ Versões compatíveis: Aurora MySQL versão 8.0 e acima.

## CloudWatch Alarmes recomendados
<a name="aurora-mysql-pipeline-metrics"></a>

As CloudWatch métricas a seguir são recomendadas para monitorar o desempenho do seu pipeline de ingestão. Essas métricas podem ajudar a identificar a quantidade de dados processados nas exportações, a quantidade de eventos processados nos fluxos, os erros no processamento de exportações e eventos de fluxo, e o número de documentos gravados no destino. Você pode configurar CloudWatch alarmes para realizar uma ação quando uma dessas métricas exceder um valor especificado por um determinado período de tempo.


| Métrica | Description | 
| --- | --- | 
| {{pipeline-name}}.RDS. Credenciais alteradas | Essa métrica indica com que frequência AWS os segredos são alternados. | 
| {{pipeline-name}}.rds. executorRefreshErrors | Essa métrica indica falhas na atualização de AWS segredos. | 
| {{pipeline-name}}.rds. exportRecordsTotal | Essa métrica indica o número de registros exportados do Amazon Aurora. | 
| {{pipeline-name}}.rds. exportRecordsProcessed | Essa métrica indica o número de registros processados pelo pipeline OpenSearch de ingestão. | 
| {{pipeline-name}}.rds. exportRecordProcessingErros | Essa métrica indica o número de erros de processamento em um pipeline OpenSearch de ingestão durante a leitura dos dados de um cluster do Amazon Aurora. | 
| {{pipeline-name}}.rds. exportRecordsSuccessTotal | Essa métrica indica o número total de registros de exportação processados com êxito. | 
| {{pipeline-name}}.rds. exportRecordsFailedTotal | Essa métrica indica o número total de registros de exportação com falha no processamento. | 
| {{pipeline-name}}.rds.bytes recebidos | Essa métrica indica o número total de bytes recebidos por um pipeline OpenSearch de ingestão. | 
| {{pipeline-name}}.rds.Bytes processados | Essa métrica indica o número total de bytes processados por um pipeline OpenSearch de ingestão. | 
| {{pipeline-name}}.rds. streamRecordsSuccessTotal | Essa métrica indica o número de registros processados com êxito a partir do fluxo. | 
| {{pipeline-name}}.rds. streamRecordsFailedTotal | Essa métrica indica o número total de registros com falha no processamento do fluxo. | 