Serverless Framework迁移S3桶触发器至新Lambda遇部署错误
S3触发器迁移Lambda函数时部署报错解决方法
问题场景
原有Lambda函数func1绑定了S3桶触发器和SQS触发器,现需将这两个触发器迁移至新创建的func2,修改Serverless配置后部署时出现配置冲突报错。
原有Serverless配置
functions: func1: handler: src/func1/func1.handler events: - s3: bucket: ${self:custom.bucketname} event: s3:ObjectCreated:* existing: true - sqs: arn: !GetAtt queue.Arn batchSize: 1
修改后的Serverless配置
functions: func1: handler: src/func1/func1.handler events: [] func2: handler: src/func2/func2.handler events: - s3: bucket: ${self:custom.bucketname} event: s3:ObjectCreated:* existing: true - sqs: arn: !GetAtt queue.Arn batchSize: 1
部署报错信息
Received response status [FAILED] from custom resource. Message returned: Configurations overlap. Configurations on the same bucket cannot share a common event type. See details in CloudWatch Log: ...
报错原因
S3桶不允许同一事件类型(如s3:ObjectCreated:*)同时绑定到多个Lambda函数。直接一次性部署修改后的配置时,部署流程会先尝试给func2添加S3触发器,此时func1的旧触发器尚未被删除,导致配置重叠冲突。
解决步骤
- 分两次部署:先保持
func1的events: []配置,注释掉func2的触发器配置,单独部署一次,确保func1的触发器完全移除;再恢复func2的触发器配置,执行第二次部署。 - 手动预处理:先在AWS控制台删除
func1对应的S3触发器,再直接部署修改后的完整配置,避免分步骤部署。
内容的提问来源于stack exchange,提问作者Sheen
相关产品推荐
相关产品推荐

