Warum kann die CloudWatch-Events-Regel, die ich mithilfe von CloudFormation-Vorlagen oder der AWS-CLI erstellt habe, AWS Lambda nicht aufrufen?

Lesedauer: 2 Minute
0

Ich habe eine Amazon-CloudWatch-Events-Regel (CloudWatch Events) mithilfe von Vorlagen für AWS CloudFormation (CloudFormation) oder der AWS Command Line Interface (AWS CLI) erstellt. Ich habe versucht, ein AWS-Lambda-Ziel aufzurufen, aber das Ziel wurde nicht aufgerufen.

Kurzbeschreibung

Die CloudWatch-Events-Regel, die mit CloudFormation-Vorlagen oder der AWS-CLI erstellt wurde, muss CloudWatch-Events-Regelberechtigungen explizit gewähren, um das Lambda-Ziel aufzurufen.

Lösung

Sie können die CloudWatch-Events-Regelberechtigungen, die zum Aufrufen Ihres Lambda-Ziels erforderlich sind, entweder in der CloudFormation-Vorlage oder in der AWS-CLI hinzufügen.

Hinweis: Wenn Sie beim Ausführen von AWS-CLI-Befehlen Fehler erhalten, stellen Sie sicher, dass Sie die neueste Version des AWS CLI verwenden.

Option 1: Berechtigungen in der CloudFormation-Vorlage hinzufügen

Verwenden Sie die Ressource AWS::Lambda::Permission, um der Zugriffsrichtlinie Ihrer Lambda-Funktion eine Richtlinienanweisung hinzuzufügen.

Wichtig: Stellen Sie in der CloudFormation-Vorlage sicher, dass Sie:

  • MyLambdaFunction durch den logischen Namen der Lambda-Funktion ersetzen.
  • MyEventRule durch den logischen Namen der Ereignisregel ersetzen.

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"

Option 2: Berechtigungen mithilfe der AWS-CLI hinzufügen

Geben Sie in der Befehlszeile den folgenden Befehl ein.

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

Ähnliche Informationen

Verwenden von AWS Lambda mit AWS CloudFormation

AWS OFFICIAL
AWS OFFICIALAktualisiert vor 2 Jahren