

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# Utilisation d'un pipeline OpenSearch d'ingestion avec Amazon RDS
<a name="configure-client-rds"></a>

Vous pouvez utiliser un pipeline d' OpenSearch ingestion avec Amazon RDS pour exporter les données existantes et diffuser les modifications (telles que la création, la mise à jour et la suppression) vers les domaines et les collections Amazon OpenSearch Service. Le pipeline OpenSearch d'ingestion intègre une infrastructure de capture des données modifiées (CDC) afin de fournir un moyen à grande échelle et à faible latence de diffuser en continu des données depuis Amazon RDS. RDS pour MySQL et RDS pour PostgreSQL sont pris en charge.

Vous pouvez utiliser Amazon RDS comme source pour traiter les données de deux manières : avec ou sans capture initiale complète. Un instantané initial complet est un instantané des tables spécifiées et cet instantané est exporté vers Amazon S3. À partir de là, un pipeline d' OpenSearch ingestion l'envoie vers un index d'un domaine ou le partitionne en plusieurs index d'un domaine. Pour garantir la OpenSearch cohérence des données dans Amazon RDS, le pipeline synchronise tous les événements de création, de mise à jour et de suppression dans les tables des instances Amazon RDS avec les documents enregistrés dans l'index ou les OpenSearch index.

Lorsque vous utilisez un instantané initial complet, votre pipeline d' OpenSearch ingestion ingère d'abord l'instantané, puis commence à lire les données des flux de modifications Amazon RDS. Il finit par rattraper son retard et maintient la cohérence des données en temps quasi réel entre Amazon RDS et OpenSearch. 

Vous pouvez également utiliser l'intégration d' OpenSearch ingestion avec Amazon RDS pour suivre la capture des données de modification et intégrer toutes les mises à jour dans Aurora pour. OpenSearch Choisissez cette option si vous disposez déjà d'un instantané complet d'un autre mécanisme, ou si vous souhaitez simplement capturer toutes les modifications apportées aux données dans une instance Amazon RDS. 

Lorsque vous choisissez cette option, vous devez [configurer la journalisation binaire Amazon RDS pour MySQL](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_LogAccess.MySQL.BinaryFormat.html) [ou configurer la réplication logique pour l'instance de base de données Amazon RDS pour PostgressSQL](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Appendix.PostgreSQL.CommonDBATasks.pglogical.setup-replication.html). 

**Topics**
+ [RDS for MySQL](rds-mysql.md)
+ [RDS pour PostgreSQL](rds-PostgreSQL.md)

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

Procédez comme suit pour configurer un pipeline d' OpenSearch ingestion avec Amazon RDS for RDS for MySQL.

**Topics**
+ [Prérequis pour RDS pour MySQL](#rds-mysql-prereqs)
+ [Étape 1 : configurer le rôle du pipeline](#rds-mysql-pipeline-role)
+ [Étape 2 : Création du pipeline](#rds-mysql-pipeline)
+ [Cohérence des données](#rds-mysql-pipeline-consistency)
+ [Types de données de mappage](#rds-mysql-pipeline-mapping)
+ [Limitations](#rds-mysql-pipeline-limitations)
+ [CloudWatch Alarmes recommandées](#aurora-mysql-pipeline-metrics)

## Prérequis pour RDS pour MySQL
<a name="rds-mysql-prereqs"></a>

Avant de créer votre pipeline OpenSearch d'ingestion, effectuez les étapes suivantes :

1. Créez un groupe de paramètres de base de données personnalisé dans Amazon RDS pour configurer la journalisation binaire et définissez les paramètres suivants.

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

   Assurez-vous également que le `binlog_row_value_options` paramètre n'est pas défini sur`PARTIAL_JSON`.

   Pour plus d'informations, consultez [Configuration de RDS pour la journalisation binaire MySQL](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_LogAccess.MySQL.BinaryFormat.html).

1. [Sélectionnez ou créez une instance de base de données RDS pour MySQL](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_CreateDBInstance.html) et associez le groupe de paramètres créé à l'étape précédente à l'instance de base de données.

1. Vérifiez que les sauvegardes automatisées sont activées sur la base de données. Pour plus d'informations, consultez la section [Activation des sauvegardes automatisées](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_WorkingWithAutomatedBackups.Enabling.html). 

1. Configurez la conservation des journaux binaires suffisamment longtemps pour que la réplication ait lieu, par exemple 24 heures. Pour plus d'informations, consultez la section [Configuration et affichage de la configuration des journaux binaires](https://docs.aws.amazon.com//AmazonRDS/latest/UserGuide/mysql-stored-proc-configuring.html) dans le *guide de l'utilisateur Amazon RDS*.

1. Configurez l'authentification par nom d'utilisateur et mot de passe sur votre instance Amazon RDS à l'aide [de la gestion des mots de passe avec Amazon RDS et. AWS Secrets Manager](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/rds-secrets-manager.html) Vous pouvez également créer une username/password combinaison en [créant un secret Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/create_secret.html).

1. Si vous utilisez la fonctionnalité de capture initiale complète, créez un rôle AWS KMS key et un rôle IAM pour exporter des données d'Amazon RDS vers Amazon S3.

   Le rôle IAM doit être soumis à la politique d'autorisation suivante :

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

------

   Le rôle doit également avoir les relations de confiance suivantes :

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

****  

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

------

1. Sélectionnez ou créez un domaine OpenSearch de service ou une collection OpenSearch sans serveur. Pour plus d'informations, consultez les sections [Création OpenSearch de domaines de service](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/createupdatedomains.html#createdomains) et [Création de collections](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/serverless-manage.html#serverless-create).

1. Associez une [politique basée sur les ressources](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/ac.html#ac-types-resource) à votre domaine ou une [politique d'accès aux données](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/serverless-data-access.html) à votre collection. Ces politiques d'accès permettent à OpenSearch Ingestion d'écrire des données depuis votre instance de base de données Amazon RDS vers votre domaine ou votre collection.

## Étape 1 : configurer le rôle du pipeline
<a name="rds-mysql-pipeline-role"></a>

Une fois les prérequis de votre pipeline Amazon RDS configurés, [configurez le rôle de pipeline](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/pipeline-security-overview.html#pipeline-security-sink) à utiliser dans la configuration de votre pipeline. Ajoutez également les autorisations suivantes pour la source Amazon RDS au rôle :

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

------

## Étape 2 : Création du pipeline
<a name="rds-mysql-pipeline"></a>

Configurez un pipeline d' OpenSearch ingestion similaire à ce qui suit. L'exemple de pipeline indique une instance Amazon RDS comme source. 

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

Vous pouvez utiliser un plan Amazon RDS préconfiguré pour créer ce pipeline. Pour de plus amples informations, veuillez consulter [Travailler avec des plans](pipeline-blueprint.md).

Pour utiliser Amazon Aurora comme source, vous devez configurer l'accès VPC pour le pipeline. Le VPC que vous choisissez doit être le même que celui utilisé par votre source Amazon Aurora. Choisissez ensuite un ou plusieurs sous-réseaux et un ou plusieurs groupes de sécurité VPC. Notez que le pipeline nécessite un accès réseau à une base de données Aurora MySQL. Vous devez donc également vérifier que votre cluster Aurora est configuré avec un groupe de sécurité VPC qui autorise le trafic entrant depuis le groupe de sécurité VPC du pipeline vers le port de base de données. Pour plus d'informations, consultez la section [Contrôle de l'accès avec les groupes de sécurité](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Overview.RDSSecurityGroups.html).

Si vous utilisez le AWS Management Console pour créer votre pipeline, vous devez également l'attacher à votre VPC afin d'utiliser Amazon Aurora comme source. Pour ce faire, recherchez la section **Configuration réseau**, choisissez **Attacher au VPC** et choisissez votre CIDR parmi l'une des options par défaut fournies, ou sélectionnez le vôtre. Vous pouvez utiliser n'importe quel CIDR à partir d'un espace d'adressage privé tel que défini dans la [RFC 1918 Best Current](https://datatracker.ietf.org/doc/html/rfc1918) Practice.

Pour fournir un CIDR personnalisé, sélectionnez **Autre** dans le menu déroulant. Pour éviter toute collision d'adresses IP entre OpenSearch Ingestion et Amazon RDS, assurez-vous que le CIDR VPC Amazon RDS est différent du CIDR pour l'ingestion. OpenSearch 

Pour plus d'informations, consultez [Configuration de l'accès VPC pour un pipeline](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/pipeline-security.html#pipeline-vpc-configure).

## Cohérence des données
<a name="rds-mysql-pipeline-consistency"></a>

Le pipeline garantit la cohérence des données en interrogeant ou en recevant en permanence les modifications de l'instance Amazon RDS et en mettant à jour les documents correspondants dans l' OpenSearchindex.

OpenSearch L'ingestion prend en charge end-to-end la reconnaissance afin de garantir la durabilité des données. Lorsqu'un pipeline lit des instantanés ou des flux, il crée dynamiquement des partitions pour un traitement parallèle. Le pipeline marque une partition comme terminée lorsqu'il reçoit un accusé de réception après avoir ingéré tous les enregistrements du OpenSearch domaine ou de la collection. Si vous souhaitez intégrer des données dans une collection de recherche OpenSearch sans serveur, vous pouvez générer un identifiant de document dans le pipeline. Si vous souhaitez intégrer des données dans une collection de séries chronologiques OpenSearch sans serveur, notez que le pipeline ne génère pas d'identifiant de document. Vous devez donc l'omettre `document_id: "${getMetadata(\"primary_key\")}"` dans la configuration de votre récepteur de pipeline. 

Un pipeline d' OpenSearch ingestion fait également correspondre les actions des événements entrants aux actions d'indexation groupées correspondantes pour faciliter l'ingestion de documents. Cela permet de garantir la cohérence des données, de sorte que chaque modification de données dans Amazon RDS soit conciliée avec les modifications de document correspondantes dans. OpenSearch

## Types de données de mappage
<a name="rds-mysql-pipeline-mapping"></a>

OpenSearch Le pipeline d'ingestion fait correspondre les types de données MySQL à des représentations adaptées à la consommation de domaines ou de collections de OpenSearch services. Si aucun modèle de mappage n'est défini dans OpenSearch, détermine OpenSearch automatiquement les types de champs avec un [mappage dynamique](https://docs.opensearch.org/latest/field-types/#dynamic-mapping) en fonction du premier document envoyé. Vous pouvez également définir explicitement les types de champs qui vous conviennent le mieux par le OpenSearch biais d'un modèle de mappage. 

Le tableau ci-dessous répertorie les types de données MySQL et les types de OpenSearch champs correspondants. La colonne *Type de OpenSearch champ par défaut* indique le type de champ correspondant OpenSearch si aucun mappage explicite n'est défini. Dans ce cas, détermine OpenSearch automatiquement les types de champs à l'aide d'un mappage dynamique. La colonne *Type de OpenSearch champ recommandé* est le type de champ correspondant qu'il est recommandé de spécifier explicitement dans un modèle de mappage. Ces types de champs sont plus proches des types de données de MySQL et peuvent généralement permettre de meilleures fonctionnalités de recherche disponibles dans OpenSearch.


| Type de données MySQL | Type de OpenSearch champ par défaut | Type de OpenSearch champ recommandé | 
| --- | --- | --- | 
| BIGINT | long | long | 
| BIGINT UNSIGNED | long | long non signé | 
| BIT | long | octet, court, entier ou long selon le nombre de bits | 
| DECIMAL | text | double ou mot-clé | 
| DOUBLE | float | double | 
| FLOAT | float | float | 
| INT | long | entier | 
| INT UNSIGNED | long | long | 
| MEDIUMINT | long | entier | 
| MEDIUMINT UNSIGNED | long | entier | 
| NUMERIC | text | double ou mot-clé | 
| SMALLINT | long | short | 
| SMALLINT UNSIGNED | long | entier | 
| TINYINT | long |  octet | 
| TINYINT UNSIGNED | long | short | 
| BINAIRE | text | binary | 
| BLOB | text | binary | 
| CHAR | text | text | 
| ENUM | text | mot clé | 
| LONGBLOB | text | binary | 
| LONGTEXT | text | text | 
| MEDIUMBLOB | text | binary | 
| MEDIUMTEXT | text | text | 
| SET | text | mot clé | 
| TEXT | text | text | 
| TINYBLOB | text | binary | 
| TINYTEXT | text | text | 
| VARBINARY | text | binary | 
| VARCHAR | text | text | 
| DATE | long (en millisecondes d'époque) | date | 
| DATETIME | long (en millisecondes d'époque) | date | 
| TIME | long (en millisecondes d'époque) | date | 
| TIMESTAMP | long (en millisecondes d'époque) | date | 
| YEAR | long (en millisecondes d'époque) | date | 
| GEOMETRY | texte (au format WKT) | geo\$1shape | 
| GEOMETRYCOLLECTION | texte (au format WKT) | geo\$1shape | 
| LINESTRING | texte (au format WKT) | geo\$1shape | 
| MULTILINESTRING | texte (au format WKT) | geo\$1shape | 
| MULTIPOINT | texte (au format WKT) | geo\$1shape | 
| MULTIPOLYGON | texte (au format WKT) | geo\$1shape | 
| POINT | texte (au format WKT) | geo\$1point ou geo\$1shape | 
| POLYGON | texte (au format WKT) | geo\$1shape | 
| JSON | text | objet | 

Nous vous recommandons de configurer la file d'attente des lettres mortes (DLQ) dans votre OpenSearch pipeline d'ingestion. Si vous avez configuré la file d'attente, le OpenSearch service envoie tous les documents défaillants qui ne peuvent pas être ingérés en raison d'échecs de mappage dynamique vers la file d'attente.

Si les mappages automatiques échouent, vous pouvez utiliser `template_type` et `template_content` dans la configuration de votre pipeline pour définir des règles de mappage explicites. Vous pouvez également créer des modèles de mappage directement dans votre domaine de recherche ou votre collection avant de démarrer le pipeline.

## Limitations
<a name="rds-mysql-pipeline-limitations"></a>

Tenez compte des limites suivantes lorsque vous configurez un pipeline d' OpenSearch ingestion pour RDS for MySQL :
+ L'intégration ne prend en charge qu'une seule base de données MySQL par pipeline.
+ L'intégration ne prend actuellement pas en charge l'ingestion de données entre régions ; votre instance Amazon RDS et votre OpenSearch domaine doivent se trouver dans le même emplacement. Région AWS
+ L'intégration ne prend actuellement pas en charge l'ingestion de données entre comptes ; votre instance Amazon RDS et votre pipeline d' OpenSearch ingestion doivent se trouver dans le même environnement. Compte AWS
+ Assurez-vous que l'authentification est activée sur l'instance Amazon RDS à l'aide de Secrets Manager, qui est le seul mécanisme d'authentification pris en charge.
+ La configuration de pipeline existante ne peut pas être mise à jour pour ingérer des données provenant d'une autre base de données ou and/or d'une autre table. Pour mettre à jour le nom de la base de données et/ou de la table d'un pipeline, vous devez créer un nouveau pipeline.
+ Les instructions DDL (Data Definition Language) ne sont généralement pas prises en charge. La cohérence des données ne sera pas maintenue si :
  + Les clés primaires sont modifiées (add/delete/rename).
  + Les tables sont supprimées/tronquées.
  + Les noms de colonnes ou les types de données sont modifiés.
+ Si aucune clé primaire n'est définie pour les tables MySQL à synchroniser, la cohérence des données n'est pas garantie. Vous devrez définir correctement l'`document_id`option personnalisée dans la configuration du OpenSearch récepteur pour pouvoir effectuer la synchronisation avec updates/deletes OpenSearch.
+ Les références à des clés étrangères associées à des actions de suppression en cascade ne sont pas prises en charge et peuvent entraîner une incohérence des données entre RDS for MySQL et. OpenSearch
+ Les clusters de base de données de zones à disponibilité multiple Amazon RDS ne sont pas pris en charge.
+ Versions prises en charge : MySQL version 8.0 et supérieure.

## CloudWatch Alarmes recommandées
<a name="aurora-mysql-pipeline-metrics"></a>

Les CloudWatch mesures suivantes sont recommandées pour surveiller les performances de votre pipeline d'ingestion. Ces indicateurs peuvent vous aider à identifier la quantité de données traitées à partir des exportations, le nombre d'événements traités à partir des flux, les erreurs lors du traitement des exportations et des événements des flux, ainsi que le nombre de documents écrits vers la destination. Vous pouvez configurer des CloudWatch alarmes pour effectuer une action lorsque l'une de ces mesures dépasse une valeur spécifiée pendant une durée spécifiée.


| Métrique | Description | 
| --- | --- | 
| pipeline-name.rds. Informations d'identification modifiées | Cette métrique indique la fréquence à laquelle AWS les secrets font l'objet d'une rotation. | 
| pipeline-name.rds. executorRefreshErrors | Cette métrique indique les échecs d'actualisation AWS des secrets. | 
| pipeline-name.rds. exportRecordsTotal | Cette métrique indique le nombre d'enregistrements exportés depuis Amazon Aurora. | 
| pipeline-name.rds. exportRecordsProcessed | Cette métrique indique le nombre d'enregistrements traités par le pipeline OpenSearch d'ingestion. | 
| pipeline-name.rds. exportRecordProcessingErreurs | Cette métrique indique le nombre d'erreurs de traitement dans un pipeline d' OpenSearch ingestion lors de la lecture des données d'un cluster Amazon Aurora. | 
| pipeline-name.rds. exportRecordsSuccessTotal | Cette métrique indique le nombre total d'enregistrements d'exportation traités avec succès. | 
| pipeline-name.rds. exportRecordsFailedTotal | Cette métrique indique le nombre total d'enregistrements d'exportation qui n'ont pas pu être traités. | 
| pipeline-name.RDS. Octets reçus | Cette métrique indique le nombre total d'octets reçus par un pipeline d' OpenSearch ingestion. | 
| pipeline-name.RDS. Octets traités | Cette métrique indique le nombre total d'octets traités par un pipeline d' OpenSearch ingestion. | 
| pipeline-name.rds. streamRecordsSuccessTotal | Cette métrique indique le nombre d'enregistrements traités avec succès à partir du flux. | 
| pipeline-name.rds. streamRecordsFailedTotal | Cette métrique indique le nombre total d'enregistrements du flux qui n'ont pas pu être traités. | 

# RDS pour PostgreSQL
<a name="rds-PostgreSQL"></a>

Procédez comme suit pour configurer un pipeline d' OpenSearch ingestion avec Amazon RDS pour RDS pour PostgreSQL.

**Topics**
+ [Conditions requises pour RDS pour PostgreSQL](#rds-PostgreSQL-prereqs)
+ [Étape 1 : configurer le rôle du pipeline](#rds-mysql-pipeline-role)
+ [Étape 2 : Création du pipeline](#rds-PostgreSQL-pipeline)
+ [Cohérence des données](#rds-mysql-pipeline-consistency)
+ [Types de données de mappage](#rds-PostgreSQL-pipeline-mapping)
+ [Limitations](#rds-PostgreSQL-pipeline-limitations)
+ [CloudWatch Alarmes recommandées](#aurora-mysql-pipeline-metrics)

## Conditions requises pour RDS pour PostgreSQL
<a name="rds-PostgreSQL-prereqs"></a>

Avant de créer votre pipeline OpenSearch d'ingestion, effectuez les étapes suivantes :

1. [Créez un groupe de paramètres de base de données personnalisé](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/zero-etl.setting-up.html#zero-etl.parameters) dans Amazon RDS pour configurer la réplication logique.

   ```
   rds.logical_replication=1
   ```

   Pour plus d'informations, consultez [Réalisation d'une réplication logique pour Amazon RDS for PostgreSQL](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/PostgreSQL.Concepts.General.FeatureSupport.LogicalReplication.html).

1. [Sélectionnez ou créez une instance de base de données RDS pour PostgreSQL](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_GettingStarted.CreatingConnecting.PostgreSQL.html) et associez le groupe de paramètres créé à l'étape 1 à l'instance de base de données.

1. Configurez l'authentification par nom d'utilisateur et mot de passe sur votre instance Amazon RDS à l'aide [de la gestion des mots de passe avec Aurora et AWS Secrets Manager](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/rds-secrets-manager.html). Vous pouvez également créer une username/password combinaison en [créant un secret Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/create_secret.html).

1. Si vous utilisez la fonctionnalité de capture initiale complète, créez un rôle AWS KMS key et un rôle IAM pour exporter des données d'Amazon RDS vers Amazon S3.

   Le rôle IAM doit être soumis à la politique d'autorisation suivante :

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

------

   Le rôle doit également avoir les relations de confiance suivantes :

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

****  

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

------

1. Sélectionnez ou créez un domaine OpenSearch de service ou une collection OpenSearch sans serveur. Pour plus d'informations, consultez les sections [Création OpenSearch de domaines de service](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/createupdatedomains.html#createdomains) et [Création de collections](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/serverless-manage.html#serverless-create).

1. Associez une [politique basée sur les ressources](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/ac.html#ac-types-resource) à votre domaine ou une [politique d'accès aux données](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/serverless-data-access.html) à votre collection. Ces politiques d'accès permettent à OpenSearch Ingestion d'écrire des données depuis votre instance de base de données Amazon RDS vers votre domaine ou votre collection.

## Étape 1 : configurer le rôle du pipeline
<a name="rds-mysql-pipeline-role"></a>

Une fois les prérequis de votre pipeline Amazon RDS configurés, [configurez le rôle de pipeline](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/pipeline-security-overview.html#pipeline-security-sink) à utiliser dans la configuration de votre pipeline. Ajoutez également les autorisations suivantes pour la source Amazon RDS au rôle :

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

------

## Étape 2 : Création du pipeline
<a name="rds-PostgreSQL-pipeline"></a>

Configurez un pipeline d' OpenSearch ingestion comme le suivant, qui spécifie une instance RDS pour PostgreSQL comme source. 

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

**Note**  
Vous pouvez utiliser un plan Amazon RDS préconfiguré pour créer ce pipeline. Pour de plus amples informations, veuillez consulter [Travailler avec des plans](pipeline-blueprint.md).

Pour utiliser Amazon Aurora comme source, vous devez configurer l'accès VPC pour le pipeline. Le VPC que vous choisissez doit être le même que celui utilisé par votre source Amazon Aurora. Choisissez ensuite un ou plusieurs sous-réseaux et un ou plusieurs groupes de sécurité VPC. Notez que le pipeline nécessite un accès réseau à une base de données Aurora MySQL. Vous devez donc également vérifier que votre cluster Aurora est configuré avec un groupe de sécurité VPC qui autorise le trafic entrant depuis le groupe de sécurité VPC du pipeline vers le port de base de données. Pour plus d'informations, consultez la section [Contrôle de l'accès avec les groupes de sécurité](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Overview.RDSSecurityGroups.html).

Si vous utilisez le AWS Management Console pour créer votre pipeline, vous devez également l'attacher à votre VPC afin d'utiliser Amazon Aurora comme source. Pour ce faire, recherchez la section **Configuration réseau**, choisissez **Attacher au VPC** et choisissez votre CIDR parmi l'une des options par défaut fournies, ou sélectionnez le vôtre. Vous pouvez utiliser n'importe quel CIDR à partir d'un espace d'adressage privé tel que défini dans la [RFC 1918 Best Current](https://datatracker.ietf.org/doc/html/rfc1918) Practice.

Pour fournir un CIDR personnalisé, sélectionnez **Autre** dans le menu déroulant. Pour éviter toute collision d'adresses IP entre OpenSearch Ingestion et Amazon RDS, assurez-vous que le CIDR VPC Amazon Aurora est différent du CIDR pour l'ingestion. OpenSearch 

Pour plus d'informations, consultez [Configuration de l'accès VPC pour un pipeline](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/pipeline-security.html#pipeline-vpc-configure).

## Cohérence des données
<a name="rds-mysql-pipeline-consistency"></a>

Le pipeline garantit la cohérence des données en interrogeant ou en recevant en permanence les modifications de l'instance Amazon RDS et en mettant à jour les documents correspondants dans l' OpenSearchindex.

OpenSearch L'ingestion prend en charge end-to-end la reconnaissance afin de garantir la durabilité des données. Lorsqu'un pipeline lit des instantanés ou des flux, il crée dynamiquement des partitions pour un traitement parallèle. Le pipeline marque une partition comme terminée lorsqu'il reçoit un accusé de réception après avoir ingéré tous les enregistrements du OpenSearch domaine ou de la collection. Si vous souhaitez intégrer des données dans une collection de recherche OpenSearch sans serveur, vous pouvez générer un identifiant de document dans le pipeline. Si vous souhaitez intégrer des données dans une collection de séries chronologiques OpenSearch sans serveur, notez que le pipeline ne génère pas d'identifiant de document. Vous devez donc l'omettre `document_id: "${getMetadata(\"primary_key\")}"` dans la configuration de votre récepteur de pipeline. 

Un pipeline d' OpenSearch ingestion fait également correspondre les actions des événements entrants aux actions d'indexation groupées correspondantes pour faciliter l'ingestion de documents. Cela permet de garantir la cohérence des données, de sorte que chaque modification de données dans Amazon RDS soit conciliée avec les modifications de document correspondantes dans. OpenSearch

## Types de données de mappage
<a name="rds-PostgreSQL-pipeline-mapping"></a>

OpenSearch Le pipeline d'ingestion fait correspondre les types de données PostgreSQL à des représentations adaptées à la consommation de domaines ou OpenSearch de collections de services. Si aucun modèle de mappage n'est défini dans OpenSearch, déterminez OpenSearch automatiquement les types de champs à l'aide d'un [mappage dynamique](https://docs.opensearch.org/latest/field-types/#dynamic-mapping) basé sur le premier document envoyé. Vous pouvez également définir explicitement les types de champs qui vous conviennent le mieux par le OpenSearch biais d'un modèle de mappage. 

Le tableau ci-dessous répertorie les types de données RDS pour PostgreSQL et les types de champs correspondants. OpenSearch La colonne *Type de OpenSearch champ par défaut* indique le type de champ correspondant OpenSearch si aucun mappage explicite n'est défini. Dans ce cas, détermine OpenSearch automatiquement les types de champs à l'aide d'un mappage dynamique. La colonne *Type de OpenSearch champ recommandé* est le type de champ recommandé correspondant à spécifier explicitement dans un modèle de mappage. Ces types de champs sont plus étroitement liés aux types de données de RDS pour PostgreSQL et peuvent généralement permettre de meilleures fonctionnalités de recherche disponibles dans. OpenSearch


| Type de données RDS pour PostgreSQL | Type de OpenSearch champ par défaut | Type de OpenSearch champ recommandé | 
| --- | --- | --- | 
| smallint | long | short | 
| entier | long | entier | 
| bigint | long | long | 
| decimal | text | double ou mot-clé | 
| numérique [(p, s)] | text | double ou mot-clé | 
| real | float | float | 
| double precision | float | double | 
| smallserial | long | short | 
| serial | long | entier | 
| bigserial | long | long | 
| money | objet | objet | 
| caractère variable (n) | text | text | 
| varchar(n) | text | text | 
| caractère (n) | text | text | 
| char(n) | text | text | 
| bpchar (n) | text | text | 
| bpchar | text | text | 
| text | text | text | 
| enum | text | text | 
| bytea | text | binary | 
| horodatage [(p)] [sans fuseau horaire] | long (en millisecondes d'époque) | date | 
| horodatage [(p)] avec fuseau horaire | long (en millisecondes d'époque) | date | 
| date | long (en millisecondes d'époque) | date | 
| heure [(p)] [sans fuseau horaire] | long (en millisecondes d'époque) | date | 
| heure [(p)] avec fuseau horaire | long (en millisecondes d'époque) | date | 
| intervalle [champs] [(p)] | texte (ISO8601 format) | text | 
| boolean | boolean | boolean | 
| point | texte (au format WKT) | geo\$1shape | 
| line | texte (au format WKT) | geo\$1shape | 
| jambe | texte (au format WKT) | geo\$1shape | 
| boîte | texte (au format WKT) | geo\$1shape | 
| path | texte (au format WKT) | geo\$1shape | 
| polygone | texte (au format WKT) | geo\$1shape | 
| encercler | objet | objet | 
| cidr | text | text | 
| inet | text | text | 
| macaddr | text | text | 
| macaddr8 | text | text | 
| bit(n) | long | octet, court, entier ou long (selon le nombre de bits) | 
| bit varying(n) | long | octet, court, entier ou long (selon le nombre de bits) | 
| json | objet | objet | 
| jsonb | objet | objet | 
| jsonpath | text | text | 

Nous vous recommandons de configurer la file d'attente des lettres mortes (DLQ) dans votre OpenSearch pipeline d'ingestion. Si vous avez configuré la file d'attente, le OpenSearch service envoie tous les documents défaillants qui ne peuvent pas être ingérés en raison d'échecs de mappage dynamique vers la file d'attente.

En cas d'échec des mappages automatiques, vous pouvez utiliser `template_type` et `template_content` dans la configuration de votre pipeline pour définir des règles de mappage explicites. Vous pouvez également créer des modèles de mappage directement dans votre domaine de recherche ou votre collection avant de démarrer le pipeline.

## Limitations
<a name="rds-PostgreSQL-pipeline-limitations"></a>

Tenez compte des limites suivantes lorsque vous configurez un pipeline d' OpenSearch ingestion pour RDS pour PostgreSQL :
+ L'intégration ne prend en charge qu'une seule base de données PostgreSQL par pipeline.
+ L'intégration ne prend actuellement pas en charge l'ingestion de données entre régions ; votre instance Amazon RDS et votre OpenSearch domaine doivent se trouver dans le même emplacement. Région AWS
+ L'intégration ne prend actuellement pas en charge l'ingestion de données entre comptes ; votre instance Amazon RDS et votre pipeline d' OpenSearch ingestion doivent se trouver dans le même environnement. Compte AWS
+ Assurez-vous que l'authentification est activée sur l'instance Amazon RDS à l'aide AWS Secrets Manager du seul mécanisme d'authentification pris en charge.
+ La configuration de pipeline existante ne peut pas être mise à jour pour ingérer des données provenant d'une autre base de données ou and/or d'une autre table. Pour mettre à jour le nom de la base de données et/ou de la table d'un pipeline, vous devez arrêter le pipeline et le redémarrer avec une configuration mise à jour, ou créer un nouveau pipeline.
+ Les instructions DDL (Data Definition Language) ne sont généralement pas prises en charge. La cohérence des données ne sera pas maintenue si :
  + Les clés primaires sont modifiées (add/delete/rename).
  + Les tables sont supprimées/tronquées.
  + Les noms de colonnes ou les types de données sont modifiés.
+ Si aucune clé primaire n'est définie pour les tables PostgreSQL à synchroniser, la cohérence des données n'est pas garantie. Vous devrez définir correctement l'`document_id`option personnalisée dans OpenSearch la configuration du récepteur pour pouvoir effectuer la synchronisation avec updates/deletes OpenSearch.
+ Les clusters de bases de données RDS Multi-AZ ne sont pas pris en charge.
+ Versions prises en charge : PostgreSQL 16 et versions ultérieures.

## CloudWatch Alarmes recommandées
<a name="aurora-mysql-pipeline-metrics"></a>

Les CloudWatch mesures suivantes sont recommandées pour surveiller les performances de votre pipeline d'ingestion. Ces indicateurs peuvent vous aider à identifier la quantité de données traitées à partir des exportations, le nombre d'événements traités à partir des flux, les erreurs lors du traitement des exportations et des événements des flux, ainsi que le nombre de documents écrits vers la destination. Vous pouvez configurer des CloudWatch alarmes pour effectuer une action lorsque l'une de ces mesures dépasse une valeur spécifiée pendant une durée spécifiée.


| Métrique | Description | 
| --- | --- | 
| pipeline-name.rds. Informations d'identification modifiées | Cette métrique indique la fréquence à laquelle AWS les secrets font l'objet d'une rotation. | 
| pipeline-name.rds. executorRefreshErrors | Cette métrique indique les échecs d'actualisation AWS des secrets. | 
| pipeline-name.rds. exportRecordsTotal | Cette métrique indique le nombre d'enregistrements exportés depuis Amazon Aurora. | 
| pipeline-name.rds. exportRecordsProcessed | Cette métrique indique le nombre d'enregistrements traités par le pipeline OpenSearch d'ingestion. | 
| pipeline-name.rds. exportRecordProcessingErreurs | Cette métrique indique le nombre d'erreurs de traitement dans un pipeline d' OpenSearch ingestion lors de la lecture des données d'un cluster Amazon Aurora. | 
| pipeline-name.rds. exportRecordsSuccessTotal | Cette métrique indique le nombre total d'enregistrements d'exportation traités avec succès. | 
| pipeline-name.rds. exportRecordsFailedTotal | Cette métrique indique le nombre total d'enregistrements d'exportation qui n'ont pas pu être traités. | 
| pipeline-name.RDS. Octets reçus | Cette métrique indique le nombre total d'octets reçus par un pipeline d' OpenSearch ingestion. | 
| pipeline-name.RDS. Octets traités | Cette métrique indique le nombre total d'octets traités par un pipeline d' OpenSearch ingestion. | 
| pipeline-name.rds. streamRecordsSuccessTotal | Cette métrique indique le nombre d'enregistrements traités avec succès à partir du flux. | 
| pipeline-name.rds. streamRecordsFailedTotal | Cette métrique indique le nombre total d'enregistrements du flux qui n'ont pas pu être traités. | 