如何为AWS Amplify生成的DynamoDB流CloudFormation模板添加FilterCriteria?
解决方法
直接修改Amplify自动生成的CloudFormation模板确实没用,每次执行amplify push都会被覆盖,不过你可以通过以下两种方式实现需求:
1. 使用Amplify CLI的Override功能(推荐)
这是最直接的方式,通过Amplify官方提供的扩展能力修改现有资源属性,修改会被持久化保存,不会被push覆盖:
- 执行命令:
amplify override function <你的Lambda函数名称> - 该命令会在对应Lambda函数的目录下生成
override.ts(或override.js)文件 - 在这个文件里找到对应的
LambdaEventSourceMapping资源,添加FilterCriteria属性,示例代码如下:
import { AmplifyRootStackTemplate } from '@aws-amplify/cli-extensibility-helper'; export function override(resources: AmplifyRootStackTemplate) { // 替换成你实际的EventSourceMapping资源名称 const eventSourceMapping = resources.resources.LambdaEventSourceMappingXXXX; if (eventSourceMapping) { eventSourceMapping.Properties.FilterCriteria = { Filters: [ // 这里替换成你的过滤规则,比如只监听INSERT和UPDATE事件 { Pattern: '{"eventName": ["INSERT", "UPDATE"]}' } ] }; } }
- 修改完成后执行
amplify push,Amplify会自动将这个配置合并到最终的CloudFormation模板中。
2. 使用自定义CloudFormation资源
如果需要更灵活的配置,也可以在Amplify项目中添加自定义资源:
- 在
amplify/backend/custom/目录下创建新的自定义资源文件夹(比如custom-dynamo-trigger) - 在该文件夹中创建
template.yml,定义自己的LambdaEventSourceMapping资源,并配置FilterCriteria - 如果Amplify已经自动生成了触发器,需要先通过override功能删除原有自动生成的
LambdaEventSourceMapping资源,避免冲突
内容的提问来源于stack exchange,提问作者Corey
相关产品推荐
相关产品推荐

