如何在AWS CDK中创建VPC接口终端时指定带固定IP的私有子网
解决AWS CDK创建Interface VPC Endpoint时指定带固定IP的子网问题
1. 仅指定特定子网(不设置固定IP)
如果只是需要选择特定子网(比如按ID、标签筛选),可以通过vpc.selectSubnets()构造SubnetSelection对象,传入subnets参数:
// 按子网ID筛选目标子网 const targetSubnets = vpc.selectSubnets({ subnetIds: ['subnet-0123456789abcdef0', 'subnet-0abcdef1234567890'] // 替换为你的子网ID }); // 也可按标签筛选(示例:匹配标签Key为"Purpose"、Value为"VPCE-FixedIP"的子网) // const targetSubnets = vpc.selectSubnets({ // tags: { Purpose: 'VPCE-FixedIP' } // }); const vpce = vpc.addInterfaceEndpoint('interface-endpoint', { service: InterfaceVpcEndpointAwsService.S3, securityGroups: [securityGroup], privateDnsEnabled: false, subnets: targetSubnets // 指定筛选后的子网 }); Tags.of(vpce).add('vpceName', vpceName);
2. 指定子网并配置固定IP
由于AWS CDK高层的addInterfaceEndpoint方法未暴露固定IP配置参数,需要使用底层的CfnVPCEndpoint资源实现,对应你在UI中看到的指定IP选项:
import * as ec2 from 'aws-cdk-lib/aws-ec2'; // 定义要使用的子网与对应固定IP(IP需在子网CIDR范围内且未被占用) const subnetIpMap = [ { subnetId: 'subnet-0123456789abcdef0', privateIp: '10.0.1.10' }, { subnetId: 'subnet-0abcdef1234567890', privateIp: '10.0.2.10' } ]; // 创建底层CloudFormation VPCE资源 const cfnVpce = new ec2.CfnVPCEndpoint(this, 'InterfaceEndpointWithFixedIp', { vpcId: vpc.vpcId, serviceName: InterfaceVpcEndpointAwsService.S3.serviceName, vpcEndpointType: 'Interface', securityGroupIds: [securityGroup.securityGroupId], privateDnsEnabled: false, // 子网与固定IP需一一对应 subnetIds: subnetIpMap.map(item => item.subnetId), privateIpAddresses: subnetIpMap.map(item => item.privateIp) }); // 添加标签 Tags.of(cfnVpce).add('vpceName', vpceName);
内容的提问来源于stack exchange,提问作者Ibrahim
相关产品推荐
相关产品推荐

