Example usage for com.amazonaws.services.ec2.model RunInstancesRequest withKeyName

List of usage examples for com.amazonaws.services.ec2.model RunInstancesRequest withKeyName

Introduction

In this page you can find the example usage for com.amazonaws.services.ec2.model RunInstancesRequest withKeyName.

Prototype


public RunInstancesRequest withKeyName(String keyName) 

Source Link

Document

The name of the key pair.

Usage

From source file:HW1.java

License:Open Source License

public static String createInstanceFromImageId(String imageId, String keyGroupName) {
    int minInstanceCount = 1;
    int maxInstanceCount = 1;
    boolean ready = false;
    /* create instances */
    RunInstancesRequest rir = new RunInstancesRequest(imageId, minInstanceCount, maxInstanceCount);
    rir.withKeyName(keyGroupName).withSecurityGroups(keyGroupName);
    RunInstancesResult runresult = ec2.runInstances(rir);

    Reservation reservation = runresult.getReservation();
    List<Instance> allInstances = reservation.getInstances();
    String insId = allInstances.get(0).getInstanceId();

    DescribeInstancesResult describeInstancesRequest;
    List<Reservation> reservations;
    allInstances = new ArrayList<Instance>();

    while (!ready) {
        describeInstancesRequest = ec2.describeInstances();
        reservations = describeInstancesRequest.getReservations();
        for (Reservation r : reservations) {
            for (Instance ins : r.getInstances()) {
                if (ins.getState().getName().compareTo("running") == 0
                        && ins.getInstanceId().compareTo(insId) == 0) {
                    ready = true;//from ww  w .ja  v  a 2 s.com
                }
            }
        }
    }
    return insId;
}

From source file:HW1.java

License:Open Source License

public static void main(String[] args) throws Exception {

    AWSCredentials credentials = new PropertiesCredentials(
            HW1.class.getResourceAsStream("AwsCredentials.properties"));

    /*********************************************
     * /*from w  w  w.  j a  v  a2 s.c  o  m*/
     *  #1 Create Amazon Client object
     *  
     *********************************************/
    System.out.println("#1 Create Amazon Client object");
    ec2 = new AmazonEC2Client(credentials);
    ec2.setEndpoint("https://us-east-1.ec2.amazonaws.com");

    System.out.println("Please enter required group name and key name... (consider them to be the same)");
    Scanner scan = new Scanner(System.in);
    final String keyGroupName = scan.nextLine();

    /* create security group */
    CreateSecurityGroupRequest createSecurityGroupRequest = new CreateSecurityGroupRequest();
    createSecurityGroupRequest.withGroupName(keyGroupName).withDescription("My Java Security Group");
    CreateSecurityGroupResult createSecurityGroupResult = ec2.createSecurityGroup(createSecurityGroupRequest);

    /* set ip settings */
    IpPermission ipPermission = new IpPermission();
    /* authorize tcp, ssh 22 */
    ipPermission.withIpRanges("0.0.0.0/0").withIpProtocol("tcp").withFromPort(22)
            /* authorize http 80 */
            .withToPort(80);

    AuthorizeSecurityGroupIngressRequest authorizeSecurityGroupIngressRequest = new AuthorizeSecurityGroupIngressRequest();
    authorizeSecurityGroupIngressRequest.withGroupName(keyGroupName).withIpPermissions(ipPermission);
    ec2.authorizeSecurityGroupIngress(authorizeSecurityGroupIngressRequest);

    /* create key pair */
    CreateKeyPairRequest createKeyPairRequest = new CreateKeyPairRequest();
    createKeyPairRequest.withKeyName(keyGroupName);
    CreateKeyPairResult createKeyPairResult = ec2.createKeyPair(createKeyPairRequest);
    KeyPair keyPair = new KeyPair();
    keyPair = createKeyPairResult.getKeyPair();
    String privateKey = keyPair.getKeyMaterial();
    PrintWriter file = new PrintWriter("/Users/will/.ssh/" + keyGroupName + ".pem");
    file.print(privateKey);
    file.close();
    Runtime.getRuntime().exec("chmod 400 /Users/will/.ssh/" + keyGroupName + ".pem");

    try {

        /*********************************************
         * 
         *  #2 Create two Instances
         *  
         *********************************************/
        System.out.println();
        System.out.println("#2 Create two new Instances");
        int ready_num = 0;
        String insDNS1 = new String();
        String insDNS2 = new String();
        String insId1 = new String();
        String insId2 = new String();
        String insZone1 = new String();
        String insZone2 = new String();

        String imageId = "ami-76f0061f"; //Basic 32-bit Amazon Linux AMI
        int minInstanceCount = 2; // create 2 instance
        int maxInstanceCount = 2;

        /* create instances */
        RunInstancesRequest rir = new RunInstancesRequest(imageId, minInstanceCount, maxInstanceCount);
        rir.withKeyName(keyGroupName).withSecurityGroups(keyGroupName);
        ec2.runInstances(rir);

        /* waiting for instance to start */
        System.out.println("Created instance, wait for pending...");

        DescribeInstancesResult describeInstancesRequest;
        List<Reservation> reservations;
        List<Instance> allInstances = new ArrayList<Instance>();

        while (ready_num < 2) {
            describeInstancesRequest = ec2.describeInstances();
            reservations = describeInstancesRequest.getReservations();
            for (Reservation reservation : reservations) {
                for (Instance ins : reservation.getInstances()) {
                    if (ins.getState().getName().compareTo("running") == 0
                            && ins.getPublicIpAddress() != null) {
                        if (allInstances.size() == 0 || (allInstances.size() > 0
                                && allInstances.get(0).getInstanceId().compareTo(ins.getInstanceId()) != 0)) {
                            ready_num++;
                            allInstances.add(ins);
                        }
                    }
                }
            }
        }

        System.out.println("You have " + allInstances.size() + " Amazon EC2 instance(s).");
        insId1 = allInstances.get(0).getInstanceId();
        insId2 = allInstances.get(1).getInstanceId();
        insDNS1 = allInstances.get(0).getPublicIpAddress();
        insDNS2 = allInstances.get(1).getPublicIpAddress();
        insZone1 = allInstances.get(0).getPlacement().getAvailabilityZone();
        insZone2 = allInstances.get(1).getPlacement().getAvailabilityZone();

        for (Instance ins : allInstances) {
            System.out.println("New instance has been created: " + ins.getInstanceId());
        }

        System.out.println("Both instances are running now:");
        System.out.println("Instance id1: " + insId1);
        System.out.println("IP: " + insDNS1);
        System.out.println("Zone: " + insZone1);
        System.out.println("Instance id1: " + insId2);
        System.out.println("IP: " + insDNS2);
        System.out.println("Zone: " + insZone2);
        System.out.println();

        /*********************************************
         *  #3 Check OR Create two volumes
         *********************************************/
        System.out.println();
        System.out.println("#3 Create volumes");
        String volume_name1 = createVolume(insZone1, null);
        String volume_name2 = createVolume(insZone2, null);

        /*********************************************
         *  #4 Attach the volume to the instance
         *********************************************/
        System.out.println();
        System.out.println("#4 Attach the volume to the instance");
        System.out.println("Wait for volumes to be available...");
        Thread.sleep(20000);

        /* attach instances to existing volume */
        attachVolume(insId1, volume_name1);
        attachVolume(insId2, volume_name2);

        /************************************************
        *  #5 S3 bucket and object
        ***************************************************/
        System.out.println();
        System.out.println("#5 S3 bucket and object");
        s3 = new AmazonS3Client(credentials);

        /* create bucket */
        String bucketName = "cloud-hw1-bucket";
        s3.createBucket(bucketName);

        /* set key */
        String key = "object-hw1.txt";

        /* set value */
        File new_file = File.createTempFile("temp", ".txt");
        new_file.deleteOnExit();
        Writer writer = new OutputStreamWriter(new FileOutputStream(new_file));
        writer.write("This is the file stored on the S3 storage on the first day!!!.");
        writer.close();

        /* put object - bucket, key, value(file) */
        s3.putObject(new PutObjectRequest(bucketName, key, new_file));
        System.out.println("Successfully put file temp.txt to S3, we will read it tomorrow...");
        System.out.println();

        /***********************************
        *   #3 Monitoring (CloudWatch)
        *********************************/
        System.out.println();
        System.out.println("#6 set up cloudwatch");
        try {
            /* create CloudWatch client */
            AmazonCloudWatchClient cloudWatch = new AmazonCloudWatchClient(credentials);
            /* create request message1 */
            GetMetricStatisticsRequest statRequest1 = new GetMetricStatisticsRequest();
            GetMetricStatisticsRequest statRequest2 = new GetMetricStatisticsRequest();
            /* set up request message */
            statRequest1.setNamespace("AWS/EC2"); //namespace
            statRequest2.setNamespace("AWS/EC2"); //namespace
            statRequest1.setPeriod(60); //period of data
            statRequest2.setPeriod(60); //period of data
            ArrayList<String> stats = new ArrayList<String>();
            /* Use one of these strings: Average, Maximum, Minimum, SampleCount, Sum */
            stats.add("Average");
            stats.add("Sum");
            statRequest1.setStatistics(stats);
            statRequest2.setStatistics(stats);
            /* Use one of these strings: CPUUtilization, NetworkIn, NetworkOut, DiskReadBytes, DiskWriteBytes, DiskReadOperations  */
            statRequest1.setMetricName("CPUUtilization");
            statRequest2.setMetricName("CPUUtilization");
            /* set time */
            GregorianCalendar calendar = new GregorianCalendar(TimeZone.getTimeZone("UTC"));
            calendar.add(GregorianCalendar.SECOND, -1 * calendar.get(GregorianCalendar.SECOND)); // 1 second ago
            Date endTime = calendar.getTime();
            calendar.add(GregorianCalendar.MINUTE, -10); // 10 minutes ago
            Date startTime = calendar.getTime();
            statRequest1.setStartTime(startTime);
            statRequest1.setEndTime(endTime);
            statRequest2.setStartTime(startTime);
            statRequest2.setEndTime(endTime);
            /* specify an instance */
            ArrayList<Dimension> dimensions1 = new ArrayList<Dimension>();
            dimensions1.add(new Dimension().withName("InstanceId").withValue(insId1));
            ArrayList<Dimension> dimensions2 = new ArrayList<Dimension>();
            dimensions2.add(new Dimension().withName("InstanceId").withValue(insId2));
            statRequest1.setDimensions(dimensions1);
            statRequest2.setDimensions(dimensions2);
            System.out.println("Set up cloud watch for instance: " + insId1 + " and instance: " + insId2);

            /* !!!!!!!!!!!!here set for 10 loops for now */
            /* get statistics */
            for (int i = 0; i < 10; i++) {
                GetMetricStatisticsResult statResult1 = cloudWatch.getMetricStatistics(statRequest1);
                GetMetricStatisticsResult statResult2 = cloudWatch.getMetricStatistics(statRequest2);
                /* display */
                System.out.println("Instance 1: " + statResult1.toString());
                List<Datapoint> dataList = statResult1.getDatapoints();
                Double averageCPU = null;
                Date timeStamp = null;
                for (Datapoint d : dataList) {
                    averageCPU = d.getAverage();
                    timeStamp = d.getTimestamp();
                    System.out
                            .println("Instance 1 average CPU utlilization for last 10 minutes: " + averageCPU);
                    System.out.println("Instance 1 total CPU utlilization for last 10 minutes: " + d.getSum());
                }
                System.out.println();
                System.out.println("Instance 2: " + statResult1.toString());
                dataList = statResult2.getDatapoints();
                for (Datapoint d : dataList) {
                    averageCPU = d.getAverage();
                    timeStamp = d.getTimestamp();
                    System.out
                            .println("Instance 2 average CPU utlilization for last 10 minutes: " + averageCPU);
                    System.out.println("Instance 2 total CPU utlilization for last 10 minutes: " + d.getSum());
                }
            }

        } catch (AmazonServiceException ase) {
            System.out.println("Caught Exception: " + ase.getMessage());
            System.out.println("Reponse Status Code: " + ase.getStatusCode());
            System.out.println("Error Code: " + ase.getErrorCode());
            System.out.println("Request ID: " + ase.getRequestId());
        }

        /***********************************
        *   # Copy script to 
        *       instance and run
        *********************************/
        System.out.println();
        System.out.println("Waiting for init and automatically SSH...");
        /* call runtime exec to run scp */
        execCmdRuby(insDNS1, keyGroupName);

        /***********************************
        *   # Save instances to image
        *********************************/
        System.out.println();
        System.out.println("******* Approaching 5:00 pm, create ami for instances *********");
        String imageId1;
        String imageId2;
        String snapshot1;
        String snapshot2;

        imageId1 = createAmiFromInstance(insId1, "image1", true);
        imageId2 = createAmiFromInstance(insId2, "image2", true);
        System.out.println("Created first image id: " + imageId1);
        System.out.println("Created second image id: " + imageId2);

        snapshot1 = createSnapShotFromVolume(volume_name1);
        snapshot2 = createSnapShotFromVolume(volume_name2);
        System.out.println("Created first snapshot id: " + snapshot1);
        System.out.println("Created second snapshot id: " + snapshot2);

        /*********************************************
         * 
         *  # Stop Instances
         *  
         *********************************************/
        System.out.println();
        System.out.println("#7 Stop & terminate the Instance");
        List<String> instanceIds = new LinkedList<String>();
        instanceIds.add(insId1);
        instanceIds.add(insId2);
        /* stop instances */
        StopInstancesRequest stopIR = new StopInstancesRequest(instanceIds);
        ec2.stopInstances(stopIR);
        TerminateInstancesRequest tir = new TerminateInstancesRequest(instanceIds);
        ec2.terminateInstances(tir);

        /*********************************************
         * 
         *  # Detach volumes
         *  
         *********************************************/
        System.out.println();
        System.out.println("Detach the volumes from the instances...");
        deatchVolume(insId1, volume_name1);
        deatchVolume(insId2, volume_name2);

        /*********************************************
          * 
          *  # Delete Volumes
          *  
          *********************************************/
        System.out.println();

        while (true) {
            if (getVolumeState(volume_name1).compareTo("available") == 0
                    && getVolumeState(volume_name2).compareTo("available") == 0)
                break;
        }
        System.out.println("Delete volumes...");
        Thread.sleep(10000);
        deleteVolume(volume_name1);
        deleteVolume(volume_name2);

        /*********************************************
          * 
          *  # Second day restore instances and volumes
          *  
          *********************************************/
        System.out.println();
        System.out.println("#8 Second day start up instances from stored amis...");
        String newInsId1 = "";
        String newInsId2 = "";
        String newInsIP1 = "";
        String newInsIP2 = "";
        String newInsZone1 = "";
        String newInsZone2 = "";

        newInsId1 = createInstanceFromImageId(imageId1, keyGroupName);
        newInsId2 = createInstanceFromImageId(imageId2, keyGroupName);
        System.out.println("Second day first instance has been restored with id: " + newInsId1);
        System.out.println("Second day second instance has been restored with id: " + newInsId2);
        newInsZone1 = getInstanceZone(newInsId1);
        newInsZone2 = getInstanceZone(newInsId2);
        System.out.println("New instance 1 zone: " + newInsZone1);
        System.out.println("New instance 2 zone: " + newInsZone2);
        newInsIP1 = getInstanceIP(newInsId1);
        newInsIP2 = getInstanceIP(newInsId2);
        System.out.println("New instance 1 IP: " + newInsIP1);
        System.out.println("New instance 2 IP: " + newInsIP2);

        Thread.sleep(120000);
        /* exec read */
        System.out.println();
        System.out.println("Now start to read the file stored yesterday...");
        execCmdRead(newInsIP1, keyGroupName);

        /*********************************************
         *  
         *  #9 Read data from S3
         *  
         *********************************************/

        /* get the object from the first day */
        System.out.println();
        System.out.println("#9 Reading data from S3 stored on the first day");
        S3Object object = s3.getObject(new GetObjectRequest(bucketName, key));
        BufferedReader reader = new BufferedReader(new InputStreamReader(object.getObjectContent()));
        String data = null;
        while ((data = reader.readLine()) != null) {
            System.out.println(data);
        }

        /*********************************************
         *  
         *  #10 shutdown client object
         *  
         *********************************************/
        System.out.println("#10 shutdown client objects");
        ec2.shutdown();
        s3.shutdown();

    } catch (AmazonServiceException ase) {
        System.out.println("Caught Exception: " + ase.getMessage());
        System.out.println("Reponse Status Code: " + ase.getStatusCode());
        System.out.println("Error Code: " + ase.getErrorCode());
        System.out.println("Request ID: " + ase.getRequestId());
    }

}

From source file:br.unb.cic.bionimbuz.elasticity.legacy.Ec2Commands.java

License:Open Source License

public static void createinstance() throws IOException {
    Ec2Commands.setup();//ww  w  . j  a va  2 s.com

    try {

        System.out.println("Criando nova maquina BioninbuZ");
        String imageId;
        System.out.println("Enter the image AMI id (eg: ami-687b4f2d)");
        imageId = user_input.next();

        int minInstanceCount = 1; // 
        int maxInstanceCount = 1;
        RunInstancesRequest rir = new RunInstancesRequest(imageId, minInstanceCount, maxInstanceCount);
        rir.setInstanceType("t1.micro");

        Scanner keyscan = new Scanner(System.in);
        System.out.println("Do you want to use an existing keypair or do you want to create a new one?");
        System.out.println("#1 Use existing keypair");
        System.out.println("#2 Create a new keypair");
        int keypairoption;
        String key; //existing keypair name
        keypairoption = keyscan.nextInt();
        if (keypairoption == 1) {
            System.out.println("Enter the existing keypair name to use with the new instance");
            key = keyscan.next();
            rir.withKeyName(key);
        } else if (keypairoption == 2) {
            //count++;
            System.out.println("Enter the keypair name to create");
            String newkeyname;
            newkeyname = keyscan.next();
            CreateKeyPairRequest newKeyRequest = new CreateKeyPairRequest();
            newKeyRequest.setKeyName(newkeyname);
            CreateKeyPairResult keyresult = EC2.createKeyPair(newKeyRequest);

            keyPair = keyresult.getKeyPair();
            System.out.println("The key we created is = " + keyPair.getKeyName() + "\nIts fingerprint is="
                    + keyPair.getKeyFingerprint() + "\nIts material is= \n" + keyPair.getKeyMaterial());

            System.out.println(
                    "Enter the directory to store .pem file (eg: Windows C:\\Users\\user\\Desktop\\, Linux /user/home)");
            String dir;
            dir = keyscan.next();
            String fileName = dir + newkeyname + ".pem";
            File distFile = new File(fileName);
            BufferedReader bufferedReader = new BufferedReader(new StringReader(keyPair.getKeyMaterial()));
            BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(distFile));
            char buf[] = new char[1024];
            int len;
            while ((len = bufferedReader.read(buf)) != -1) {
                bufferedWriter.write(buf, 0, len);
            }
            bufferedWriter.flush();
            bufferedReader.close();
            bufferedWriter.close();

        }

        rir.withSecurityGroups("default");

        RunInstancesResult result = EC2.runInstances(rir);

        System.out.println("waiting");
        try {
            Thread.sleep(50000);
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        System.out.println("OK");

        List<Instance> resultInstance = result.getReservation().getInstances();

        String createdInstanceId = null;
        for (Instance ins : resultInstance) {

            createdInstanceId = ins.getInstanceId();
            System.out.println("New instance has been created: " + ins.getInstanceId());//print the instance ID

        }

        try {
            Thread.sleep(3000);
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        System.out.println();
        System.out.println("Restarting the application");
        System.out.println();
        //    Ec2Commands.enteroption();   
    } catch (AmazonServiceException ase) {
        System.out.println("Caught Exception: " + ase.getMessage());
        System.out.println("Reponse Status Code: " + ase.getStatusCode());
        System.out.println("Error Code: " + ase.getErrorCode());
        System.out.println("Request ID: " + ase.getRequestId());
        System.out.println("Give a valid input");
        System.out.println("");
        //      Ec2Commands.enteroption();
    }

}

From source file:br.unb.cic.bionimbuz.services.elasticity.Ec2Commands.java

License:Open Source License

public static void createinstance() throws IOException {
    Ec2Commands.setup();/*from ww  w. j  a v  a  2  s. com*/

    try {

        System.out.println("Criando nova maquina BioninbuZ");
        String imageId;
        System.out.println("Enter the image AMI id (eg: ami-687b4f2d)");
        imageId = user_input.next();

        int minInstanceCount = 1; // 
        int maxInstanceCount = 1;
        RunInstancesRequest rir = new RunInstancesRequest(imageId, minInstanceCount, maxInstanceCount);
        rir.setInstanceType("t1.micro");

        try (Scanner keyscan = new Scanner(System.in)) {
            System.out.println("Do you want to use an existing keypair or do you want to create a new one?");
            System.out.println("#1 Use existing keypair");
            System.out.println("#2 Create a new keypair");
            int keypairoption;
            String key; //existing keypair name
            keypairoption = keyscan.nextInt();
            if (keypairoption == 1) {
                System.out.println("Enter the existing keypair name to use with the new instance");
                key = keyscan.next();
                rir.withKeyName(key);
            } else if (keypairoption == 2) {
                //count++;
                System.out.println("Enter the keypair name to create");
                String newkeyname;
                newkeyname = keyscan.next();
                CreateKeyPairRequest newKeyRequest = new CreateKeyPairRequest();
                newKeyRequest.setKeyName(newkeyname);
                CreateKeyPairResult keyresult = EC2.createKeyPair(newKeyRequest);

                keyPair = keyresult.getKeyPair();
                System.out.println("The key we created is = " + keyPair.getKeyName() + "\nIts fingerprint is="
                        + keyPair.getKeyFingerprint() + "\nIts material is= \n" + keyPair.getKeyMaterial());

                System.out.println(
                        "Enter the directory to store .pem file (eg: Windows C:\\Users\\user\\Desktop\\, Linux /user/home)");
                String dir;
                dir = keyscan.next();
                String fileName = dir + newkeyname + ".pem";
                File distFile = new File(fileName);
                BufferedReader bufferedReader = new BufferedReader(new StringReader(keyPair.getKeyMaterial()));
                BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(distFile));
                char buf[] = new char[1024];
                int len;
                while ((len = bufferedReader.read(buf)) != -1) {
                    bufferedWriter.write(buf, 0, len);
                }
                bufferedWriter.flush();
                bufferedReader.close();
                bufferedWriter.close();

            }
        }

        rir.withSecurityGroups("default");

        RunInstancesResult result = EC2.runInstances(rir);

        System.out.println("waiting");
        try {
            Thread.sleep(50000);
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        System.out.println("OK");

        List<Instance> resultInstance = result.getReservation().getInstances();

        String createdInstanceId = null;
        for (Instance ins : resultInstance) {

            createdInstanceId = ins.getInstanceId();
            System.out.println("New instance has been created: " + ins.getInstanceId());//print the instance ID

        }

        try {
            Thread.sleep(3000);
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        System.out.println();
        System.out.println("Restarting the application");
        System.out.println();
        //    Ec2Commands.enteroption();   
    } catch (AmazonServiceException ase) {
        System.out.println("Caught Exception: " + ase.getMessage());
        System.out.println("Reponse Status Code: " + ase.getStatusCode());
        System.out.println("Error Code: " + ase.getErrorCode());
        System.out.println("Request ID: " + ase.getRequestId());
        System.out.println("Give a valid input");
        System.out.println("");
        //      Ec2Commands.enteroption();
    }

}

From source file:com.cloudera.director.aws.ec2.EC2Provider.java

License:Apache License

/**
 * Builds a {@code RunInstancesRequest} starting from a template and a set of
 * virtual IDs.//from ww  w.ja  va2s . c o  m
 *
 * @param template           the instance template
 * @param virtualInstanceIds the virtual instance IDs
 */
@SuppressWarnings("ConstantConditions")
private RunInstancesRequest newRunInstancesRequest(EC2InstanceTemplate template,
        Collection<String> virtualInstanceIds, int minCount) {

    LOG.info(">> Building instance requests");

    int groupSize = virtualInstanceIds.size();
    String image = template.getImage();
    String type = template.getType();

    InstanceNetworkInterfaceSpecification network = getInstanceNetworkInterfaceSpecification(template);

    List<BlockDeviceMapping> deviceMappings = getBlockDeviceMappings(template);

    LOG.info(">> Instance request type: {}, image: {}, group size: {}", type, image, groupSize);

    RunInstancesRequest request = new RunInstancesRequest().withImageId(image).withInstanceType(type)
            .withMaxCount(groupSize).withMinCount(minCount)
            .withClientToken(
                    getHashOfVirtualInstanceIdsForClientToken(virtualInstanceIds, Optional.<Long>absent()))
            .withNetworkInterfaces(network).withBlockDeviceMappings(deviceMappings);

    if (template.getIamProfileName().isPresent()) {
        request.withIamInstanceProfile(
                new IamInstanceProfileSpecification().withName(template.getIamProfileName().get()));
    }

    if (template.getKeyName().isPresent()) {
        request.withKeyName(template.getKeyName().get());
    }

    Placement placement = null;
    if (template.getAvailabilityZone().isPresent()) {
        placement = new Placement().withAvailabilityZone(template.getAvailabilityZone().get());
    }
    if (template.getPlacementGroup().isPresent()) {
        placement = (placement == null) ? new Placement().withGroupName(template.getPlacementGroup().get())
                : placement.withGroupName(template.getPlacementGroup().get());
    }
    placement = (placement == null) ? new Placement().withTenancy(template.getTenancy())
            : placement.withTenancy(template.getTenancy());

    request.withPlacement(placement);

    return request;
}

From source file:com.kpbird.aws.Main.java

private void createEC2OnDemandInstance() {
    try {/* ww  w  . j av  a 2  s .  co  m*/

        // request for new on demand instance
        RunInstancesRequest rir = new RunInstancesRequest();
        rir.withImageId(imageId);
        rir.withInstanceType(instanceType);
        rir.withMinCount(1);
        rir.withMaxCount(1);
        rir.withKeyName(keyName);
        rir.withMonitoring(true);
        rir.withSecurityGroups(groupName);

        RunInstancesResult riresult = ec2client.runInstances(rir);
        log.Info(riresult.getReservation().getReservationId());

        /// Find newly created instance id
        String instanceId = null;
        DescribeInstancesResult result = ec2client.describeInstances();
        Iterator<Reservation> i = result.getReservations().iterator();
        while (i.hasNext()) {
            Reservation r = i.next();
            List<Instance> instances = r.getInstances();
            for (Instance ii : instances) {
                log.Info(ii.getImageId() + "\t" + ii.getInstanceId() + "\t" + ii.getState().getName() + "\t"
                        + ii.getPrivateDnsName());
                if (ii.getState().getName().equals("pending")) {
                    instanceId = ii.getInstanceId();
                }
            }
        }

        log.Info("New Instance ID :" + instanceId);
        /// Waiting for Instance Running////
        boolean isWaiting = true;
        while (isWaiting) {
            log.Info("*** Waiting ***");
            Thread.sleep(1000);
            DescribeInstancesResult r = ec2client.describeInstances();
            Iterator<Reservation> ir = r.getReservations().iterator();
            while (ir.hasNext()) {
                Reservation rr = ir.next();
                List<Instance> instances = rr.getInstances();
                for (Instance ii : instances) {
                    log.Info(ii.getImageId() + "\t" + ii.getInstanceId() + "\t" + ii.getState().getName() + "\t"
                            + ii.getPrivateDnsName());
                    if (ii.getState().getName().equals("running") && ii.getInstanceId().equals(instanceId)) {
                        log.Info(ii.getPublicDnsName());
                        isWaiting = false;
                    }
                }
            }
        }

        /// Creating Tag for New Instance ////
        log.Info("Creating Tags for New Instance");
        CreateTagsRequest crt = new CreateTagsRequest();
        ArrayList<Tag> arrTag = new ArrayList<Tag>();
        arrTag.add(new Tag().withKey("Name").withValue(instanceName));
        crt.setTags(arrTag);

        ArrayList<String> arrInstances = new ArrayList<String>();
        arrInstances.add(instanceId);
        crt.setResources(arrInstances);
        ec2client.createTags(crt);

    } catch (Exception e) {
        e.printStackTrace();
        System.exit(0);
    }
}

From source file:com.rmn.qa.aws.AwsVmManager.java

License:Open Source License

public List<Instance> launchNodes(final String amiId, final String instanceType, final int numberToStart,
        final String userData, final boolean terminateOnShutdown) throws NodesCouldNotBeStartedException {
    RunInstancesRequest runRequest = new RunInstancesRequest();
    runRequest.withImageId(amiId).withInstanceType(instanceType).withMinCount(numberToStart)
            .withMaxCount(numberToStart).withUserData(userData);
    if (terminateOnShutdown) {
        runRequest.withInstanceInitiatedShutdownBehavior("terminate");
    }/*from  w  w w  .j a  va  2 s .  c o m*/

    log.info("Setting image id: " + runRequest.getImageId());
    log.info("Setting instance type: " + runRequest.getInstanceType());

    Properties awsProperties = getAwsProperties();
    String subnetKey = awsProperties.getProperty(region + "_subnet_id");
    if (subnetKey != null) {
        log.info("Setting subnet: " + subnetKey);
        runRequest.withSubnetId(subnetKey);
    }

    String securityGroupKey = awsProperties.getProperty(region + "_security_group");
    if (securityGroupKey != null) {

        String[] splitSecurityGroupdIds = securityGroupKey.split(",");

        List securityGroupIdsAryLst = new ArrayList();
        for (int i = 0; i < splitSecurityGroupdIds.length; i++) {

            log.info("Setting security group(s): " + splitSecurityGroupdIds[i]);
            securityGroupIdsAryLst.add(splitSecurityGroupdIds[i]);
        }
        runRequest.setSecurityGroupIds(securityGroupIdsAryLst);
    }

    String keyName = awsProperties.getProperty(region + "_key_name");
    if (keyName != null) {
        log.info("Setting keyname:" + keyName);
        runRequest.withKeyName(keyName);
    }

    log.info("Sending run request to AWS...");

    RunInstancesResult runInstancesResult = getResults(runRequest, 0);
    log.info("Run request result returned.  Adding tags");

    // Tag the instances with the standard RMN AWS data
    List<Instance> instances = runInstancesResult.getReservation().getInstances();
    if (instances.size() == 0) {
        throw new NodesCouldNotBeStartedException(String.format(
                "Error starting up nodes -- count was zero and did not match expected count of %d",
                numberToStart));
    }

    associateTags(new Date().toString(), instances);
    return instances;
}

From source file:com.urbancode.terraform.tasks.aws.helpers.AWSHelper.java

License:Apache License

/**
 * Launches a single instance with given parameters.
 * The REQUIRED parameters are amiId;// ww w  .j  a  va 2  s. c  om
 * You should always pass in a keyPair also, unless you know exactly what you are doing. Chances
 * are that you won't be able to get into your instance and it will be useless.
 * If groups is null, the instance will be launched with the default security group.
 * Subnet is only required if you're launching into a VPC.
 *
 * This will return the instanceId of the instance launched.
 *
 * @param amiId
 * @param subnetId
 * @param keyPair
 * @param size
 * @param userData
 * @param groups
 * @param ec2Client
 * @return instanceId
 */
public String launchAmi(String amiId, String subnetId, String keyPair, String size, String userData,
        List<String> groups, List<BlockDeviceMapping> blockMaps, String ariId, String akiId, String zone,
        String privateIp, AmazonEC2 ec2Client) {
    String instanceId = null;
    RunInstancesRequest request = new RunInstancesRequest().withImageId(amiId).withMinCount(1).withMaxCount(1);
    if (subnetId != null && !subnetId.isEmpty()) {
        // launch in VPC
        request = request.withSubnetId(subnetId);
    } else if (zone != null && !zone.isEmpty()) {
        // launch in EC2
        Placement placement = new Placement().withAvailabilityZone(zone);
        request = request.withPlacement(placement);
    } else {
        log.error("No place to launch the instance specified." + "\nPlease specify either a subnet or region");
    }
    if (keyPair != null) {
        request = request.withKeyName(keyPair);
    }
    if (size != null) {
        request = request.withInstanceType(size);
    }
    if (userData != null) {
        request = request.withUserData(Base64.encodeBase64String(userData.getBytes()));
    }
    if (groups != null && !groups.isEmpty()) {
        request = request.withSecurityGroupIds(groups);
    }
    if (blockMaps != null && !blockMaps.isEmpty()) {
        request = request.withBlockDeviceMappings(blockMaps);
    }
    if (ariId != null && !ariId.isEmpty()) {
        request = request.withRamdiskId(ariId);
    }
    if (akiId != null && !akiId.isEmpty()) {
        request = request.withKernelId(akiId);
    }
    if (privateIp != null && !privateIp.isEmpty()) {
        request = request.withPrivateIpAddress(privateIp);
    }

    RunInstancesResult result = ec2Client.runInstances(request);

    List<Instance> instances = result.getReservation().getInstances();

    if (instances == null) {
        instanceId = null;
        log.error("List of instances is null!");
    } else if (instances.size() == 0) {
        instanceId = null;
        log.error("List of instances is empty!");
    } else if (instances.size() == 1) {
        instanceId = instances.get(0).getInstanceId();
        log.info("Created instance with Id: " + instanceId);
    } else if (instances.size() > 1) {
        log.error("Too many instances! This is not supported!");
    }

    return instanceId;
}

From source file:com.xebialabs.overcast.host.Ec2CloudHost.java

License:Apache License

protected String runInstance() {
    RunInstancesRequest run = new RunInstancesRequest(amiId, 1, 1);
    run.withInstanceInitiatedShutdownBehavior("terminate");
    if (amiInstanceType != null) {
        run.withInstanceType(amiInstanceType);
    }//from  w ww  . j a  v  a  2s .  co m
    if (amiSecurityGroup != null) {
        run.withSecurityGroups(amiSecurityGroup);
    }
    if (amiKeyName != null) {
        run.withKeyName(amiKeyName);
    }
    if (amiAvailabilityZone != null) {
        run.withPlacement(new Placement(amiAvailabilityZone));
    }

    RunInstancesResult result = ec2.runInstances(run);

    return result.getReservation().getInstances().get(0).getInstanceId();
}

From source file:hu.mta.sztaki.lpds.cloud.entice.imageoptimizer.iaashandler.amazontarget.EC2VirtualMachine.java

License:Apache License

@Override
// invoked from constructor
protected String runInstance(String keyName) throws VMManagementException {
    try {// w ww  . j  av  a2s . c  o  m
        Shrinker.myLogger
                .info("Trying to start instance (" + getImageId() + "/" + instanceType + "@" + endpoint + ")");
        int requests = reqCounter.incrementAndGet();
        //         System.out.println("[T" + (Thread.currentThread().getId() % 100) + "] VMs up: " + requests);
        if (requests > totalReqLimit) {
            Shrinker.myLogger.severe("Terminating shrinking process, too many non-terminated requests");
            Thread.dumpStack();
            System.exit(1);
        }

        RunInstancesRequest runInstancesRequest = new RunInstancesRequest();
        runInstancesRequest.withImageId(getImageId()).withInstanceType(instanceType).withMinCount(1)
                .withMaxCount(1);
        if (keyName != null)
            runInstancesRequest.withKeyName(keyName);
        RunInstancesResult runInstancesResult = this.amazonEC2Client.runInstances(runInstancesRequest);
        this.reservation = runInstancesResult.getReservation();

        List<String> instanceIds = getInstanceIds();
        if (instanceIds.size() != 1)
            throw new Exception("No or too many instances started");
        Shrinker.myLogger.info("Started instance (" + getImageId() + "/" + instanceType + "@" + endpoint + "): "
                + getInstanceIds());

        VirtualMachine.vmsStarted.incrementAndGet();

        this.ip = null;
        this.setPrivateIP(null);
        System.out.println("[T" + (Thread.currentThread().getId() % 100) + "] VM started: " + instanceIds.get(0)
                + " (@" + new SimpleDateFormat("HH:mm:ss").format(Calendar.getInstance().getTime()) + ")");
        return instanceIds.get(0);
    } catch (AmazonServiceException x) {
        Shrinker.myLogger.info("runInstance error: " + x.getMessage());
        throw new VMManagementException("runInstance exception", x);
    } catch (AmazonClientException x) {
        Shrinker.myLogger.info("runInstance error: " + x.getMessage());
        throw new VMManagementException("runInstance exception", x);
    } catch (Exception x) {
        Shrinker.myLogger.info("runInstance error: " + x.getMessage());
        throw new VMManagementException("runInstance exception", x);
    }
}