我正在部署一个CDK堆栈,其中包括一个VPC,该VPC在AWS中具有静态弹性IP。
我想确保IP保持不变,即使我重新部署包含VPC的整个堆栈,因为我需要避免用户使用新的白名单IP(在部署时重新生成)更新他们的API密钥。
我目前正在使用下面的CDK代码“创建”弹性IP:
const natGatewayProvider = NatInstanceProvider.instance({
instanceType: new InstanceType('t3.micro')
});
const vpcFargate = new Vpc(stack, 'WhiteVpcFargate', {
vpcName: 'white-vpc-fargate',
natGateways: 1, // 👈 Automatically creates an Elastic IP
natGatewayProvider: natGatewayProvider,
maxAzs: 2
});
// I'm creating more EIPs and associating to that NAT
const allEIPs = natGatewayProvider.configuredGateways.map((nat, index) =>{
for(let i=0;i<3;i++){
new CfnEIP(stack, `NatInstanceEIP${index + 1}_${i}`, {
instanceId: nat.gatewayId,
tags: [
{ key: 'Name', value: `NatInstanceEIP${index + 1}_${i}` },
],
})
}
}
)
什么是确保弹性IP保持不变的最佳实践,即使在重新部署包含VPC的整个堆栈后?
我想我应该在不同的CDK堆栈中创建EIP,使用CLI手动创建它们,或者在云控制台上创建它们,然后以某种方式引用AWS CDK中NAT网关定义上的这些EIP,使用CfnEIPAssociation进行关联,但我不确定这是否是正确的路径。
1条答案
按热度按时间tcomlyy61#
可能不是最好的解决方案,但我最终创建了EIP,然后将它们与NAT相关联。
EIP创建的第一部分必须在CDK之外完成,因此我使用aws-sdk一次性NodeJs脚本。
弹性公网IP一次创建:
我运行这个方法,并使用输出中打印的AllocationIds来使用AWS CDK设置NAT网关。(如果您丢失了createElasticIPs方法的执行日志,您仍然可以通过AWS控制台看到每个EIP的AllocationId)。
CDK NAT网关定义:
也许我应该使用CDK来提取ID,而不是将它们设置为硬编码...
下面是CustomNatProvider的实现: