¿Cómo soluciono los desencadenadores de Lambda que sondean desde clústeres de Amazon MSK y Apache Kafka autoadministrado?

16 minutos de lectura
0

He diseñado mi función de AWS Lambda para procesar registros de mi clúster de Amazon Managed Streaming para Apache Kafka (Amazon MSK) o un clúster de Apache Kafka autoadministrado. Sin embargo, la asignación de orígenes de eventos no invoca mi función de Lambda.

Descripción corta

Para invocar una función de Lambda, la asignación de orígenes de eventos de Apache Kafka debe poder realizar las siguientes acciones:

Si la configuración de red, autenticación o autorización de una asignación de orígenes de eventos impide las acciones anteriores, la asignación de orígenes de eventos no puede invocar la función. En su lugar, recibes un error.

Resolución

Después de configurar una función de Lambda con un desecadenador de Amazon MSK o un desencadenador de Kafka autoadministrado, Lambda crea automáticamente un nuevo recurso de asignación de orígenes de eventos. Esta asignación de orígenes de eventos es un recurso independiente de la función de Lambda. La asignación de orígenes de eventos sondea los registros del clúster de Kafka y los agrupa en una carga útil. A continuación, se llama a la API de invocación de Lambda para entregar la carga útil a la función de Lambda para que la procese. Para solucionar problemas relacionados con sondeos fallidos, completa los siguientes pasos de solución de problemas para cada error que recibas.

Importante: Las asignaciones de orígenes de eventos de Lambda no heredan la configuración de red de nube privada virtual (VPC) de la función de Lambda. Esto es válido tanto para Amazon MSK como para los desencadenadores de Kafka autoadministrados. Una asignación de orígenes de eventos de Amazon MSK usa las configuraciones de subred y grupo de seguridad que configuraste en el clúster de MSK de destino. Un desencadenador de Kafka autoadministrado tiene acceso a una red de área extensa (WAN) de forma predeterminada. Sin embargo, también puedes configurar el acceso de red a una VPC en la misma cuenta de AWS y región de AWS. Como la configuración de la red es independiente, puedes configurar la función de Lambda dentro de una red que no tenga una ruta al clúster de Kafka.

Para configurar una asignación de orígenes de eventos de Amazon MSK para sondear los registros de un clúster de MSK multicuenta, configura la conectividad privada de varias VPC. Ten en cuenta que puedes crear un desencadenador de Kafka autoadministrado que consuma desde un clúster de MSK en otra cuenta. Sin embargo, hay desventajas en esta solución. Por ejemplo, no puedes usar la autenticación de AWS Identity and Access Management (IAM) con un desencadenador de Kafka autoadministrado, incluso si el clúster de destino es un clúster de MSK. Además, para conectarte al clúster de MSK a través de una conexión a una VPC interconectada, debes configurar soluciones alternativas de VPC. Para ver un ejemplo de arquitectura, consulta Cómo Goldman Sachs crea conectividad entre cuentas para sus clústeres de Amazon MSK con AWS PrivateLink.

Nota: Para usar la conectividad de varias VPC, comprueba que cumples los requisitos.

Solucionar problemas de comunicación de red entre el desencadenador y el clúster

La asignación de orígenes de eventos envía varias solicitudes diferentes a los puntos de enlace del agente del clúster para completar una sola invocación de la función de Lambda. Antes de una invocación, la asignación de orígenes de eventos solicita a los puntos de enlace del agente del clúster la información de los metadatos del clúster y los registros del tema. Tras una invocación exitosa, la asignación de orígenes de eventos se comunica con los puntos de enlace del agente para confirmar los registros procesados. Cuando la asignación de orígenes de eventos envía una solicitud a los puntos de enlace del agente y no recibe una respuesta, se agota el tiempo de espera de la solicitud. Se muestra el siguiente error:

«PROBLEMA: Error de conexión. Comprueba la configuración de conexión del origen del evento. Si tu origen de eventos se encuentra en una VPC, intenta configurar una nueva función de Lambda o instancia de EC2 con la misma configuración de VPC, subred y grupo de seguridad. Conecta el nuevo dispositivo al clúster de Kafka y consume los mensajes para asegurarte de que el problema no esté relacionado con la configuración de VPC o punto de enlace. Si el nuevo dispositivo puede consumir mensajes, ponte en contacto con el servicio de atención al cliente de Lambda para obtener más información».

Las solicitudes del agente que agotan el tiempo de espera se pueden producir antes o después de que la solicitud llegue al punto de enlace del agente. Los errores de tiempo de espera antes del agente se producen cuando la configuración de la red y del grupo de seguridad bloquea las solicitudes de asignación de orígenes de eventos a los puntos de enlace del agente. Las solicitudes que agotan el tiempo de espera después del agente se producen cuando el agente recibe la solicitud de asignación de orígenes de eventos, pero no puede completar la solicitud.

Para investigar una solicitud que ha acotado el espera después del agente, comprueba el estado del agente en el momento del error. Si el clúster estaba desconectado cuando se produjo el problema, reactiva la asignación de orígenes de eventos cuando el clúster vuelva a estar en línea y disponible. Las solicitudes que agotan el tiempo de espera también se producen cuando el clúster se queda sin espacio en disco o alcanza el 100% de uso de la CPU, o cuando se produce un error en un punto de enlace del agente. Para resolver estos problemas, define el tamaño del lote de la asignación de orígenes de eventos en 1 y, a continuación, vuelve a activar el desencadenador. Ten en cuenta que cuando estableces el tamaño del lote en un valor más alto, el tiempo de respuesta del clúster es más prolongado.

Para solucionar errores de tiempo de espera, examina los registros de acceso y del sistema del agente para obtener más información.

Si se agota el tiempo de espera de la solicitud antes de que llegue al punto de enlace del agente, comprueba la configuración de red.

Comprobación de la configuración de red para una asignación de orígenes de eventos de Amazon MSK

Para comunicarte con el clúster de MSK, la asignación de orígenes de eventos de Amazon MSK crea una interfaz de red elástica de hiperplano en cada subred que utiliza el clúster. La asignación de orígenes de eventos es un recurso propiedad de Lambda. Sin embargo, la asignación de orígenes de eventos de Amazon MSK no usa la configuración de VPC de la función de Lambda. En su lugar, la asignación de orígenes de eventos usa automáticamente la configuración de subred y grupo de seguridad que está configurada en el clúster de MSK de destino. A continuación, la asignación de orígenes de eventos de Amazon MSK crea una interfaz de red dentro de cada subred que usa el clúster de MSK. Estas interfaces de red usan el mismo grupo de seguridad que el clúster de MSK.

Para comprobar si los grupos de seguridad permiten el tráfico y los puertos necesarios, sigue estos pasos:

  1. Ejecuta el comando describe-cluster de la AWS CLI para enumerar todos los grupos de seguridad y subredes que usa el clúster de MSK.
  2. Para mostrar todas las reglas de entrada y salida, ejecuta el comando describe-security-groups en los grupos de seguridad que aparecen en el resultado del comando describe-cluster.
  3. Configura las reglas de los grupos de seguridad de la lista para permitir el tráfico entre el grupo de seguridad y el clúster de MSK. También debes permitir el tráfico a través de los siguientes puertos de autenticación abiertos que utiliza el agente:
    9092 para texto plano
    9094 para TLS
    9096 para SASL
    9098 para IAM
    443 (regla de salida) para todas las configuraciones

Nota: Si se muestran errores al poner en marcha comandos de Interfaz de la línea de comandos de AWS (AWS CLI), consulta Solución de errores de la AWS CLI. Además, asegúrate de usar la versión más reciente de la AWS CLI.

Comprobación de la configuración de red para una asignación de orígenes de eventos de Kafka autoadministrado

De forma predeterminada, una asignación de orígenes de eventos de Kafka autoadministrado puede acceder a la WAN pero no a la VPC. Puedes configurar manualmente el acceso de la VPC a subredes y grupos de seguridad específicos del clúster de Kafka. Sin embargo, la asignación de orígenes de eventos solo puede acceder a los clústeres si están en la cuenta que contiene la función de Lambda. Puedes crear una asignación de orígenes de eventos de Kafka autoadministrado para un clúster de Kafka que se encuentre en una de las siguientes ubicaciones:

  • Un centro de datos local
  • Otro proveedor de servicios en la nube
  • Los agentes de Amazon MSK de un clúster de Kafka que se encuentra en la VPC de una cuenta diferente

Solución de los problemas que se producen durante la inicialización, el sondeo o la invocación

Si tienes problemas durante la inicialización, el sondeo o la invocación, recibirás el siguiente error:

«PROBLEMA: Error de conexión. La VPC del origen de eventos debe poder conectarse a Lambda y STS, a Secrets Manager (si se requiere la autenticación del origen de eventos) y al destino en caso de error (si hay uno configurado). Puedes proporcionar acceso configurando PrivateLink o una puerta de enlace NAT. Para saber cómo configurar puntos de enlace de VPC o puertas de enlace NAT, consulta https://aws.amazon.com/blogs/compute/setting-up-aws-lambda-with-an-apache-kafka-cluster-within-a-vpc/».

El error anterior se produce por alguno de los siguientes motivos:

  • La asignación de orígenes de eventos está configurada en una VPC y las llamadas a la API de STS fallan o se agota el tiempo de espera.
  • La asignación de orígenes de eventos está configurada para usar la autenticación de clústeres de Secrets Manager, pero las llamadas a la API de Secrets Manager fallan o se agota el tiempo de espera.
  • La asignación de orígenes de eventos puede acceder a tu clúster de Kafka y a los registros de sondeo correctamente, pero las llamadas a la API de Lambda fallan o se agota el tiempo de espera.
  • Has configurado la asignación de orígenes de eventos con un destino en caso de error, como Amazon Simple Storage Service (Amazon S3) o Amazon Simple Notification Service (Amazon SNS). Sin embargo, cuando las invocaciones de funciones terminan con un error, las llamadas a la API del destino en caso de error fallan o se agota el tiempo de espera.

Los problemas anteriores se producen cuando la configuración de los grupos de seguridad o las tablas de enrutamiento no permiten que la asignación de orígenes de eventos llegue a otros servicios. Estos servicios incluyen AWS STS, Lambda o AWS Secrets Manager. Para configurar correctamente los ajustes de la VPC, completa los pasos que se indican en Configuración de AWS Lambda con un clúster de Apache Kafka dentro de una VPC.

Para resolver estos problemas relacionados con una asignación de orígenes de eventos de Kafka autoadministrado, lleva a cabo las siguientes acciones:

  • Crea un punto de enlace de VPC de Lambda y un punto de enlace de VPC de STS en la VPC que contenga las subredes que usa la asignación de orígenes de eventos de Kafka autoadministrado.
  • Si configuraste la asignación de orígenes de eventos con un secreto, crea un punto de enlace de VPC para Secrets Manager.
  • Si configuraste la asignación de orígenes de eventos con un destino en caso de error, crea un punto de enlace de VPC para tu destino en caso de error. Algunos ejemplos de destinos son Amazon SNS o Amazon S3.
  • Configura los puntos de enlace de la VPC con un grupo de seguridad que permita el tráfico entrante en el puerto 443 desde el grupo de seguridad de la asignación de orígenes de eventos de Kafka autoadministrado.
  • Configura el grupo de seguridad de la asignación de orígenes de eventos de Kafka autoadministrado para permitir el tráfico saliente del puerto 443 al grupo de seguridad de los puntos de enlace de VPC.

Para resolver estos problemas para una asignación de orígenes de eventos de Amazon MSK, lleva a cabo las siguientes acciones:

  • Crea un punto de enlace de VPC de Lambda y un punto de enlace de VPC de STS en la VPC que contiene el clúster de MSK.
  • Si la asignación de orígenes de eventos usa un secreto o el clúster usa la autenticación SASL IAM, crea un punto de enlace de VPC para Secrets Manager. Este punto de enlace debe estar en la VPC que contiene el clúster de MSK.
  • Si configuraste la asignación de orígenes de eventos con un destino en caso de error, crea un punto de enlace de VPC para tu destino en caso de error. Algunos ejemplos de destinos son Amazon SNS o Amazon S3. Este punto de enlace de VPC debe estar en la VPC que contiene el clúster de MSK.
  • Configura los puntos de enlace de VPC con un grupo de seguridad que permita el tráfico entrante en el puerto 443 desde el grupo de seguridad que usa el clúster de MSK.
    Importante: Permite el tráfico entrante desde el grupo de seguridad del clúster de MSK, no desde el grupo de seguridad de la función de Lambda.
  • Configura el grupo de seguridad del clúster de MSK para permitir el tráfico saliente del puerto 443 al grupo de seguridad de los puntos de enlace de VPC.

Solución de problemas relacionados con la política o el rol de ejecución de tu VPC

Comprobación de si hay problemas con el rol de ejecución

Si hay problemas de configuración en la política del recurso de punto de enlace de VPC de STS, recibirás el siguiente error:

«PROBLEMA: Lambda no pudo asumir el rol de ejecución de tu función».

Para solucionarlo, toma las siguientes medidas:

  • Asegúrate de que la entidad principal del servicio lambda.amazonaws.com aparezca como servicio de confianza en la política de confianza del rol de IAM.
  • Asegúrate de que la política de puntos de enlace de VPC de STS permita a la entidad principal del servicio de Lambda llamar a sts:AssumeRole. Para obtener más información sobre cómo configurar la VPC, consulta Configuración de la seguridad de la red.

Si tienes una política de puntos de enlace de VPC restrictiva para tu punto de enlace de VPC de Lambda, recibirás el siguiente error:

«Ninguna política de punto de enlace de VPC permite la acción Lambda:InvokeFunction»

Para resolver estos problemas, asegúrate de que la política de puntos de enlace de VPC de Lambda permita a la entidad principal del servicio de Lambda llamar a lambda:InvokeFunction.

Nota: Puedes configurar los destinos en caso de error para una cola de Amazon Simple Queue Service (Amazon SQS), un tema de Amazon SNS o un bucket de Amazon S3. Cuando utilices estos destinos, asegúrate de que la política de puntos de enlace de VPC permita las acciones necesarias desde el rol de ejecución de Lambda.

Comprobación de si hay problemas con el acceso a los secretos

Si tienes problemas para acceder al secreto en Secrets Manager, recibirás el siguiente error:

«PROBLEMA: Lambda no puede llamar a secretsmanager:GetSecretValue. Motivo: Usuario: El rol de ejecución de Lambda no tiene autorización para ejecutar: secretsmanager:GetSecretValue en el recurso: Secreto en Secrets Manager con una denegación explícita en una política de punto de enlace de VPC».

Para resolver este problema, asegúrate de que la política del recurso de punto de enlace de VPC permita al rol de ejecución de Lambda llamar a secretsmanager:GetSecretValue para el secreto. Para obtener secretos de Secrets Manager, Lambda usa tu rol de ejecución, no la entidad principal del servicio de Lambda.

Solución de problemas con tus secretos

Comprobación de la configuración del secreto

Si tu secreto no está en un formato que la asignación de orígenes de eventos pueda usar, recibirás el siguiente error:

«PROBLEMA: El certificado o la clave privada deben estar en formato PEM».

Para resolver este problema, asegúrate de que la clave esté en formato .pem en un archivo de certificado X.509. Para comprobar que tu certificado tiene el formato correcto, ejecuta el siguiente comando:

openssl x509 -in PEM FILE -text

Nota: Sustituye PEM FILE por el nombre de tu archivo .pem.

Además, asegúrate de que el cifrado de clave privada usen un algoritmo PBES1, no un algoritmo PBES2.

Para obtener más información, consulta El certificado o la clave privada proporcionados no son válidos para Amazon MSK o Configuración del secreto del certificado de cliente para Kafka autoadministrado.

**Comprobación del formato de tus valores secretos **

Si los intentos de inicio de sesión del servidor fallan, recibirás el siguiente error:

«PROBLEMA: Error en la autenticación SASL».

Cuando un tema de Amazon MSK invoca una función de Lambda, la función puede acceder a los nombres de usuario y contraseñas que Secrets Manager protege con SASL/SCRAM. Si Lambda no reconoce tu nombre de usuario y contraseña como válidos, aparecerá el error anterior. Para resolver este problema, inicia sesión en el agente y, a continuación, comprueba los registros de acceso. Para obtener más información, consulta Autenticación SASL/SCRAM para Amazon MSK o Autenticación SASL/SCRAM para Kafka autoadministrado.

Solución de problemas con la configuración del servidor de la asignación de orígenes de eventos.

Cómo asegurarse de que la asignación de orígenes de eventos pueda llegar a tu servidor DNS

Si la asignación de orígenes de eventos no puede convertir el nombre del host en una dirección IP, recibirás el siguiente error:

«PROBLEMA: Los puntos de enlace del agente de Kafka proporcionados no se pueden resolver».

Para resolver este problema, asegúrate de que la asignación de orígenes de eventos pueda llegar al servidor DNS que traduce el nombre del host. Si el nombre del host del punto de enlace está en una red privada, configura la asignación de orígenes de eventos para usar una VPC con la configuración de DNS que pueda resolver nombres de host.

Comprobación de la configuración de los ajustes de tu servidor de asignación de orígenes de eventos

Si el servidor no es el servidor que has configurado en la configuración de la asignación de orígenes de eventos, recibirás el siguiente error:

«PROBLEMA: El servidor no pudo autenticar Lambda o Lambda no pudo autenticar el servidor».

Para resolver este problema, comprueba que el nombre de host del servidor en tu configuración coincida con el nombre del servidor interno del servidor al que te estás conectando.

Verificación de que la asignación de orígenes de eventos tenga permisos para sondear los registros del tema del clúster

Si la asignación de orígenes de eventos no tiene acceso para sondear los registros, recibirás el siguiente error:

«PROBLEMA: El clúster no pudo autorizar Lambda».

Para resolver este problema, configura los permisos necesarios para autorizar Lambda en tu clúster de MSK o en el clúster de Kafka autoadministrado.

Información relacionada

Errores de autenticación y autorización

OFICIAL DE AWS
OFICIAL DE AWSActualizada hace 6 meses