在执行时间方面,Java JVM确定它是否在AWS EC2实例上运行的最快方式是什么?
我当前的方法是对http://169.254.169.254/latest/instance-id
进行http提取,但是当我没有在AWS上运行时需要几秒钟才能超时。
更新
我的解决方案是查看Java系统属性“user.name”并查看它是否包含“ec2”。我们总是在“ec2-user”用户名下运行我们的应用程序,因此这种方法快速可靠。
答案 0 :(得分:5)
AWS拥有以下文档:Determining an Application’s Current Region。
关于他们的API“新的Regions.getCurrentRegion()方法使这更容易。例如,如果你在us-west-1中启动一个Amazon EC2实例并在该实例上运行你的应用程序,它会知道它正在运行在us-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();
答案 1 :(得分:0)
您可以更改DNS超时和重试设置以减少花费的时间。将以下内容添加到/etc/resolv.conf文件中,看看它是否有帮助。 resolv.conf上的manpage将包含详细信息。
options timeout:1 attempts:1 rotate
这不是直接修复,但可能会解决您当前方法的问题。对resolv.conf的更改也应立即生效。
我对我的系统感兴趣。
答案 2 :(得分:0)
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();