Salta al contenuto

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

4 minuti di lettura
0

Desidero risolvere il motivo per cui la regola Amazon EventBridge che ho creato non invoca la mia funzione AWS Lambda.

Risoluzione

Nota: se ricevi errori quando esegui i comandi dell'Interfaccia della linea di comando AWS (AWS CLI), consulta Risoluzione degli errori per AWS CLI. Inoltre, assicurati di utilizzare la versione più recente di AWS CLI.

Rivedi i parametri di Amazon CloudWatch per la regola EventBridge

Completa i seguenti passaggi:

  1. Apri la console CloudWatch.
  2. Nel pannello di navigazione, in Metriche, scegli Tutte le metriche.
  3. Scegli il namespace AWS/Events.
  4. Scegli le metriche TriggeredRules, Invocations e FailedInvocations per la regola. Se necessario, visualizza le metriche con la statistica SUM.
    Nota: se le metriche includono punti dati FailedInvocations, la regola potrebbe non essere riuscita a invocare la destinazione. Per ulteriori informazioni, consulta le Metriche di EventBridge.

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

Quando utilizzi la console EventBridge per creare la regola, le autorizzazioni appropriate vengono aggiunte automaticamente alla policy basata sulle risorse della funzione. Quando crei una regola tramite AWS CLI, SDK o AWS CloudFormation, devi aggiungerle manualmente. Le autorizzazioni concedono al servizio EventBridge l'accesso per invocare la funzione Lambda.

Rivedi le autorizzazioni associate alla funzione Lambda di destinazione

Completa i seguenti passaggi:

  1. Apri la console Lambda.
  2. Seleziona la funzione Lambda di destinazione.
  3. Scegli la scheda Configurazione, quindi Autorizzazioni.
  4. Nella sezione Policy basata sulle risorse, esamina il documento di policy.
    Nota: in alternativa, per recuperare la policy delle risorse della funzione Lambda, utilizza l'API GetPolicy o il comando AWS CLI get-policy con gli input appropriati.

Il seguente esempio di policy delle risorse consente a EventBridge di invocare 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 Resource con l'ARN della funzione Lambda e SourceArn con l'ARN della regola.

Aggiorna la policy delle risorse

Completa i seguenti passaggi:

  1. Apri la console 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. Scegli AWS Service - EventBridge.
  6. Indica l'ID istruzione come identificatore opzionale per l'istruzione della policy.
  7. Per Principale, utilizza events.amazonaws.com.
  8. Indica l'ARN di origine come ARN della regola EventBridge.
  9. Per Operazione, seleziona lambda:InvokeFunction dall'elenco a discesa.
  10. Scegli Salva.

Per aggiornare la policy, puoi anche utilizzare l'API AddPermission. Oppure esegui un comando AWS CLI add-permission simile al seguente 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

Aggiungi una coda DLQ alla destinazione su Amazon SQS

EventBridge utilizza code DLQ su Amazon Simple Queue Service (Amazon SQS) per memorizzare eventi che non possono essere consegnati a una destinazione. Allega una coda DLQ SQS alla destinazione che restituisce FailedInvocations. Per approfondire il problema, puoi recuperare gli eventi dalla coda DLQ. Gli eventi con esito negativo possono essere inviati nuovamente alla destinazione affinché siano elaborati.

Completa i seguenti passaggi:

  1. Apri la regola corrispondente nella console EventBridge.
  2. In Destinazioni, seleziona Modifica, quindi espandi la sezione Impostazioni aggiuntive.
  3. In Coda DLQ, scegli Select an Amazon SQS queue in the current AWS account to use as the dead-letter queue (Seleziona una coda Amazon SQS nell'account AWS corrente da utilizzare come coda DLQ).
  4. Scegli una coda SQS da utilizzare come coda DLQ.
  5. Dopo aver assegnato la coda DLQ, rivedi e salva le modifiche.

Informazioni correlate

a mia regola è stata eseguita ma la funzione Lambda non è stata invocata

Autorizzazioni AWS Lambda

Utilizzo di code DLQ per elaborare eventi non consegnati in EventBridge

Improved failure recovery for Amazon EventBridge (Recupero migliorato in caso di errore per Amazon EventBridge)