虽然使用用户数据可能是最简单的解决方案,但OP特别询问了标记,不幸的是亚马逊并没有像现在这样容易。但是,它可以做到。您想要结合使用2种亚马逊服务。
首先,您需要检索实例ID。这可以通过从您的实例中点击URL来实现:
http://169.254.169.254/latest/meta-data/instance-id
获得资源ID后,您将需要使用Amazon的EC2 API来访问标记。既然你说你正在使用Java,我会建议使用 AWS SDK亚马逊提供 。在此SDK中,您将找到一个名为的方法 describeTags ( 文件 )。您可以使用资源ID作为过滤器之一来获取实例的特定标记。支持的过滤器是
describeTags
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()
您应该能够通过向以下位置发送请求来获取当前实例ID: http://169.254.169.254/latest/meta-data/instance-id 。这仅适用于ec2。有了这个,您可以访问有关该实例的大量信息。但是,似乎没有包含标签。
您应该能够获取实例ID以及正确的身份验证以获取实例标记。如果要在实例上运行此操作,您可能希望为访问受限的IAM用户提供访问权限,而不是在实例受到攻击时可以访问所有内容的用户。