如何以 DRY 方式定义变量

2023-12-30

假设我有一个写入 S3 存储桶的函数。因此,存储桶名称显然是一个“变量”,不应硬编码到函数中(例如,开发与生产可能是不同的存储桶)。

现在,如果我希望函数能够访问它,我需要在至少两个地方使用存储桶名称:

  1. 在该功能的 IAM 策略中(允许访问存储桶)。
  2. 在函数本身中。

对于#1,我可以使用一个变量,并引用 IAM 策略中定义的变量s-module(或者 v0.4 中的任何名称:)。

对于#2,我可以使用环境变量,然后我可以在运行时在函数代码中访问其值。

但我当然不想定义变量两次(一次是sls env set并且一旦在s-variables文件)。那不是很干。但是,我没有看到在定义 envar 时引用变量的方法,反之亦然。

如何才能在一处定义存储桶名称?


As of 无服务器 v0.5 https://github.com/serverless/serverless/releases/tag/v0.5.0,这很容易。环境变量处理混合无服务器项目变量。您在中定义项目变量_meta/variables/...以每个阶段每个区域的方式;例如,在s-variables-dev-useast1.json:

{
    "foo_bucket": "com.example.foo-bucket"
}

然后,在s-function.json使用该存储桶的文件,您定义函数需要的环境变量......并且参考以类似模板的方式设置项目变量:

"environment": {
    "BUCKET": "${foo_bucket}"
}

然后它就会像任何其他环境变量一样出现;所以在节点中:

console.log("The Bucket: " + process.env.BUCKET); 
// prints "The Bucket: com.example.foo-bucket"

到目前为止无服务器文档 http://docs.serverless.com/docs还没有跟上这一变化,但我预计他们应该很快就会发生。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何以 DRY 方式定义变量 的相关文章

随机推荐

  • 为什么我仍然可以更改这个最终变量? [复制]

    这个问题在这里已经有答案了 If name被宣布final 为什么我还能打电话name append输出是 shreya 我认为最终变量一旦赋值就不能更改 public class Test1 final static StringBuil
  • 如何根据是否设置环境变量来设置和使用 tmux.conf 中的变量

    免责声明 我完全意识到 我在下面描述的问题有一些解决方案 涉及编写和调用与正在运行的 tmux 服务器交互的 shell 脚本 或者在启动 tmux 服务器之前设置必要的环境变量 我专门发布这个问题看看是否可以解决这个问题without使用
  • ASP.NET MVC:如何使用 . (句号)结束时

    当我尝试发出一个搜索词以 a 结尾的请求时 我收到来自 Net MVC 的 404 响应 时期 这是我正在使用的路线 routes MapRoute Json Remote mvc action searchTerm count new c
  • Word VBA:将文本字符串从段落末尾移动到段落开头

    我是 VBA 新手 我有几个长文档 其中引文或文档编号出现在段落末尾 幸运的是 这些引文和文档都用括号括起来 这应该很容易隔离 我需要将这些括号的内容 包括括号本身 移动到每个段落的前面 然后在右括号后添加两个空格 例如 这是我在第 1 段
  • WIX支持framework 4.6的检测吗?

    我有 WIX 版本 3 10 我正在更新安装程序以要求 NET 4 6 以前需要 4 5 1 我正在使用 WIX NetFxExtension 来检测框架是否存在 对于框架 4 5 我在 XML 中有这样的内容
  • 制作共享对象时不能使用针对 .data 的重定位 R_X86_64_32S(64 位 NASM + gcc)

    我正在尝试使用 NASM 和 GCC 制作一个程序 global main extern puts section data hi db hello 0 section text main push hi call puts ret 我正在
  • 理解缩进/取消缩进/缩进级别的.NET控制台TextWriter

    是否有人拥有或知道用于控制台的 TextWriter 它了解如何缩进 取消缩进并能够设置缩进级别 System CodeDom Compiler IndentedTextWriter 它内置于 Net Framework 的 system
  • 如何在 Android 中创建可调整大小的 ImageView

    我希望我的应用程序的用户能够在运行时修改图像 用户应该能够通过点击图像视图的一角并拖动它来修改图像的高度和宽度 如下图所示 我花了很多时间研究这个 我发现理解多点触控 http android developers blogspot in
  • Xcode 10 构建阶段 Shell 脚本

    在我们的项目中 我们从 git tag 等获取发布版本 然后使用如下 shell 脚本将其写入构建文件夹的 Info plist GIT RELEASE VERSION some git command defaults write BUI
  • 让 Windows Identity Foundation“开发人员培训套件”示例发挥作用

    我下载了 Windows Identity Foundation 的 开发人员培训工具包 并将其安装在新设置的 Windows Server 2008 R2 虚拟机上 当我打开示例解决方案并按 F5 运行它们时 出现以下错误 无法在 Web
  • FastAPI WebSocket 复制

    我已经用 FastAPI 实现了一个简单的 WebSocket 代理 使用这个例子 https fastapi tiangolo com advanced websockets 应用程序的目标是将其收到的所有消息传递到其活动连接 代理 它仅
  • 如何将值传递给结构中的 std::Optional?

    我正在尝试使用 std Optional 如以下代码所示 include
  • C++ new/delete 和 char *

    任何人都可以帮助我 为什么我在尝试释放分配的内存时收到错误消息 检测到堆损坏 CTR 检测到应用程序在堆缓冲区末尾之后写入了内存 char ff char s char s1 new char strlen s strcpy s1 s re
  • 创建从 Google 云端硬盘下载整个电子表格的链接

    我想在谷歌驱动器上为我的电子表格创建下载链接 我读到了类似的内容 https docs google com spreadsheets d MY SPREADSHEET export format csv 但它只下载第一张纸 我读过关于GI
  • 在当前歌曲结束之前预加载播放列表中的下一首歌曲

    我制作了一个运行良好的小型媒体播放器 但我想让它在每首歌曲之间不再加载 我知道 preload 属性 但它只在页面第一次加载时预加载音乐 所以我觉得这不起作用 有办法做到这一点吗 也许使用网络音频 API 当您开始播放歌曲时 您可以观看pl
  • MySQL json_arrayagg 左连接没有结果

    使用 MySQL 8 0json arrayagg https dev mysql com doc refman 8 0 en group by functions html function json arrayagg引入后 这使得聚合
  • YouTube Android API:YouTubePlayerFragment 加载微调器

    我正在使用 Android YouTube API 示例在我的应用程序中创建一个 chromeless YouTube 播放器 我遇到的问题是 即使视频已加载并开始播放 缓冲 加载进度条仍会继续显示在视频上 我可以在FragmentDemo
  • 测试 LDAP 与 Active Directory 服务器的连接

    我正在编写一个访问 LDAP 服务器 当前为 OpenLDAP 的 Linux 应用程序 我还想使用 Active Directory 服务器测试该应用程序 因为它可能会在生产中使用 Microsoft 是否有任何免费演示版或试用版可以让我
  • 快速 C++ 单生产者单消费者实现

    我正在寻找一个单生产者 单消费者的 FIFO 实现 它的执行速度比普通的锁定 写入 解锁 信号 waitForSignal 锁定 读取 解锁的东西更快 我正在寻找大多数 POSIX 操作系统 x86 特定的很好 支持的用 C 或 C 编写的
  • 如何以 DRY 方式定义变量

    假设我有一个写入 S3 存储桶的函数 因此 存储桶名称显然是一个 变量 不应硬编码到函数中 例如 开发与生产可能是不同的存储桶 现在 如果我希望函数能够访问它 我需要在至少两个地方使用存储桶名称 在该功能的 IAM 策略中 允许访问存储桶