1

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

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

4

5 回答 5

3

您的所有问题或多或少都在功能指南: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 地址)仍将继续工作。例如,如果您通过系统分配的公共 IP 地址与实例建立了开放的 ssh 连接,随后将您的弹性 IP 地址之一与该实例相关联,则 ssh 会话可能会在一段时间内继续正常运行。这种行为是预期的,但不可靠。我们强烈建议您通过重新映射的新 IP 地址重新建立连接,以确保您的软件正常运行。

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

您的后续问题的答案也嵌入/暗示在上述指南中,但在弹性 IP 地址 (EIP)章节中进行了更详细的讨论,特别是在将弹性 IP 地址与 Amazon EC2 中的运行实例关联和关联Amazon EC2 中具有不同运行实例的弹性 IP 地址

有关该主题的更多详细信息,请参阅 EC2 IP 信息常见问题解答。

于 2013-01-04T16:42:22.590 回答
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
}
于 2013-06-10T01:55:12.523 回答
1

弹性 IP 是使用 NAT 分配的。您的实例有一个 NAT 到弹性 IP 的内部 IP。虽然实例没有关联的弹性 IP,但它将具有来自池的任意 IP,因此仍然能够与 Internet 通信(假设访问规则已正确配置)。

于 2013-01-04T06:42:08.107 回答
0

您始终可以使用公共 DNS 名称访问系统。通过互联网交流没有问题。

从实例进行 curl 以了解要使用的私有/公共地址

HTTP:// 169。254. 169. 254/最新/元数据/local-ipv4

http : // 169. 254. 169. 254/latest/meta-data/public-ipv4

参考:http ://docs.amazonwebservices.com/AWSEC2/latest/UserGuide/AESDG-chapter-instancedata.html

于 2013-01-04T06:43:29.343 回答
0

是:您可以更改正在运行的实例的 IP 地址。只需将第二个弹性 IP 地址与实例关联,它将替换现有的。

于 2013-01-04T16:29:27.130 回答