Perché la regola Eventi CloudWatch che ho creato utilizzando i modelli di CloudFormation o l'interfaccia della linea di comando AWS (AWS CLI) non è in grado di richiamare AWS Lambda?

2 minuti di lettura
0

Ho creato una regola Eventi Amazon CloudWatch (CloudWatch Events) utilizzando modelli AWS CloudFormation (CloudFormation) o l'interfaccia della linea di comando AWS (AWS CLI). Ho provato a richiamare una destinazione AWS Lambda, ma la destinazione non ha richiamato.

Breve descrizione

La regola Eventi CloudWatch creata utilizzando modelli CloudFormation o l'interfaccia della linea di comando AWS (AWS CLI) deve concedere esplicitamente le autorizzazioni alla regola Eventi CloudWatch per richiamare la destinazione Lambda.

Risoluzione

Puoi aggiungere le autorizzazioni delle regole Eventi CloudWatch necessarie per richiamare la tua destinazione Lambda nel modello CloudFormation o nell'interfaccia della linea di comando AWS (AWS CLI).

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

Opzione 1: aggiungere autorizzazioni nel modello CloudFormation

Utilizza la risorsa AWS::Lambda::Permission per aggiungere una dichiarazione di policy alla policy di accesso della tua funzione Lambda.

Importante: nel modello CloudFormation, assicurati di:

  • Sostituire myLambdaFunction con il nome logico della funzione Lambda.
  • Sostituire myEventRule con il nome logico della regola dell'evento.

JSON

"LambdaInvokePermission":
{
  "Type": "AWS::Lambda::Permission",
  "Properties": {
    "FunctionName": {
      "Fn::GetAtt": [
        "MyLambdaFunction",
        "Arn"
      ]
    },
    "Action": "lambda:InvokeFunction",
    "Principal": "events.amazonaws.com",
    "SourceArn": {
      "Fn::GetAtt": [
        "EventRule",
        "Arn"
      ]
    }
  }
}

YAML

LambdaInvokePermission:
  Type: AWS::Lambda::Permission
  Properties:
    FunctionName:
      Fn::GetAtt:
        - MyLambdaFunction
        - Arn
    Action: "lambda:InvokeFunction"
    Principal: "events.amazonaws.com"
    SourceArn:
      Fn::GetAtt:
        - "EventRule"
        - "Arn"

Opzione 2: aggiungere autorizzazioni utilizzando l'interfaccia della linea di comando AWS (AWS CLI)

Al prompt dei comandi, immettere il seguente comando.

aws lambda add-permission
--statement-id "TrustCloudWatchToInvokeMyLambdaFunction" \
--action "lambda:InvokeFunction" \
--principal "events.amazonaws.com" \
--function-name "arn:aws:lambda:<region>:<account-id>:function:<function-name>"
\
--source-arn "arn:aws:events:<region>:<account-id>:rule/<rule-name>"

Informazioni correlate

Utilizzo di AWS Lambda con AWS CloudFormation

AWS UFFICIALE
AWS UFFICIALEAggiornata un anno fa