我使用了 DescribeAddressRequest & DescribeAddressResult cross-env NODE_ENV=production my-command
在 AWS 帐户中查找弹性IP 地址?
现在,当我启动新的 EC2 实例时,是否可以在启动或运行时分配该弹性IP地址?
答案 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。这篇博文应该可以帮到你的大部分时间:
答案 3 :(得分:0)
你可以在启动实例后尝试这些..AS C#Code ..
var associateRequest = new AssociateAddressRequest
{
PublicIp = Your Elastic Ip,
InstanceId = Your InstanceId
};
amazonEc2client.AssociateAddress(associateRequest);