将另一个IP重新关联到正在运行的实例?

时间:2013-01-04 06:35:56

标签: amazon-web-services amazon-ec2

我有一个复杂的用例,
但简而言之,在实例运行时,我可以将弹性IP切换到另一个吗?在这个时间间隔内会发生什么(在去关联和重新关联之间[可能是10-30分钟])..它不能通过互联网进行通信吗?

修改: 到目前为止,答案很棒,但这回答了问题的第二部分,主要是如何在IP运行时更改IP?

5 个答案:

答案 0 :(得分:3)

Feature Guide: Amazon EC2 Elastic IP Addresses或多或少解决了所有问题,例如:

  • 当一个实例正在运行时,我可以将弹性IP切换到另一个吗?
    当然,这是弹性IP地址的主要用例之一: 与标准EC2公共IP地址不同,弹性IP地址分配给帐户,并且可以重新映射到其他实例 期望。 [这包括运行实例,请参阅下面的“如何更改正在运行的EC2实例的弹性IP地址”。]
  • 在此时间间隔内会发生什么(取消关联和重新关联[可能是10-30分钟])?
    这比广告要长,请参阅常见问题多长时间 是否需要重新映射弹性IP地址?
      

    在大多数情况下,这个   从您指导我们开始通常需要不到几分钟   重新映射弹性IP,我们将继续努力实现这一目标   甚至更快。 [我实际上没有经历过这个过程   我自己超过一分钟]

  •   
  • 它无法通过互联网进行通信吗?
      这取决于手头的情况,但作为一种简化,您可能应该使用这个假设,根据以下两个常见问题解答:

    • 如果从实例中删除弹性IP,则可以从Internet访问实例吗?

        

      从实例中删除弹性IP会暂时离开   没有公共IP地址的实例。一个后台进程   一段时间后,云将重新为该实例分配一个新的公共IP   一段的时间。该实例将在内部保持可访问状态   在此过程中,云在其私有IP地址上。

    • 为什么在将新IP地址与实例关联后现有连接仍然有用?

        

      当您将弹性IP重新映射到某个实例时,某些已预先存在   通信(到旧的和现在未映射的IP地址)将继续   重新映射后即可工作。例如,如果您有一个打开的ssh   通过系统分配的公共IP地址连接到实例   然后将您的一个弹性IP地址与之关联   例如,ssh会话可能会继续正常运行   一段时间此行为是预期的但不可靠。我们强烈要求   您要通过新重新映射的IP地址重新建立连接   确保您的软件正常运行。

如何更改正在运行的EC2实例的弹性IP地址

您的后续问题的答案也嵌入/隐含在上述指南中,但在Elastic IP Addresses (EIP)一章中有更详细的说明,特别是Associating an Elastic IP Address with a Running Instance in Amazon EC2Associating 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地址。