9

就执行时间而言,Java JVM 确定它是否在 AWS EC2 实例上运行的最快方法是什么?

我当前的方法是对 进行 http 提取http://169.254.169.254/latest/instance-id,但是当我不在 AWS 上运行时,这需要几秒钟才能超时。

更新:

我的解决方案是查看 Java 系统属性“user.name”,看看它是否包含“ec2”。我们总是在“ec2-user”用户名下运行我们的应用程序,所以这种方法既快速又可靠。

4

3 回答 3

11

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();
于 2016-12-29T18:54:42.877 回答
0

您或许可以更改 DNS 超时和重试设置以减少花费的时间。将以下内容添加到 /etc/resolv.conf 文件中,看看是否有帮助。resolv.conf 上的联机帮助页将提供详细信息。

options timeout:1 attempts:1 rotate

这不是直接修复,但可能会解决您当前方法的问题。对 resolv.conf 的更改也应立即生效。

我对我的系统上的同样的事情感兴趣。

于 2013-08-08T21:00:28.990 回答
-1

使用 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();
于 2020-06-06T12:30:02.473 回答