Skip to content

[cdk diff] Modifications to stack-level tags do not surface in cdk diff results, leading to unexpected updates #1960

Description

@norcroj

Describe the bug

When you make a change to a stack-level tag in CDK, cdk diff returns There were no differences even though changes to stack-level tags do in fact results in updates to resources. This results in inaccurate diff results that can lead to unexpected updates.

In comparison - When you make a change to a stack-level tag and then create a CloudFormation ChangeSet, CloudFormation does report this as a change. It lists a Modify operation for all supported resources.

The cdk diff command creates (and then immediately deletes) a CloudFormation ChangeSet, and this ChangeSet does accurately report the Modify behavior, but the actual cdk diff results in the CDK CLI still returns no differences despite this. I have provided screenshots of this below.

CloudFormation ChangeSet:

Image

CDK Diff Results:

Image

In other words, this doesn't appear to be an issue or limitation with the CloudFormation ChangeSet behavior. This specifically looks like a limitation with how CDK diff parses and returns ChangeSet results when stack-level tags are involved.

Regression Issue

  • Select this option if this issue appears to be a regression.

Last Known Working CDK Version

No response

Expected Behavior

CDK diff should accurately report changes to resources when changes are made to stack-level tags.

Current Behavior

CDK diff incorrectly returns "There were no differences" despite the CloudFormation ChangeSet reporting differences.

Reproduction Steps

  1. Create a CDK stack. As an example, I made one that just creates an SNS topic:
import * as cdk from 'aws-cdk-lib/core';
import * as sqs from 'aws-cdk-lib/aws-sqs';
import { Construct } from 'constructs';


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

    new sqs.Queue(this, 'Queue');
  }
}
  1. Define one or more stack tags. For example:
#!/usr/bin/env node
import * as cdk from 'aws-cdk-lib/core';
import { CdkDiffReplicationStack } from '../lib/cdk_diff_replication-stack';

const app = new cdk.App();

new CdkDiffReplicationStack(app, 'CdkDiffReplicationStack', {
  // Specialize for the account/region from the current CLI configuration.
  env: {
    account: process.env.CDK_DEFAULT_ACCOUNT,
    region: process.env.CDK_DEFAULT_REGION,
  },

  // stack-level tag
  tags: {
    DiffReplicationTag: 'Original',
  },
});
  1. Deploy the stack
  2. Make a change to the stack-level tag in the CDK code:
  tags: {
    DiffReplicationTag: 'Changed', //<---Changed the value
  },
  1. Run CDK diff - Observe that the command returns There were no differences.
  2. In the CloudFormation console, manually create a CloudFormation ChangeSet. Use the same template but change the value of the stack-level tag. Observe that CloudFormation does report changes for these resources.

Possible Solution

No response

Additional Information/Context

No response

CDK CLI Version

2.1141.0

Framework Version

No response

Node.js Version

v24.14.0

OS

Windows 10

Language

TypeScript

Language Version

No response

Other information

No response

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions