繁体   English   中英

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

[英]In java, how can I get an Amazon EC2 Instance to see its own tags?

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

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

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

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

虽然使用用户数据可能是最简单的解决方案,但OP特别询问了标记,不幸的是亚马逊并没有像现在这样容易。 但是,它可以做到。 您想要结合使用2种亚马逊服务。

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

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

  2. 获得资源ID后,您将需要使用Amazon的EC2 API来访问标记。 既然你说你正在使用Java,我建议使用AWS SDK亚马逊 在此SDK中,您将找到名为describeTags文档 )的方法。 您可以使用资源ID作为过滤器之一来获取实例的特定标记。 支持的过滤器是

     tag key resource-id resource-type 

我建议在启动时使用诸如cloud-init之类的东西进行检索,并在服务器上缓存标签,以便以后在必要时使用。

这应该可以帮助你开始......

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()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM