为什么作为目标添加到事件桥规则的Lambda函数没有被触发



我正在尝试为EventBridge的规则添加一个规则和一个lambda目标。规则和目标已成功添加,但目标Lambda未被触发。当我导航到AWS控制台上的目标Lambda函数时,我看不到相关的触发器。

我使用Serverless Framework来部署堆栈。putRuleAndTargetlambda是创建规则并添加notifyUser作为目标的lambda。以下是serverless.ts文件的相关部分:

functions: {
putRuleAndTarget: {
handler: 'src/functions/putRuleAndTarget.handler',
name: 'putRuleAndTarget'
},
notifyUser: {
handler: 'src/functions/notifyUser.handler',
name: 'notifyUser'
}
}

这是putRuleAndTarget的代码(我使用的是aws javascript sdk v3(:

import { EventBridgeClient, PutRuleCommand, PutTargetsCommand, } from '@aws-sdk/client-eventbridge'
import type { PutRuleCommandInput, PutTargetsCommandInput } from '@aws-sdk/client-eventbridge'

const client = new EventBridgeClient({ region: 'eu-central-1' })
async function putRuleAndTarget( ) {
try {
const putRuleCommandInput: PutRuleCommandInput = {
Name: 'notifyUserRule',
Description: 'Schedule a lambda to send notification to the user',
ScheduleExpression: 'rate(1 minute)',
}
const putRuleCommand = new PutRuleCommand(putRuleCommandInput)
const putRuleCommandOutput = await client.send(putRuleCommand)
const putTargetsCommandInput: PutTargetsCommandInput = {
Rule: 'notifyUserRule',
Targets: [
{
Arn: 'arn:aws:lambda:eu-central-1:AccountID:function:notifyUser',
Id: 'notifyUser'
},
]
}
const putTargetsCommand = new PutTargetsCommand(putTargetsCommandInput)
const putTargetsCommandOutPut = await client.send(putTargetsCommand)

} catch (error) {
console.log('[ putRuleAndTarget error ]', error)
}
}
export const handler = putRuleAndTarget

以下屏幕截图是在运行putRuleAndTarget之后拍摄的在AWS EventBridge控制台上创建的规则:EventBridge控制台上的规则

显示目标的规则的详细信息:EventBridge控制台上的规则详细信息和目标

Lambda控制台上的notifyUser函数,请注意缺少触发器:notifyLambda控制台上的用户功能


此外,运行sls logs -f notifyUser不会产生任何日志语句,该函数从未被调用,尽管它应该每1分钟运行一次。

看起来您可能缺少权限。规则需要具有调用lambda的权限。

本教程展示了这些步骤。特别是,查看覆盖的部分

AWS::Lambda::Permission

注释中请求的示例:

LambdaInvokePermissionsExample:
Type: AWS::Lambda::Permission
Properties:
Action: lambda:InvokeFunction
FunctionName:
Fn::GetAtt:
- NameOfYourLambdaResource
- Arn
Principal: events.amazonaws.com
SourceArn:
Fn::GetAtt:
- EventRuleResourceName
- Arn

最新更新