【问题标题】:adding AWS Lambda as target using AWS SDK for event bridge rule使用 AWS SDK 为事件桥规则添加 AWS Lambda 作为目标
【发布时间】:2021-05-13 05:12:12
【问题描述】:

我正在使用无服务器框架和 AWS Node.js 开发工具包将基于计划 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) {...

在事件桥上动态创建的计划 cron 规则上添加目标是成功的,但是当我导航到 lambda 仪表板时,触发层似乎没有更新,最终 lambda 函数没有被触发。

事件桥 putTargets 的 AWS 开发工具包文档提到:

For AWS Lambda and Amazon SNS resources, EventBridge relies on resource-based policies

因此,如果资源策略是问题(未确认),是否有任何关于资源策略的配置,我可以在 serverless.yml 文件中为允许事件桥服务添加层到部署的目标 lambda 函数的特定功能设置。

【问题讨论】:

    标签: node.js amazon-web-services aws-lambda serverless-framework serverless


    【解决方案1】:

    对于动态生成,您可以使用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 作为目标。它将处理必要的权限以及所需的权限。

    Setting up event pattern matching

    EventBridge Use Cases and Examples

    Schedule

    【讨论】:

    • 计划的 cron 作业是通过 eventbridge 上的 api 动态添加的。我认为这是提前声明一个预定义的事件。
    • @UditBhardwaj 所以你想要的是允许eventbridge 正确触发你的 lambda?
    • 是的,但是当添加新规则时,它会添加 lambda 作为其目标。这可行,但事件桥触发层未添加到 lambda。似乎来自 AWS-SDK 的事件桥 API 添加了目标,但无法更新 lambda 部署。
    • 而直接从 AWS 管理控制台在事件桥服务的事件规则部分下添加事件规则目标(以 root 用户身份登录),lambda 函数会更新并显示事件桥层。
    • @UditBhardwaj 然后您可以简单地添加允许eventbridge 调用 lambda 的权限。 Is it possible to use configure Lambda Function Resource-based Policies using serverless framework?
    猜你喜欢
    • 2017-11-12
    • 2021-07-11
    • 2021-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-13
    • 1970-01-01
    • 2017-11-01
    相关资源
    最近更新 更多