0
0
AwsHow-ToBeginner · 4 min read

How to Use Conditions in CloudFormation Templates

In AWS CloudFormation, use Conditions to control resource creation or property settings based on parameters or environment values. Define conditions in the Conditions section using intrinsic functions like Fn::Equals, then reference them in resources with Condition property.
📐

Syntax

The Conditions section defines boolean expressions that evaluate to true or false. Use intrinsic functions like Fn::Equals, Fn::And, Fn::Or, and Fn::Not to build conditions. Reference these conditions in resource definitions using the Condition property to control whether the resource is created or configured.

Parts explained:

  • Conditions: Section where you define named conditions.
  • Intrinsic functions: Functions to compare values or combine conditions.
  • Condition property: Used in resources to apply the condition.

yaml
Conditions:
  CreateProdResources:
    Fn::Equals:
      - Ref: EnvType
      - prod

Resources:
  MyBucket:
    Type: AWS::S3::Bucket
    Condition: CreateProdResources
    Properties:
      BucketName: my-prod-bucket
💻

Example

This example shows how to create an S3 bucket only if the environment parameter is set to prod. The condition CreateProdResources checks if the EnvType parameter equals prod. The bucket resource uses this condition to decide if it should be created.

yaml
AWSTemplateFormatVersion: '2010-09-09'
Parameters:
  EnvType:
    Type: String
    AllowedValues:
      - dev
      - prod
    Description: Environment type

Conditions:
  CreateProdResources:
    Fn::Equals:
      - Ref: EnvType
      - prod

Resources:
  MyBucket:
    Type: AWS::S3::Bucket
    Condition: CreateProdResources
    Properties:
      BucketName: my-prod-bucket

Outputs:
  BucketStatus:
    Description: Whether the bucket was created
    Value:
      Fn::If:
        - CreateProdResources
        - "Bucket created"
        - "Bucket not created"
Output
If EnvType is 'prod', the S3 bucket 'my-prod-bucket' is created and output shows 'Bucket created'. If EnvType is 'dev', the bucket is not created and output shows 'Bucket not created'.
⚠️

Common Pitfalls

Common mistakes when using conditions in CloudFormation include:

  • Not defining the condition in the Conditions section before referencing it in resources.
  • Using incorrect intrinsic functions or syntax errors in condition expressions.
  • Expecting conditions to control resource properties directly without using Fn::If for conditional property values.
  • Forgetting that conditions only control resource creation or deletion, not updates.
yaml
Wrong example:
Resources:
  MyBucket:
    Type: AWS::S3::Bucket
    Condition: UndefinedCondition  # This condition is not defined

Correct example:
Conditions:
  IsProd:
    Fn::Equals:
      - Ref: EnvType
      - prod

Resources:
  MyBucket:
    Type: AWS::S3::Bucket
    Condition: IsProd
📊

Quick Reference

ConceptDescriptionExample
Conditions SectionDefines named boolean expressionsConditions: IsProd: Fn::Equals: - Ref: EnvType - prod
Intrinsic FunctionsFunctions to build conditionsFn::Equals, Fn::And, Fn::Or, Fn::Not
Condition PropertyUsed in resources to apply conditionCondition: IsProd
Fn::IfConditional values for resource propertiesProperties: BucketName: Fn::If: - IsProd - 'prod-bucket' - 'dev-bucket'

Key Takeaways

Define conditions in the Conditions section using intrinsic functions like Fn::Equals.
Use the Condition property in resources to control their creation based on conditions.
Use Fn::If to set resource property values conditionally within resources.
Always define conditions before referencing them to avoid errors.
Conditions control resource creation but do not affect resource updates directly.