首页 > 解决方案 > 无服务器离线自定义:使用外部文件和内部添加的变量?

问题描述

我遇到了一个奇怪的问题,我需要使用从外部文件和从 serverless.yml 文件内部读取的无服务器“自定义:”变量。

像这样的东西:

custom: ${file(../config.yml)}
   dynamodb:
      stages:
        -local

..除了这不起作用。(得到一个映射条目错误的缩进错误)我不确定这是否可能以及你是怎么做的。请帮忙 :)

原因是如果在 exteranl 文件中设置了 dynamodb 本地无服务器插件,则它的配置将不起作用。但是我们在我们的项目中使用了外部文件配置,我们不想改变它。

所以我需要在 serverless.yml 文件中分离 dynamodb 配置,只是不确定正确的方法。

请有人帮助:)谢谢

标签: serverless-frameworkserverlessdynamo-localserverless-offline

解决方案


您要么必须将所有变量放在外部文件中,要么每次从自定义文件中导入每个变量{file(../config.yml):foo}

但是...您也可以使用 js 代替 yml/json 并创建一个serverless.js文件,以便在需要更多功能时以编程方式构建文件。我对我的东西有相当复杂的需求,并且有大约 10 个用于所有不同服务的 yml 文件。对于我的离线 sls,我需要添加额外的东西,修改其他一些东西,所以我只需使用节点读取 yaml 文件,将它们解析为 json 并构建我需要的内容,然后将其导出。

这是加载多个配置并导出合并的配置的示例:

import { readFileSync } from 'fs'
import yaml from 'yaml-cfn'
import merge from 'deepmerge'

const { yamlParse } = yaml

const root = './' // wherever the config reside

// List of yml to read
const files = [
  'lambdas',
  'databases',
  'whatever'
]

// A function to load them all 
const getConfigs = () =>
  files.map((file) =>
    yamlParse(readFileSync(resolve(root, `${file}.yml`), 'utf8'))
  )

// A function to merge together - you would want to adjust this - this uses deepmerge package which has options
const mergeConfigs = (configs) => merge.all(configs)

// No load and merge into one
const combined = mergeConfigs(getConfigs())

// Do stuff... maybe add some vars just for offline for ex

// Export - sls will pick that up
export default combined


推荐阅读