serverless-framework - 无服务器离线自定义:使用外部文件和内部添加的变量?
问题描述
我遇到了一个奇怪的问题,我需要使用从外部文件和从 serverless.yml 文件内部读取的无服务器“自定义:”变量。
像这样的东西:
custom: ${file(../config.yml)}
dynamodb:
stages:
-local
..除了这不起作用。(得到一个映射条目错误的缩进错误)我不确定这是否可能以及你是怎么做的。请帮忙 :)
原因是如果在 exteranl 文件中设置了 dynamodb 本地无服务器插件,则它的配置将不起作用。但是我们在我们的项目中使用了外部文件配置,我们不想改变它。
所以我需要在 serverless.yml 文件中分离 dynamodb 配置,只是不确定正确的方法。
请有人帮助:)谢谢
解决方案
您要么必须将所有变量放在外部文件中,要么每次从自定义文件中导入每个变量{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
推荐阅读
- c# - “值不能为空。参数:源”将 UWP 应用上传到 Microsoft Store 时
- c# - Monogame C# - 如何在 tilemap 图层 0 和 1 之间绘制我的精灵?
- scheme - 可以在 if/cond 中使用 let 吗?
- laravel - Laravel 广播作业队列进度
- sql - 防止 Context.Database.SqlQuery<> 参数发送默认值而不是 null
- react-native - 反应原生视频结束后显示按钮
- laravel - 如何使用 Laravel Sail 配置 Supervisor 和调度?
- javascript - 有什么方法可以将输出 css 合并到 webpack 中的 JS 文件中?
- javascript - 用函数改变状态
- python - Folium 无法使用“相同”图标添加多个点