Pourquoi est-ce que je rencontre un échec de transmission de données avec Kinesis Data Firehose lorsque la destination est un domaine OpenSearch Service ?

Lecture de 6 minute(s)
0

Je souhaite envoyer des données depuis Amazon Kinesis Data Firehose vers un domaine Amazon OpenSearch Service, mais je rencontre un échec de transmission de données.

Brève description

Les raisons suivantes peuvent provoquer un échec de transmission entre Kinesis Data Firehose et Amazon OpenSearch Service :

  • Destination de transmission non valide
  • Absence d’autorisations appropriées
  • Problèmes d’invocation de fonction AWS Lambda
  • Problèmes d’intégrité du domaine OpenSearch Service

Résolution

Activez la journalisation pour Kinesis Data Firehose. Transmettez vos journaux d’erreurs à Amazon CloudWatch pour vous aider à cerner le problème. Vérifiez ensuite le nom du groupe de journaux /aws/kinesisfirehose/delivery-stream-name dans Amazon CloudWatch Logs.

Pour transmettre des journaux au groupe de journaux CloudWatch, le rôle Kinesis Data Firehose doit disposer des autorisations suivantes :

{     "Action": [
          "logs:PutLogEvents"     ]
},
{
     "Resource": [
          "arn:aws:logs:region:account-id:log-group:log-group-name:log-stream:log-stream-name"
     ]
}

Vérifiez que vous accordez à Kinesis Data Firehose l’accès à une destination publique du service OpenSearch. Si vous utilisez la fonctionnalité de transformation de données, vous devez également autoriser l’accès à Lambda. Pour plus d’informations, consultez l’article Ingestion de données de streaming dans Amazon Elasticsearch Service dans la confidentialité de votre VPC avec Amazon Kinesis Data Firehose.

Destination de transmission non valide

Vérifiez que vous avez bien spécifié une destination de transmission Kinesis Data Firehose valide et que vous utilisez le bon ARN. Consultez la métrique DeliveryToElasticsearch.Success dans CloudWatch pour vérifier si la transmission a bien été effectuée. Une valeur de métrique égale à zéro confirme que les transmissions ont échoué. Pour plus d’informations sur la métrique DeliveryToElasticsearch.success, consultez Transmission vers OpenSearch Service dans Métriques CloudWatch de transmission de données.

Absence d’autorisations appropriées

Selon la configuration de Kinesis Data Firehose, plusieurs autorisations sont requises.

Pour envoyer des enregistrements vers un compartiment Amazon Simple Storage Service (Amazon S3), les autorisations suivantes sont requises :

{      
     "Effect": "Allow",
     "Action": [
          "s3:AbortMultipartUpload",
          "s3:GetBucketLocation",
          "s3:GetObject",
          "s3:ListBucket",
          "s3:ListBucketMultipartUploads",
          "s3:PutObject"
     ],
     "Resource": [
          "arn:aws:s3:::bucket-name",
          "arn:aws:s3:::bucket-name/*"
     ]
}

Remarque : pour utiliser cette politique, la ressource de compartiment Amazon S3 doit être présente.

Si les données Kinesis Data Firehose sont chiffrées au repos, les autorisations suivantes sont requises :

{
     "Effect": "Allow",
     "Action": [
          "kms:Decrypt",
          "kms:GenerateDataKey"
     ],
     "Resource": [
          "arn:aws:kms:region:account-id:key/key-id"
     ],
     "Condition": {
          "StringEquals": {
               "kms:ViaService": "s3.region.amazonaws.com"
          },
          "StringLike": {
               "kms:EncryptionContext:aws:s3:arn": "arn:aws:s3:::bucket-name/prefix*"
          }
     }
}

Pour autoriser l’accès à OpenSearch Service, mettez à jour les autorisations comme suit :

{
     "Effect": "Allow",
     "Action": [
          "es:DescribeElasticsearchDomain",
          "es:DescribeElasticsearchDomains",
          "es:DescribeElasticsearchDomainConfig",
          "es:ESHttpPost",
          "es:ESHttpPut"
     ],
     "Resource": [
          "arn:aws:es:region:account-id:domain/domain-name",
          "arn:aws:es:region:account-id:domain/domain-name/*"
     ]
},
{
     "Effect": "Allow",
     "Action": [
          "es:ESHttpGet"
     ],
     "Resource": [
          "arn:aws:es:region:account-id:domain/domain-name/_all/_settings",
          "arn:aws:es:region:account-id:domain/domain-name/_cluster/stats",
          "arn:aws:es:region:account-id:domain/domain-name/index-name*/_mapping/type-name",
          "arn:aws:es:region:account-id:domain/domain-name/_nodes",
          "arn:aws:es:region:account-id:domain/domain-name/_nodes/stats",
          "arn:aws:es:region:account-id:domain/domain-name/_nodes/*/stats",
          "arn:aws:es:region:account-id:domain/domain-name/_stats",
          "arn:aws:es:region:account-id:domain/domain-name/index-name*/_stats"
     ]
}

Si vous utilisez Kinesis Data Streams comme source, mettez à jour les autorisations comme suit :

{
     "Effect": "Allow",
     "Action": [
          "kinesis:DescribeStream",
          "kinesis:GetShardIterator",
          "kinesis:GetRecords",
          "kinesis:ListShards"
     ],
     "Resource": "arn:aws:kinesis:region:account-id:stream/stream-name"
}

Pour configurer Kinesis Data Firehose pour la transformation des données, mettez à jour la politique :

{
     "Effect": "Allow",
     "Action": [
          "lambda:InvokeFunction",
           "lambda:GetFunctionConfiguration"
      ],
     "Resource": [
         "arn:aws:lambda:region:account-id:function:function-name:function-version"
     ]
}

Si vous activez le contrôle précis des accès (FGAC) sur le cluster, connectez-vous à OpenSearch Dashboards et ajoutez un mappage de rôle. Le mappage de rôle permet au rôle Kinesis Data Firehose d’envoyer des requêtes à OpenSearch Service.

Pour vous connecter à OpenSearch Dashboards et ajouter un mappage de rôle, procédez comme suit :

  1. Ouvrez Dashboards.
  2. Choisissez l’onglet Sécurité.
  3. Sélectionnez Rôles.
  4. Choisissez le rôle all_access.
  5. Choisissez l’onglet Utilisateurs mappés.
  6. Choisissez Gérer le mappage.
  7. Dans la section Rôles du backend, entrez le rôle Kinesis Data Firehose.
  8. Choisissez Mapper.

Problèmes d’invocation de fonction AWS Lambda

Vérifiez la métrique Kinesis Data Firehose ExecuteProcessing.success and Errors pour vous assurer que Kinesis Data Firehose invoque la fonction. Si Kinesis Data Firehose n’a pas invoqué la fonction Lambda, vérifiez le délai d’invocation pour voir s’il dépasse le délai d’expiration paramétré. La fonction Lambda peut nécessiter une valeur de délai d’attente plus élevée ou avoir besoin de plus de mémoire pour s’exécuter à temps. Pour plus d’informations sur les métriques d’invocation, consultez la section Métriques d’invocation.

Pour identifier les raisons pour lesquelles Kinesis Data Firehose n’invoque pas la fonction Lambda, consultez le groupe de journaux CloudWatch pour /aws/lambda/lambda-function-name. Si la transformation des données échoue, les enregistrements d’échecs sont envoyés au compartiment S3 en tant que sauvegarde dans le dossier des échecs de traitement. En cas d’échec de l’invocation, les enregistrements du compartiment S3 contiennent également le message d’erreur. Pour plus d’informations sur la résolution des échecs d’invocation Lambda, consultez Gestion des échecs de transformation des données.

Problèmes d’intégrité du domaine OpenSearch Service

Vérifiez les métriques suivantes pour vous assurer qu’OpenSearch Service ne présente pas de problème d’intégrité :

  • Utilisation du processeur : si cette métrique est constamment élevée, le nœud de données peut ne pas être en mesure de répondre aux demandes ou aux données entrantes. Il se peut que vous deviez procéder à la mise à l’échelle du cluster.
  • Sollicitation de la mémoire JVM : si la sollicitation de la mémoire JVM est constamment supérieure à 80 %, il se peut que le cluster déclenche des exceptions de disjoncteur de mémoire. Ces exceptions peuvent empêcher l’indexation des données.
  • Exception ClusterWriteBlockException : ce bloc d’indexation se produit lorsque le domaine est soumis à une sollicitation de mémoire JVM élevée ou lorsque davantage d’espace de stockage est nécessaire. Si un nœud de données ne dispose pas de suffisamment d’espace, les nouvelles données ne peuvent pas être indexées. Pour plus d’informations sur la résolution des problèmes liés à OpenSearch Service, consultez Résolution des problèmes liés à Amazon OpenSearch Service.

Aucune donnée entrante

Pour vérifier la présence de données entrantes dans Kinesis Data Firehose, surveillez les métriques IncomingRecords et IncomingBytes. La valeur zéro signifie qu’aucun enregistrement n’atteint Kinesis Data Firehose. Pour plus d’informations sur les métriques IncomingRecords et IncomingBytes, consultez Ingestion de données via des opérations PUT directes dans Métriques d’ingestion de données.

Si le flux de diffusion utilise Amazon Kinesis Data Streams comme source, vérifiez les métriques IncomingRecords et IncomingBytes du flux de données Kinesis. Ces deux métriques indiquent la présence de données entrantes. La valeur zéro confirme qu’aucun enregistrement n’atteint les services de diffusion en continu.

Vérifiez les métriques DataReadFromKinesisStream.bytes et DataReadFromKinesisStream.records pour vérifier si les données transmises vers Kinesis Data Firehose proviennent de Kiniesis Data Streams. Pour plus d’informations sur les métriques de données, consultez Ingestion de données via Kinesis Data Streams dans Métriques d’ingestion de données. Une valeur nulle peut indiquer un échec de transmission à OpenSearch Service plutôt qu’un échec entre Kinesis Data Streams et Kinesis Data Firehose.

Vous pouvez également vérifier si les appels d’API PutRecord et PutRecordBatch pour Kinesis Data Firehose sont correctement effectués. Si vous ne voyez aucune métrique de flux de données entrante, vérifiez le producteur qui effectue les opérations PUT. Pour plus d’informations sur la résolution des problèmes liés aux applications producteur, consultez Résolution des problèmes liés aux producteurs Amazon Kinesis Data Streams.

AWS OFFICIEL
AWS OFFICIELA mis à jour il y a 5 mois