有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

在java中,如何让AmazonEC2实例看到自己的标记?

所以我有一个java程序在AmazonEC2实例中运行。有没有办法通过编程获得自己的标签?我尝试过为我们实例化一个新的AmazonEC2Client,即descripbetags()函数,但它只提供null。任何帮助都将不胜感激,谢谢

编辑:为了让事情变得更清楚,这些实例将是无人操作的工作机器,专门用来做一些计算


共 (3) 个答案

  1. # 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()
    
  2. # 2 楼答案

    虽然使用用户数据可能是最简单的解决方案,但OP专门询问了标签问题,不幸的是,亚马逊并没有尽可能简单地做到这一点。然而,这是可以做到的。您希望使用两种amazon服务的组合

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

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

    2. 一旦您有了资源ID,您就需要使用Amazon的EC2API来访问标记。既然您说您正在使用Java,我建议您使用AWS SDK amazon makes available。在这个SDK中,您将找到一个名为describeTagsdocumentation)的方法。您可以使用资源ID作为过滤器之一,以获取实例的特定标记。支持的过滤器包括

      tag key
      resource-id
      resource-type
      

    我建议在启动时使用类似cloud init的方法进行检索,并在服务器上缓存标记,以便在必要时稍后使用

  3. # 3 楼答案

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

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