aws-cloudformation / cfn-lint

CloudFormation Linter
MIT No Attribution
2.4k stars 576 forks source link

Since 1.3.0 Update Template Takes 30+ Minutes or fails to finish linting (redux of old issue #2874) #3356

Closed randybasrs closed 2 weeks ago

randybasrs commented 2 weeks ago

CloudFormation Lint Version

1.3.0

What operating system are you using?

Windows/AWS Serverless

Describe the bug

An issue that was previously fixed has cropped back up. Below is a copy/paste from the last ticket on this matter but the symptoms exhibited are the exact same and on our previous version 0.80.1 it was working fine. The more conditions are in this particular template the longer the amount of time it takes to execute as well. It seems exponential as the first condition is instantaneous and subsequent ones are longer and longer.

A template that used to lint in 1.5 seconds now doesn't complete or completes in around 30 minutes.

This is an issue that was previously fixed in #2874

Expected behavior

To complete linting in a reasonable time frame for supported configurations and properly lint the values inside the conditions. In this case I would prefer under 1 minute of execution but in versions of cfn-lint before 0.76.0 it completes in about 1.5 seconds and properly lints the values inside of the conditions.

Reproduction template

CORP::EC2::EC2::MODULE

AWSTemplateFormatVersion: 2010-09-09 Parameters: name: Description: The name tag for the EC2 instance. Type: String Default: "" imageId: Description: Base AMI for the EC2 instance. Type: AWS::EC2::Image::Id Default: "" instanceType: Description: EC2 instance type. Type: String Default: r5.large subnetId: Description: The ID of the subnet to launch the instance into. Type: String Default: "" osVolumeSize: Description: Size of the volume that has the OS. Type: Number Default: 120 securityGroupIds: Description: The IDs of the security groups. Type: List Default: "" instanceKeyName: Type: String Description: Key pair name Default: kpnamegoeshere ebsOptimized: Type: String Description: Indicates whether the instance is optimized for Amazon EBS I/O. Default: false numberOfAdditionalVolumes: Description: Additional volumes in addition to OS volume. Max is 25. Type: Number MaxValue: 25 Default: 0 volume2Size: Description: Size of volume 2 Type: Number Default: 40 volume3Size: Description: Size of volume 3 Type: Number Default: 40 volume4Size: Description: Size of volume 4 Type: Number Default: 40 volume5Size: Description: Size of volume 5 Type: Number Default: 40 volume6Size: Description: Size of volume 6 Type: Number Default: 40 volume7Size: Description: Size of volume 7 Type: Number Default: 40 volume8Size: Description: Size of volume 8 Type: Number Default: 40 volume9Size: Description: Size of volume 9 Type: Number Default: 40 volume10Size: Description: Size of volume 10 Type: Number Default: 40 volume11Size: Description: Size of volume 11 Type: Number Default: 40 volume12Size: Description: Size of volume 12 Type: Number Default: 40 volume13Size: Description: Size of volume 13 Type: Number Default: 40 volume14Size: Description: Size of volume 14 Type: Number Default: 40 volume15Size: Description: Size of volume 15 Type: Number Default: 40 volume16Size: Description: Size of volume 16 Type: Number Default: 40 volume17Size: Description: Size of volume 17 Type: Number Default: 40 volume18Size: Description: Size of volume 18 Type: Number Default: 40 volume19Size: Description: Size of volume 19 Type: Number Default: 40 volume20Size: Description: Size of volume 20 Type: Number Default: 40 volume21Size: Description: Size of volume 21 Type: Number Default: 40 volume22Size: Description: Size of volume 22 Type: Number Default: 40 volume23Size: Description: Size of volume 23 Type: Number Default: 40 volume24Size: Description: Size of volume 24 Type: Number Default: 40 volume25Size: Description: Size of volume 25 Type: Number Default: 40 volume26Size: Description: Size of volume 26 Type: Number Default: 40 Conditions: hasVolume26: !Equals

randybasrs commented 2 weeks ago

I see this has been merged and after running 1.3.2 I can confirm it indeed does finish linting in a very fast time.

Thank you so much for your continued support on this.