使用AWS CDK为现有事件规则添加目标时遇AddTarget未定义于IRule错误
解决AWS CDK为现有事件规则添加目标的报错问题
问题原因
IRule是CDK的只读接口,没有定义AddTarget方法。通过Rule.FromEventRuleArn导入的现有事件规则,返回的是只读的外部资源抽象,即使强制转换为Rule也没用——因为底层实例本身不支持修改操作,CDK默认把外部导入的资源视为不可变的。
解决方案
改用CloudFormation低级资源CfnRule直接操作,步骤如下:
- 用ARN导入现有规则为
CfnRule实例 - 创建Lambda目标的配置属性
- 将目标添加到
CfnRule的Targets列表中
示例代码(C#)
// 导入现有事件规则为CfnRule var cfnRule = CfnRule.FromCfnRuleArn(this, ruleId, ruleArn); // 构建Lambda目标的配置 var lambdaTarget = new CfnRule.TargetProperty { Arn = myLambda.FunctionArn, // Lambda函数的ARN Id = "UniqueLambdaTargetId", // 目标的唯一标识,不能重复 Input = System.Text.Json.JsonSerializer.Serialize(myEvent) // 将事件对象序列化为JSON字符串 }; // 把目标添加到规则的Targets列表中 if (cfnRule.Targets == null) { cfnRule.Targets = new List<CfnRule.TargetProperty>(); } cfnRule.Targets.Add(lambdaTarget);
额外注意
- 确保CDK部署角色拥有
events:PutRule权限,用于修改事件规则 - 还要给事件桥服务添加调用Lambda的权限,可以通过以下代码配置:
myLambda.AddPermission("EventBridgeInvokeLambda", new LambdaPermissionProps { Action = "lambda:InvokeFunction", Principal = new ServicePrincipal("events.amazonaws.com"), SourceArn = ruleArn });
内容的提问来源于stack exchange,提问作者JPil
相关产品推荐
相关产品推荐

