为EC2实例保留相同的IP地址

时间:2019-07-27 01:14:14

标签: amazon-web-services amazon-ec2

每次停止/启动实例时,EC2实例是否更改您实例的IP地址吗?有没有办法保持IP地址不变?

3 个答案:

答案 0 :(得分:7)

,有一种方法:Elastic IP Addressing

AWS实例默认情况下使用动态IP地址启动,这意味着每次服务器停止和重新启动时IP地址都会更改。在许多情况下,这是不希望的,因此用户还可以选择为服务器分配一个静态IP地址(也称为“弹性IP”)。 3


根据Amazon 12

  

弹性IP地址是为动态云计算设计的静态IPv4地址。弹性IP地址与您的AWS账户关联。使用弹性IP地址,可以通过将地址快速重新映射到帐户中的另一个实例来掩盖实例或软件的故障。

并且:

  

您可以免费拥有一个与正在运行的实例关联的弹性IP(EIP)地址。如果您将其他EIP与该实例相关联,则每小时将按比例向与该实例相关联的每个其他EIP收费。其他EIP仅在Amazon VPC中可用。


要配置静态IP地址:

  • 登录到AWS EC2仪表板。如果需要,请使用区域选择器 在右上角切换到启动实例的区域。
  • 在仪表板中选择实例。
  • 在左侧导航栏中,选择“网络和安全性->弹性IP”菜单项。
  • 单击“分配新地址”按钮。

有关设置的更多详细信息,请参见Allocating an Elastic IP Address Configure a static IP address

如果弹性IP地址未与运行中的实例相关联,或者与已停止的实例或未连接的网络接口相关联,则按小时收取小笔费用。费用按比例分配,并取决于地区;详细信息可以在Amazon EC2 Pricing上找到。

答案 1 :(得分:3)

获取一个EIP(弹性IP ),该EIP在实例运行时是免费的,但在实例停止时需要付费。

https://docs.aws.amazon.com/ko_kr/AWSEC2/latest/UserGuide/elastic-ip-addresses-eip.html

答案 2 :(得分:1)

弹性IP的名称为limitations

如果您在一个区域内已达到最大的弹性IP地址数量,而您想要的只是一种恒定的方式来连接到EC2实例,那么我建议您使用route53记录而不是IP地址。

我创建一个route53记录,该记录指向我的EC2实例的IP地址。停止EC2时,记录不会更改。

使记录指向EC2地址的方法是通过running a script that changes the route53 record when the EC2 launches

这是我的EC2的user data

Content-Type: multipart/mixed; boundary="//"
MIME-Version: 1.0

--//
Content-Type: text/cloud-config; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment; filename="cloud-config.txt"

#cloud-config
cloud_final_modules:
- [scripts-user, always]

--//
Content-Type: text/x-shellscript; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment; filename="userdata.txt"

#!/bin/bash

# get the public ip address
# Ref: https://stackoverflow.com/questions/38679346/get-public-ip-address-on-current-ec2-instance
export public_ip=$(curl http://169.254.169.254/latest/meta-data/public-ipv4)

cat <<EOF > input.json
{
  "Comment": "optional comment about the changes in this change batch request",
  "Changes": [
    {
      "Action": "UPSERT",
      "ResourceRecordSet": {
        "Name": "my-domain.my-company.com",
        "Type": "A",
        "TTL": 300,
        "ResourceRecords": [
          {
            "Value": "${public_ip}"
          }
        ]
      }
    }
  ]
}
EOF

# change route53 record 
/usr/bin/aws route53 change-resource-record-sets \
  --hosted-zone-id <hosted_zone_of_my-company.con> \
  --change-batch file://input.json >
--//

在这里,我将my-domain.my-company.com用作EC2的route53记录。

通过使用此方法,您将获得一个指向EC2实例的route53记录。停止并启动EC2时,记录不会更改。因此,您始终可以使用route53记录连接到EC2。

请记住为EC2实例分配一个具有route53权限的IAM角色,以便您可以正确运行用户数据。

请记住,我提供的用户数据旨在用于Amazon Linux 2,并且这些命令可能不适用于其他Linux发行版。