我有一个复杂的用例,
但简而言之,在实例运行时,我可以将弹性IP切换到另一个吗?在这个时间间隔内会发生什么(在去关联和重新关联之间[可能是10-30分钟])..它不能通过互联网进行通信吗?
修改: 到目前为止,答案很棒,但这回答了问题的第二部分,主要是如何在IP运行时更改IP?
答案 0 :(得分:3)
Feature Guide: Amazon EC2 Elastic IP Addresses或多或少解决了所有问题,例如:
在大多数情况下,这个 从您指导我们开始通常需要不到几分钟 重新映射弹性IP,我们将继续努力实现这一目标 甚至更快。 [我实际上没有经历过这个过程 我自己超过一分钟]
它无法通过互联网进行通信吗?
这取决于手头的情况,但作为一种简化,您可能应该使用这个假设,根据以下两个常见问题解答:
如果从实例中删除弹性IP,则可以从Internet访问实例吗?
从实例中删除弹性IP会暂时离开 没有公共IP地址的实例。一个后台进程 一段时间后,云将重新为该实例分配一个新的公共IP 一段的时间。该实例将在内部保持可访问状态 在此过程中,云在其私有IP地址上。
为什么在将新IP地址与实例关联后现有连接仍然有用?
当您将弹性IP重新映射到某个实例时,某些已预先存在 通信(到旧的和现在未映射的IP地址)将继续 重新映射后即可工作。例如,如果您有一个打开的ssh 通过系统分配的公共IP地址连接到实例 然后将您的一个弹性IP地址与之关联 例如,ssh会话可能会继续正常运行 一段时间此行为是预期的但不可靠。我们强烈要求 您要通过新重新映射的IP地址重新建立连接 确保您的软件正常运行。
您的后续问题的答案也嵌入/隐含在上述指南中,但在Elastic IP Addresses (EIP)一章中有更详细的说明,特别是Associating an Elastic IP Address with a Running Instance in Amazon EC2和Associating an Elastic IP Address with a Different Running Instance in Amazon EC2部分: / p>
有关主题的详细信息,请参阅EC2 IP Information FAQ。
答案 1 :(得分:1)
使用NAT分配弹性IP。您的实例具有NAT弹性IP的内部IP。虽然实例没有关联的弹性IP,但它将具有来自池的任意IP,因此仍然能够与Internet通信(假设正确配置了访问规则)。
答案 2 :(得分:1)
我创建了这个bash脚本来更改VPC中正在运行的实例的公共ip(eip)。您只需提供您为该实例提供的名称(TAG Name =“”),以便将名称标记转换为实例ID。更改公共DNS总是需要时间。更改aws gui中的EIP地址很烦人。解除旧ip,获取新IP,关联新IP,发布旧IP。鼠标点击很臭。
#change vpc instance public IP address (EIP -> NIC|INSTANCE)
#usage "changeip [instance friendly tag=Name] [region]"
#example "changeip my.instnace us-west-1"
#dafault region is us-west-1 (you must include --region for $region default)
#for VPC instances only
function changeip {
if [[ ! $1 ]]; then
echo 'Error : You must provide tag name for instance'
echo 'Example: changeip [friendly name]'
return
fi
if [[ $2 ]]; then
region='--region '$2
echo 'Using region '$2
else
region='--region us-west-1' #sets default region
echo 'Using default '$region
fi
name=$1
instance=$(ec2-describe-instances $region | grep Name | grep $name | cut -f3)
if [[ ! $instance =~ ^('i-'[A-Za-z0-9]*)$ ]]; then
echo 'Error : Getting the instance id'
echo $instance
return
fi
echo 'Applying to '$1 '=> '$instance
echo 'Please wait....'
ip_new=$(ec2-allocate-address $region -d vpc | cut -f2)
if [[ ! $ip_new =~ ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$ ]]; then
echo 'Error : Getting a new IP address'
echo $ip_new
return
fi
new_idas=$(ec2-describe-addresses $region $ip_new | cut -f 5) >> /dev/null
if [[ ! $new_idas =~ ^('eipalloc-'[A-Za-z0-9]*)$ ]]; then
echo 'Error : Getting New IP allocation id eipalloc'
echo $new_idas
return
fi
ip_old=$(ec2-describe-addresses $region | grep $instance | cut -f2)
if [[ ! $ip_old =~ ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$ ]]; then
echo 'Error : Getting old IP address'
echo $ip_old
return
fi
id_dis=$(ec2-describe-addresses $region $ip_old | cut -f 6)
if [[ ! $id_dis =~ ^('eipassoc-'[A-Za-z0-9]*)$ ]]; then
echo 'Error : Dissasociating Old IP'
echo $id_dis
return
fi
id_release=$(ec2-describe-addresses $region $ip_old | cut -f 5) >> /dev/null
if [[ ! $new_idas =~ ^('eipalloc-'[A-Za-z0-9]*)$ ]]; then
echo 'Error : Release Old IP'
echo $id_release
return
fi
ec2-disassociate-address $region -a $id_dis >> /dev/null
sleep 8
ec2-release-address $region -a $id_release >> /dev/null
ec2-associate-address $region -i $instance -a $new_idas >> /dev/null
echo 'SUCCESS!'
echo 'Old = '$ip_old
echo 'New = '$ip_new
}
答案 3 :(得分:0)
您始终可以使用公共DNS名称来访问系统。 通过互联网进行沟通没问题。
从实例做一个卷曲以了解要使用的私人/公共地址
http:// 169。 254. 169. 254 / latest / meta-data / local-ipv4
http:// 169. 254. 169. 254 / latest / meta-data / public-ipv4
参考:http://docs.amazonwebservices.com/AWSEC2/latest/UserGuide/AESDG-chapter-instancedata.html
答案 4 :(得分:0)
是:您可以更改正在运行的实例的IP地址。只需将第二个弹性IP地址与实例相关联,它就会替换现有的IP地址。