Serverless部署Lambda时报CloudFormation模板无效错误如何解决?
错误原因
- 部署命令未正确传入
region参数,导致配置里的${opt:region}变量没有被正确解析,生成的CloudFormation导出名中包含$、{、}等非法字符,不符合AWS要求的Export Name仅能使用字母、数字、冒号、连字符的规则。 serverless-deployment-bucket插件生成的默认导出名称规则和你自定义的stackName、service变量规则冲突,导致生成的导出名包含非法字符。
解决方案
- 首先检查部署命令,确保正确传入了region和stage参数,示例命令如下:
serverless deploy --region us-east-1 --stage dev
注意传入的region值必须是AWS官方的标准区域格式,比如us-east-1、cn-northwest-1,不要使用下划线、特殊字符自定义区域名。
2. 如果传入参数后还是报错,可以手动指定导出名称,在provider.deploymentBucket配置下新增exportName字段,指定符合格式要求的固定/变量导出名,修改后的配置片段如下:
provider: name: aws runtime: nodejs12.x memorySize: 512 timeout: 10 lambdaHashingVersion: 20201221 region: ${opt:region} stackName: lambdas-${opt:region} logRetentionInDays: 14 deploymentBucket: name: lambdas-${opt:region} # 新增以下行,自定义导出名称,确保仅包含允许的字符 exportName: lambdas-${opt:region}-deployment-bucket-name
- 如果以上操作都无效,可以尝试升级
serverless-deployment-bucket插件到最新版本,旧版本插件存在导出名生成逻辑的已知bug。
内容的提问来源于stack exchange,提问作者Andrey Kalenyuk
相关产品推荐
相关产品推荐

