所以我在Amazon EC2实例中运行了一个java程序。有没有办法以编程方式获得自己的标签?我已经尝试将一个新的AmazonEC2Client实例化为describeTags()函数,但它只给了我null。任何帮助将不胜感激,谢谢。
编辑:为了使事情变得更清楚,实例将是无人工作的机器,只能进行一些计算
答案 0 :(得分:1)
您应该可以通过向http://169.254.169.254/latest/meta-data/instance-id
发送请求来获取当前实例ID。这仅适用于ec2。有了这个,您可以访问有关该实例的大量信息。但是,标签似乎不包括在内。
您应该能够获取实例ID以及正确的身份验证来获取实例标记。如果要在实例上运行此操作,您可能希望为访问受限的IAM用户提供访问权限,而不是在实例被泄露的情况下可以访问所有内容的用户。
答案 1 :(得分:1)
虽然使用用户数据可能是最简单的解决方案,但OP专门询问了标记,但遗憾的是亚马逊并没有尽可能地简化这一过程。但是,它可以做到。您想要结合使用2种亚马逊服务。
首先,您需要检索实例ID。这可以通过从您的实例中点击URL来实现:
http://169.254.169.254/latest/meta-data/instance-id
获得资源ID后,您将希望使用Amazon的EC2 API来访问这些代码。既然你说你正在使用Java,我会建议使用AWS SDK amazon makes available。在此SDK中,您将找到名为describeTags
(documentation)的方法。您可以使用资源ID作为过滤器之一来获取实例的特定标记。支持的过滤器
tag key
resource-id
resource-type
我建议在启动时使用cloud-init等方法进行检索,并在服务器上缓存标签,以便以后使用。
答案 2 :(得分:1)
这可以帮助你开始......
String instanceId = EC2MetadataUtils.getInstanceId();
AmazonEC2 client = AmazonEC2ClientBuilder.standard()
.withCredentials(new DefaultAWSCredentialsProviderChain())
.build();
DescribeTagsRequest req = new DescribeTagsRequest()
.withFilters(new Filter("resource-id", Collections.singletonList(instanceId)));
DescribeTagsResult describeTagsResult = client.describeTags(req);
List<TagDescription> tags = describeTagsResult.getTags()