簡體   English   中英

Java 如何確定是否在 AWS 上運行

[英]How can Java determine if running on AWS

就執行時間而言,Java JVM 確定它是否在 AWS EC2 實例上運行的最快方法是什么?

我目前的方法是對http://169.254.169.254/latest/instance-id執行 http 提取,但是當我不在 AWS 上運行時,這需要幾秒鍾才能超時。

更新:

我的解決方案是查看 Java 系統屬性“user.name”並查看它是否包含“ec2”。 我們總是在“ec2-user”用戶名下運行我們的應用程序,因此這種方法既快速又可靠。

AWS 有以下文檔: 確定應用程序的當前區域

關於他們的 API,“新的 Regions.getCurrentRegion() 方法使這變得容易得多。例如,如果您在 us-west-1 中啟動一個 Amazon EC2 實例並在該實例上運行您的應用程序,它就會知道它正在我們中運行- west-1,您可以使用該信息輕松配置您的應用程序以與 us-west-1 中的其他服務通信。”

.. 這是一個代碼片段,其中包含您正在尋找的關鍵字,以幫助您朝着正確的方向前進:

// When running on an Amazon EC2 instance, this method
// will tell you what region your application is in
Region region = Regions.getCurrentRegion();

您可以更改 DNS 超時和重試設置以減少花費的時間。 將以下內容添加到 /etc/resolv.conf 文件中,看看是否有幫助。 resolv.conf 上的聯機幫助頁將提供詳細信息。

options timeout:1 attempts:1 rotate

這不是直接修復,但可能會解決您當前方法的問題。 對 resolv.conf 的更改也應立即生效。

我對我的系統上的同樣事情感興趣。

使用 Amazon 默認 Linux 的 EC2 實例運行 SSM 代理 ( https://docs.aws.amazon.com/systems-manager/latest/userguide/sysman-install-ssm-agent.html ),所以我只檢查它是否存在。 它通常是一個比用戶更好的指標,盡管它不像您的更新那樣查找環境屬性那么快。 您當然可以在啟動 JVM 時設置該屬性並獲得相同的結果:

boolean isEC2 = new java.io.File("/usr/bin/amazon-ssm-agent").exists();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM