【问题标题】:How do I assign an EC2 instance to a fixed IP address within a subnet?如何将 EC2 实例分配给子网内的固定 IP 地址?
【发布时间】:2021-01-20 13:27:04
【问题描述】:

我正在使用 CloudFormation 来定义子网和 EC2 实例。我想为 EC2 实例分配一个特定的私有 IP 地址,并尝试使用以下资源定义来执行此操作。

当我尝试部署我的模板时,NetworkInterface 资源的创建失败并显示消息'地址在子网的保留地址范围内'。我试图解决这个问题,但没有取得进展。如何使用可应用于我的 EC2 实例的一系列私有 IP 地址来定义我的子网?

谢谢。

注意:整个模板包含其他资源,因此我尝试将其简化为重要组件,因此以下故意不完整。

"SharedVPC": {
  "Type": "AWS::EC2::VPC",
  "Properties": {
      "CidrBlock": "10.10.0.0/16",
      "EnableDnsHostnames": true,
      "EnableDnsSupport": true,
      "InstanceTenancy": "default"
  }
},

"SharedVPCPrivateSubnet1": {
  "Type": "AWS::EC2::Subnet",
  "Properties": {
      "AvailabilityZone": "eu-west-1a",
      "CidrBlock": "10.10.129.0/24",
      "MapPublicIpOnLaunch": false,
      "VpcId": {
          "Ref": "SharedVPC"
      }
  }
},

"DbServerEC2Instance": {
  "Type": "AWS::EC2::Instance",
  "Properties": {
    "KeyName": "WindowsEC2",
    "InstanceType": "t2.micro",
    "AvailabilityZone": "eu-west-1a",
    "ImageId": {
      "Ref": "DbServerEC2ImageAMI"
    },
    "IamInstanceProfile": {
      "Ref": "EC2InstanceProfile"
    },
    "NetworkInterfaces": [{
      "NetworkInterfaceId": {
        "Ref": "DbServerEC2InstanceNetworkInterface"
      },
      "DeviceIndex" : "0"
    }]
  }
},

"DbServerEC2InstanceNetworkInterface": {
  "Type": "AWS::EC2::NetworkInterface",
  "Properties": {
    "Description": "eth0",
    "PrivateIpAddresses": [{
        "PrivateIpAddress": "10.10.129.2",
        "Primary": "true"
      },
      {
        "PrivateIpAddress": "10.10.129.3",
        "Primary": "false"
      }
    ],
    "SourceDestCheck": "true",
    "SubnetId": {
      "Ref": "SharedVPCPrivateSubnet1"
    }
  }
}

【问题讨论】:

    标签: amazon-web-services amazon-ec2 amazon-cloudformation


    【解决方案1】:

    AWS 保留子网的前 4 个 IP 地址和最后一个 IP。子网中的这些范围不可用。

    AWS documentation 声明如下:

    每个子网 CIDR 块中的前四个 IP 地址和最后一个 IP 地址不可供您使用,也不能分配给实例。例如,在 CIDR 块为10.0.0.0/24 的子网中,保留以下五个 IP 地址:

    • 10.0.0.0:网络地址。
    • 10.0.0.1:AWS 为 VPC 路由器预留。
    • 10.0.0.2:由 AWS 保留。 DNS 服务器的 IP 地址是 VPC 网络范围的基础加 2。对于具有多个 CIDR 块的 VPC,DNS 服务器的 IP 地址位于主 CIDR 中。我们还为 VPC 中的所有 CIDR 块保留每个子网范围的基数加上两个。有关更多信息,请参阅 Amazon DNS 服务器。
    • 10.0.0.3:由 AWS 保留以供将来使用。
    • 10.0.0.255:网络广播地址。我们不支持 VPC 中的广播,因此我们保留此地址。

    【讨论】:

    • 啊,我以为我的子网上缺少一些配置,难怪我很难找到它——问正确的问题!谢谢。现在就试试吧。
    • 没问题,从技术上讲,第一个和最后一个实际上都是由任何网络保留的。其他 3 个是特定于 AWS 的
    • 离开保留范围后,我发现我确实可以从可用 IP 中选择并分配它们,而无需告诉 AWS 这是我的意图,因为我认为我需要这样做。太好了,谢谢你这个非常简单的解释:-)
    • 我确实缺少模板中的“DeviceIndex”设置,所以我编辑了我的问题以包含它;以防万一有人尝试使用我的 EC2 实例定义
    猜你喜欢
    • 1970-01-01
    • 2021-04-19
    • 1970-01-01
    • 2015-07-29
    • 2013-11-01
    • 2020-04-21
    • 1970-01-01
    • 2014-09-16
    • 2017-12-08
    相关资源
    最近更新 更多