RDS para PostgreSQL.
Conclua as etapas a seguir para configurar um pipeline do OpenSearch Ingestion com o Amazon RDS para o RDS para PostgreSQL.
Tópicos
Pré-requisitos do RDS para PostgreSQL
Antes de criar o pipeline da Ingestão do OpenSearch, execute as seguintes etapas:
-
Crie um grupo personalizado de parâmetros de banco de dados no Amazon RDS para configurar a replicação lógica.
rds.logical_replication=1Para obter mais informações, consulte Executar replicação lógica para o Amazon RDS para PostgreSQL.
-
Selecione ou crie uma instância do banco de dados do RDS para PostgreSQL e associe o grupo de parâmetros criado na etapa 1 à instância do banco de dados.
-
Configure a autenticação de nome de usuário e senha na instância do Amazon RDS usando o gerenciamento de senhas com o Aurora e o AWS Secrets Manager. Você também pode criar uma combinação de nome de usuário/senha criando um segredo do Secrets Manager.
-
Se você usar o atributo de snapshot inicial completo, crie uma AWS KMS key e um perfil 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:
O perfil também deve ter a seguinte relação de confiança:
-
Selecione ou crie um domínio do OpenSearch Service ou uma coleção do OpenSearch sem Servidor. Para obter mais informações, consulte Criação de domínios do OpenSearch Service e Criação de coleções.
-
Anexe uma política baseada em recursos ao seu domínio ou uma política de acesso a dados à sua coleção. Essas políticas de acesso permitem que o OpenSearch Ingestion grave dados da instância do banco de dados do Amazon RDS no domínio ou na coleção.
Etapa 1: configurar a função do pipeline
Depois de configurar os pré-requisitos de pipeline do Amazon RDS, configure o perfil do pipeline para usar na configuração do pipeline. Adicione também as seguintes permissões para a origem do Amazon RDS ao perfil:
Etapa 2: Criar o pipeline
Configure um pipeline OpenSearch Ingestion como o que se segue, que especifica uma instância do RDS para PostgreSQL como a origem.
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
Você pode usar um esquema pré-configurado do Amazon RDS para criar esse pipeline. Para obter mais informações, consulte Trabalhar com esquemas.
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 obter mais informações, consulte Controlar o acesso com grupos de segurança.
Se você usar o Console de gerenciamento da AWS para criar o pipeline, deverá também anexar o pipeline à sua VPC para usar o Amazon Aurora como origem. 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
Para fornecer um CIDR personalizado, selecione Outro no menu suspenso. Para evitar uma colisão de endereços IP entre o OpenSearch Ingestion e o Amazon RDS, certifique-se de que o CIDR da VPC do Amazon Aurora seja diferente do CIDR do OpenSearch Ingestion.
Para obter mais informações, consulte Configurar o acesso à VPC para um pipeline.
Consistência de dados
O pipeline garante a consistência de dados pesquisando ou recebendo alterações continuamente da instância do Amazon RDS e atualizando os documentos correspondentes no índice do OpenSearch.
O OpenSearch Ingestion oferece suporte ao reconhecimento de ponta a ponta 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 recebe uma confirmação depois de ingerir todos os registros no domínio ou na coleção do OpenSearch. Se você quiser fazer a ingestão em uma coleção de pesquisa do OpenSearch sem Servidor, gere um ID de documento no pipeline. Se quiser fazer a ingestão em uma coleção de séries temporais do OpenSearch sem Servidor, observe que o pipeline não gera um ID de documento, então você deve omitir document_id: "${getMetadata(\"primary_key\")}" na configuração do coletor do seu pipeline.
Um pipeline do OpenSearch Ingestion também mapeia ações de eventos de entrada para ações de indexação em massa correspondentes para ajudar a ingerir documentos. Isso mantém os dados consistentes, de modo que toda alteração de dados no Amazon RDS seja reconciliada com as alterações de documentos correspondentes no OpenSearch.
Mapear tipo de dados
O pipeline do OpenSearch Ingestion mapeia os tipos de dados do PostgreSQL em representações adequadas para o consumo de domínios ou coleções do OpenSearch Service. Se nenhum modelo de mapeamento for definido no OpenSearch, o OpenSearch determinará automaticamente os tipos de campo com mapeamento dinâmico
A tabela abaixo lista os tipos de dados do RDS para PostgreSQL e os tipos de campo correspondentes do OpenSearch. A coluna Tipo de campo padrão do OpenSearch mostrará o tipo de campo correspondente no OpenSearch se nenhum mapeamento explícito for definido. Nesse caso, o OpenSearch determina automaticamente os tipos de campo com mapeamento dinâmico. A coluna Tipo de campo recomendado do OpenSearch é o tipo de campo recomendado correspondente a ser especificado explicitamente em um modelo de mapeamento. Esses tipos de campo estão mais alinhados com os tipos de dados do RDS para PostgreSQL e geralmente podem habilitar melhores atributos de pesquisa disponíveis no OpenSearch.
| Tipo de dado do RDS para PostgreSQL | Tipo de campo padrão do OpenSearch | Tipo de campo recomendado do OpenSearch |
|---|---|---|
| smallint | longo | curto |
| integer | longo | integer |
| bigint | longo | longo |
| decimal | text | double ou keyword |
| numeric[ (p, s) ] | text | double ou keyword |
| real | flutuação | flutuação |
| double precision | flutuação | double |
| smallserial | longo | curto |
| serial | longo | integer |
| bigserial | longo | longo |
| money | objeto | objeto |
| caractere variável(n) | text | text |
| varchar(n) | text | text |
| character(n) | text | text |
| char(n) | text | text |
| bpchar(n) | text | text |
| bpchar | text | text |
| text | text | text |
| enum | text | text |
| bytea | text | binary |
| timestamp [ (p) ] [ sem fuso horário ] | long (em milissegundos epoch) | date |
| timestamp [ (p) ] com fuso horário | long (em milissegundos epoch) | date |
| date | long (em milissegundos epoch) | date |
| hora [ (p) ] [ sem fuso horário ] | long (em milissegundos epoch) | date |
| hora [ (p) ] com fuso horário | long (em milissegundos epoch) | date |
| interval [ fields ] [ (p) ] | text (formato ISO8601 format) | text |
| boolean | boolean | boolean |
| point | text (em formato WKT) | geo_shape |
| linha | text (em formato WKT) | geo_shape |
| lseg | text (em formato WKT) | geo_shape |
| box | text (em formato WKT) | geo_shape |
| caminho | text (em formato WKT) | geo_shape |
| polígono | text (em formato WKT) | geo_shape |
| circle | objeto | objeto |
| cidr | text | text |
| inet | text | text |
| macaddr | text | text |
| macaddr8 | text | text |
| bit(n) | longo | byte, short, integer, ou long (dependendo do número de bits) |
| bit variável (n) | longo | byte, short, integer, ou long (dependendo do número de bits) |
| json | objeto | objeto |
| jsonb | objeto | objeto |
| jsonpath | text | text |
Recomendamos que você configure a fila de mensagens não entregues (DLQ) no pipeline do OpenSearch Ingestion. Se você tiver configurado a fila, o OpenSearch Service enviará todos os documentos com falha que não puderem ser ingeridos devido a falhas de mapeamento dinâmico para a fila.
Se os mapeamentos automáticos falharem, 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
Considere as seguintes limitações ao configurar um pipeline do OpenSearch Ingestion para o RDS para PostgreSQL:
-
A integração é compatível com apenas um banco de dados PostgreSQL por pipeline.
-
No momento, a integração não é compatível com a ingestão de dados interregional; a instância do Amazon RDS e o domínio do OpenSearch devem estar na mesma Região da AWS.
-
No momento, a integração não é compatível com a ingestão de dados interregional; a instância do Amazon RDS e o domínio do OpenSearch Ingestion devem estar na mesma Conta da AWS.
-
Certifique-se de que a autenticação esteja habilitada na instância do Amazon RD usando o AWS Secrets Manager, que é o único mecanismo de autenticação compatível.
-
A configuração de pipeline existente não pode ser atualizada para ingerir dados de outro banco de dados e/ou de outra coleção. Para atualizar o nome do banco de dados e/ou tabela de um pipeline, você deve parar o pipeline e reiniciá-lo com uma configuração atualizada ou 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 forem alteradas (adicionar/excluir/renomear).
-
As tabelas forem eliminadas/truncadas.
-
Os nomes das colunas ou os tipos de dados forem alterados.
-
-
Se as tabelas PostgreSQL a serem sincronizadas não tiverem chaves primárias definidas, a consistência de dados não será garantida. Você precisará definir corretamente a opção
document_idpersonalizado no OpenSearch e na configuração do coletor para poder sincronizar atualizações/exclusões com o OpenSearch. -
Clusters do banco de dados multi-AZ do RDS não são compatíveis.
-
Versões compatíveis: PostgreSQL 16 e acima.
Alarmes do CloudWatch recomendados
As seguintes métricas do CloudWatch são recomendadas para monitorar a performance do 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 alarmes do CloudWatch para executar uma ação quando uma dessas métricas excede um valor especificado por um período especificado.
| Métrica | Descrição |
|---|---|
pipeline-name.rds.credentialsChanged |
Essa métrica indica com que frequência os segredos da AWS são alternados. |
pipeline-name.rds.executorRefreshErrors |
Essa métrica indica falhas na atualização de segredos da AWS. |
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 do OpenSearch Ingestion. |
pipeline-name.rds.exportRecordProcessingErrors |
Essa métrica indica o número de erros de processamento em um pipeline do OpenSearch Ingestion 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.bytesReceived |
Essa métrica indica o número total de bytes recebidos por um pipeline do OpenSearch Ingestion. |
pipeline-name.rds.bytesProcessed |
Essa métrica indica o número total de bytes processados por um pipeline do OpenSearch Ingestion. |
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. |