如何将 JSON 作为参数传递给 AWS Lambda

How do I Pass JSON as a parameter to AWS Lambda

我有一个 CloudFormation 模板,它包含一个从 SQS 队列读取消息的 Lambda 函数。

Lambda 函数将从队列中读取消息并使用 JSON 模板转换它(我希望它从外部注入)

我将为不同的产品部署不同的堆栈,并且为每个产品提供不同的 JSON 模板以用于转换。

我有不同的选择,但无法决定哪个更好;

  1. 我可以把所有的JSON文件都写到项目下打包在一起,然后把相关的JSON名字作为参数传给lambda
  2. 我可以在 S3 上存储 JSON 文件并将 S3 URL 传递给 lambda,这样我就可以在运行时读取。
  3. 我可以将 JSON 文件存储在 Dynamo DB 上,并使用与 2
  4. 相同的方法从那里读取

第一个似乎是更好的方法,因为我不需要在每次执行 lambda 时都从外部文件中读取。但我需要将所有模板打包在一起。

最后两个是更清晰的方法,但每次调用都需要外部调用来读取 JSON。

另一种方法可能是(我不确定是否可能)在从 S3 存储桶或某物部署时将 JSON 文件注入 Lambda。 Lambda 函数会像读取环境变量一样读取它。

cloudformation documentation中可以看出,Lambda 环境变量只能是字符串映射,因此您可以作为环境变量传递给函数的实际值必须是字符串。您可以将 JSON 作为字符串传递,但问题是所有环境变量的最大大小为 4 KB。

如果您的模板更大并且您不想在运行时调用 S3 或 DynamoDB,您可以采取一种解决方法,例如编写一个简单的 shell 脚本,在构建之前将正确的模板文件复制到 lambda 文件夹并部署堆栈。这样,lambda 就可以部署在一个包中,其中包含代码和所需的 json 模板。

我决定使用 S3 设置并通过将 Json 存储在全局变量上(在第一次读取之后)来提高效率。所以我只读了一次,就在 Lambda 容器的整个生命周期内使用它。

我不确定这是最好的解决方案,但对我的情况来说效果很好。