[英]Serverless error - The CloudFormation template is invalid - during deployment
使用无服务器部署 lambdas 时,出现以下错误:
CloudFormation 模板无效:模板格式错误:输出 ServerlessDeploymentBucketName 格式错误。 必须指定每个导出成员的名称字段,并且仅包含字母数字字符、冒号或连字符。
我不明白问题是什么。
无服务器配置文件:
service: lambdas-${opt:region}
frameworkVersion: '2'
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}
plugins:
- serverless-deployment-bucket
functions:
function1:
handler: function1/index.handler
name: function1-${opt:stage}
description: This function should call specific API on Backend server
events:
- schedule: cron(0 0 * * ? *)
environment:
ENV: ${opt:stage}
function2:
handler: function2/index.handler
name: function2-${opt:stage}
description: Function should be triggered by invocation from backend.
environment:
ENV: ${opt:stage}
很可能您的艺名包含非法字符。 Serverless 会根据您的阶段名称为您的 s3 存储桶自动生成一个名称。 如果您查看生成的模板文件,您将看到完整的导出,如下所示:
"ServerlessDeploymentBucketName": { "Value": "api-deployment", "Export": { "Name": "sls-api_stage-ServerlessDeploymentBucketName" } },
解决此问题的方法(假设您不想更改舞台名称)是通过向无服务器配置添加类似内容来显式设置输出(在这种情况下,非法字符是下划线)
resources: { Outputs: { ServerlessDeploymentBucketName: { Export: { Name: `sls-${stageKey.replace('api_', 'api-')}-ServerlessDeploymentBucketName` } } } }
不幸的是,每次导出都必须这样做......更新您的舞台名称以不包含非法字符是更好的选择
我遇到了同样的问题。
在serverless.yml
我改变了服务,我有它作为lambda_function并把它作为lambdaFunction
错误已解决并正确部署。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.