我正在运行EC2 Linux实例。为了进行一些维护,我关闭了实例,然后再次启动它。但是,EC2 IP现在已更改。
如何在停止后重新启动Amazon EC2实例的IP地址并保持不变?
答案 0 :(得分:4)
弹性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发行版。
答案 1 :(得分:3)
实际上,当您停止/启动实例时,IP地址将更改。如果重新启动实例,它将保留相同的IP地址。不幸的是,我们无法将地址重新分配给您的实例,因为该地址将被释放回其他EC2实例使用的池中。
如果您想根据需要避免以后再发生此问题:
要了解更多信息,请参见aws文档this。
答案 2 :(得分:1)
是的,可以。
转到Elastic IP
并创建一个。
然后选择新创建的Elastic IP
并选择Associate
弹性IP并选择要与之关联的Instance ID
。
就是这样。现在,即使重新启动EC2,也会分配IP。
请注意,AWS对每个弹性IP收取 0.005美元/小时,对于每月超过100次的其他重新映射,每个弹性IP地址重新映射收取0.10美元
答案 3 :(得分:0)
如果您不希望在停止和启动EC2实例后更改IP地址,请使用弹性IP 。
有关如何使用弹性IP的更多参考:
https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/elastic-ip-addresses-eip.html
答案 4 :(得分:0)
这取决于您所谈论的IP:
公共IP:尝试使用Elastic Ip,那么您将不再有此问题。您可以直接在AWS Console上或以编程方式为实例分配一个新实例。但是,如果您使用的是自动伸缩组,则必须在用户数据或cloud-init进程上进行。
私有IP:很遗憾,您无法将私有Ip地址固定到实例。唯一的方法是使用DNS,在这种情况下,将为您的VPC(https://docs.aws.amazon.com/fr_fr/vpc/latest/userguide/vpc-dns.html)使用私有DNS区域。在这种情况下,无需购买域名。
我还建议在第一种情况下,在您拥有域名的情况下使用DNS,而不是使用IP地址