Salta al contenuto

Come posso risolvere i problemi dei trigger Lambda che effettuano il polling dei cluster Amazon MSK e Apache Kafka self-managed?

15 minuti di lettura
0

Ho progettato una funzione AWS Lambda per elaborare record dal mio cluster Streaming gestito da Amazon per Apache Kafka (Amazon MSK) o dal mio cluster Apache Kafka self-managed. Tuttavia, lo strumento di mappatura dell'origine degli eventi non invoca la mia funzione Lambda.

Breve descrizione

Per invocare una funzione Lambda, lo strumento di mappatura dell'origine degli eventi di Apache Kafka deve essere in grado di eseguire le azioni seguenti:

Se le impostazioni di rete, autenticazione o autorizzazione di uno strumento di mappatura dell'origine degli eventi impediscono le azioni precedenti, lo strumento non può invocare la funzione. Viene invece visualizzato un errore.

Risoluzione

Dopo aver configurato una funzione Lambda con un trigger Amazon MSK o un trigger Kafka self-managed, Lambda crea automaticamente una nuova risorsa dello strumento di mappatura dell'origine degli eventi. Questo strumento è una risorsa separata dalla funzione Lambda. Lo strumento di mappatura dell'origine degli eventi esegue il polling dei record del cluster Kafka e li raggruppa in un payload. Quindi, viene chiamata l'API Lambda Invoke per fornire il payload da elaborare alla funzione Lambda. Per risolvere i problemi relativi ai polling non riusciti, completa i seguenti passaggi per la risoluzione dei problemi per ogni errore che ricevi.

Importante: gli strumenti di mappatura dell'origine degli eventi Lambda non ereditano la configurazione di rete del cloud privato virtuale (VPC) della funzione Lambda. Questo vale sia per Amazon MSK che per i trigger Kafka self-managed. Uno strumento di mappatura dell'origine degli eventi di Amazon MSK utilizza le configurazioni della sottorete e del gruppo di sicurezza configurate nel cluster MSK di destinazione. Un trigger Kafka self-managed dispone di un accesso WAN (Wide Area Network) per impostazione predefinita. Tuttavia, puoi anche configurare l'accesso di rete a un VPC nello stesso account AWS e nella stessa regione AWS. Poiché la configurazione di rete è separata, puoi configurare la tua funzione Lambda all'interno di una rete che non ha un percorso verso il cluster Kafka.

Per configurare uno strumento di mappatura dell'origine degli eventi Amazon MSK per il polling dei record di un cluster MSK con più account, configura la connettività privata multi-VPC. Tieni presente che puoi creare un trigger Kafka self-managed che consuma da un cluster MSK in un altro account. Tuttavia, questa soluzione presenta alcuni aspetti negativi. Ad esempio, non puoi utilizzare l'autenticazione AWS Identity and Access Management (IAM) con un trigger Kafka self-managed, anche quando il cluster di destinazione è un cluster MSK. Inoltre, per connettersi al cluster MSK tramite una connessione peered VPC, è necessario configurare soluzioni alternative VPC. Per un esempio di architettura, vedi How Goldman Sachs builds cross-account connectivity to their Amazon MSK clusters with AWS PrivateLink.

Nota: per utilizzare la connettività multi-VPC, verifica di rispettare i requisiti.

Risolvi i problemi di comunicazione di rete tra il trigger e il cluster

Lo strumento di mappatura dell'origine degli eventi invia più richieste diverse agli endpoint del cluster broker per completare una singola invocazione della funzione Lambda. Prima di un'invocazione, lo strumento di mappatura dell'origine degli eventi richiede agli endpoint del cluster broker le informazioni sui metadati del cluster e i record del topic. Dopo una chiamata riuscita, lo strumento di mappatura dell'origine degli eventi comunica con gli endpoint del broker per eseguire il commit dei record elaborati. Quando lo strumento di mappatura dell'origine degli eventi invia una richiesta agli endpoint del broker e non riceve una risposta, la richiesta scade. Viene visualizzato il seguente errore:

"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."

Le richieste del broker che vanno in timeout possono verificarsi prima o dopo che la richiesta raggiunge l'endpoint del broker. I timeout precedenti al broker si verificano quando le impostazioni della rete e del gruppo di sicurezza bloccano le richieste dello strumento di mappatura dell'origine degli eventi agli endpoint del broker. Le richieste scadute successive al broker si verificano quando il broker riceve la richiesta dello strumento di mappatura dell'origine degli eventi, ma non può completare la richiesta.

Per esaminare una richiesta scaduta successiva al broker, controlla lo stato del broker al momento dell'errore. Se il cluster era offline quando si è verificato il problema, riattiva lo strumento di mappatura dell'origine degli eventi quando il cluster sarà nuovamente online e disponibile. Le richieste scadute si verificano anche quando lo spazio su disco del cluster è esaurito o raggiunge il 100% di utilizzo della CPU o in caso di errore di un endpoint del broker. Per risolvere questi problemi, imposta la dimensione del batch dello strumento di mappatura dell'origine degli eventi su 1, quindi riattiva il trigger. Tieni presente che quando imposti la dimensione del batch su un valore più alto, il tempo di risposta del cluster è più lungo.

Per risolvere gli errori di timeout, esamina i log di accesso e i log di sistema del broker per ulteriori informazioni.

Se la richiesta scade prima che raggiunga l'endpoint del broker, controlla la configurazione di rete.

Verifica la configurazione di rete per lo strumento di mappatura dell'origine degli eventi Amazon MSK

Per comunicare con il cluster MSK, lo strumento di mappatura dell'origine degli eventi Amazon MSK crea un'interfaccia di rete elastica Hyperplane in ogni sottorete utilizzata dal cluster. Lo strumento di mappatura dell'origine degli eventi è una risorsa di proprietà di Lambda. Tuttavia, lo strumento di mappatura dell'origine degli eventi di Amazon MSK non utilizza le impostazioni VPC della funzione Lambda. Invece, lo strumento di mappatura dell'origine degli eventi utilizza automaticamente le impostazioni della sottorete e del gruppo di sicurezza configurate nel cluster MSK di destinazione. Lo strumento di mappatura dell'origine degli eventi di Amazon MSK crea quindi un'interfaccia di rete all'interno di ogni sottorete utilizzata dal cluster MSK. Queste interfacce di rete utilizzano lo stesso gruppo di sicurezza utilizzato dal cluster MSK.

Per verificare se i tuoi gruppi di sicurezza consentono il traffico e le porte richiesti, completa i seguenti passaggi:

  1. Per elencare tutti i gruppi di sicurezza e le sottoreti utilizzati dal cluster MSK, esegui il comando AWS CLI describe-cluster.
  2. Per mostrare tutte le regole in entrata e in uscita, esegui il comando describe-security-groups sui gruppi di sicurezza elencati nell'output del comando describe-cluster.
  3. Configura le regole nei gruppi di sicurezza elencati per consentire il traffico tra il gruppo di sicurezza e il cluster MSK. È inoltre necessario consentire il traffico sulle seguenti porte di autenticazione aperte utilizzate dal broker:
    9092 per testo normale
    9094 per TLS
    9096 per SASL
    9098 per IAM
    443 (regola in uscita) per tutte le configurazioni

Nota: se ricevi messaggi di errore durante l'esecuzione dei comandi dell'interfaccia della linea di comando AWS (AWS CLI), consulta Troubleshooting errors for the AWS CLI. Inoltre, assicurati di utilizzare la versione più recente di AWS CLI.

Controlla la configurazione di rete per uno strumento di mappatura dell'origine degli eventi Kafka self-managed

Per impostazione predefinita, uno strumento di mappatura dell'origine degli eventi Kafka self-managed può accedere alla WAN ma non può accedere al VPC. È possibile configurare manualmente l'accesso VPC a sottoreti e gruppi di sicurezza specifici nel cluster Kafka. Tuttavia, lo strumento di mappatura dell'origine degli eventi può accedere ai cluster solo se si trovano nell'account che contiene la funzione Lambda. È possibile creare uno strumento di mappatura dell'origine degli eventi Kafka self-managed per un cluster Kafka che si trova in una delle seguenti posizioni:

  • Un data center on-premises
  • Un altro fornitore di servizi cloud
  • I broker Amazon MSK di un cluster Kafka che si trova nel VPC di un altro account

Risolvi i problemi che si verificano durante l'inizializzazione, il polling o l'invocazione

Se si verificano problemi durante l'inizializzazione, il polling o l'invocazione, viene visualizzato il seguente errore:

"PROBLEM: Connection error. Your event source VPC must be able to connect to Lambda and STS, Secrets Manager (if event source authentication is required), and the OnFailure Destination (if one is configured). You can provide access by configuring PrivateLink or a NAT Gateway. For how to setup VPC endpoints/NAT gateway, please check https://aws.amazon.com/blogs/compute/setting-up-aws-lambda-with-an-apache-kafka-cluster-within-a-vpc/".

L'errore precedente si verifica per uno dei motivi seguenti:

  • Lo strumento di mappatura dell'origine degli eventi è configurato in un VPC e le chiamate all'API AWS STS hanno esito negativo o scadono.
  • Lo strumento di mappatura dell'origine degli eventi è configurato per utilizzare l'autenticazione del cluster di Secrets Manager, ma le chiamate all'API Secrets Manager hanno esito negativo o scadono.
  • Lo strumento di mappatura dell'origine degli eventi può accedere correttamente al cluster Kafka ed eseguire il polling dei record, ma le chiamate all'API Lambda hanno esito negativo o scadono.
  • Hai configurato lo strumento di mappatura dell'origine degli eventi con una destinazione in caso di errore, ad esempio Amazon Simple Storage Service (Amazon S3) o Amazon Simple Notification Service (Amazon SNS). Tuttavia, quando le invocazioni alla funzione terminano con un errore, le chiamate all'API della destinazione in caso di errore falliscono o scadono.

I problemi precedenti si verificano quando la configurazione dei gruppi di sicurezza o delle tabelle di routing non consente allo strumento di mappatura dell'origine degli eventi di raggiungere altri servizi. Questi servizi includono AWS STS, Lambda o AWS Secrets Manager. Per configurare correttamente le impostazioni del VPC, completa i passaggi in Setting up AWS Lambda with an Apache Kafka cluster within a VPC.

Per risolvere questi problemi per uno strumento di mappatura dell'origine degli eventi Kafka self-managed, intraprendi le seguenti azioni:

  • Crea un endpoint VPC Lambda e un endpoint VPC STS nel VPC che contiene le sottoreti utilizzate dallo strumento di mappatura dell'origine degli eventi Kafka self-managed.
  • Se hai configurato lo strumento di mappatura dell'origine degli eventi con un segreto, crea un endpoint VPC per Secrets Manager.
  • Se hai configurato lo strumento di mappatura dell'origine degli eventi con una destinazione in caso di errore, crea un endpoint VPC per la tua destinazione in caso di errore. Le destinazioni di esempio includono Amazon SNS o Amazon S3.
  • Configura gli endpoint VPC con un gruppo di sicurezza che consenta il traffico in entrata sulla porta 443 dal gruppo di sicurezza dello strumento di mappatura dell'origine degli eventi Kafka self-managed.
  • Configura il gruppo di sicurezza dello strumento di mappatura dell'origine degli eventi Kafka self-managed per consentire il traffico in uscita sulla porta 443 verso il gruppo di sicurezza degli endpoint VPC.

Per risolvere questi problemi per uno strumento di mappatura dell'origine degli eventi di Amazon MSK, intraprendi le seguenti azioni:

  • Crea un endpoint VPC Lambda e un endpoint VPC STS nel VPC che contiene il cluster MSK.
  • Se lo strumento di mappatura dell'origine degli eventi utilizza un segreto o il cluster utilizza l'autenticazione SASL IAM, crea un endpoint VPC per Secrets Manager. Questo endpoint deve trovarsi nel VPC che contiene il cluster MSK.
  • Se hai configurato lo strumento di mappatura dell'origine degli eventi con una destinazione in caso di errore, crea un endpoint VPC per la tua destinazione in caso di errore. Le destinazioni di esempio includono Amazon SNS o Amazon S3. Questo endpoint VPC deve trovarsi nel VPC che contiene il cluster MSK.
  • Configura gli endpoint VPC con un gruppo di sicurezza che consenta il traffico in entrata sulla porta 443 dal gruppo di sicurezza utilizzato dal cluster MSK.
    Importante: consenti il traffico in entrata dal gruppo di sicurezza del cluster MSK, non dal gruppo di sicurezza della funzione Lambda.
  • Configura il gruppo di sicurezza del cluster MSK per consentire il traffico in uscita sulla porta 443 verso il gruppo di sicurezza degli endpoint VPC.

Risolvi i problemi relativi alla policy o al ruolo di esecuzione del VPC

Verifica la presenza di problemi con il ruolo di esecuzione

Se ci sono problemi di configurazione nella politica delle risorse degli endpoint VPC STS, viene visualizzato il seguente errore:

"PROBLEM: Lambda failed to assume your function execution role."

Per risolvere questo errore, esegui le operazioni seguenti:

  • Assicurati che il principale del servizio lambda.amazonaws.com sia elencato come servizio affidabile nella policy di attendibilità del ruolo IAM.
  • Assicurati che la policy degli endpoint VPC STS consenta al principale del servizio Lambda di chiamare sts:AssumeRole. Per ulteriori informazioni su come configurare il tuo VPC, consulta Configure network security.

Se hai una policy restrittiva sugli endpoint VPC per il tuo endpoint VPC Lambda, ricevi il seguente errore:

"No VPC endpoint policy allows the lambda:InvokeFunction action"

Per risolvere questi problemi, assicurati che la policy degli endpoint VPC Lambda consenta al principale del servizio Lambda di chiamare lambda:InvokeFunction.

Nota: puoi configurare le destinazioni in caso di errore su una coda Amazon Simple Queue Service (Amazon SQS), un topic Amazon SNS o un bucket Amazon S3. Quando utilizzi queste destinazioni, assicurati che la policy degli endpoint VPC consenta le azioni richieste dal ruolo di esecuzione Lambda.

Verifica eventuali problemi con l'accesso ai segreti

Se hai problemi con l'accesso al segreto di Secrets Manager, ricevi il seguente errore:

"PROBLEM: Lambda is unable to call secretsmanager:GetSecretValue. Reason: User: Lambda execution role is not authorized to perform: secretsmanager:GetSecretValue on resource: Secret in Secrets Manager with an explicit deny in a VPC endpoint policy."

Per risolvere questo problema, assicurati che la policy sulle risorse degli endpoint VPC consenta al ruolo di esecuzione Lambda di chiamare secretsmanager:GetSecretValue per il segreto. Per ottenere segreti da Secrets Manager, Lambda utilizza il tuo ruolo di esecuzione, non il principale del servizio Lambda.

Risolvi i problemi relativi ai tuoi segreti

Controlla la configurazione del tuo segreto

Se il tuo segreto non è in un formato utilizzabile dallo strumento di mappatura dell'origine degli eventi, ricevi il seguente errore:

"PROBLEM: Certificate and/or private key must be in PEM format."

Per risolvere questo problema, assicurati che la tua chiave sia in formato .pem in un file di certificato X.509. Per verificare che il certificato sia nel formato corretto, esegui il comando seguente:

openssl x509 -in PEM FILE -text

Nota: sostituisci PEM FILE con il nome del tuo file .pem.

Inoltre, assicurati che la crittografia a chiave privata utilizzi un algoritmo PBES1, non un algoritmo PBES2.

Per ulteriori informazioni, consulta Provided certificate or private key is not valid per Amazon MSK o Configuring the client certificate secret per Kafka self-managed.

Controlla il formato dei valori del tuo segreto

Se i tentativi di accesso al server falliscono, viene visualizzato il seguente errore:

"PROBLEM: SASL authentication failed."

Quando un topic di Amazon MSK invoca una funzione Lambda, la funzione può accedere a nomi utente e password che Secrets Manager protegge con SASL/SCRAM. Se Lambda non riconosce il nome utente e la password come validi, si verifica l'errore precedente. Per risolvere questo problema, accedi al broker, quindi controlla i log di accesso. Per ulteriori informazioni, consulta SASL/SCRAM authentication per Amazon MSK o SASL/SCRAM authentication per Kafka autogestito.

Risolvi i problemi relativi alle impostazioni del server dello strumento di mappatura dell'origine degli eventi

Assicurati che lo strumento di mappatura dell'origine degli eventi possa raggiungere il tuo server DNS

Se lo strumento di mappatura dell'origine degli eventi non è in grado di trasformare il nome host in un indirizzo IP, viene visualizzato il seguente errore:

"PROBLEM: The provided Kafka broker endpoints cannot be resolved."

Per risolvere questo problema, assicurati che lo strumento di mappatura dell'origine degli eventi possa raggiungere il server DNS che traduce il nome host. Se il nome host dell'endpoint si trova in una rete privata, configura lo strumento di mappatura dell'origine degli eventi per utilizzare un VPC con impostazioni DNS in grado di risolvere i nomi host.

Verifica la configurazione delle impostazioni del server dello strumento di mappatura dell'origine degli eventi

Se il server è diverso dal server configurato nelle impostazioni dello strumento di mappatura dell'origine degli eventi, viene visualizzato il seguente errore:

"PROBLEM: Server failed to authenticate Lambda or Lambda failed to authenticate server."

Per risolvere questo problema, verifica che il nome host del server nelle tue impostazioni corrisponda al nome interno del server a cui ti stai connettendo.

Verifica che lo strumento di mappatura dell'origine degli eventi disponga delle autorizzazioni per il polling dei record dal topic del cluster

Se lo strumento di mappatura dell'origine degli eventi non ha accesso al polling dei record, viene visualizzato il seguente errore:

"PROBLEM: Cluster failed to authorize Lambda."

Per risolvere questo problema, configura le autorizzazioni richieste per autorizzare Lambda per il tuo cluster MSK o cluster Kafka self-managed.

Informazioni correlate

Authentication and authorization errors

AWS UFFICIALEAggiornata un anno fa