当我们启动EC2实例时,是否可以在启动时分配弹性IP?

时间:2016-02-10 06:12:58

标签: java amazon-web-services amazon-ec2

我使用了 DescribeAddressRequest & DescribeAddressResult cross-env NODE_ENV=production my-command AWS 帐户中查找弹性IP 地址?

现在,当我启动新的 EC2 实例时,是否可以在启动或运行时分配该弹性IP地址?

4 个答案:

答案 0 :(得分:1)

是的,只需编写一个执行相同命令的脚本,然后通过userdata传递它。这意味着实例已在分配弹性IP时启动,但它仍然是自动启动过程的一部分。

我在分配和分配新的弹性IP地址时这样做,但是我想知道你的用例。您是否坚持弹性IP以便将它们分配给新实例?

如果新实例与旧实例的应用程序相同,为什么不对其进行自动缩放(我认为自动缩放会将弹性IP从旧实例重新映射到新实例)。否则,如果新实例是一个不同的应用程序,那么为什么还要继续重新映射弹性IP?为什么不直接释放该IP并在需要时重新分配新的IP?

这是我在启动应用程序时传入userdata的脚本。我们处于开发模式,所以我们还没有摆脱弹性IP并转向CNAME,所以它现在有效。

请注意,此脚本依赖于由其他(父)脚本创建的变量,因此您需要创建其他功能,但这应该会让您大部分都在那里。

#!/bin/bash

EIPID=`aws ec2 allocate-address --domain vpc --region ${REGION} | grep -m 1 'AllocationId' | awk -F : '{print $2}' | sed 's|^ "||' | sed 's|"||'`
IP=`ec2metadata --public-ipv4`
EIP=${IP}

if [ -n "$EIPID" ]
then
    conf=`aws ec2 associate-address --instance-id ${RESOURCE_ID} --allocation-id ${EIPID} --region ${REGION} | grep -m 1 'AssociationId' | awk -F : '{print $2}' | sed 's|^ "||' | sed 's|"||'`
    if [ -n "$conf" ]
    then
        while [ "$IP" == "$EIP" ]
        do
            EIP=`ec2metadata --public-ipv4`
            sleep 2
        done
        echo "Elastic IP ${EIPID} successfully mapped";      
        echo "ELASTIC_IP=\"${EIP}\"" | sudo tee -a /etc/environment
    else
        echo "Failed to map Elastic IP Address: ${EIPID}";
    fi
else
    echo "Failed to acquire Elastic IP address: ${EIPID}";
fi

答案 1 :(得分:0)

没有。您可以让AWS自动为您的实例(启动时)分配公共地址,这不是一个弹性IP地址。但弹性IP只有在启动后才能与实例关联。

答案 2 :(得分:0)

您可以在机器启动后自动分配EIP。这篇博文应该可以帮到你的大部分时间:

https://confluence.atlassian.com/display/BAMKB/Automatically+associating+Elastic+IP+addresses+to+Elastic+Agents

答案 3 :(得分:0)

你可以在启动实例后尝试这些..AS C#Code ..

var associateRequest = new AssociateAddressRequest
          {
              PublicIp = Your Elastic Ip,
              InstanceId = Your InstanceId
          };
          amazonEc2client.AssociateAddress(associateRequest);