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

使用Python AWS CDK创建EventBridge触发的Lambda函数报错求助

AWS CDK EventBridge添加Lambda目标报错TypeError: target.bind is not a function的解决方案

问题背景

使用Python版AWS CDK创建EventBridge规则,监控CodeCommit仓库的分支创建/删除事件以触发Lambda函数时,执行代码抛出以下错误:

RuntimeError: TypeError: target.bind is not a function

错误原因

  1. 重复定义Lambda资源:代码中两次创建了同名的my_lambda_function,属于冗余操作,还可能引发资源冲突
  2. 目标类型不匹配:调用lambda_rule.add_target()时,传入的是_lambda.Function.from_function_arn()返回的IFunction接口实例,但EventBridge Rule的add_target方法要求传入实现IRuleTarget接口的对象。在同一个栈中直接引用已创建的Lambda实例即可,无需通过ARN重新导入。

修复步骤

  • 移除重复的Lambda函数创建代码块
  • 直接将已创建的my_lambda_function实例作为目标传入add_target方法

修正后的完整代码

# 先加载Lambda配置文件
with open(template_dir+lambda_file_name, 'r') as f:
    function_config = yaml.safe_load(f)

# 仅创建一次Lambda函数
my_lambda_function = _lambda.Function(
    self,
    'LambdaFunction',
    code=_lambda.Code.from_inline(function_config['code']),
    handler=function_config['handler'],
    runtime=_lambda.Runtime.PYTHON_3_9,
    role=role,
    function_name='lambda-function-liberty-stack'
)

print("Deploy Lambda Function")

# 定义EventBridge规则
lambda_rule = events.Rule(self, "Create_Pipeline_Rule",
    description="Rule to run lambda function which builds code pipeline. This monitors code repos in project.",
    rule_name="event-rule-code-pipeline-lambda",
    event_pattern= events.EventPattern(
      source= ["aws.codecommit"],
      detail_type= ["CodeCommit Repository State Change"],
      detail= {
          "event": ["referenceDeleted", "referenceCreated"],
          "referenceType": ["branch"],
      }
    )
)

# 直接传入已创建的Lambda实例作为规则目标
lambda_rule.add_target(my_lambda_function)

跨栈Lambda引用补充说明

如果需要引用跨栈的Lambda函数(必须通过ARN导入),则需要使用events_targets.LambdaFunction包装IFunction实例,代码示例:

from aws_cdk import aws_events_targets as events_targets

# 通过ARN导入跨栈Lambda函数
cross_stack_lambda = _lambda.Function.from_function_arn(
    self,
    'CrossStackLambda',
    function_arn='arn:aws:lambda:region:account-id:function:function-name'
)

# 用LambdaFunction包装后作为EventBridge规则目标
lambda_rule.add_target(events_targets.LambdaFunction(cross_stack_lambda))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 23:02:14