Optional Parameter in AWS CloudFormation Stack YAML

Optional Parameter in AWS CloudFormation Stack YAML
Photo by eberhard 🖐 grossgasteiger / Unsplash

The following YAML CloudFormation stack creates an EBS volume returning its reference for further usage in a higher level template.

I’ve chosen to use the value “false” for SnapshotId when I have no desire to restore from a previously created snapshot.

Description: create an EBS data volume

Parameters:
    DiskSize:
        Description: Disk size in GB
        Type: Number
        Default: 10

    SnapshotId:
        Description: Snapshot from where to restore the disk
        Type: String
        Default: false

Conditions:
    IsNewDisk: !Equals [ !Ref SnapshotId, false ]

Resources:
    EBSVolume:
        Type: AWS::EC2::Volume
        Properties:
            VolumeType: gp2
            Size: !Ref DiskSize
            SnapshotId: 
                Fn::If:
                - IsNewDisk
                - Ref: AWS::NoValue
                - Ref: SnapshotId
            AvailabilityZone: !Select [ 0, !GetAZs ]

Outputs:
    EBSVolume:
        Value: !Ref EBSVolume

The two relevant pieces of information are Fn::If and AWS::NoValue. And it was not easy to find out about them in the documentation.

I found out about the AWS::NoValue from this post, but the syntax refers to JSON and I am using YAML. I’m no expert in that so it has been no easy to put together the condition with nested functions.

I have finally found the last piece of relevant information in this AWS documentation page which is not about conditionals, but just about pseudo parameters.