Aws lambda 始终需要无服务器框架的阶段参数

Aws lambda 始终需要无服务器框架的阶段参数,aws-lambda,serverless-framework,Aws Lambda,Serverless Framework,如果没有给出阶段,是否有方法使无服务器中止执行 看起来它默认为“dev”,这在不存在“默认”环境的多环境设置中是不可取的 我能得到的最接近的结果是从本地文件中读取“stage”配置变量。不幸的是,如果(现有)本地文件中缺少stage变量,Serverless仍然默认为“dev”。不过,它确实为缺少的变量提供了警告 provider: name: aws runtime: nodejs8.10 region: eu-west-1 stage: ${file(serverless-l

如果没有给出阶段,是否有方法使无服务器中止执行

看起来它默认为“dev”,这在不存在“默认”环境的多环境设置中是不可取的

我能得到的最接近的结果是从本地文件中读取“stage”配置变量。不幸的是,如果(现有)本地文件中缺少stage变量,Serverless仍然默认为“dev”。不过,它确实为缺少的变量提供了警告

provider:
  name: aws
  runtime: nodejs8.10
  region: eu-west-1
  stage: ${file(serverless-local.yml):stage}

这有点猜测,因为我是无服务器框架的新手,但您可以设置默认值,当命令行选项未提供该值时使用该值

下面将默认值设置为
dev

provider:
  stage: ${opt:stage, 'dev'}
现在,如果您将默认值设置为空或一些不存在的内容,例如
foobar
,那么您可能会获得想要的效果并中止执行


另外,在这种情况下,可能会给出其他有用的提示。

也许你可以为此编写一个无服务插件


另一个选择是使用Jeremy Daly()中的这个插件,并从custom.stages中删除dev。我建议为您的用例编写一个bash脚本。e、 g.一个build.sh文件,然后调用
sls
并传递其参数。当您有这样一个设置时,您可以在执行之前轻松地进行一些检查。创建包装器/前端脚本可以工作(我以前也做过),但是对于简单的设置,我更喜欢使用执行Serverless的标准方式,因为它已经有一个非常简单的CLI界面。不幸的是,Serverless将空解释为“默认”(='dev')。和'foobar'将是部署的有效阶段,因为您可以动态创建阶段。