检查serverless.yml文件中的环境变量(无服务器框架) [英] Check env variables in serverless.yml file (Serverless Framework)
本文介绍了检查serverless.yml文件中的环境变量(无服务器框架)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我是使用无服务器框架的新手,我想检查一下serverless.yml内的环境变量是否根据我所处的阶段而变化。以下是我在serverless中拥有的内容。yml:
service: items
custom:
customDomain:
domainName: api.app.com
certificateName: '*.api.app.com'
basePath: ''
stage: ${self:provider.stage} <=== (Variable to check)
createRoute53Record: true
webpack:
webpackConfig: ./webpack.config.js
includeModules: true
serverless-iam-roles-per-function:
defaultInherit: true
.......
provider:
name: aws
runtime: nodejs8.10
......
......
process_updates:
handler: handler.processUpdates
iamRoleStatements:
- Effect: "Allow"
Action:
- s3:*
Resource:
- "arn:aws:s3:::${file(./config.${self:provider.stage}.json):items_updates}/*"
Config.dev.json:
{
"items_updates": "dev-items-updates"
}
Config.prod.json:
{
"items_updates": "prod-items-updates"
}
因此,我想知道是否有办法打印以下变量
${self:provider.stage}
和${file(./config.${self:provider.stage}.json):items_updates}
进行部署时。有没有在无服务器框架中使用不同环境的最佳实践?
提前谢谢!
推荐答案
插件?
如果要绑定到无服务器生命周期事件并执行某些操作,一种典型的方法是write a plugin。
我发现无服务器插件开发的学习曲线相当平缓,我建议任何还没有这样做的无服务器用户写一条。
但是,有时插件过于夸张,或者由于其他原因而不受欢迎。
解决方法
无服务器的一个非常方便(但经常被忽视)的特性是它可以resolve variables from javascript files.
注意带有此签名的导出函数:
module.exports = (serverless) => { ... }
此serverless
对象使您可以访问各种内容:
- 命令行参数位于
serverless.processedInput.options
。 - 您的服务位于
serverless.service
。
具体案例
在您的情况下,您可以将${env}-items-updates
数据直接放入.js
函数中,或者让您的函数读取文件。
为简单起见,我假定您愿意将数据直接填充到函数中。我还将仅使用单个items-updates.js
文件进行演示,而不是每个阶段使用单独的文件。
items-updates.js:
module.exports = (serverless) => {
const stage = serverless.service.provider.stage;
serverless.cli.log(`Resolving items-updates for stage ${stage}`);
switch (stage) {
case 'dev':
return {}; // Your dev-items-updates here
case 'prod':
return {}; // Your prod-items-updates here
}
}
然后在您的iamRoleStatements
中:
Resource:
- ${file(./items-updates.js)}
注意:虽然上面的示例显示的是默认导出,但我通常使用命名导出,因此我可以在单个js文件中放置多个资源。
这篇关于检查serverless.yml文件中的环境变量(无服务器框架)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文