CloudFormation事件桥规则如何映射到TypeScript CDK?
CloudFormation到TypeScript CDK事件模式映射困惑
我需要把AWS控制台生成的CloudFormation事件模式转换为TypeScript CDK代码,遇到了一些疑问:
控制台生成的CloudFormation事件模式
{ "detail": { "connector-id": [{ "prefix": "c-...." }] } }
我编写的CDK代码
const triggerStartCopiesEventRule = new events.Rule(this, "TriggerStartCopiesRule", { description: "Trigger the start-copies lambda", ruleName: "TriggerStartCopiesRule", eventBus: defaultEventBus, eventPattern: { source: ["aws.transfer"], detail: { eventName: events.Match.exactString("SFTPConnectorDirectoryListingCompleted"), connectorId: events.Match.exactString(connector.attrConnectorId), statusCode: events.Match.exactString("COMPLETED"), }, }, targets: [new targets.LambdaFunction(startCopiesHandler)], });
执行synth后得到的YAML片段
detail: eventName: - SFTPConnectorDirectoryListingCompleted connectorId: - Fn::GetAtt: - FactSetSftpConnector - ConnectorId statusCode: - COMPLETED
我的困惑点:
- CDK代码里用了
eventName和connectorId,但控制台生成的JSON里没有事件名,且字段是connector-id - GitHub上很多示例用
eventName,但控制台显示的是detail-type和带空格的事件名,不确定自己的写法是否会生效
通用映射原则
- 字段命名自动转换:CDK的
eventPattern采用驼峰命名(如connectorId),在synth阶段会自动转换为CloudFormation/事件桥要求的短横线分隔命名(connector-id),无需手动修改格式。 eventName与detail-type的分工:eventName是AWS服务事件detail字段内的具体动作标识(比如Transfer服务的SFTPConnectorDirectoryListingCompleted),用于精准匹配特定操作;detail-type是事件桥顶层的宽泛分类字段(即控制台显示的带空格名称),两者可配合使用,也可单独用eventName做精准过滤。
Match工具的转换逻辑:events.Match.exactString()这类方法会被CDK转换为CloudFormation中的数组格式(如- SFTPConnectorDirectoryListingCompleted),这是事件桥事件模式的标准写法,和控制台生成的[{ "prefix": "c-...." }]格式等价,均为合法匹配规则。- 验证生效的实用方法:
- 对比synth生成的模板和控制台JSON,确认最终的CloudFormation字段(如
connectorId转成connector-id)是否一致; - 先在控制台手动创建规则测试匹配逻辑,再将验证通过的逻辑转成CDK代码。
- 对比synth生成的模板和控制台JSON,确认最终的CloudFormation字段(如
内容的提问来源于stack exchange,提问作者bmargulies
相关产品推荐
相关产品推荐

