2

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

编辑:为了让事情更清楚,这些实例将是无人驾驶的工作机器,它旋转起来只做一些计算

4

3 回答 3

3

这应该可以帮助您入门...

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()
于 2017-07-07T00:20:04.807 回答
1

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

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

于 2013-07-23T14:24:50.397 回答
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 提供。在此 SDK 中,您会找到一个名为describeTags(文档) 的方法。您可以将资源 ID 用作过滤器之一,以获取实例的特定标签。支持的过滤器是

    tag key
    resource-id
    resource-type
    

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

于 2013-08-13T19:15:21.957 回答