What does the AWS CDK Diff command do
Tags: aws, cdk, awscdk, iac
Published: 2023-11-29 08:48:25

---
title: What does the AWS CDK Diff command do
published: true
date: 2023-03-20 11:56:03 UTC
tags: #aws #cdk #awscdk #iac
canonical_url: https://blog.mikaeels.com/what-does-the-aws-cdk-diff-command-do
---

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/x5rt9mum6n60vld73z4r.jpeg)

### Introduction

The AWS Cloud Development Kit (CDK) is an open-source software development framework that simplifies the process of creating, deploying and managing AWS infrastructure. It enables developers to use familiar programming languages such as TypeScript, Python, Java, and C# to define reusable cloud components and provision them using AWS CloudFormation.

One of the commands that the AWS CDK offers is the `cdk diff` command. In this blog post, we'll delve into the `cdk diff` command, its purpose, and how it can help you manage your infrastructure with ease. We will also explore practical examples to illustrate its utilizations.

### What is the CDK Diff?

The `cdk diff` command is a part of the AWS CDK CLI and helps developers identify the differences between the current AWS CDK application state and the deployed state in AWS CloudFormation. This comparison can be useful in various scenarios, such as validating changes before deployment, auditing infrastructure modifications, or reviewing pull requests in collaborative projects.

The command provides a clear and concise output, showing the differences between your local and deployed resources, properties, and settings.

### How to use CDK Diff?

To use the `cdk diff` command, first, ensure that you have the AWS CDK CLI installed. If you don't have it installed, you can follow the official AWS CDK installation guide.

Once the AWS CDK CLI is installed, navigate to your CDK project directory and run the following command

```
cdk diff

```

This command will display the differences between your local AWS CDK application and the deployed AWS CloudFormation stack. The output will show added, modified, or removed resources, as well as changes in their properties.

### Examples

Let's consider a simple example to understand how the `cdk diff` command works. We'll use TypeScript for this example, but the concepts apply to other programming languages as well.

1. **Creating a new CDK project**

```
cdk init app --language typescript

```

1. **Adding an Amazon S3 bucket to your CDK stack**

Modify the file `lib/your_stack_name-stack.ts` and add the following code snippet

```
import { Stack, StackProps} from 'aws-cdk-lib';
import { Bucket, RemovalPolicy } from 'aws-cdk-lib/aws-s3';

export class YourStackNameStack extends Stack {
  constructor(scope: cdk.App, id: string, props?: StackProps) {
    super(scope, id, props);

    new Bucket(this, 'MyFirstBucket', {
      versioned: true,
      removalPolicy: RemovalPolicy.DESTROY,
    });
  }
}

```

1. **Deploy the CDK stack**

```
cdk deploy

```

Now, let's say you want to update the S3 bucket to enable server access logging. Modify the `lib/your_stack_name-stack.ts` file as follows

```
import { Stack, StackProps } from 'aws-cdk-lib';
import { Bucket, RemovalPolicy } from 'aws-cdk-lib/aws-s3';

export class YourStackNameStack extends Stack {
  constructor(scope: cdk.App, id: string, props?: StackProps) {
    super(scope, id, props);

    const loggingBucket = new Bucket(this, 'LoggingBucket', {
      removalPolicy: RemovalPolicy.DESTROY,
    });

    new Bucket(this, 'MyFirstBucket', {
      versioned: true,
      removalPolicy: RemovalPolicy.DESTROY,
      serverAccessLogsBucket: loggingBucket,
    });
  }
}

```

1. **Running the CDK Diff command**

Before deploying the changes, let's run the `cdk diff` command to inspect the differences between the local AWS CDK application and the deployed AWS CloudFormation stack

```
cdk diff

```

You should see an output similar to the following

```
Stack YourStackNameStack
Resources
[+] AWS::S3::Bucket LoggingBucket LoggingBucketA1B2C3D4
[-] AWS::S3::Bucket MyFirstBucket MyFirstBucketE5F6G7H8
[+] AWS::S3::Bucket MyFirstBucket MyFirstBucketI9J0K1L2
   [+] LoggingConfiguration
       [+] DestinationBucketName: {"Ref":"LoggingBucketA1B2C3D4"}

```

The output indicates the following changes:

- A new S3 bucket (LoggingBucket) has been added.

- The existing S3 bucket (MyFirstBucket) will be replaced with a new S3 bucket.

- The new S3 bucket (MyFirstBucket) will have a logging configuration pointing to the LoggingBucket.

1. **Deploying the changes**

Now that we've reviewed the differences using `cdk diff`, we can proceed to deploy the changes with the `cdk deploy` command

```
cdk deploy

```

This will update the AWS CloudFormation stack with the new resources and configurations.

### Conclusion

In this blog post, we've explored the importance and usage of the `cdk diff` command in the AWS CDK. The command serves as an efficient tool for managing and validating infrastructure changes before deployment, allowing you to catch potential issues early and maintain a clear understanding of your AWS infrastructure.

By incorporating `cdk diff` into your development workflow, you can maintain better control over your AWS resources, ensure that your infrastructure changes are consistent with your expectations, and improve collaboration in your team by reviewing infrastructure changes more effectively.