DEV Community

Cover image for Consideration about cdk-notifier and Tags
Johannes Konings for AWS Community Builders

Posted on • Originally published at johanneskonings.dev on

Consideration about cdk-notifier and Tags

Use case

As described here Use cdk-notifier to compare changes in pull requests, the cdk-notifier displays the diff between the feature branch and the main branch. In case of using tags in the CDK there a two ways to tag resources, which will have different consequences in the diff output of the cdk-notifier.

Tagging with Tags.of()

The documentation of CDK describes the tagging of resources with the Tags.of() method: https://docs.aws.amazon.com/cdk/v2/guide/tagging.html This could look like this:

Tags.of(app).add('branch', branchName);

Enter fullscreen mode Exit fullscreen mode

https://github.com/JohannesKonings/cdk-notifier-examples/blob/746c2b2bc0ecc0ecf3e8f0e6ff771a7430a45d04/src/main.ts#L23

The tag will then be added to all resources in the synthesized cloudformation template.

{
 "Resources": {
  "TableCD117FA1": {
   "Type": "AWS::DynamoDB::Table",
   "Properties": {
    "AttributeDefinitions": [
     {
      "AttributeName": "id",
      "AttributeType": "S"
     }
    ],
    "BillingMode": "PAY_PER_REQUEST",
    "KeySchema": [
     {
      "AttributeName": "id",
      "KeyType": "HASH"
     }
    ],
    "TableName": "Table-tags-tags-of",
    "Tags": [
     {
      "Key": "branch",
      "Value": "tags-tags-of"
     }
    ]
   },
   ...
  }
 }
}

Enter fullscreen mode Exit fullscreen mode

Because the tag is in the template, it will then be shown in the diff.

diff tag of

https://github.com/JohannesKonings/cdk-notifier-examples/pull/5

Tagging with stack properties

The other way is to pass the tags as stack properties (https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.Stack.html#tags-1). This could look like this:

new CdkNotfifierFeatureStackExample(app, `cdk-notifier-feature-stacks-${branchName}`, {
  tags: {
    branch: branchName,
  },
});

Enter fullscreen mode Exit fullscreen mode

https://github.com/JohannesKonings/cdk-notifier-examples/blob/66874c06b8204b09781e9ad3ab8707590b948000/src/main.ts#L23

The tag will then be added to the stack properties and not to the template file.

{
 "Resources": {
  "TableCD117FA1": {
   "Type": "AWS::DynamoDB::Table",
   "Properties": {
    "AttributeDefinitions": [
     {
      "AttributeName": "id",
      "AttributeType": "S"
     }
    ],
    "BillingMode": "PAY_PER_REQUEST",
    "KeySchema": [
     {
      "AttributeName": "id",
      "KeyType": "HASH"
     }
    ],
    "TableName": "Table-tags-stack-properties",
   },
   ...
  }
 }
}

Enter fullscreen mode Exit fullscreen mode

In cdk.out the tags are only in the manifest.json file.

{
  "version": "36.0.0",
  "artifacts": {
    "cdk-notifier-feature-stacks-tags-stack-properties.assets": {
      "type": "cdk:asset-manifest",
      "properties": {
        "file": "cdk-notifier-feature-stacks-tags-stack-properties.assets.json",
        "requiresBootstrapStackVersion": 6,
        "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version"
      }
    },
    "cdk-notifier-feature-stacks-tags-stack-properties": {
      "type": "aws:cloudformation:stack",
      "environment": "aws://unknown-account/unknown-region",
      "properties": {
        "templateFile": "cdk-notifier-feature-stacks-tags-stack-properties.template.json",
        "terminationProtection": false,
        "tags": {
          "branch": "tags-stack-properties"
        },
        "validateOnSynth": false,
        ...
      }
    }
  }
}

Enter fullscreen mode Exit fullscreen mode

Then it will not be shown in the diff, and the cdk-notifier skip the pull request comment.

check the diff to main
Deploying with stack postfix main
Stack cdk-notifier-feature-stacks-main
Hold on while we create a read-only change set to get a diff with accurate replacement information (use --no-change-set to use a less accurate but faster template-only diff)
There were no differences

✨ Number of stacks with differences: 0

create cdk-notifier report
BRANCH_NAME: tags-stack-properties
GITHUB_OWNER: JohannesKonings
GITHUB_REPO: $(echo JohannesKonings/cdk-notifier-examples | cut -d'/' -f2)
time="2024-04-20T14:59:48Z" level=info msg="There is no diff detected for tag id diff-to-main. Skip posting diff."

Enter fullscreen mode Exit fullscreen mode

https://github.com/JohannesKonings/cdk-notifier-examples/actions/runs/8765869174/job/24057331666#step:6:55

Conclusion

If you want to see the tags in the diff output of the cdk-notifier, you should use the Tags.of() method to tag the resources. If not, you can go with the stack properties.

Code


Image of Timescale

🚀 pgai Vectorizer: SQLAlchemy and LiteLLM Make Vector Search Simple

We built pgai Vectorizer to simplify embedding management for AI applications—without needing a separate database or complex infrastructure. Since launch, developers have created over 3,000 vectorizers on Timescale Cloud, with many more self-hosted.

Read full post →

Top comments (0)

Best Practices for Running  Container WordPress on AWS (ECS, EFS, RDS, ELB) using CDK cover image

Best Practices for Running Container WordPress on AWS (ECS, EFS, RDS, ELB) using CDK

This post discusses the process of migrating a growing WordPress eShop business to AWS using AWS CDK for an easily scalable, high availability architecture. The detailed structure encompasses several pillars: Compute, Storage, Database, Cache, CDN, DNS, Security, and Backup.

Read full post