Como soluciono problemas de acionadores do Lambda que fazem sondagens em clusters do MSK e em clusters autogerenciados do Kafka?

12 minuto de leitura
1

Minha função do AWS Lambda foi projetada para processar registros de clusters do Amazon Managed Streaming for Apache Kafka (Amazon MSK) ou de clusters autogerenciados do Kafka. Entretanto, o acionador do Lambda está exibindo uma mensagem de erro.

Breve descrição

Um mapeamento da origem do evento (ESM) é um recurso do AWS Lambda que faz leituras da origem de um evento e invoca uma função do Lambda. Para invocar uma função do Lambda, um ESM do Lambda-Kafka deve ser capaz de executar as seguintes ações:

Se as configurações de rede, autenticação ou autorização de um ESM impedirem a comunicação com o cluster, a configuração apresentará falha antes que o cluster possa invocar uma função. Em seguida, o acionador exibe uma mensagem de erro que ajuda a solucionar a causa raiz.

Resolução

Entender ESMs

Quando uma função do Lambda é configurada com um acionador do Amazon MSK ou um acionador autogerenciado do Kafka, um recurso do ESM é criado automaticamente. Um ESM é separado da função do Lambda e ele continuamente faz sondagens de registros do tópico no cluster do Kafka. O ESM agrupa esses registros em uma carga útil. Em seguida, ele chama a API de invocação do Lambda para entregar a carga útil à função do Lambda para processamento.

Importante: os ESMs do Lambda-Kafka não herdam as configurações de rede da VPC da função do Lambda. Isso vale tanto para acionadores do MSK quanto para acionadores autogerenciados do Kafka. Um ESM do MSK usa as definições de sub-rede e do grupo de segurança configuradas no cluster do MSK de destino. Um acionador autogerenciado do Kafka tem acesso à WAN por padrão, mas pode ser configurado com acesso à rede a uma VPC na mesma conta e região da AWS. Como a configuração da rede é separada, uma função do Lambda pode executar código em uma rede que não tem uma rota para o cluster do Kafka.

Entender o processo de configuração do ESM

Antes que o ESM possa invocar a função do Lambda associada, o ESM conclui automaticamente as seguintes etapas:

1.    O ESM chama as APIs do AWS STS para obter um token de segurança.

2.    Se SourceAccessConfiguration contiver um segredo, pegue esse segredo da API do AWS Secrets Manager.

3.    Para o ESM autogerenciado do Kakfa: o Lambda resolve o endereço IP dos endpoints do cluster no nome do host configurado no ESM, em selfManagedEventSourceEndPoints.

      Para ESM do MSK: obtenha a configuração da sub-rede e do grupo de segurança do cluster do MSK.

4.    Para ESM autogerenciado do Kakfa: estabeleça uma conexão de rede com o endpoint do agente.

      Para ESM do MSK: crie uma interface de rede elástica de hiperplano com o grupo de segurança do cluster do MSK em cada uma das sub-redes do cluster do MSK.

5.    Autenticação:

  • Se a autenticação TLS estiver ativada, verifique o certificado SSL apresentado pelo endpoint do agente.
  • Faça login no agente.

6.    Autorização:

  • Certifique-se de que o tópico exista no cluster. Pergunte aos agentes do cluster se o tópico configurado no parâmetro Topics (Tópicos) do ESM existe no cluster.
  • Crie um grupo de consumidores no cluster, usando o UUID do ESM como ID do grupo de consumidores.

7.    Sondar registros com base no tópico.

8.    Agrupe os registros em uma carga útil menor que 6 MB. Este é o limite para cargas úteis de invocação do Lambda.

9.    O ESM invoca a função do Lambda associada com a carga útil dos registros. Para fazer isso, faça uma chamada síncrona para a API de invocação do Lambda.

Solucionar problemas de segurança de rede

Quando o ESM envia uma solicitação aos endpoints do agente e não recebe uma resposta, o ESM considera que a solicitação atingiu o tempo limite. Quando ocorre uma ultrapassagem do tempo limite para o endpoint do agente, o acionador exibe a seguinte mensagem de erro:

“PROBLEM: Connection error. Please check your event source connection configuration. If your event source lives in a VPC, try setting up a new Lambda function or EC2 instance with the same VPC, Subnet, and Security Group settings. Connect the new device to the Kafka cluster and consume messages to ensure that the issue is not related to VPC or Endpoint configuration. If the new device is able to consume messages, please contact Lambda customer support for further investigation” (PROBLEMA: erro de conexão. Verifique a configuração da conexão da origem do evento. Se a origem do evento estiver em uma VPC, tente configurar uma nova função do Lambda ou uma instância do EC2 com as mesmas configurações de VPC, sub-rede e grupo de segurança. Conecte o novo dispositivo ao cluster do Kafka e consuma mensagens para se certificar de que o problema não esteja relacionado à configuração da VPC ou do endpoint. Se o novo dispositivo for capaz de consumir mensagens, entre em contato com o setor de atendimento ao cliente do Lambda para mais investigações).

Para solucionar o problema, siga as etapas indicadas na mensagem de erro anterior. Além disso, observe as configurações de rede nas seções a seguir para garantir que o ESM esteja configurado corretamente.

Observação: as solicitações expiradas do ESM também podem ocorrer em situações em que o cluster está sem recursos do sistema para lidar com elas. Ou solicitações expiradas podem ocorrer quando as configurações de segurança incorretas são definidas no ESM ou no cluster. Se você receber esse erro e não houver problemas com a configuração da rede, verifique os registros de acesso do agente do cluster para obter informações adicionais.

Configuração de rede usada por um Kafka autogerenciado do ESM

A configuração de rede de um Kafka autogerenciado do ESM é semelhante a uma função do Lambda. Por padrão, o ESM tem acesso à WAN, mas não está configurado para acesso dentro de uma VPC. Ele pode ser configurado manualmente com sub-redes e grupos de segurança específicos para acessar um cluster do Kafka. No entanto, ele só pode acessar um cluster em uma VPC na conta que contém a função do Lambda. Como resultado, você pode criar um Kafka autogerenciado do ESM para um cluster do Kafka que está nos seguintes locais:

  • Um datacenter on-premises
  • Outro provedor de nuvem
  • Os agentes do MSK de um cluster do Kafka localizado na VPC de uma conta diferente

Observação: é possível criar um acionador autogerenciado do Kafka que consome de um cluster do MSK em outra conta. Entretanto, existem algumas desvantagens. Ao contrário de um acionador do MSK, a autenticação do AWS Identity and Access Management (AWS IAM) não está disponível para acionadores autogerenciados do Kafka. Além disso, conectar-se ao cluster do MSK por meio de uma conexão pareada com a VPC exige soluções alternativas específicas da VPC. Para obter mais informações, consulte How Goldman Sachs builds cross-account connectivity to their Amazon MSK clusters with AWS PrivateLink (Como a Goldman Sachs cria conectividade entre contas para clusters do Amazon MSK com o AWS PrivateLink).

Configuração de rede de um ESM do Lambda-MSK

Para se comunicar com o cluster do MSK, um ESM do MSK cria uma interface de rede elástica de hiperplano dentro de cada sub-rede usada pelo cluster. Isso é semelhante à forma como uma função do Lambda opera em uma VPC.

Um ESM do MSK não usa as configurações de VPC da função do Lambda. Em vez disso, o ESM usa automaticamente as definições da sub-rede e do grupo de segurança que estão configuradas no cluster do MSK de destino. Em seguida, o ESM do MSK cria uma interface de rede dentro de cada uma das sub-redes usadas pelo cluster do MSK. Essas interfaces de rede usam o mesmo grupo de segurança usado pelo cluster do MSK. Os grupos de segurança e as regras de entrada ou saída usados pelo ESM do MSK podem ser encontrados com os seguintes comandos da CLI:

1.    Use o comando describe-cluster do MSK da AWS CLI para listar os grupos de segurança e as sub-redes usadas pelo cluster do MSK.

2.    Use o comando describe-security-groups nos grupos de segurança listados na saída do describe-cluster.

Conceder acesso ao tráfego

O grupo de segurança do cluster do MSK deve incluir uma regra que conceda tráfego de entrada dele mesmo e tráfego de saída para ele mesmo. O tráfego também deve ser concedido por meio de uma das seguintes portas de autenticação abertas usadas pelo agente:

  • 9092 para plaintext
  • 9094 para TLS
  • 9096 para SASL
  • 443 para todas as configurações

Solucionar problemas que podem ocorrer durante a inicialização, sondagem e invocação

“PROBLEM: Connection error. Your VPC must be able to connect to Lambda and STS, as well as Secrets Manager if authentication is required. You can provide access by configuring PrivateLink or a NAT Gateway” (PROBLEMA: erro de conexão. Sua VPC deve ser capaz de se conectar ao Lambda e ao STS e também ao Secrets Manager se for necessária uma autenticação. Você pode conceder acesso configurando o PrvateLink ou um gateway NAT).

O erro anterior ocorre por qualquer um dos seguintes motivos:

  • O ESM é configurado em uma VPC e as chamadas para a API do STS apresentam falha ou atingem o tempo limite.
  • O ESM é configurado em uma VPC e as tentativas de conexão da API do Secrets Manager apresentam falha ou atingem o tempo limite.
  • O acionador pode acessar o cluster do Kafka, mas atinge o tempo limite ao invocar sua função pela API do Lambda.

Esses problemas podem ser causados por configurações incorretas da VPC que impedem que o ESM acesse outros serviços, como o AWS STS e o AWS Secrets Manager. Siga as etapas em Setting up AWS Lambda with an Apache Kafka cluster within a VPC (Configurar o AWS Lambda com um cluster do Apache Kafka em uma VPC) para configurar corretamente as definições da VPC.

Se as chamadas para a API do STS apresentarem falha ou atingirem o tempo limite, as configurações da VPC evitarão que o ESM atinja o endpoint regional do Lambda na porta 443. Para solucionar esse problema, consulte Setting up AWS Lambda with an Apache Kafka cluster within a VPC (Configurar o AWS Lambda com um cluster do Apache Kafka em uma VPC).

Se SourceAccessConfiguration contiver um segredo, certifique-se de recuperar este segredo no Secrets Manager.

“PROBLEM: Certificate and/or private key must be in PEM format” (PROBLEMA: o certificado e/ou a chave privada deve estar no formato PEM).

O erro anterior ocorrerá se você tiver um segredo que não esteja em um formato que possa ser decifrado pelo ESM.

Para solucionar isso, verifique o formato do segredo. Observe que o Secrets Manager só suporta arquivos de certificado X.509 no formato pem. Para obter mais informações, consulte Provided certificate or private key is not valid (O certificado ou a chave privada fornecida não é válida) (Amazon MSK) ou Provided certificate or private key is invalid (O certificado ou a chave privada fornecida é inválida) (Kafka).

“PROBLEM: The provided Kafka broker endpoints cannot be resolved” (PROBLEMA: os endpoints do agente do Kafka fornecidos não podem ser resolvidos).

O erro anterior ocorre quando seu ESM não consegue traduzir o nome do host em um endereço IP.

Para resolver esse erro, certifique-se de que o ESM consiga acessar um servidor DNS que possa traduzir o nome do host. Se o nome do host do endpoint estiver em uma rede privada, configure o ESM para usar uma VPC com configurações de DNS que possam resolver o nome do host.

“PROBLEM: Server failed to authenticate Lambda or Lambda failed to authenticate server” (PROBLEMA: ocorreu uma falha no servidor na autenticação do Lambda ou ocorreu uma falha do Lambda na autenticação do servidor).

O erro anterior ocorre quando o servidor ao qual o ESM está conectado não é o servidor que você configurou nas definições do ESM.

Para solucionar esse problema, verifique se você configurou as definições do ESM para o servidor ao qual você está se conectando.

“PROBLEM: SASL authentication failed” (PROBLEMA: falha na autenticação SASL).

O erro anterior ocorre no caso de uma falha na tentativa de login no servidor.

As funções do AWS Lambda que são acionadas a partir de um tópico do Amazon MSK podem acessar nomes de usuário e senhas protegidos pelo AWS Secrets Manager usando SASL/SCRAM. Você recebe um erro quando seu nome de usuário e senha não são reconhecidos como válidos.

Para resolver esse erro, faça login no agente e verifique os logs de acesso.

Observação:

“PROBLEM: Cluster failed to authorize Lambda” (PROBLEMA: ocorreu uma falha no cluster na autorização do Lambda).

O erro anterior ocorre quando o ESM faz login no agente, mas o usuário do ESM não tem permissão para sondar registros com base no tópico. Para resolver esse problema, consulte Cluster failed to authorize Lambda (Ocorreu uma falha no cluster na autorização do Lambda) (Amazon MSK) ou Cluster failed to authorize Lambda (Ocorreu uma falha no cluster na autorização do Lambda) (Kafka).


Informações relacionadas

Authentication and authorization errors (Erros de autenticação e autorização)

AWS OFICIAL
AWS OFICIALAtualizada há um ano