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

在java中,如何让AmazonEC2实例看到自己的标记?,java,amazon-ec2,amazon,Java,Amazon Ec2,Amazon,所以我有一个java程序在AmazonEC2实例中运行。有没有办法通过编程获得自己的标签?我尝试过为我们实例化一个新的AmazonEC2Client,即descripbetags()函数,但它只提供null。任何帮助都将不胜感激,谢谢 编辑:为了让事情更清楚,这些实例将是无人操作的工作机器,单独进行一些计算您应该能够通过发送请求到:http://169.254.169.254/latest/meta-data/instance-id。这只适用于ec2。通过这个,您可以访问有关实例的大量信息。但是

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


编辑:为了让事情更清楚,这些实例将是无人操作的工作机器,单独进行一些计算

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


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

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


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

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

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

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

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

    tag key
    resource-id
    resource-type
    

  • 我建议在启动时使用cloud init之类的工具进行此检索,并在服务器上缓存标记以备日后需要时使用。

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

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

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

  • 一旦您有了资源ID,您就需要使用Amazon的EC2API来访问标记。既然您说您正在使用Java,我建议您使用。在这个SDK中,您将找到一个名为
    descripbetags
    ()的方法。您可以使用资源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()
    
    String instanceId=ec2metadatutils.getInstanceId();
    AmazonEC2客户端=AmazonEC2ClientBuilder.standard()
    .withCredentials(新的默认AWSCredentialsProviderChain())
    .build();
    descripbetagsrequest req=新的descripbetagsrequest()
    .withFilters(新过滤器(“资源id”,Collections.singletonList(instanceId));
    descripbetagsresult descripbetagsresult=client.descripbetags(请求);
    List tags=descripbetagsresult.getTags()
    
    这将帮助您开始

    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()
    
    String instanceId=ec2metadatutils.getInstanceId();
    AmazonEC2客户端=AmazonEC2ClientBuilder.standard()
    .withCredentials(新的默认AWSCredentialsProviderChain())
    .build();
    descripbetagsrequest req=新的descripbetagsrequest()
    .withFilters(新过滤器(“资源id”,Collections.singletonList(instanceId));
    descripbetagsresult descripbetagsresult=client.descripbetags(请求);
    List tags=descripbetagsresult.getTags()
    
    很抱歉,我应该说得更清楚一点,实例将是工作机器,标签是他们完成任务所需的信息。我需要这样做,这样他们就可以通过java程序中的代码自动看到自己的标记。您可以通过userdata发送数据。该信息可通过此请求的元数据
    http://169.254.169.254/latest/user-data
    很抱歉,我应该说得更清楚一点,实例将是工作机器,标签是他们完成任务所需的信息。我需要这样做,这样他们就可以通过java程序中的代码自动看到自己的标记。您可以通过userdata发送数据。该信息可通过此请求的元数据
    http://169.254.169.254/latest/user-data