Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services SAM模板环境变量是否使用映射、列表、关联数组?_Amazon Web Services_Aws Lambda_Amazon Cloudformation_Aws Sam Cli - Fatal编程技术网

Amazon web services SAM模板环境变量是否使用映射、列表、关联数组?

Amazon web services SAM模板环境变量是否使用映射、列表、关联数组?,amazon-web-services,aws-lambda,amazon-cloudformation,aws-sam-cli,Amazon Web Services,Aws Lambda,Amazon Cloudformation,Aws Sam Cli,我只看到SAM模板中有单个值的示例: Environment: Variables: TABLE_NAME: my-table 我想做这样的事情,但似乎不起作用: Environment: Variables: myVar: - prop1: aaa prop2: sdfsdfsd prop3: ssss - prop1: bbb prop2: wwwwww

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

Environment:
  Variables:
    TABLE_NAME: my-table
我想做这样的事情,但似乎不起作用:

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

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

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

 Environment:
  Variables:
    USER: '{"name": "john", "surname": "galt"}'
如果要防止对每个请求解码json,请将解码逻辑移到处理程序之外,在这种情况下,lambda处于热状态时代码不会重新执行

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

了解


我个人会创建一个
json
文件,将其存储在s3 bucket中,并使用环境变量指定该文件的
s3url
。此外,根据检索
config
文件时的情况,使用我上面提到的相同技术,或者使用更复杂的缓存机制,我认为这是唯一一种太糟糕的方法。如果我必须为每个请求解码一个yaml字符串,这会破坏性能,对吗?在lambda中对每个请求进行yaml或json解码真的很糟糕吗?@red888如果你想阻止对每个请求进行解码,请将代码移到处理程序之外,请参阅更新的答案这是如何工作的?处理程序是入口点,对吗?我是否在处理程序外部定义函数并在处理程序内部调用它?