Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.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
如何将JSON作为参数传递给AWS Lambda_Json_Amazon Web Services_Aws Lambda_Amazon Sqs - Fatal编程技术网

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

如何将JSON作为参数传递给AWS Lambda,json,amazon-web-services,aws-lambda,amazon-sqs,Json,Amazon Web Services,Aws Lambda,Amazon Sqs,我有一个CloudFormation模板,它由一个Lambda函数组成,该函数从SQS队列读取消息 Lambda函数将从队列中读取消息,并使用JSON模板(我希望从外部注入)对其进行转换 我将为不同的产品部署不同的堆栈,并为每个产品提供用于转换的不同JSON模板 我有不同的选择,但无法决定哪一个更好 我可以在项目下编写所有JSON文件,并将它们打包在一起,然后将相关的JSON名称作为参数传递给lambda 我可以将JSON文件存储在S3上,并将S3URL传递给lambda,以便在运行时读取 我可

我有一个CloudFormation模板,它由一个Lambda函数组成,该函数从SQS队列读取消息

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

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

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

  • 我可以在项目下编写所有JSON文件,并将它们打包在一起,然后将相关的JSON名称作为参数传递给lambda
  • 我可以将JSON文件存储在S3上,并将S3URL传递给lambda,以便在运行时读取
  • 我可以将JSON文件存储在Dynamo DB上,并使用与2相同的方法从那里读取
  • 第一种似乎是更好的方法,因为我不需要每次执行lambda时都从外部文件读取。但我需要将所有模板打包在一起

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

    另一种方法是(我不确定是否可能)在部署时从S3 bucket或其他地方向Lambda注入JSON文件,Lambda函数将像环境变量一样读取它。

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

    如果您的模板比较大,并且您不想在运行时调用S3或DynamoDB,那么您可以在构建和部署堆栈之前编写一个简单的shell脚本,将正确的模板文件复制到lambda文件夹。通过这种方式,lambda被部署在一个包含代码和所需json模板的包中。

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


    如果您的模板比较大,并且您不想在运行时调用S3或DynamoDB,那么您可以在构建和部署堆栈之前编写一个简单的shell脚本,将正确的模板文件复制到lambda文件夹。通过这种方式,lambda被部署在一个包含代码和所需json模板的包中。

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


    我不确定这是否是最好的解决方案,但对于我的场景来说已经足够好了。

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

    我不确定这是不是最好的解决方案,但对我的场景来说已经足够好了