检查serverless.yml文件中的环境变量(无服务器框架) [英] Check env variables in serverless.yml file (Serverless Framework)

查看:0
本文介绍了检查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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆