首页 > 解决方案 > 如何让 CDK 仅创建一个弹性 IP 地址以用于单个 EC2 实例 (AWS CDK)

问题描述

我正在尝试使用 AWS CDK 创建一个堆栈,该堆栈将部署单个 EC2 实例,创建一个弹性 IP,然后将其与该实例相关联。(MVP)

由于我不明白的原因,为我的 EC2 实例所在的 VPC 的每个公共子网创建了一个弹性 IP。我希望只创建一个,而不是三个。

下面是我的简化代码:

const vpc = new Vpc(this, 'VPC');
const securityGroup = new SecurityGroup(this, 'SecurityGroup', {
  vpc,
});
const ec2Instance = new Instance(this, 'EC2Instance', {
  vpc,
  instanceType: new InstanceType('t2.small'),
  machineImage: ubuntuImage, // searched for elsewhere
  keyName: 'keynamehere',
  vpcSubnets: { subnets: [vpc.publicSubnets[0]] },
});
const eip = new CfnEIP(this, 'Server IP', {
  instanceId: ec2Instance.instanceId,
});

我尝试在 CfnEIP 中使用“instanceID”属性的 CfnEIPAssociation 实例,但仍然遇到同样的问题。

有什么建议么?

标签: typescriptamazon-ec2amazon-vpcaws-cdkelastic-ip

解决方案


(抱歉,这是解决它几个月后)

我相信问题是 vpcSubnets 字段,下面是我今天的工作代码

const ec2Instance = new Instance(this, "Instance", {
      vpc: supportStack.vpc,
      instanceType: new InstanceType("t2.nano"),
      machineImage: ubuntuImage,
      securityGroup: supportStack.securityGroup,
      vpcSubnets: { subnetType: SubnetType.PUBLIC }, // 
      userData,
    });
    supportStack.bucket.grantRead(ec2Instance);
    new CfnEIPAssociation(this, "ElasticIpAssociation", {
      eip: eip.ref,
      instanceId: ec2Instance.instanceId,
    });

推荐阅读