You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在CDK中创建允许Lambda创建EventBridge目标的IAM角色?

问题根因
  • 你遇到的报错和角色定义本身没有关系,核心是Lambda类型的EventBridge目标不支持在putTargets接口中传入RoleArn参数,这是AWS EventBridge API的固定限制,只有ECS任务、Step Functions、跨账户资源等类型的目标才需要指定该参数。
修复步骤
  1. 首先删除Lambda代码中putTargets请求里的RoleArn字段,修改后的请求示例如下:
await eventBridge
  .putTargets({
    Rule: `USER_EVENT_${images.new.userId.S}_${images.new.eventId.S}`,
    Targets: [
      {
        Arn: actionFunctionArn,
        Id: `USER_EVENT_TARGET_${images.new.userId.S}_${images.new.eventId.S}`,
        Input: '{"a": 123, "b": "YES"}',
        // 删除RoleArn字段即可
      },
    ],
  })
  .promise()
  1. 你需要为作为目标的Lambda函数配置资源权限,允许EventBridge服务调用它,否则规则触发后Lambda会执行失败。如果你是用CDK创建该Lambda,可以直接用以下代码配置权限:
// actionFunction为你CDK中定义的目标Lambda实例
actionFunction.addPermission('EventBridgeInvokePermission', {
  principal: new iam.ServicePrincipal('events.amazonaws.com'),
  action: 'lambda:InvokeFunction',
  // 可指定规则ARN前缀做权限限制,提升安全性
  sourceArn: `arn:aws:events:${this.region}:${this.account}:rule/USER_EVENT_*`
})
补充说明

你之前创建的actionFunctionRole适用于EventBridge调用其他需要角色授权的服务场景,比如触发ECS任务、调用跨账户资源等,同账户Lambda作为目标时完全不需要用到该角色。


内容的提问来源于stack exchange,提问作者Fisu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 22:15:02