Skip to content
This repository has been archived by the owner on Oct 17, 2024. It is now read-only.

Parse fails when using a number as a Lambda environment value #639

Open
jpeach opened this issue Nov 27, 2023 · 1 comment
Open

Parse fails when using a number as a Lambda environment value #639

jpeach opened this issue Nov 27, 2023 · 1 comment

Comments

@jpeach
Copy link

jpeach commented Nov 27, 2023

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.

@lexhuismans
Copy link

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.

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants