CDK生成的AWS::EC2::InternetGateway资源导出问题
解决CDK中VPC自动创建的IGW无法通过
internetGatewayId引用的问题 问题原因
用CDK的ec2.Vpc L2构造创建带公有子网的VPC时,CDK会自动生成AWS::EC2::InternetGateway资源,但vpc.internetGatewayId属性仅在手动创建IGW并通过vpc.addInternetGateway()关联的场景下才会被赋值。自动创建的IGW属于VPC构造的内部资源,不会暴露这个属性,所以直接访问会返回undefined。
解决方案:获取自动创建的IGW并导出
通过遍历VPC节点的子资源,找到底层的CfnInternetGateway实例,再通过其ref属性获取IGW ID并导出:
import * as cdk from 'aws-cdk-lib'; import * as ec2 from 'aws-cdk-lib/aws-ec2'; // 你的VPC构造代码 this.vpc = new ec2.Vpc(this, 'VPC', { cidr: CONFIG.REGIONAL_CONFIG[region].VPC_CIDR, maxAzs: CONFIG.REGIONAL_CONFIG[region].AVAILABILITY_ZONES, subnetConfiguration: [ { name: 'public', subnetType: ec2.SubnetType.PUBLIC, }, { name: 'private', subnetType: ec2.SubnetType.PRIVATE_WITH_NAT, }, { name: 'isolated', subnetType: ec2.SubnetType.PRIVATE_ISOLATED, }, ], }); // 查找VPC自动创建的CfnInternetGateway资源 const autoCreatedIgw = this.vpc.node.children.find( child => child instanceof ec2.CfnInternetGateway ) as ec2.CfnInternetGateway; // 导出IGW ID供其他栈使用 new cdk.CfnOutput(this, 'VpcInternetGatewayId', { value: autoCreatedIgw.ref, exportName: `${cdk.Stack.of(this).stackName}-InternetGatewayId`, });
验证
执行cdk synth后,检查cdk.out中的模板,会看到CfnOutput已正确关联到自动生成的IGW资源ID,其他栈可通过Fn.importValue()导入该导出值。
内容的提问来源于stack exchange,提问作者shnauzerr
相关产品推荐
相关产品推荐

