簡體   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