在java中,如何让Amazon EC2实例查看自己的标签?

时间:2013-07-23 13:43:15

标签: java amazon-ec2 amazon

所以我在Amazon EC2实例中运行了一个java程序。有没有办法以编程方式获得自己的标签?我已经尝试将一个新的AmazonEC2Client实例化为describeTags()函数,但它只给了我null。任何帮助将不胜感激,谢谢。

编辑:为了使事情变得更清楚,实例将是无人工作的机器,只能进行一些计算

3 个答案:

答案 0 :(得分:1)

您应该可以通过向http://169.254.169.254/latest/meta-data/instance-id发送请求来获取当前实例ID。这仅适用于ec2。有了这个,您可以访问有关该实例的大量信息。但是,标签似乎不包括在内。

您应该能够获取实例ID以及正确的身份验证来获取实例标记。如果要在实例上运行此操作,您可能希望为访问受限的IAM用户提供访问权限,而不是在实例被泄露的情况下可以访问所有内容的用户。

答案 1 :(得分:1)

虽然使用用户数据可能是最简单的解决方案,但OP专门询问了标记,但遗憾的是亚马逊并没有尽可能地简化这一过程。但是,它可以做到。您想要结合使用2种亚马逊服务。

  1. 首先,您需要检索实例ID。这可以通过从您的实例中点击URL来实现:

    http://169.254.169.254/latest/meta-data/instance-id

  2. 获得资源ID后,您将希望使用Amazon的EC2 API来访问这些代码。既然你说你正在使用Java,我会建议使用AWS SDK amazon makes available。在此SDK中,您将找到名为describeTagsdocumentation)的方法。您可以使用资源ID作为过滤器之一来获取实例的特定标记。支持的过滤器

    tag key
    resource-id
    resource-type
    
  3. 我建议在启动时使用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()