Por que a regra de CloudWatch Events que eu criei usando modelos do CloudFormation ou a CLI da AWS não consegue invocar o AWS Lambda?

2 minuto de leitura
0

Eu criei uma regra do Amazon CloudWatch Events (CloudWatch Events) usando modelos do AWS CloudFormation (CloudFormation) ou a AWS Command Line Interface (AWS CLI). Eu tentei invocar um destino do AWS Lambda, mas o destino não invocou.

Breve descrição

A regra do CloudWatch Events criada usando modelos do CloudFormation ou a CLI da AWS deve conceder explicitamente as permissões da regra do CloudWatch Events para invocar o destino do Lambda.

Resolução

Você pode adicionar as permissões de regra do CloudWatch Events necessárias para invocar seu destino Lambda no modelo do CloudFormation ou na CLI da AWS.

Observação: se você receber erros ao executar comandos da AWS CLI, certifique-se de estar utilizando a versão mais recente da AWS CLI.

Opção 1: adicionar permissões no modelo do CloudFormation

Use o recurso AWS::Lambda::Permission para adicionar uma declaração de política à política de acesso da sua função do Lambda.

Importante: no modelo do CloudFormation, certifique-se de:

  • Substituir MyLambdaFunction pelo nome lógico da função do Lambda.
  • Substituir MyEventRule pelo nome lógico da regra do 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: "evevnts.amazonaws.com"
    SourceArn:
      Fn::GetAtt:
        - "EventRule"
        - "Arn"

Opção 2: adicionar permissões usando a AWS CLI

Em um prompt de comando, digite o comando a seguir.

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

Informações relacionadas

Uso do AWS Lambda com a AWS CloudFormation

AWS OFICIAL
AWS OFICIALAtualizada há um ano