使用AWS SDK将AWS Lambda添加为事件桥接规则的目标

3
我正在使用 Serverless 框架和 AWS Node.js SDK 来向默认事件总线添加基于计划的 Cron 表达式规则。
 eventBridge.putRule(params, function (err, data) {...

然后我将目标添加到这个规则中。

const params = {
    Rule: data.ruleName,
    Targets: [ 
        {
            Arn: process.env.SCHEDULED_EVENT_LAMBDA_ARN, /* required */
            Id: process.env.SCHEDULED_EVENT_LAMBDA_ID, /* required */
            Input: JSON.stringify(someData)
        },
        
    ],
    
};

eventBridge.putTargets(params, function (err, data) {...

在事件桥上动态创建的计划任务规则上添加目标成功,但当我导航到Lambda仪表板时,似乎触发层没有更新,最终Lambda函数未被触发。
AWS SDK文档中提到了事件桥的putTargets:

对于AWS Lambda和Amazon SNS资源,EventBridge依赖于基于资源的策略

如果资源策略有问题(尚未确认),是否有任何配置可以在 serverless.yml 文件中设置,以允许事件桥服务将层添加到已部署的具有特定函数的目标Lambda函数。
1个回答

4

对于动态生成,您可以使用AddPermission来添加所需的权限。


function addPermission ({ lambdaArn, restApiId }) {
 const { region, namespace } = parseArn(lambdaArn)

 const params = {
  Action: 'lambda:InvokeFunction',
  FunctionName: lambdaArn,
  Principal: 'events.amazonaws.com',
  StatementId: `scheduleName`,
  SourceArn: `RuleARN`
 }

 return lambda.addPermission(params).promise()
}

如果您正在使用serverless框架。
functions:
  myFunction:
    handler: index.handler
    events:
      - eventBridge:
          schedule: rate(10 minutes)
          input:
            key1: value1

以上定义仅创建规则并将lambda作为目标添加。它还会负责需要的所有权限。

设置事件模式匹配

EventBridge用例和示例

计划表


预定的 cron 作业通过事件桥上的 API 动态添加。我认为这是提前声明预定义事件。 - Udit Bhardwaj
2
是的,但是当添加新规则时,它会将Lambda作为其目标添加。这很有效,但是事件桥触发器层未添加到Lambda中。似乎来自AWS-SDK的事件桥API会添加目标,但无法更新Lambda部署。 - Udit Bhardwaj
1
当在事件桥服务的事件规则部分(以root用户身份登录)直接从AWS管理控制台添加事件规则目标时,Lambda函数会更新并显示事件桥层。 - Udit Bhardwaj
那么每次在将 Lambda 函数添加为其目标之前,我都必须为每个新创建的规则添加 Lambda 函数的权限吗? - Udit Bhardwaj
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接