2016-03-16 39 views
1

我有一個VPC。現在我有一個腳本創建ec2-instances並配置它們。在安裝過程中,配置取決於公共IP。問題是重新啓動後,配置對我的實例是錯誤的。由於公共IP改變了,但配置包含舊的公共IP。有沒有一種方法可以爲特定VPC中的實例定義Elastic IP的自動分配? (分配在創建之後的彈性IP immediatley)亞馬遜:在VPC中自動分配彈性ip

+0

實例在**重新啓動**期間不會丟失其公共IP地址。但是,如果實例停止並啓動,公共IP地址可能會有所不同。爲防止出現這種情況,請指定**彈性IP地址** - 在啓動/停止操作之間不會更改。 –

+0

如果您的問題在這裏有可接受的答案,請考慮選擇一個答案。 – Brooks

回答

2

我通常設置彈性IP,而不是從任何創建以userdata開頭的實例,但我不明白爲什麼不能從外部腳本執行相同的操作。

這是我啓動應用程序時傳遞給用戶數據的腳本。

注意,此腳本依賴於其他(父)腳本創建變量 如:

REGION =字符串抱着你推出的實例爲
RESOURCE_ID區=串拿着新推出的ID實例
IP =一個字符串保存原始的公共IP地址

您應該能夠從初始啓動的響應中獲得這些變量。

您將需要創建額外的功能,並假設您已經啓動了該實例,但這應該會讓您大部分時間在那裏。

請注意,不需要重新啓動實例,以啓動和分配彈性IP地址。事實上,正如你所提到的那樣,這樣做可能會「丟失」公共IP地址(儘管我相信從控制檯進行簡單的重新啓動會保留公有IP)。

#!/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

VPC中沒有使EIP自動附加到EC2實例的功能。

您需要使用您熟悉的AWS API語言編寫自己的腳本來完成自己的自動化。

1)準備: 分配彈性IP,寫下EIP-ID

2)大專EIP-ID EC2的IP分配工作: 使用AWS API腳本來創建並啓動EC2實例,捕獲EC2實例ID(或實例接口ID)。 然後在同一個腳本中,使用API​​ ec2關聯地址(命名與您使用的AWS API語言有所不同,取決於您所使用的AWS API語言)將EIP-id附加到EC2 isntance ID(或實例接口ID)

如果您正在使用API​​,您實際上可能會使用「ec2 describe_addresse」動態查找與任何實例無關的空閒EIP-id。

而你需要提前考慮自動化的,如果你想停止從時間EC2時間和重新啓動它們:從EC2實例中EC2 Instances will not keep elastic IP

0

如回答mootmoot我會說裏面有沒有VPC功能進行自動的EIP附加到特定EC2實例。另外,停止實例也會將EIP與其分離。所以EC2實例不會保持彈性IP。

有一個選項,does not require an Elastic IP。可以通過使用名爲DynamicURL的服務來分配,該服務將您域中的A上的IP地址更改爲分配給您的實例的公共IP。所以無論何時IP更改,您的域名都會與您的實例保持關聯。