重啓後,亞馬遜實例的IP地址會發生變化。如何使用Java API找到新的IP地址?如何查找重啓時的亞馬遜EC2實例的IP地址
回答
假設你不想分配一個彈性IP地址(也有原因,這並不總是一個解決方案),那麼只需撥打DescribeInstances
在重新啓動實例,它返回一串信息包括公共IP地址。
這是關於主題的AWS EC2 Java API Documentation。
我向你提供了八位上師。你知道任何簡單的方法來獲取最後創建的實例的InstanceID,以便立即關聯ElasticIP嗎?據我所知,它需要從'ec2-run-instances'解析返回的信息,或者使用bash和'aws ec2 run-instances'中的返回JSON解析JSON。試圖避免額外的依賴。 – JohnAllen
爲了闡明上面的'DescribeInstances'命令,我喜歡使用這個命令:'aws ec2 describe-instances | grep「Value \ | PublicIpAddress」'(當然你需要安裝aws cli) – modulitos
爲什麼感謝你,善良的匿名downvoter。通過嚴厲批評我六年前接受的答案,你的理由讓我的代表略微下降是非常明顯的,不需要任何評論! –
假設您重新啓動實例並且不是從頭開始啓動,而是您可以分配始終保留在ec2實例中的彈性IP(除非將IP移動到另一臺服務器)。這使您可以將所有DNS指向該IP,而不必擔心重新啓動會導致問題。
我認爲這就是你要求的,但還有其他的東西你可能會問。服務器的內部IP會發生變化(如果您重新啓動實例而不重新啓動),並且您無法「保留」它,因此您可能需要創建一個腳本來爲您提供新的IP(如果指向內部服務)。
希望幫助
重啓後,EC2實例的IP地址做而不是更改。它們通常會在停止/啓動非VPC EBS引導實例時進行更改。
見我的回答對你在這裏相關的問題:
也就是說,你可以通過在您的特定語言的API調用DescribeInstances找到私人和公共IP地址。
如果你在該實例本身,你也可以用簡單的HTTP找到通過用戶數據API的IP地址:
http://instance-data/latest/meta-data/local-ipv4
http://instance-data/latest/meta-data/public-ipv4
例如,
wget -qO- http://instance-data/latest/meta-data/public-ipv4
Elastic IP addresses被推薦爲爲特定服務或服務器保持一致(靜態)面向外部的IP地址。這些需要在停止/啓動後重新分配給實例(但不是在重新啓動後)。
這是一個可靠的完整答案。 「wget」提供了特定的正確答案,而周圍的散文也很有幫助/有用。 – javadba
curl http://169.254.169.254/latest/meta-data/public-ipv4
這應該是公認的答案,也是他們在文檔中說的。 http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-instance-addressing.html – jontsai
這是什麼奇怪的IP?從服務器中調用這個未知IP是否是安全威脅? :D 我建議編輯解釋IP,看起來好像不被接受 –
@RavindranathAkila不能,你可以在你的EC2實例中使用這個命令 –
這是我做這件事是一個Ubuntu 12.04 EC2實例的VPC內:
curl ifconfig.me
不知道爲什麼,但公衆的IPv4沒有元數據網址下找到
我試過了:它沒有響應掛起 – javadba
在CentOS 7上工作 –
爲了獲取實例的公共IP,您首先需要獲取該實例的實例ID。您可以使用以下Java代碼獲取實例的實例ID。
List<Instance> instances = runInstancesResult.getReservation().getInstances();
String instanceId = instances.get(0).toString().substring(13, 23);
現在爲了獲得公共IP,您可以使用下面的java代碼。
public void fetchInstancePublicIP() {
DescribeInstancesRequest request = new DescribeInstancesRequest().withInstanceIds("i-d99ae7d2");
DescribeInstancesResult result= ec2.describeInstances(request);
List <Reservation> list = result.getReservations();
for (Reservation res:list) {
List <Instance> instanceList= res.getInstances();
for (Instance instance:instanceList){
System.out.println("Public IP :" + instance.getPublicIpAddress());
System.out.println("Public DNS :" + instance.getPublicDnsName());
System.out.println("Instance State :" + instance.getState());
System.out.println("Instance TAGS :" + instance.getTags());
}
}
}
它們有util類,它有助於訪問EC2元數據。 例如
EC2MetadataUtils.getNetworkInterfaces().get(0).getPublicHostname();
EC2MetadataUtils.getNetworkInterfaces().get(0).getPublicIPv4s();
您可以使用此功能。
var ipofnewServer = string.Empty;
while (string.IsNullOrEmpty(ipofnewServer))
{
var statusRequest1 = new DescribeInstancesRequest
{
InstanceIds = new List<string>() { instanceId }
};
var result = amazonEc2client.DescribeInstances(statusRequest1);
var status = result.Reservations[0].Instances.FirstOrDefault();
if (status != null)
{
ipofnewServer = status.PublicIpAddress;
}
}
公共IPv4地址也可以從EC2實例,像這樣:
curl checkip.amazonaws.com
而且公衆主機名是:
dig -x $(curl -s checkip.amazonaws.com) +short
這實際上效果更好。上面的回答/ public-ipv4一直在運行直到最近,不確定AWS是否改變了某些東西,或者限制了通過ELB的流量產生了影響,但是我得到了兩個實例上報告的彈性IP。然而,curl checkip正確無誤,我的彈性ip在一個上,另一個是隨機分配的。 –
- 1. 尋找亞馬遜的IP地址aws
- 2. Curl亞馬遜EC2實例
- 3. 亞馬遜EC2實例
- 4. 亞馬遜實例EC2連接超時
- 5. 亞馬遜AWS Ec2 + Elastic IP
- 6. 亞馬遜EC2 Linux實例中的GUI
- 7. 重啓後無法訪問亞馬遜EC2實例
- 8. 啓動亞馬遜EC2競價型實例時附加EBS
- 9. 亞馬遜EC2實例殺死MySQL
- 10. 停止亞馬遜ec2實例
- 11. 亞馬遜ec2實例創建問題
- 12. 亞馬遜EC2實例連接
- 13. 亞馬遜EC2實例丟失
- 14. 亞馬遜EC2實例元數據
- 15. 選擇亞馬遜EC2實例類型
- 16. 亞馬遜ec2 ipython筆記本實例
- 17. 控制多個亞馬遜EC2實例
- 18. 打開亞馬遜EC2實例端口
- 19. 亞馬遜EC2實例網絡問題
- 20. EC2實例|亞馬遜網絡服務
- 21. EC2 AWS亞馬遜:停止實例
- 22. 亞馬遜ec2託管服務器IP地址
- 23. 如何獲得亞馬遜網絡服務實例的私有IP地址?
- 24. 尋找一個網站的亞馬遜EC2託管實例
- 25. 尋找合適的亞馬遜ec2 ubuntu實例
- 26. 如何讓我的公有DNS(IPv4)的實例亞馬遜EC2
- 27. 在亞馬遜ec2的網址映射
- 28. 如何解決我的亞馬遜EC-2的IP地址
- 29. 停止與「實例存儲」的亞馬遜EC2實例
- 30. 亞馬遜EC2並從我的IP地址獲取響應,而無需使用亞馬遜公共DNS
你爲什麼不分配一個固定的IP彈性? – okrasz