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