我们有遇到一个技术问题,就是在使用SeverlessDevs的时候,不知道如何去参数化不同环境(dev/test/pro),用一套模版适配多种环境,请问怎么实现呢?
您可以考虑使用 Serverless Framework 的变量和环境配置功能来实现参数化不同环境的需求。具体来说,您可以在 serverless.yml 文件中定义不同环境的变量和配置,然后在部署时指定相应的环境变量和配置即可。例如:
# serverless.yml
service: my-service
provider:
name: aws
runtime: nodejs12.x
stage: ${opt:stage, 'dev'} # 使用 --stage 参数指定环境,默认为 dev
custom:
myVar: ${self:provider.stage}-value # 定义一个变量,根据环境动态生成值
functions:
hello:
handler: handler.hello
environment:
MY_ENV_VAR: ${self:custom.myVar} # 使用变量设置环境变量
在部署时,您可以使用以下命令指定不同的环境:
sls deploy --stage dev # 部署到 dev 环境
sls deploy --stage test # 部署到 test 环境
sls deploy --stage pro # 部署到 pro 环境
这样,您就可以使用一套模板适配多种环境了。
2020年11月份,阿里云智能开源了Serverless 社区的开发者工具Serverless Devs(后简称S) 弥补了国内在Serverless 开发者工具的一个空白。通过高度灵活的配置设定,实现了无厂商锁定的支持;直观易懂的可视化配套也带来了极致的开发者使用体验。
Serverless Devs 是一款面向 Serverless 应用全生命周期的管理工具,其模型规范中存在应用和服务的概念,但目前缺少对环境的内在支持,代码+基础设施共同维护在一个 s.yaml 下。
在使用ServerlessDevs进行部署时,我们可以使用动态配置、环境变量等技术实现参数化不同环境,使用一套模板适配多种环境的部署方式。具体实现如下:
在配置文件中,我们可以使用类似{{env}}这样的变量占位符,用具体的环境值替换。例如:
inputs:
bucketName: {{env}}-example-bucket
functionName: example-function-{{env}}
region: cn-beijing
runtime: nodejs10
这样我们就可以通过指定不同的环境值,实现参数化部署到不同的环境。
在许多场景下,通过设置环境变量来传递参数是更加方便的一种方式。ServerlessDevs也支持在命令行中设置环境变量。例如:
$ sls deploy --env=dev --var env=dev
这样就可以在部署过程中,将env变量的值替换为dev,达到适配dev环境的目的。
通过上述方式,我们可以实现一套模板适配多种环境的部署。实际使用时,我们可以根据实际情况,选择适合自己需求的方式进行参数化配置。
可以配置不同环境变量,参考这个:https://docs.serverless-devs.com/fc/command/env
此答案来自钉钉群“Serverless 开发者技术学习群"
楼主你好,你可以采用分层的模板化方案,即: 平台管理员将网络、日志服务、存储、数据库等基础设施资源根据测试/生产隔离的要求,封装成环境模板;
将阿里云函数计算函数、Serverless 应用引擎应用封装成服务模板; 将 CI/CD 的基础流程封装成流水线模板;
平台管理员持有子账号选择环境模板创建不同的测试、预发、生产环境,然后授予研发子账号访问权限,或者授予研发写权限来自助创建环境;
开发人员选择流水线模板,通过主动触发或者代码提交自动触发 CI/CD 的执行。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。