¿Por qué se produce un error en la entrega de datos con Kinesis Data Firehose cuando el destino es un dominio de OpenSearch Service?

6 minutos de lectura
0

Quiero enviar datos desde Amazon Kinesis Data Firehose a mi dominio de Amazon OpenSearch Service, pero se produce un error en la entrega de datos.

Breve descripción

Los siguientes motivos pueden provocar un error en la entrega entre Kinesis Data Firehose y Amazon OpenSearch Service:

  • El destino de la entrega no es válido
  • Faltan permisos
  • Problemas de invocación de la función de AWS Lambda
  • Problemas de estado del dominio de OpenSearch Service

Solución

Active Registro para Kinesis Data Firehose. Envíe los registros de errores a Amazon CloudWatch para contribuir a delimitar el problema. A continuación, compruebe el nombre del grupo de registro en /aws/kinesisfirehose/delivery-stream-name en Registros de Amazon CloudWatch.

Para entregar registros a su grupo de registro de CloudWatch, la función de Kinesis Data Firehose debe tener los siguientes permisos:

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

Compruebe que haya concedido a Kinesis Data Firehose acceso a un destino público de OpenSearch Service. Si usa la característica de transformación de datos, también deberá conceder acceso a Lambda. Para obtener más información, consulte Ingest streaming data into Amazon Elasticsearch Service within the privacy of your VPC with Amazon Kinesis Data Firehose.

El destino de la entrega no es válido

Confirme si ha especificado un destino de entrega de Kinesis Data Firehose válido y si está utilizando el ARN correcto. Consulte la métrica DeliveryToElasticsearch.Success en CloudWatch para comprobar si la entrega se ha realizado correctamente. Si el valor de la métrica es cero, las entregas no se han realizado correctamente. Para obtener más información sobre la métrica DeliveryToElasticsearch.Success, consulte Delivery to OpenSearch Service en Data delivery CloudWatch metrics.

Faltan permisos

Según la configuración de Kinesis Data Firehose, se requieren varios permisos.

Para entregar registros a un bucket de Amazon Simple Storage Service (Amazon S3), se requieren los siguientes permisos:

{      
     "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/*"
     ]
}

Nota: Para usar esta política, el recurso de bucket de Amazon S3 debe estar presente.

Si Kinesis Data Firehose se ha cifrado en reposo, se requieren los siguientes permisos:

{
     "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*"
          }
     }
}

Para conceder permisos de acceso a OpenSearch Service, actualícelos:

{
     "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 usa Kinesis Data Streams como origen, actualice sus permisos:

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

Para configurar Kinesis Data Firehose para la transformación de datos, actualice su política:

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

Si activa el control de acceso detallado (FGAC) en el clúster, inicie sesión en Paneles de OpenSearch y añada una asignación de roles. La asignación de roles permite que el rol de Kinesis Data Firehose envíe solicitudes a OpenSearch Service.

Para iniciar sesión en Paneles de OpenSearch y añadir una asignación de roles, siga los siguientes pasos:

  1. Abra Paneles.
  2. Seleccione la pestaña Seguridad.
  3. Seleccione Roles.
  4. Seleccione el rol all_access.
  5. Seleccione la pestaña Usuarios asignados.
  6. Seleccione Administrar asignación.
  7. En la sección Roles de backend, introduzca el rol de Kinesis Data Firehose.
  8. Seleccione Asignar.

Problemas de invocación de la función de AWS Lambda

Consulte la métrica ExecuteProcessing.Success and Errors de Kinesis Data Firehose para confirmar que invoque la función. Si Kinesis Data Firehose no ha invocado la función de Lambda, compruebe el tiempo de invocación para ver si ha superado el parámetro de tiempo de espera. Es posible que la función de Lambda requiera un valor de tiempo de espera mayor o que necesite más memoria para completarse a tiempo. Para obtener más información sobre las métricas de invocación, consulte Invocation metrics.

Para identificar los motivos por los que Kinesis Data Firehose no invoca la función de Lambda, consulte el grupo de registro de CloudWatch para /aws/lambda/lambda-function-name. Si la transformación de datos falla, los registros fallidos se entregan al bucket de S3 como copia de seguridad en la carpeta processing-failed. Los registros del bucket de S3 también contienen el mensaje de error de la invocación fallida. Para obtener más información sobre cómo solucionar los errores de invocación de Lambda, consulte Data transformation failure handling.

Problemas de estado del dominio de OpenSearch Service

Compruebe las siguientes métricas para asegurarse de que OpenSearch Service se encuentre en buen estado:

  • Utilización de la CPU: si esta métrica es alta de forma constante, es posible que el nodo de datos no pueda responder a ninguna solicitud o dato de entrada. Puede que tenga que escalar el clúster.
  • Presión de la memoria de JVM: si la presión de la memoria de JVM supera constantemente el 80 %, es posible que el clúster esté iniciando excepciones en los disyuntores de la memoria. Estas excepciones pueden impedir que los datos se indexen.
  • ClusterWriteBlockException: este bloqueo de indexación se produce cuando el dominio tiene una alta presión de memoria de la JVM o se necesita más espacio de almacenamiento. Si un nodo de datos no tiene suficiente espacio, no se puede indexar datos nuevos. Para obtener más información sobre cómo solucionar los problemas de OpenSearch Service, consulte Solución de problemas de Amazon OpenSearch Service.

No hay datos de entrada

Para confirmar que haya datos de entrada para Kinesis Data Firehose, monitoree las métricas IncomingRecords e IncomingBytes. Si el valor es cero, no llegan registros a Kinesis Data Firehose. Para obtener más información sobre las métricas IncomingRecords e IncomingBytes, consulte Data ingestion through direct PUT en Data ingestion metrics.

Si la transmisión de entrega utiliza Amazon Kinesis Data Streams como origen, compruebe las métricas IncomingRecords e IncomingBytes de la secuencia de datos de Kinesis. Estas dos métricas indican datos de entrada. Si el valor es cero, no llegan registros a los servicios de transmisión.

Consulte las métricas DataReadFromKinesisStream.Bytes y DataReadFromKinesisStream.Records para verificar si se están recibiendo datos de Kinesis Data Streams en Kinesis Data Firehose. Para obtener más información sobre las métricas de datos, consulte Data ingestion through Kinesis Data Streams en Data ingestion metrics. Si el valor es cero, puede haber un error en la entrega a OpenSearch Service en lugar de entre Kinesis Data Streams y Kinesis Data Firehose.

También puede comprobar si las llamadas a las API PutRecord y PutRecordBatch se realizan correctamente en el caso de Kinesis Data Firehose. Si no ve ninguna métrica de flujo de datos de entrada, compruebe el productor que lleva a cabo las operaciones PUT. Para obtener más información cómo solucionar los problemas con aplicaciones para productores, consulte Troubleshooting Amazon Kinesis Data Streams producers.

OFICIAL DE AWS
OFICIAL DE AWSActualizada hace 5 meses