问题
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?
回答1:
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
回答2:
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];
}
来源:https://stackoverflow.com/questions/57213637/aws-cdk-fixed-logical-ids