繁体   English   中英

如何在AWS Java SDK中获取新创建的EC2实例的实例引用?

[英]How to get an Instance reference for a newly created EC2 instance in aws java sdk?

假设我有几个正在运行的EC2实例。 现在,我使用以下Java代码启动一个新实例:

RunInstancesRequest runInstancesRequest = new RunInstancesRequest()
        .withInstanceType("m1.small")
        .withImageId("some-ami")
        .withMinCount(1)
        .withMaxCount(1)
        .withKeyName("some-key")
        ;
RunInstancesResult runInstancesResule = ec2.runInstances(runInstancesRequest);

我知道我可以遍历整个实例列表以查找pending实例,但这似乎很愚蠢。 有没有更简单的方法来获取对该新创建的EC2实例的Instance引用?

由于RunInstancesRequest可以启动多个实例,因此它将成功启动的实例存储在List 即使仅启动一个实例,您仍然必须从列表中读取它,可以使用runInstancesResule变量进行访问。 要获得列表中的第一个实例,只需使用以下命令:

Instance myInstance = runInstancesResule.getReservation().getInstances().get(0);

然后,您可以从这里使用各种与实例相关的命令来获取有关实例的信息(更多信息,请参见此处 )。 例如:

String myInstanceID = myInstance.getInstanceId();

编辑:

通过使用DescribeInstancesRequest类,可以使用相同的概念来检索您的所有实例,如下所示:

DescribeInstancesRequest describeInstanceRequest = new DescribeInstancesRequest();
DescribeInstancesResult describeInstanceResult = ec2.describeInstances(describeInstanceRequest);
List<Instance> myInstances = describeInstanceResult.getReservation().getInstances();

注意:这还将包括已停止但尚未终止的实例,因此您将需要检查实例状态以确定该实例是否正在实际运行。

我创建了两个方法,它们将启动一个或多个EC2实例,第二个方法将根据实例ID检索实例:

要请求EC2:

public List<Instance> requestEC2(AmazonEC2 amazonEC2, String instanceName, String imageId, String instanceType, String securityGroupName, int count) {
        RunInstancesRequest runInstancesRequest = new RunInstancesRequest();
        TagSpecification tagSpecification = new TagSpecification();
        tagSpecification.withResourceType(ResourceType.Instance).withTags(new Tag().withKey("Name").withValue(instanceName));
        runInstancesRequest.withImageId(imageId).withInstanceType(instanceType).withMinCount(1).withMaxCount(count).withSecurityGroups(securityGroupName).withTagSpecifications(tagSpecification);
        RunInstancesResult runInstancesResult = amazonEC2.runInstances(runInstancesRequest);
        return runInstancesResult.getReservation().getInstances();
    }

要检索EC2:

public List<Instance> getEC2InstanceDetails(AmazonEC2 amazonEC2, List<String> instanceIds){
        List<Instance> instanceList = new ArrayList<>();
        DescribeInstancesRequest describeInstancesRequest = new DescribeInstancesRequest();
        describeInstancesRequest.setInstanceIds(instanceIds);
        DescribeInstancesResult describeInstancesResult = amazonEC2.describeInstances(describeInstancesRequest);
        for(Reservation reservation : describeInstancesResult.getReservations()){
            for(Instance instance : reservation.getInstances()) {
                instanceList.add(instance);
            }
        }
        return instanceList;
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM