Come posso risolvere i problemi relativi ai trigger Lambda che eseguono il polling da MSK e dai cluster Kafka autogestiti?

9 minuti di lettura
0

La mia funzione AWS Lambda è progettata per elaborare i record dal mio cluster Amazon Managed Streaming per Apache Kafka (Amazon MSK) o dal cluster Kafka autogestito. Tuttavia, il trigger Lambda visualizza un messaggio di errore.

Breve descrizione

Una mappatura dell’origine degli eventi (ESM) è una risorsa AWS Lambda che legge da un’origine degli eventi e richiama una funzione Lambda. Per richiamare una funzione Lambda, un ESM Lambda-Kafka deve essere in grado di eseguire le seguenti azioni:

Se le impostazioni di rete, autenticazione o autorizzazione di un ESM impediscono la comunicazione con il cluster, la configurazione fallisce prima che possa richiamare una funzione. Il trigger visualizza quindi un messaggio di errore che aiuta a risolvere la causa principale.

Risoluzione

Comprensione dell’ESM

Quando una funzione Lambda viene configurata con un trigger Amazon MSK o un trigger Kafka autogestito, viene creata automaticamente una risorsa ESM. Un ESM è separato dalla funzione Lambda e sottopone continuamente a sondaggi i record dell'argomento nel cluster Kafka. L'ESM raggruppa questi record in un payload. Quindi, chiama l'API Lambda Invoke per fornire il payload alla funzione Lambda per l'elaborazione.

Importante: gli ESM Lambda-Kafka non ereditano le impostazioni di rete VPC della funzione Lambda. Questo vale sia per i trigger MSK che per i trigger Kafka autogestiti. Un MSK ESM utilizza le impostazioni della sottorete e del gruppo di sicurezza configurate nel cluster MSK di destinazione. Un trigger Kafka autogestito dispone di accesso WAN per impostazione predefinita, ma può essere configurato con l'accesso di rete a un VPC nello stesso account e nella stessa Regione AWS. Poiché la configurazione di rete è separata, una funzione Lambda può eseguire il codice all'interno di una rete che non dispone di un percorso verso il cluster Kafka.

Comprendere il processo di configurazione dell'ESM

Prima che l'ESM possa richiamare la funzione Lambda associata, l'ESM completa automaticamente i seguenti passaggi:

1.    L'ESM chiama le API AWS STS per ottenere un token di sicurezza.

2.    Se SourceAccessConfiguration contiene un segreto, recuperalo dall'API AWS Secrets Manager.

3.    Per Kafka ESM autogestito: Lambda risolve l'indirizzo IP degli endpoint del cluster dal nome host configurato nell'ESM, in SelfManagedEventSourceEndpoints.

      Per MSK ESM: ottieni la configurazione della sottorete e del gruppo di sicurezza del cluster MSK.

4.    Per Kakfa ESM autogestito: stabilisci una connessione di rete all'endpoint del broker.

      Per MSK ESM: crea un’interfaccia di rete elastica iperpiana con il gruppo di sicurezza del cluster MSK in ciascuna delle sottoreti del cluster MSK.

5.     Autenticazione:

  • Se l'autenticazione TLS è attivata, verifica il certificato SSL presentato dall'endpoint del broker.
  • Accedi al broker.

6.    Autorizzazione:

  • Assicurati che l'argomento esista nel cluster. Chiedi ai broker del cluster se l'argomento configurato nel parametro Topics di ESM esiste nel cluster.
  • Crea un gruppo di consumatori nel cluster, utilizzando l'UUID dell'ESM come ID del gruppo di consumatori.

7.    Eseguire il polling dei record dall’argomento.

8.    Raggruppa i record in un payload inferiore a 6 MB. 6 MB è il limite per i payload di chiamata Lambda.

9.    L'ESM richiama la funzione Lambda associata al payload dei record. A tale scopo, effettua una chiamata sincrona all'API Lambda Invoke.

Risoluzione dei problemi relativi alla sicurezza di rete

Quando l'ESM invia una richiesta agli endpoint del broker e non riceve una risposta, l'ESM considera la richiesta scaduta. Quando si verifica un timeout per l'endpoint del broker, il trigger visualizza il seguente messaggio di errore:

«PROBLEMA: errore di connessione. Verifica la configurazione della connessione all’origine dell'evento. Se l’origine dell'evento risiede in un VPC, prova a configurare una nuova funzione Lambda o un'istanza EC2 con le stesse impostazioni di VPC, sottorete e gruppo di sicurezza. Connetti il nuovo dispositivo al cluster Kafka e utilizza i messaggi per assicurarti che il problema non sia correlato alla configurazione del VPC o dell'endpoint. Se il nuovo dispositivo è in grado di ricevere messaggi, contatta l'assistenza clienti Lambda per ulteriori indagini."

Per risolvere il problema, segui i passaggi indicati nel messaggio di errore precedente. Inoltre, annota le configurazioni di rete nelle sezioni seguenti per assicurarti che l'ESM sia configurato correttamente.

Nota: le richieste scadute dall'ESM possono verificarsi anche in situazioni in cui il cluster non dispone di risorse di sistema per gestire la richiesta. In alternativa, potrebbero verificarsi richieste con timeout quando vengono configurate impostazioni di sicurezza errate sull'ESM o sul cluster. Se ricevi questo errore e non ci sono problemi con la configurazione di rete, controlla i log di accesso del broker del cluster per ulteriori informazioni.

Configurazione di rete utilizzata da un Kafka ESM autogestito

La configurazione di rete di Kafka ESM autogestita è simile a una funzione Lambda. Per impostazione predefinita, l'ESM ha accesso alla WAN, ma non è configurato per l'accesso all'interno di un VPC. Può essere configurato manualmente con sottoreti e gruppi di sicurezza specifici per accedere a un cluster Kafka. Tuttavia, può accedere solo a un cluster raggiungibile da un VPC nell'account che contiene la funzione Lambda. Di conseguenza, puoi creare un Kafka ESM autogestito per un cluster Kafka che si trova nelle seguenti posizioni:

  • Data center on-premise
  • Altro provider di cloud
  • I broker MSK di un cluster Kafka che si trova nel VPC di un altro account

Nota: è possibile creare un trigger Kafka autogestito che consuma da un cluster MSK in un altro account. Tuttavia, ci sono alcuni aspetti negativi. A differenza di un trigger MSK, l'autenticazione AWS Identity and Access Management (IAM) non è disponibile per i trigger Kafka autogestiti. Inoltre, la connessione al cluster MSK tramite una connessione peer-to-peer VPC richiede soluzioni alternative VPC specifiche. Per maggiori informazioni, consulta Come Goldman Sachs costruisce la connessione tra account nei suoi cluster MSK con AWS PrivateLink.

Configurazione di rete di un ESM Lambda-MSK

Per comunicare con il cluster MSK, un MSK ESM crea un'interfaccia di rete elastica iperpiana all'interno di ciascuna sottorete utilizzata dal cluster. Il suo funzionamento è simile a quello di una funzione Lambda all'interno di un VPC.

Un MSK ESM non utilizza le impostazioni VPC della funzione Lambda. Utilizza invece automaticamente le impostazioni della sottorete e del gruppo di sicurezza configurate nel cluster MSK di destinazione. MSK ESM crea quindi un'interfaccia di rete all'interno di ciascuna delle sottoreti utilizzate dal cluster MSK. Queste interfacce di rete utilizzano lo stesso gruppo di sicurezza utilizzato dal cluster MSK. I gruppi di sicurezza e le regole di ingresso o uscita utilizzati da MSK ESM sono disponibili con i seguenti comandi CLI:

1.    Utilizza il comando AWS CLI MSK describe-cluster per elencare i gruppi e le sottoreti di sicurezza utilizzati dal cluster MSK.

2.    Usa il comando describe-security-groups sui gruppi di sicurezza elencati nell'output di describe-cluster.

Concedi l'accesso al traffico

Il gruppo di sicurezza del cluster MSK deve includere una regola che concede il traffico in ingresso da se stesso e il traffico in uscita verso se stesso. Il traffico deve essere concesso anche su una delle seguenti porte di autenticazione aperte utilizzate dal broker:

  • 9092 per testo in chiaro
  • 9094 per TLS
  • 9096 per SASL
  • 443 per tutte le configurazioni

Risolvi i problemi che possono verificarsi durante l'inizializzazione, il polling e la chiamata

«PROBLEMA: errore di connessione. Il tuo VPC deve essere in grado di connettersi a Lambda e STS, nonché a Secrets Manager se è richiesta l'autenticazione. È possibile fornire l'accesso configurando PrivateLink o un gateway NAT."

L'errore precedente si verifica per i seguenti motivi:

  • L'ESM è configurato in un VPC e le chiamate all'API STS falliscono o scadono.
  • L'ESM è configurato in un VPC e i tentativi di connessione all'API di Secrets Manager falliscono o scadono.
  • Il trigger può accedere al cluster Kafka, ma scade quando richiama la funzione tramite l'API Lambda.

Questi problemi potrebbero essere dovuti a impostazioni VPC errate che impediscono al tuo ESM di raggiungere altri servizi, come AWS STS e AWS Secrets Manager. Segui i passaggi descritti in Configurazione di AWS Lambda con un cluster Apache Kafka all'interno di un VPC per configurare correttamente le impostazioni del VPC.

Se le chiamate all'API STS falliscono o si interrompono, le impostazioni VPC impediscono all'ESM di raggiungere l'endpoint regionale Lambda sulla porta 443. Per risolvere questo problema, consulta Configurazione di AWS Lambda con un cluster Apache Kafka all'interno di un VPC.

Se SourceAccessConfiguration contiene un segreto, assicurati di recuperarlo da Secrets Manager.

"PROBLEMA: il certificato e/o la chiave privata devono essere in formato PEM."

L'errore precedente si verifica se si dispone di un segreto che non è in un formato decifrabile dall'ESM.

Per risolvere questo problema, verifica il formato del tuo segreto. Nota che Secrets Manager supporta solo file di certificati X.509 in formato.pem. Per ulteriori informazioni, consulta Certificato o chiave privata forniti non validi (Amazon MSK) oppure Certificato o chiave privata forniti non validi (Kafka).

"PROBLEMA: gli endpoint del broker Kafka forniti non possono essere risolti."

L'errore precedente si verifica quando l'ESM non è in grado di tradurre il nome host in un indirizzo IP.

Per risolvere questo errore, assicurati che l'ESM sia in grado di raggiungere un server DNS in grado di tradurre il nome host. Se il nome host dell'endpoint si trova all'interno di una rete privata, configura l'ESM per utilizzare un VPC con impostazioni DNS in grado di risolvere il nome host.

"PROBLEMA: Il server non è riuscito ad autenticare Lambda o Lambda non è riuscito ad autenticare il server."

L'errore precedente si verifica quando il server a cui è connesso l'ESM non è il server configurato nelle impostazioni ESM.

Per risolvere questo problema, verifica di aver configurato le impostazioni di ESM per il server a cui ti stai connettendo.

"PROBLEMA: autenticazione SASL non riuscita."

L'errore precedente si verifica quando il tentativo di accesso al server fallisce.

Le funzioni AWS Lambda attivate da un argomento Amazon MSK possono accedere a nomi utente e password protetti da AWS Secrets Manager utilizzando SASL/SCRAM. Viene visualizzato un errore quando il nome utente e la password non vengono riconosciuti validi.

Per risolvere questo errore, accedi al broker e verifica i log di accesso.

Nota:

"PROBLEMA: Il cluster non è riuscito ad autorizzare Lambda."

L'errore precedente si verifica quando l'ESM accede al broker, ma l'utente ESM non è autorizzato a sondare i record dell'argomento. Per risolvere questo problema, consulta Il cluster non è riuscito ad autorizzare Lambda (Amazon MSK) o Il Cluster non è riuscito ad autorizzare Lambda (Kafka).


Informazioni correlate

Errori di autenticazione e autorizzazione

AWS UFFICIALE
AWS UFFICIALEAggiornata un anno fa