【问题标题】:SAM template environment variables use map, list, associative array?SAM模板环境变量使用map、list、关联数组?
【发布时间】:2019-03-01 16:12:23
【问题描述】:

我只在 SAM 模板中看到了具有单个值的示例:

Environment:
  Variables:
    TABLE_NAME: my-table

我想做这样的事情,但似乎不起作用:

Environment:
  Variables:
      myVar:
      -   prop1: aaa
          prop2: sdfsdfsd
          prop3: ssss
      -   prop1: bbb
          prop2: wwwwww
          prop3: aaaaa

我想要一个类似于对象列表的环境变量。我可以存储一个分隔字符串并自己解析它,但我更喜欢让它像一个对象/地图/列表,就像我准备好一个 yaml 文件一样。

【问题讨论】:

    标签: amazon-web-services aws-lambda amazon-cloudformation aws-sam-cli


    【解决方案1】:

    您可以做的最接近的方法是对您的环境变量的值进行 json 编码 并使用运行时语言对其进行解码:

     Environment:
      Variables:
        USER: '{"name": "john", "surname": "galt"}'
    

    如果您想阻止在每个请求上解码 json,请将您的解码逻辑移到处理程序之外,在这种情况下,当 lambda 很热时,代码不会重新执行。

    您的 Lambda 函数代码(处理程序代码之外,请参阅编程模型)中的任何声明都保持初始化状态,从而在再次调用函数时提供额外的优化。例如,如果您的 Lambda 函数建立数据库连接,而不是重新建立连接,则在后续调用中使用原始连接。我们建议在您的代码中添加逻辑以在创建连接之前检查连接是否存在。

    了解lambda execution model

    我个人会创建一个json 文件,将其存储在s3 存储桶中,并使用环境变量为该文件指定s3 url。此外,在检索config 文件时,根据情况使用我上面提到的相同技术或使用更复杂的缓存机制

    【讨论】:

    • 我认为这是唯一太糟糕的方法。如果我必须为每个请求解码一个 yaml 字符串,这会破坏性能吗?
    • 对 lambda 中的每个请求进行 yaml 或 json 解码真的很糟糕吗?
    • @red888 如果您想阻止对每个请求进行解码,请将您的代码移到处理程序之外,查看更新后的答案
    • 它是如何工作的?处理程序是入口点,对吗?我是否在处理程序外部定义一个函数并在处理程序内部调用它?
    猜你喜欢
    • 2020-03-22
    • 2018-06-14
    • 2020-09-29
    • 2019-05-10
    • 2012-11-16
    • 1970-01-01
    • 2021-11-14
    • 2023-04-06
    • 1970-01-01
    相关资源
    最近更新 更多