Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

AWS CDK: fixed logical ids

Currently logical ID of a resource is formed by concatenating the names of all of the constructs in the resource’s path and appending an eight-character MD5 hash.

This produces garbage like VpcPrivateSubnet1DefaultRouteBE02A9ED and unfortunatelly makes it unable to query the resources by their logical id.

Is there any way to control how logical ids are named?

like image 731
Łukasz Avatar asked Jul 26 '19 05:07

Łukasz


2 Answers

In TypeScript the method you are looking for is overrideLogicalId. But you have to get the lower level CfnVpc construct first by using the following code (TypeScript again):

 let vpc = new ec2.Vpc(this, 'vpc', { natGateways: 1 })
 let cfnVpc = vpc.node.defaultChild as ec2.CfnVPC
 cfnVpc.overrideLogicalId('MainVpc')

Results in the following yaml:

  MainVpc:
    Type: AWS::EC2::VPC
like image 191
quadroid Avatar answered Sep 17 '22 14:09

quadroid


A bit late to the party but here is my implementation. I removed the random characters at the end of the string and replaced it with the logical ID which are unique throughout the project.

protected allocateLogicalId(cfnElement: CfnElement): string {
  return cfnElement.logicalId.split('.')[1];
}

like image 20
Victor Coelho De Oliveira Avatar answered Sep 19 '22 14:09

Victor Coelho De Oliveira