Optional Parameter in AWS CloudFormation Stack YAML
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 EBSVolumeThe 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.