我正在使用无服务器框架编写后端服务。
分离“Dev”和“Prod”环境的最佳方法是什么?
假设我希望我的dev配置文件部署在某个区域,而我的prod配置文件则部署在另一个区域?有没有办法在无服务器框架中实现这一目标?
我想做点什么:
serverless deploy --profile dev (--> use serverless-dev.yml)
serverless deploy --profile prod (--> use serverless-prod.yml)
答案 0 :(得分:8)
您可以使用无服务器框架的阶段部署到不同的环境。 deploy命令具有stage选项,您可以使用--stage
或-s
指定该选项。区域选项为--region
或-r
以下是一个示例:
serverless deploy --stage dev --region us-east-1
此选项还可用于将单个lambda函数部署到特定环境。
serverless deploy --stage production --region eu-west-1 function --function helloworld
您可能还希望使用无服务器变量来使您的环境配置动态化。您可以使用语法${env:SOME_VAR}
访问环境变量。
还有一种方法可以使用嵌套变量使变量阶段/区域特定。
来自文档:
使您的变量特定于舞台/地区:
serverless.env.yml允许您为其提供不同的值 变量基于 您正在部署的阶段/区域。您可以获得相同的结果 通过使用新变量系统的嵌套功能。对于 例如,如果您有两个不同的ARN,一个用于开发阶段和 对于prod阶段,您可以执行以下操作: $ {ENV:$ {选择:第一阶段}} _arn。这将确保正确的env var 基于作为选项提供的阶段引用。你当然会 需要在本地导出dev_arn和prod_arn env vars 系统
无服务器文档的链接:
<强>部署强>
https://serverless.com/framework/docs/providers/aws/cli-reference/deploy-function/
工作流建议
https://serverless.com/framework/docs/providers/aws/guide/workflow/#using-stages
无服务器变量
https://serverless.com/framework/docs/providers/aws/guide/variables/