Perché la mia funzione Lambda non è stata attivata dalla mia regola EventBridge?

4 minuti di lettura
0

Desidero risolvere il problema per cui la regola Amazon EventBridge che ho creato utilizzando la riga di comando di AWS (AWS CLI) non richiama la funzione AWS Lambda.

Breve descrizione

Per identificare il problema, utilizza i passaggi seguenti:

  1. Verifica che l'origine dell'evento abbia pubblicato un evento e attivato la regola Amazon EventBridge associata.
  2. Verifica che la regola EventBridge abbia richiamato la destinazione configurata.
  3. Se si verifica un errore di invocazione della destinazione, verifica che la funzione AWS Lambda disponga delle autorizzazioni appropriate nella policy delle risorse.

Risoluzione

Nota: se ricevi messaggi di errore durante l'esecuzione dei comandi AWS CLI, assicurati di utilizzare la versione più recente di AWS CLI.

Rivedi i parametri CloudWatch per la regola EventBridge

  1. Apri la console Amazon CloudWatch.
  2. Dal pannello di navigazione a sinistra, in Parametri, seleziona Tutti i parametri.
  3. Seleziona lo spazio dei nomi AWS/Events.
  4. Seleziona i parametri TriggerRules, Invocations e FailedInvocations (se disponibili) per la regola in questione. Se necessario, visualizza tali parametri con la statistica SUM.
    Nota: i data point TriggerRules indicano che un evento ha attivato la regola EventBridge. I data point Invocation indicano che la regola EventBridge ha richiamato la destinazione corrispondente. Se i parametri includono data point FailedInvocations, è possibile che il richiamo della destinazione da parte della regola non sia andato a buon fine. FailedInvocations rappresenta un errore permanente e potrebbe essere il risultato di autorizzazioni errate o di una configurazione errata della destinazione.

Conferma che la policy delle risorse della funzione Lambda abbia le autorizzazioni appropriate

Quando crei una regola EventBridge con una funzione Lambda come destinazione, tieni presente quanto segue:

  • Quando usi la console Amazon EventBridge per creare la regola, le autorizzazioni appropriate vengono aggiunte automaticamente alla policy delle risorse della funzione.
  • Quando crei una regola tramite AWS CLI, SDK o AWS CloudFormation, devi applicare manualmente le autorizzazioni nella policy delle risorse.

Le autorizzazioni concedono al servizio Amazon EventBridge l'accesso per richiamare la funzione Lambda.

Rivedi le autorizzazioni associate alla funzione Lambda di destinazione

Segui questi passaggi:

  1. Apri la console AWS Lambda.
  2. Scegli la funzione Lambda di destinazione.
  3. Seleziona la scheda Configurazione, quindi scegli Autorizzazioni.
  4. Nella sezione Policy basata sulle risorse, rivedi il documento della policy.

In alternativa, utilizza l'API GetPolicy o il comando get-policy in AWS CLI con gli input appropriati per recuperare la policy delle risorse della funzione Lambda.

L'esempio seguente mostra una policy delle risorse che consente a EventBridge di richiamare la funzione Lambda:

{
  "Effect": "Allow",
  "Action": "lambda:InvokeFunction",
  "Resource": "arn:aws:lambda:region:account-id:function:function-name",
  "Principal": {
    "Service": "events.amazonaws.com"
  },
  "Condition": {
    "ArnLike": {
      "AWS:SourceArn": "arn:aws:events:region:account-id:rule/rule-name"
    }
  },
  "Sid": "InvokeLambdaFunction"
}

Nota: sostituisci l'ARN con la regione, l'ID account e il nome della risorsa appropriati.

Aggiornamento della policy delle risorse

Per aggiornare la policy delle risorse, segui questi passaggi:

  1. Apri la console AWS Lambda.
  2. Scegli la funzione Lambda di destinazione.
  3. Scegli la scheda Configurazione, quindi seleziona Autorizzazioni.
  4. Nella sezione Policy basata sulle risorse, scegli Aggiungi autorizzazioni.
  5. Seleziona Servizio AWS - EventBridge (CloudWatch Events).
  6. Fornisci l'ID istruzione (Sid) come identificativo opzionale per l'istruzione della policy.
  7. Scegli Principale come events.amazonaws.com.
    Nota: di solito questo campo viene compilato automaticamente.
  8. Scegli ARN di origine come ARN della regola EventBridge.
  9. Per Operazione, seleziona lambda:InvokeFunction dall'elenco a discesa.
  10. Scegli Salva.

Puoi anche aggiornare la policy utilizzando l'API AddPermission o il comando AWS CLI add-permission in AWS Lambda.

Ad esempio:

aws lambda add-permission \--function-name MyFunction \
--statement-id MyId \
--action 'lambda:InvokeFunction' \
--principal events.amazonaws.com \
--source-arn arn:aws:events:us-east-1:123456789012:rule/MyRule

Aggiunta di una coda DLQ di Amazon SQS alla destinazione

EventBridge utilizza le code DLQ di Amazon Simple Queue Service (Amazon SQS) per archiviare gli eventi che non è stato possibile recapitare a una destinazione. Collega una coda DLQ di Amazon SQS alla destinazione che restituisce l'errore FailedInvocations. Recupera gli eventi dalla coda DLQ per analizzarli e ottenere più contesto sul problema. Dopo aver completato la correzione, gli eventi precedentemente non riusciti possono essere inviati nuovamente alla destinazione per l'elaborazione.

  1. Apri la regola pertinente nella console EventBridge.
  2. In Destinazioni, seleziona Modifica, quindi espandi la sezione Impostazioni aggiuntive.
  3. In Coda DLQ, scegli Seleziona una coda Amazon SQS nell'account AWS corrente da utilizzare come coda DLQ.
  4. Seleziona una coda SQS da utilizzare come coda DLQ.
  5. Dopo aver assegnato la coda DLQ, completa i passaggi rimanenti nella sezione Modifica regola per salvare le modifiche.

Informazioni correlate

La mia regola è stata eseguita ma la mia funzione Lambda non è stata richiamata

Utilizzo delle policy basate su risorse per Amazon EventBridge: Autorizzazioni AWS Lambda

Policy di ripetizione degli eventi e utilizzo delle code DLQ

Improved failure recovery for Amazon EventBridge