DEV Community

Cover image for Using Conditionals in AWS SAM to Customize Deployments
Márcio Coelho
Márcio Coelho

Posted on • Edited on

Using Conditionals in AWS SAM to Customize Deployments

As your serverless application evolves, you’ll often need to toggle resources, features, or settings based on the environment (e.g., dev, staging, production).

With AWS SAM, you can do this using CloudFormation-style conditionals, allowing you to dynamically include or exclude resources at deploy time.

In this post, we’ll cover:

  • Defining parameters and conditions
  • Using Conditions in your SAM template
  • Real-world examples like enabling the Powertools logger only in production

🧱 Step 1: Define Parameters

Start by adding environment-based parameters in your template.yml:

Parameters:
  Environment:
    Type: String
    Default: dev
    AllowedValues:
      - dev
      - staging
      - prod
Enter fullscreen mode Exit fullscreen mode

⚙️ Step 2: Define Conditions

Now use those parameters to define conditional logic:

Conditions:
  IsProd: !Equals [ !Ref Environment, prod ]
  IsLowEnv: !Or 
    - !Equals [ !Ref Environment, dev ]
    - !Equals [ !Ref Environment, qa ] 
Enter fullscreen mode Exit fullscreen mode

You can now use these conditions to control resources, properties, or behaviors in your SAM app.

🔧 Step 3: Use Conditions in Resources

Here’s an example of conditionally including a Powertools Logger layer only in production:

Resources:
  HelloWorldFunction:
    Type: AWS::Serverless::Function
    Properties:
      Handler: index.handler
      Runtime: nodejs22.x
      Environment:
        Variables:
          ENV: !Ref Environment
      Layers:
        - !If
          - IsProd
          - arn:aws:lambda:${AWS::Region}:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:24
          - !Ref "AWS::NoValue"
Enter fullscreen mode Exit fullscreen mode

💡 AWS::NoValue tells CloudFormation to omit the property entirely when the condition is false.

✅ Optional: Enable/Disable Features

You can also toggle entire resources or outputs:

Resources:
  TestFunction:
    Type: AWS::Serverless::Function
    Properties:
      Handler: index.handler
      Runtime: nodejs22.x
    Condition: IsLowEnv
Enter fullscreen mode Exit fullscreen mode

Conclusion

With AWS SAM Conditionals, you can:

  • Make templates more reusable across environments
  • Toggle resources, settings, and layers cleanly
  • Keep infrastructure lean and purposeful

Whether you're turning on debug logs in dev or enabling global tracing in prod, conditionals help you build smart, environment-aware serverless apps.

Top comments (0)