gpt4 book ai didi

node.js - 检查 serverless.yml 文件中的环境变量(无服务器框架)

转载 作者:搜寻专家 更新时间:2023-10-31 23:57:24 25 4
gpt4 key购买 nike

我是使用无服务器框架的新手,我想检查 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}/*"

配置.dev.json:

{
"items_updates": "dev-items-updates"
}

配置文件.json:

{
"items_updates": "prod-items-updates"
}

所以,我想知道是否有办法打印以下变量 ${self:provider.stage}${file(./config.${self:provider.stage}.json):items_updates} 部署时.在无服务器框架中使用不同的环境是否有最佳实践?

提前致谢!

最佳答案

插件?

如果您想绑定(bind)Serverless 生命周期事件并执行操作,一种典型的方法是 write a plugin .

我发现无服务器插件开发的学习曲线非常平缓,建议为任何尚未这样做的无服务器用户编写一个。

但是,有时插件会因为其他原因而变得矫枉过正或不受欢迎。

解决方法

无服务器的一个非常方便(但经常被忽视)的特性是它可以 resolve variables from javascript files.

注意带有此签名的导出函数:

module.exports = (serverless) => { ... }

这个无服务器对象让你可以访问各种东西:

  • 命令行参数可以在 serverless.processedInput.options 中找到。
  • 您的服务可以在 serverless.service 中找到。

具体案例

在您的情况下,您可以将 ${env}-items-updates 数据直接放入 .js 函数中,或者让您的函数读取文件(s).

为了简单起见,我假设您愿意将数据直接填充到函数中。我还将说明仅使用单个 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 文件中。

关于node.js - 检查 serverless.yml 文件中的环境变量(无服务器框架),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50991250/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com