所以我有一个在 Amazon EC2 实例中运行的 java 程序。有没有办法以编程方式获取自己的标签?我尝试向我们实例化一个新的 AmazonEC2Client describeTags() 函数,但它只给我 null。任何帮助将不胜感激,谢谢。
编辑:为了让事情更清楚,这些实例将是无人驾驶的工作机器,它旋转起来只做一些计算
所以我有一个在 Amazon EC2 实例中运行的 java 程序。有没有办法以编程方式获取自己的标签?我尝试向我们实例化一个新的 AmazonEC2Client describeTags() 函数,但它只给我 null。任何帮助将不胜感激,谢谢。
编辑:为了让事情更清楚,这些实例将是无人驾驶的工作机器,它旋转起来只做一些计算
这应该可以帮助您入门...
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()
您应该能够通过向以下地址发送请求来获取当前实例 ID http://169.254.169.254/latest/meta-data/instance-id
:。这仅适用于 ec2。有了这个,您可以访问有关该实例的大量信息。但是,标签似乎不包括在内。
您应该能够使用实例 ID 以及正确的身份验证来获取实例标签。如果您要在实例上运行此操作,您可能希望为 IAM 用户提供有限访问权限,而不是为在实例受到威胁时有权访问所有内容的用户提供。
虽然使用用户数据可能是最简单的解决方案,但 OP 专门询问了标记,不幸的是,亚马逊并没有让这变得尽可能简单。但是,它可以做到。您想使用 2 个亚马逊服务的组合。
首先,您需要检索实例 ID。这可以通过从您的实例中点击 URL 来实现:
http://169.254.169.254/latest/meta-data/instance-id
获得资源 ID 后,您将需要使用 Amazon 的 EC2 API 来访问标签。既然您说您使用的是 Java,我建议使用AWS SDK amazon 提供。在此 SDK 中,您会找到一个名为describeTags
(文档) 的方法。您可以将资源 ID 用作过滤器之一,以获取实例的特定标签。支持的过滤器是
tag key
resource-id
resource-type
我建议在启动时使用 cloud-init 之类的东西进行此检索,并在您的服务器上缓存标签以供以后使用(如有必要)。