如何将 JSON 作为参数传递给 AWS Lambda
How do I Pass JSON as a parameter to AWS Lambda
我有一个 CloudFormation 模板,它包含一个从 SQS 队列读取消息的 Lambda 函数。
Lambda 函数将从队列中读取消息并使用 JSON 模板转换它(我希望它从外部注入)
我将为不同的产品部署不同的堆栈,并且为每个产品提供不同的 JSON 模板以用于转换。
我有不同的选择,但无法决定哪个更好;
- 我可以把所有的JSON文件都写到项目下打包在一起,然后把相关的JSON名字作为参数传给lambda
- 我可以在 S3 上存储 JSON 文件并将 S3 URL 传递给 lambda,这样我就可以在运行时读取。
- 我可以将 JSON 文件存储在 Dynamo DB 上,并使用与 2
相同的方法从那里读取
第一个似乎是更好的方法,因为我不需要在每次执行 lambda 时都从外部文件中读取。但我需要将所有模板打包在一起。
最后两个是更清晰的方法,但每次调用都需要外部调用来读取 JSON。
另一种方法可能是(我不确定是否可能)在从 S3 存储桶或某物部署时将 JSON 文件注入 Lambda。 Lambda 函数会像读取环境变量一样读取它。
从cloudformation documentation中可以看出,Lambda 环境变量只能是字符串映射,因此您可以作为环境变量传递给函数的实际值必须是字符串。您可以将 JSON 作为字符串传递,但问题是所有环境变量的最大大小为 4 KB。
如果您的模板更大并且您不想在运行时调用 S3 或 DynamoDB,您可以采取一种解决方法,例如编写一个简单的 shell 脚本,在构建之前将正确的模板文件复制到 lambda 文件夹并部署堆栈。这样,lambda 就可以部署在一个包中,其中包含代码和所需的 json 模板。
我决定使用 S3 设置并通过将 Json 存储在全局变量上(在第一次读取之后)来提高效率。所以我只读了一次,就在 Lambda 容器的整个生命周期内使用它。
我不确定这是最好的解决方案,但对我的情况来说效果很好。
我有一个 CloudFormation 模板,它包含一个从 SQS 队列读取消息的 Lambda 函数。
Lambda 函数将从队列中读取消息并使用 JSON 模板转换它(我希望它从外部注入)
我将为不同的产品部署不同的堆栈,并且为每个产品提供不同的 JSON 模板以用于转换。
我有不同的选择,但无法决定哪个更好;
- 我可以把所有的JSON文件都写到项目下打包在一起,然后把相关的JSON名字作为参数传给lambda
- 我可以在 S3 上存储 JSON 文件并将 S3 URL 传递给 lambda,这样我就可以在运行时读取。
- 我可以将 JSON 文件存储在 Dynamo DB 上,并使用与 2 相同的方法从那里读取
第一个似乎是更好的方法,因为我不需要在每次执行 lambda 时都从外部文件中读取。但我需要将所有模板打包在一起。
最后两个是更清晰的方法,但每次调用都需要外部调用来读取 JSON。
另一种方法可能是(我不确定是否可能)在从 S3 存储桶或某物部署时将 JSON 文件注入 Lambda。 Lambda 函数会像读取环境变量一样读取它。
从cloudformation documentation中可以看出,Lambda 环境变量只能是字符串映射,因此您可以作为环境变量传递给函数的实际值必须是字符串。您可以将 JSON 作为字符串传递,但问题是所有环境变量的最大大小为 4 KB。
如果您的模板更大并且您不想在运行时调用 S3 或 DynamoDB,您可以采取一种解决方法,例如编写一个简单的 shell 脚本,在构建之前将正确的模板文件复制到 lambda 文件夹并部署堆栈。这样,lambda 就可以部署在一个包中,其中包含代码和所需的 json 模板。
我决定使用 S3 设置并通过将 Json 存储在全局变量上(在第一次读取之后)来提高效率。所以我只读了一次,就在 Lambda 容器的整个生命周期内使用它。
我不确定这是最好的解决方案,但对我的情况来说效果很好。