¿Por qué la regla de Eventos de CloudWatch que he creado con plantillas de CloudFormation o AWS CLI no puede invocar AWS Lambda?

2 minutos de lectura
0

Creé una regla de Eventos de Amazon CloudWatch (Eventos de CloudWatch) mediante plantillas de AWS CloudFormation (CloudFormation) o la Interfaz de la línea de comandos de AWS (AWS CLI). Intenté invocar un destino de AWS Lambda, pero el destino no se invocó.

Descripción corta

La regla de Eventos de CloudWatch creada mediante plantillas de CloudFormation o AWS CLI debe conceder explícitamente permisos a la regla de Eventos de CloudWatch para invocar el destino de Lambda.

Resolución

Puede agregar los permisos de la regla de Eventos de CloudWatch necesarios para invocar su destino de Lambda en la plantilla de CloudFormation o en AWS CLI.

Nota: Si recibe errores mientras ejecuta los comandos de AWS CLI, asegúrese de que está utilizando la versión más reciente de dicha interfaz.

Opción 1: Agregar permisos en la plantilla de CloudFormation

Utilice el recurso AWS::Lambda::Permission para agregar una declaración de política a la política de acceso de su función de Lambda.

Importante: En la plantilla de CloudFormation, asegúrese de lo siguiente:

  • Sustituir MyLambdaFunction por el nombre lógico de la función de Lambda.
  • Sustituir MyEventRule por el nombre lógico de la regla de eventos.

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"

Opción 2: Agregar permisos mediante AWS CLI

En una ventana del símbolo del sistema, ingrese el siguiente 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>"

Información relacionada

Uso de AWS Lambda con AWS CloudFormation

OFICIAL DE AWS
OFICIAL DE AWSActualizada hace un año