goformation icon indicating copy to clipboard operation
goformation copied to clipboard

Parse fails when using a number as a Lambda environment value

Open jpeach opened this issue 1 year ago • 1 comments

I used goformation.ParseYAML() to parse a working CloudFormation template that has some Lambda resources. The parse files with the following error:

json: cannot unmarshal number into Go struct field Template.Resources of type string

In general, the parser seems to be more sensitive to the YAML types that the real CloudFormation service is, which I guess is reasonable. However, I tracked this down to a parsing issue in AWSLambdaFunction_Environment. AWSLambdaFunction_Environment defines Variables as map[string]string, but the CloudFormation docs imply that any type is allowed as a value, https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-lambda-function-environment.html

In my case, I have something like this:

Parameters:
  DataVolSize:
    Type: Number
    Description: >-
      Minimum: 100 GB
    Default: 100
    MinValue: 100
Resources:
  Initializer:
    Type: 'AWS::Lambda::Function'
    Properties:
      Environment:
        Variables:
          data_volume_size: !Ref DataVolSize
      Code:
        ZipFile: |-

So the JSON parsing that is done via goformation.ParseYAML() requires me to convert the value of data_volume_size to a string, but there doesn't seem to be a way to do that.

jpeach avatar Nov 27 '23 03:11 jpeach

Similarly I encountered the following error

json: cannot unmarshal string into Go struct field Template.Resources of type int

When running goformation.Open()

_, err := goformation.Open(path)
if err != nil {
    fmt.Println(err.Error())
}

On this Yaml

AWSTemplateFormatVersion: '2010-09-09'
Description: Lambda with timeout as string
Resources:
  LambdaWithTimeout:
    Type: AWS::Lambda::Function
    Properties:
      FunctionName: lambda-with-timeout
      Timeout: '60'
      Runtime: python3.12

Removing the quotes for Timeout ('60' > 60) resolves this issue. However, I believe both are valid Cloudformation templates.

lexhuismans avatar Jun 10 '24 11:06 lexhuismans