从已通过 CloudFormation Stack 部署的自动化 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 函数的触发器由 Automation SSM Document CopyAndShare 提供,您可以在此处找到
我在网上阅读了一个潜在的解决方案是将对象封装在 [ ] 构造中。我试过了,但它不起作用,并且 Lambda 引发的错误是未知的。