如何将嵌套的JSON对象从CloudFormation传递给Lambda函数?

时间:2019-03-22 19:32:04

标签: aws-lambda amazon-cloudformation boto3 aws-ssm

从通过CloudFormation Stack部署的Automation SSM文档中,我触发Lambda函数CopyToMultipleAccountsLambdaFunction和CopyToMultipleRegionsLambdaFunction。它们接收格式错误的有效负载,这会使lambda函数失败。

确切的错误如下:

Could not parse request body into json: Unexpected character ('9' (code 57)): was expecting comma to separate Array entries at [Source: (byte[])"{"MetadataJSON":["{"MyAccountNo":"eu-central-1,eu-west-1,eu-west-2"}"],"AmiIDParamName":"/GoldenAMI/OperatingSystemName-OperatingSystemVersion/ProductName-ProductVersion/1", "MetadataParamName":"/GoldenAMI/OperatingSystemName-OperatingSystemVersion/ProductName-ProductVersion/1/temp"}"; line: 1, column: 22] (Service: AWSLambda; Status Code: 400; Error Code: InvalidRequestContentException

与我已部署的管道中传递给lambda函数的所有其他有效负载的唯一区别是缺少参数MetadataJSON。此参数的值是一种JSON对象。 (我说这有点像“关键”:“价值”似乎很奇怪……)

基于AWS Golden Image Pipeline Guide,我传递的值(纯粹出于测试目的)如下

"MetadataJSON":{
  "Type":"String",
  "Default":"{\"MyAccountNumber\":\"eu-central-1,eu-west-1,eu-west-2\"}",
  "Description": "Metadata of accounts and regions for distributing the golden AMI."
},

您可以找到两个lambda函数herehere的代码

这两个lambda函数的触发器由Automation SSM文档CopyAndShare给出,您可以找到here

我在线阅读了一个潜在的解决方法是将对象封装在[]构造中。我尝试过,但是它不起作用,Lambda引发的错误是“未知”。

0 个答案:

没有答案