当前位置: 首页 > 知识库问答 >
问题:

在Cloudformation中将lambda目标角色添加到AWS Eventbridge规则失败

姬俊远
2023-03-14

我正在尝试创建一个以Lambda函数为目标的AWS Eventbridge规则。我可以添加规则和目标,但当我尝试通过RoleArn设置lambda权限时,Cloudformation堆栈部署失败,目标arn不支持RoleArn:aws:lambda:us-east-1:1234567890:功能:联系lambda消费新客户。(服务:AmazonCloudWatchEvents;状态代码:400;错误代码:ValidationException;请求ID:xxxxx-ec5d-45e8-b45d-xxxxxx;代理:null)

以下是我的Cloudformation堆栈代码:

  EventRuleNewCustomer: 
    Type: AWS::Events::Rule
    Properties: 
      Name: new-customer
      EventBusName: myEventBus
      # RoleArn: !Join ["", ["arn:aws:iam::",!Ref "AWS::AccountId", ":role/my-role"] ] #no error but doesn't add the permissions
      Description: "New customer event rule"
      EventPattern: 
        detail-type: 
          - "NewCustomer"
      State: "ENABLED"
      Targets: 
        - 
          Arn: !Join ["", ["arn:aws:lambda:" ,!Ref "AWS::Region", ":", !Ref "AWS::AccountId", ":function:contacts-lambda-consume-new-customer"] ]
          Id: "NewCustomer"
          RoleArn: !Join ["", ["arn:aws:iam::",!Ref "AWS::AccountId", ":role/my-role"] ]

我尝试在规则本身上设置一个RoleArn,它在创建堆栈时不会出现错误,但也不会添加执行Lambda所需的权限。

我使用的解决方法是在AWS Eventbridge控制台中编辑lambda目标。这似乎在幕后发挥了一些魔力,为Eventbridge添加了正确的权限,以便能够执行lambda

非常感谢您的任何想法。

共有1个答案

芮明知
2023-03-14

这似乎在幕后发挥了一些魔力,为Eventbridge添加了正确的权限,以便能够执行lambda

对于lambda,使用lambda的基于资源的策略设置权限。

因此,您应该在CloudFormation中使用AWS::Lambda::权限来允许EventBridge调用您的函数,而不是使用RoleArn。

因此,您的权限如下所示(只是一个示例):

EventBridgeLambdaPermission:
  Type: AWS::Lambda::Permission
  Properties:
    FunctionName: !GetAtt function.Arn
    Action: lambda:InvokeFunction
    Principal: events.amazonaws.com
    SourceArn: !GetAtt EventRuleNewCustomer.Arn
 类似资料:
  • 我想将Lambda目标添加到现有的CloudWatch规则中。我使用以下内容引用现有规则: 后来我添加了一个目标: 执行cdk synth或deploy时,出现以下错误: 对象没有属性add_target 我知道IRule元素没有那种方法,但我找不到一个明确的方法来实现我所需要的。 我还尝试在Lambda中使用事件源,但出现以下错误: 无法识别的事件源,必须是kinesis、Dynamodb st

  • 如何在AWS CodeStar项目的CloudFormation模板中更改Lambda函数的IAM角色? 我创建了一个AWS CodeStar项目(web服务,基于Lambda,Node.js)。默认情况下,AWS CodeStar生成以下云信息: 现在,我想用自己的角色替换这个角色,因为我需要为Lambda函数添加策略以访问其他AWS资源。同时,我还删除了API网关,因为我将添加一个调度器,以便

  • 我正在制作一个CloudFormation模板,以捕获将CloudWatch事件发送到Kinesis Firehose交付流的流程的组件。(它在AWS中工作,通过控制台手动配置。) 当我定义AWS::E通风口::规则时,有一个目标属性需要有效目标的ARN。问题是资源不支持检索其ARN,只返回其逻辑ID。(Fn::GetAtt可用于获取的ARN,但没有。) 我是不是走错了路,或者这只是云阵还不支持的

  • 我正试图在我的注册功能中为用户分配一个角色。 通过使用以下代码: 当我试图运行上面的代码时,我得到了以下错误。 E/AndroidRuntime:致命异常:AsyncTask#2进程:info,pid:967 java.lang.runtimeException:在Android.os.AsyncTask$3处执行doInBackground()时发生错误。done(AsyncTask.java:

  • 我正在尝试将规则添加到已经使用KieBuilder定义和构建的KiePackage。 我知道您可以使用以下方式删除规则: 但是否有一个添加规则的等价物?我尝试添加一个新的。将drl文件导入KieFileSystem,并使用KieScanner获取更改,但它似乎不起作用: 当我评估一个事实与ksesion1时,新规则不存在于KieBase中。我错过了什么吗?

  • 我需要在Liferay的用户登录应用程序时为他们分配角色。 我已经实现了实现“身份验证器”的自定义类的“身份验证器”方法中的所有逻辑。 示例代码: 当我登录时,很明显它可以工作,我检查liferay数据库的表并更新它们,我的用户分配了“管理员”角色。但是,前端的门户不显示“Admin”选项。 但如果我转到“我的帐户”,按“保存”按钮,注销并再次登录,我有可用的管理选项。 有人知道为什么会这样吗?,