在 AWS Lambda Layers 中找到等效的环境变量?

2024-02-24

我正在 AWS 上编写一个无服务器应用程序。

我已将该应用程序分解为许多 Clo​​udFormation 堆栈。我正在使用 CDK(Python 中)创建 CF 堆栈来部署应用程序。

当然,我的 lambda 函数的核心要求是能够记录事件。为了处理这个问题(以及应用程序中传递的所有消息),我在我的堆栈之一中创建了一个自定义 EventBridge 总线。事件总线的名称是堆栈的输出。

由于日志记录功能对于许多 lambda 函数来说都是通用的,因此将日志记录功能放入 lambda 层似乎是合适的。然后,我可以让所有 lambda 函数实现该层,并且日志记录将自动可供我的所有 lambda 函数使用。

问题是我的日志记录代码需要知道将事件写入哪个 EventBridge 事件总线。我不想对此进行硬编码,因为我可能会同时部署堆栈的“开发”和/或“测试”和/或“产品”版本,并且每个环境中的日志记录层需要记录到其环境的日志记录总线。

由于 lambda 层在父 lambda 函数的上下文中运行,因此我无法在该层上设置环境变量。

我可以在使用该层的所有 lambda 函数上设置“LoggingEventBus”环境变量。但这似乎是重复的并且容易出错。 (虽然这是我目前能想到的最好的解决方案。)

我可以将事件总线存储在 SMS 参数存储中。但是天哪,每次我的应用程序中的任何函数想要记录任何内容时查找该参数都是荒谬的。 (我又必须找出一种方法让记录器确定它是否在开发/测试/产品中查找正确的总线。)

我实际上正在考虑“cdk合成器”期间的一些构建过程,该过程修改日志记录层的源代码并对事件总线名称进行字符串替换,以便在部署代码时该名称实际上是硬编码的。但该解决方案存在各种危险信号。

理想情况下,层本身应该有某种“环境变量”。但这样的东西并不存在,而且我承认这样的功能与大多数语言运行时的工作方式不兼容。

其他人是如何解决这个问题的?将设置放入 lambda 层是否有“正确”答案?


您是对的,Lambda 层没有环境变量的概念。

我可以在所有的上设置一个“LoggingEventBus”环境变量 使用该层的 lambda 函数。但这似乎是重复的 容易出错。

我们还将层用于多个 Lambda 函数常见的一些逻辑(涉及 SNS 主题等),并且我们的做法与您上面的建议非常相似。

唯一的区别是,我们只是在环境变量中设置阶段,而不是 SNS 主题的值(或者在您的情况下为 EventBridge 名称)。然后让 Layer 根据 env 中设置的 stage 决定使用哪个 SNS Topic。

在我们的层代码中,我们使用这样的配置 -

{
  "Prod": {
    "SNSTopicARN": "ProdARN",
    "OtherConfig": "ProdValue"
  },
  "Dev": {
    "SNSTopicARN": "DevARN",
    "OtherConfig": "DevValue"
  }
}

然后在层代码中,我们有

config = configJson.get(env.STAGE)

我猜不是容易出错的地方:)

我们可以在层中添加任意数量的配置变量,而无需触及 Lambda 函数部署。

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

在 AWS Lambda Layers 中找到等效的环境变量? 的相关文章

  • 使用 asp.net MVC 拖放上传到 aws s3

    我在我正在处理的基本 mvc 项目上上传文件时遇到一些问题 我有一个拖 放功能 我想连接到 aws s3 我可以使用当前应用程序将文件放入本地文件夹中 并按照此处的步骤操作 gt 使用 c Sharp 将文件上传到亚马逊 s3 非常简单 h
  • 如何将 IAM 角色分配给用户或组

    我知道如何创造user group and role在 AWS IAM 中 我还可以将策略附加到每个策略上 例如 选择一个组后 您可以转到permissions选项卡 并向其附加一些策略 但是 我不知道如何将角色附加到用户或组 我查看了文档
  • NodeJS 与 DynamoDB 抛出错误“AttributeValue 可能不包含空字符串”

    我遇到了一个问题 因为 DynamoDB 无法接受空字符串作为属性中的值 我总是必须在前端检查是否存在空字符串值 否则 API 调用将由于 Dynamo DB 抛出的错误 An AttributeValue 可能不包含空字符串 而失败 我想
  • 我首次设置 AWS EB 时创建的默认安全组是什么?

    我对几个组所扮演的角色感到困惑 这些组似乎已自动添加到我的 AWS 安全组列表中 并以我收集的默认配置进行连接 并且想知道它们是如何工作的 以及它们的安全性如何 改变 具体来说 有三个神秘之处 launch wizard 1其中有一条入站规
  • 无法从 EMR 中运行的 Spark 应用程序删除 AWS SQS 消息

    我正在 AWS EMR 集群中运行 Apache Spark 应用程序 该应用程序从 AWS SQS 检索消息 根据消息数据进行一些计算 然后删除每条消息 我正在具有 NAT 实例的私有子网上的 VPC 中运行 EMR 集群 我面临的问题是
  • AWS Cognito 作为网站的 Django 身份验证后端

    我对 Cognito 的理解是 它可以用来代替本地 Django 管理数据库来对网站的用户进行身份验证 然而 我没有找到任何带有通过 Cognito 登录屏幕的基本 Hello World 应用程序的详细示例 如果有人可以发布一篇文章 逐步
  • Alexa Skill - 以编程方式更新意图

    我正在尝试创建一个 Alexa 技能 它可以使用相当广泛的可能的短语数量 手写太多了 我可能可以通过编程方式生成列表 但它经常更改 因此我希望它经常更新 我是否可以调用 Amazon API 来更新自定义槽类型的可能值 而无需始终手动登录并
  • AWSS3GetObjectRequest ifModifiedSince 不起作用

    建设为iOS 7 建立在Xcode 6 1 使用亚马逊SDKAWSiOSSDKv2 2 0 12 测试于iPhone 5s 和 iPad 2 我正在使用适用于 iOS 的 Amazon SDK 从我的 Amazon S3 存储桶下载图像 下
  • 如何在API网关前面添加CloudFront

    API 网关 APIG 虽然它使用 CloudFront CF 但不支持 CDN 边缘缓存 当我将 CF 发行版配置为使用 APIG 作为自定义源时 我收到权限被拒绝错误 如何配置 CF 来解决此问题 在 API Gateway APIG
  • 使用 Ruby 获取 AWS 区域名称

    我正在为 AWS 开发 Rails 应用程序 并希望为区域名称创建下拉菜单 例如 us east 1 等 如果有人已经创建了 gem 来获取它们 我想使用它 有人知道这样的 gem 或有用的 API 吗 适用于 Ruby 的 AWS 开发工
  • 您可以克隆 AWS lambda 吗?

    针对不同环境的克隆 分期 QA PROD DEV 等 有没有一种快速简单的方法来克隆我的 lambda 给出不同的名称并从那里调整配置 您需要在新帐户中重新创建 Lambda 函数 转到 lambda 函数 单击 操作 并导出您的函数 下载
  • 使用端口 80 的 AWS Elastic Beanstalk 上的 WebSocket 问题

    我正在将一个 node js 应用程序从 Heroku 迁移到在端口 80 上使用 WebSocket 的 AWS Elastic Beanstalk WebSocket 在 AWS Elastic Beanstalk 上返回 301 错误
  • 如何使用 PHP SDK 在 AWS SES 发送的电子邮件中实现 List-Unsubscribe 标头

    我尝试使用 AWS PHP SDK 添加自定义标头 以便可以实现 List unsubscribe 标头 问题是我找不到任何地方如何实现它 我已阅读文档但什么也没有 http docs aws amazon com aws sdk php
  • 使用 AWS Lambda 函数订阅 Amazon SNS 主题?

    我们可以订阅一个亚马逊社交网络服务主题使用AWS Lambda功能 是的 在 的帮助下sns subscribe https docs aws amazon com AWSJavaScriptSDK latest AWS SNS html
  • 使用 python 写入 aws lambda 中的 /tmp 目录

    Goal 我正在尝试将 zip 文件写入 python aws lambda 中的 tmp 文件夹 因此我可以在压缩之前提取操作 并将其放入 s3 存储桶中 Problem 操作系统 Errno30 只读文件系统 这段代码在我的计算机上进行
  • 同一区域内但属于不同账户的AWS数据传输费用如何?

    如果 S3 gt EC2 或 EC2 gt EC2 位于同一 AWS 区域 则数据传输费用似乎是免费的 S3价格注意事项 您需要为进出 Amazon S3 的所有带宽付费 except对于以下情况 当Amazon Elastic Compu
  • 在describe-vpcs中按标签过滤的正确语法是什么?

    我试图理解 aws ec2 cli 调用 我希望描述所有 VPC 然后在自定义标记上描述文件管理器 vpcname myvpc 但是在尝试多种组合后 我不断收到有关 filters 的格式和使用的冲突错误 使用作为参考 http docs
  • 为什么此 HTTP 请求在 AWS Lambda 上不起作用?

    我正在开始使用 AWS Lambda 并尝试从我的处理程序函数请求外部服务 根据这个答案 https stackoverflow com a 27932216 473467 HTTP 请求应该可以正常工作 而且我还没有找到任何其他说明的文档
  • AWS 无法验证提供的访问凭证。 AuthFailed 仅在特定区域

    我正在尝试通过 linux aws CLI 执行一些操作 我的凭据文件 100 正确 用户拥有 EC2FullAccess 和 Amdinistrative 最高级别 权限 我能够执行所有命令 问题是以下区域产生 AuthFailed 错误
  • 正确的 aws cli 语法以在非默认 VPC 中查找 VPC 安全组

    这是来自的后续问题在describe vpcs中按标签过滤的正确语法是什么 https stackoverflow com questions 27057932 what is the correct syntax for filterin

随机推荐

  • Django 发出更新不同模型的信号

    假设我有两个模型 class Product models Model product model CharField quantity model IntegerField class sale models Model product
  • 如何将 doGet(e) 参数传递给另一个函数?

    我能够从已发布的应用程序脚本的 url 捕获变量 但我不确定如何将该变量传递给另一个函数 如果包含变量 下面的脚本将不会运行 onRun 函数 我的目标是传递 2 个变量 但一次传递一个问题 function doGet e var id
  • 为给定表格行中的每个单元格设置 CSS 类的有效方法是什么?

    我在为给定表格行中的每个单元格设置 CSS 类时遇到问题 最初我认为设置父行CSS会影响单元格的样式属性 但这行不通 相反 我必须循环遍历给定行中的所有单元格来更新 CSS 类 然而 这效率不高 这花了很多时间 考虑我的情况 我有大约 23
  • Python+kivy+SQLite:如何一起使用它们

    我是 python kivy 和 sqlite 的新手 但我必须完成这项艰巨的任务 任何形式的帮助将不胜感激 提前致谢 任务是 显示来自 db文件上的kivy安卓上的屏幕 我制作了数据库文件http zetcode com db sqlit
  • 依赖注入与分层架构

    我读了很多关于依赖注入和服务定位器 反 模式的内容 很多都在 StackOverflow 上 谢谢大家 我有一个关于此模式在 n 层架构中如何工作的问题 我看过很多博客文章 其中描述了将 IDataAccess 组件注入业务对象 例如 pu
  • 如何将 Unix 时间戳转换回时间?

    我有以下 Unix 时间戳 1301982430 1301982430 1301981474 1301981466 1301981466 1301981066 1301981058 1301981058 1301980388 1301980
  • Sustainsys.SAML2 与多租户应用程序

    我正在开发一个多租户应用程序 Blazor 应用程序 我正在使用 Sustainsys Saml2 AspNetCore2 包 我有一个测试 Blazor 应用程序正在运行 可以授权测试https stubidp sustainsys co
  • 使用 MSBuild 从命令行定义预处理器值[重复]

    这个问题在这里已经有答案了 我需要创建由多个项目组成的现有大型应用程序的演示版本 我想使用现有的项目 并通过预处理器指令中性化功能 if DEMO mycode NeuterNow endif 我们正在使用 MSBuild 构建我们的应用程
  • JSON.NET \ 如何在 Json.net 中连接两个 JSON

    我有两个 JSON 作为简单字符串 有没有巧妙的方法来连接它们 作为基础设施的一部分 string j1 a 1 string j2 b 2 var j JsonConvert SerializeObject new JsonConvert
  • vue bootstrap b-collapse:当侧边栏折叠时,更改margin-left内容div

    我对 Vue Bootstrap b collapse 导航栏 侧边栏 内容 有疑问 https jsfiddle net Lvkjn7he 1 https jsfiddle net Lvkjn7he 1 当点击 navbar toggle
  • cakephp 使用 mysql SQL_CALC_FOUND_ROWS 进行分页

    我试图让 Cakephp 分页利用 mysql 中的 SQL CALC FOUND ROWS 功能来返回总行数 同时使用 LIMIT 希望这可以消除 paginateCount 然后 paginate 的双重查询 http dev mysq
  • 如何合并两个图像

    我有一个单一的图像 我有一个带有横幅图像的集合视图 现在 我需要将这两个图像组合成单个图像 而不影响它们的质量和高度 以便我能够下载合并的图像 我搜索但找不到 swift 3 的正确解决方案 我的代码如下 根据你的问题 你必须添加两个图像并
  • 如何在 Swift 中的泛型类上实现 NSCoding?

    我在 Swift XCode beta 5 中的泛型类和 NSCoding 方面遇到问题 具体来说 此示例代码运行良好 class Foo NSObject NSCoding let bar String init bar String s
  • 调用 API 期间出现 cURL 错误。 cURL 错误号:[60] SSL 证书问题:证书链中的自签名证书

    美好的一天 我是服务器设置的新手 我目前正在使用 laravel 5 4 来集成我的快书应用程序 https github com intuit QuickBooks V3 PHP SDK在我的实时服务器上http qb dagnum co
  • sql中的连续天数

    我发现了很多有关连续几天的 stackoverflow QnAs 答案仍然太短 我无法理解发生了什么 为了具体起见 我将制作一个模型 或表格 如果有什么区别的话 我正在使用 postgresql CREATE TABLE work id i
  • 在 JavaScript 中解析 jQuery 数据 (JSON)

    我正在使用 PHP jQuery 和 JSON 现在我需要知道如何在 JavaScript 中解析 jQuery 数据 load php 它通过以下数据返回 jQuery name STA distance 250 code 25 name
  • 同一任务执行多次

    我有 ETA 任务发送到 Celery 的 Redis 代理 它是一个 celery 和 redis 实例 两者都在同一台机器上 问题是 任务被执行多次 我见过任务执行了 4 到 11 次 鉴于我的预计到达时间在 4 11 小时之间 在运行
  • Dropbox 中未同步的 Git 存储库

    我有一个 git 存储库 和工作目录 存储在我的 Dropbox 中 这样我就可以在计算机之间来回移动 而无需提交或存储 阅读 完全不需要任何努力 这一切都很有效 除了一个小烦恼正在变成一个大烦恼之外 每隔一段时间 我会让一台计算机处于完全
  • 如何以编程方式确定当前类的Java字节码版本? [复制]

    这个问题在这里已经有答案了 我遇到的情况是 部署平台是 Java 5 并且开发是在 Java 6 下使用 Eclipse 进行的 我们建立了一个在开始处理给定项目时创建新工作区的过程 因此 所需步骤之一是将编译器级别设置为 Java 5 这
  • 在 AWS Lambda Layers 中找到等效的环境变量?

    我正在 AWS 上编写一个无服务器应用程序 我已将该应用程序分解为许多 Clo udFormation 堆栈 我正在使用 CDK Python 中 创建 CF 堆栈来部署应用程序 当然 我的 lambda 函数的核心要求是能够记录事件 为了