重新启动后更改EC2实例的IP地址

S_K*_*S_K 2 cloud amazon-ec2 amazon-web-services

我正在运行EC2 Linux实例。为了进行一些维护,我关闭了实例,然后再次启动它。但是,EC2 IP现在已更改。

停止并重新启动后,如何保持Amazon EC2实例的IP地址不变?

Bri*_*ian 9

弹性IP有其局限性

如果您已达到某个区域中弹性 IP 地址的最大数量,并且您想要的只是以恒定的方式连接到 EC2 实例,我建议使用 Route53 记录而不是使用 IP 地址。

我创建了一条指向我的 EC2 实例的 IP 地址的 Route53 记录。EC2 停止时记录不会更改。

保持记录指向 EC2 地址的方法是运行一个脚本,在 EC2 启动时更改 Route53 记录

这是我的 EC2 的用户数据:

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: /sf/ask/2707554251/
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.com> \
  --change-batch file://input.json
--//
Run Code Online (Sandbox Code Playgroud)

这里我使用my-domain.my-company.com作为我的EC2的route53记录。

另请记住替换<hosted_zone_of_my-company.com>为您的托管区域的 ID。

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

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

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

如果curl http://169.254.169.254/latest/meta-data/public-ipv4不适用于您的 EC2。你可以尝试一下curl http://checkip.amazonaws.com


Sri*_*nth 7

是的你可以。

转到Elastic IP并创建一个。

然后选择新创建的Elastic IP并选择Associate弹性 IP,然后选择Instance ID要将其关联到的 IP。

就是这样。即使您重新启动 EC2,现在也会分配 IP。

请注意,AWS对每个弹性 IP 收取0.005 美元/小时的费用,对于每月超过 100 次的额外重新映射,每个弹性 IP 地址重新映射收取 0.10 美元的费用


小智 6

实际上,当您停止/启动实例时,IP地址将更改。如果重新启动实例,它将保留相同的IP地址。不幸的是,我们无法将地址重新分配给您的实例,因为该地址将被释放回其他EC2实例使用的池中。

如果您希望将来避免出现此问题,请根据需要:

  • 如果仅需要固定的公共IP地址,则可以为实例分配弹性IP地址。
  • 如果在实例的整个生命周期中都需要公共IP地址和私有IP地址保持不变,则可以在VPC中启动实例。在VPC中分配给实例的专用IP地址将一直保留到实例直到终止。

要了解更多信息,请参阅aws文档以分配elastic ip

  • 请注意,如果您通过公共 IP 进行通信,则需要支付流量费用。通过私有 IP 进行的通信是免费的。 (2认同)