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

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

Introduction

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

Prototype


public void setMaxCount(Integer maxCount) 

Source Link

Document

The maximum number of instances to launch.

Usage

From source file:advanced.Requests.java

License:Open Source License

public void launchOnDemand() {
    //============================================================================================//
    //====================================== Launch an On-Demand Instance ========================// 
    //====================================== If we Didn't Get a Spot Instance ====================// 
    //============================================================================================//

    // Setup the request for 1 x t1.micro using the same security group and 
    // AMI id as the Spot request.
    RunInstancesRequest runInstancesRequest = new RunInstancesRequest();
    runInstancesRequest.setInstanceType(instanceType);
    runInstancesRequest.setImageId(amiID);
    runInstancesRequest.setMinCount(Integer.valueOf(1));
    runInstancesRequest.setMaxCount(Integer.valueOf(1));

    // Add the security group to the request.
    ArrayList<String> securityGroups = new ArrayList<String>();
    securityGroups.add(securityGroup);/*from w  ww.  jav a 2s  . c  o m*/
    runInstancesRequest.setSecurityGroups(securityGroups);

    // Launch the instance.
    RunInstancesResult runResult = ec2.runInstances(runInstancesRequest);

    // Add the instance id into the instance id list, so we can potentially later
    // terminate that list.
    for (Instance instance : runResult.getReservation().getInstances()) {
        System.out.println("Launched On-Demand Instace: " + instance.getInstanceId());
        instanceIds.add(instance.getInstanceId());
    }
}

From source file:com.liferay.amazontools.AMIBuilder.java

License:Open Source License

protected void start() {
    RunInstancesRequest runInstancesRequest = new RunInstancesRequest();

    String availabilityZone = properties.getProperty("availability.zone");

    if (!isZoneAvailable(availabilityZone)) {
        throw new RuntimeException("Unavailable zone " + availabilityZone);
    }//from ww  w. j a  v  a2  s  .  co  m

    String imageId = properties.getProperty("image.id");

    if (imageId == null) {
        imageId = getImageId(properties.getProperty("image.name"));
    }

    runInstancesRequest.setImageId(imageId);

    runInstancesRequest.setInstanceType(properties.getProperty("instance.type"));
    runInstancesRequest.setKeyName(properties.getProperty("key.name"));
    runInstancesRequest.setMaxCount(1);
    runInstancesRequest.setMinCount(1);

    Placement placement = new Placement();

    placement.setAvailabilityZone(availabilityZone);

    runInstancesRequest.setPlacement(placement);

    List<String> securityGroupsIds = new ArrayList<String>();

    securityGroupsIds.add(properties.getProperty("security.group.id"));

    runInstancesRequest.setSecurityGroupIds(securityGroupsIds);

    RunInstancesResult runInstancesResult = amazonEC2Client.runInstances(runInstancesRequest);

    Reservation reservation = runInstancesResult.getReservation();

    List<Instance> instances = reservation.getInstances();

    if (instances.isEmpty()) {
        throw new RuntimeException("Unable to create instances");
    }

    Instance instance = instances.get(0);

    _instanceId = instance.getInstanceId();
    _publicIpAddress = instance.getPublicIpAddress();

    StringBuilder sb = new StringBuilder(13);

    sb.append("{imageId=");
    sb.append(instance.getImageId());
    sb.append(", instanceId=");
    sb.append(_instanceId);
    sb.append(", instanceType=");
    sb.append(instance.getInstanceType());
    sb.append(", keyName=");
    sb.append(instance.getKeyName());
    sb.append(", reservationId=");
    sb.append(reservation.getReservationId());
    sb.append(", state=");

    InstanceState instanceState = instance.getState();

    sb.append(instanceState.getName());

    sb.append("}");

    System.out.println("Starting instance " + sb.toString());

    boolean running = false;

    for (int i = 0; i < 6; i++) {
        sleep(30);

        instance = getRunningInstance(_instanceId);

        if (instance != null) {
            _publicIpAddress = instance.getPublicIpAddress();

            running = true;

            sb = new StringBuilder(7);

            sb.append("{instanceId=");
            sb.append(_instanceId);
            sb.append(", publicIpAddress=");
            sb.append(_publicIpAddress);
            sb.append(", stat=");

            instanceState = instance.getState();

            sb.append(instanceState.getName());

            sb.append("}");

            System.out.println("Started instance " + sb.toString());

            break;
        }
    }

    if (!running) {
        throw new RuntimeException("Unable to start instance " + _instanceId);
    }
}

From source file:com.norbl.cbp.ppe.Ec2Wrangler.java

License:Open Source License

/** This version of <tt>launchInstances()</tt> gets all
 *  parameters from method arguments. //from   w  w w . j ava  2  s. c  o  m
 *        
  * @param instanceType
  * @param imageID
  * @param availabilityZone
  * @param minInstances
  * @param maxInstances
  * @param keyName
  * @param securityGroupName
  * @param networkName
  * @param userData
  * @return
  * @throws MissingParamsException
  * @throws ImproperParamException 
  */
public String launchInstances(InstanceType instanceType, String imageID, String availabilityZone,
        int minInstances, int maxInstances, String keyName, String securityGroupName, String networkName,
        String userData) throws MissingParamsException, ImproperParamException {

    if ((minInstances < 1) || (maxInstances < minInstances))
        throw new ImproperParamException("instances min=" + minInstances + " max=" + maxInstances);

    RunInstancesRequest req = new RunInstancesRequest();
    req.setInstanceType(instanceType);
    req.setImageId(imageID);
    if (Ec2Location.isValidAvailablityZone(ec2Client, availabilityZone))
        setAvailabilityZone(req, availabilityZone);
    // else any zone will do, so don't set it.
    req.setMinCount(minInstances);
    req.setMaxCount(maxInstances);
    req.setKeyName(keyName);
    List<String> sgs = new ArrayList<String>();
    sgs.add(securityGroupName);
    req.setSecurityGroups(sgs);
    req.setUserData(Base64.encodeBase64String(userData.getBytes()));

    String networkID = NiM.createNetworkID();
    NetworkInfo ni = new NetworkInfo(networkID, networkName);
    NiM.register(ni);
    ni.setState(NetworkInfo.State.pending);

    if (isHVM(imageID))
        setupClusterPlacementGroup(req);

    RunInstancesResult rr = ec2Client.runInstances(req);

    NiM.update(this); // Update the network info

    waitForAllInstancesToBeRunning(rr);

    tagInstances(getInstanceIDs(rr), networkID, networkName);

    NiM.update(getInstancesAllListed()); // Update the network info

    return (networkID);
}

From source file:com.pinterest.arcee.aws.EC2HostInfoDAOImpl.java

License:Apache License

@Override
public List<HostBean> launchEC2Instances(GroupBean groupBean, int instanceCnt, String subnet) throws Exception {
    RunInstancesRequest request = new RunInstancesRequest();
    request.setImageId(groupBean.getImage_id());
    request.setInstanceType(groupBean.getInstance_type());
    request.setKeyName("ops");
    request.setSecurityGroupIds(Arrays.asList(groupBean.getSecurity_group()));
    request.setSubnetId(subnet);// w  w w.j av a2 s .  c om
    request.setUserData(groupBean.getUser_data());
    IamInstanceProfileSpecification iamRole = new IamInstanceProfileSpecification();
    iamRole.setArn(groupBean.getIam_role());
    request.setIamInstanceProfile(iamRole);
    request.setMinCount(instanceCnt);
    request.setMaxCount(instanceCnt);

    List<HostBean> newHosts = new ArrayList<>();
    try {
        RunInstancesResult result = ec2Client.runInstances(request);
        List<Instance> instances = result.getReservation().getInstances();
        LOG.info("Launch instances {}", instances.toString());
        for (Instance instance : instances) {
            HostBean host = new HostBean();
            host.setHost_name(instance.getInstanceId());
            host.setHost_id(instance.getInstanceId());
            host.setIp(instance.getPrivateIpAddress());
            host.setGroup_name(groupBean.getGroup_name());
            host.setState(HostState.PROVISIONED);
            host.setCreate_date(instance.getLaunchTime().getTime());
            host.setLast_update(instance.getLaunchTime().getTime());
            newHosts.add(host);
        }
    } catch (AmazonClientException ex) {
        LOG.error(String.format("Failed to call aws runInstances when launching host %s", newHosts.toString()),
                ex);
        throw new DeployInternalException(
                String.format("Failed to call aws runInstances when launching host %s", newHosts.toString()),
                ex);
    }
    return newHosts;
}

From source file:elasticity.services.AmazonService.java

License:Open Source License

/**
 * Runs a VM instance on an EC2 compatible cloud.
 * /*from w w  w  .j  av  a2 s  .  c o  m*/
 * @return The IP of the started instance.
 */
public String runInstance() throws Exception {
    logger.log(Level.INFO, "Running new instance..");
    //Prepares the run request.
    RunInstancesRequest runInstancesRequest = new RunInstancesRequest();
    runInstancesRequest.setImageId(awsImageId);
    runInstancesRequest.setKeyName(awsKeypair);
    runInstancesRequest.setSecurityGroups(Collections.singleton(awsSecurityGroup));
    runInstancesRequest.setInstanceType(awsInstanceType);
    runInstancesRequest.setMaxCount(1);
    runInstancesRequest.setMinCount(1);

    //Executes the run request.
    String instanceId = ""; //Will be changed eventually.
    boolean done = false;
    while (!done) {
        try {
            RunInstancesResult runInstancesResult = ec2.runInstances(runInstancesRequest);
            instanceId = runInstancesResult.getReservation().getInstances().get(0).getInstanceId();
            done = true;
        } catch (Exception e) {
            logger.log(Level.INFO, "Error while sending RunInstanceRequest, retrying in 1s...");
            e.printStackTrace(System.out);
            Thread.sleep(1000);
        }
    }

    logger.log(Level.INFO, "Sent RunInstanceRequest successfully..");

    //Waits for the instance to be "running".
    String instanceIp = ""; //Will be changed eventually.
    done = false;
    while (!done) {
        try {
            Thread.sleep(1000);

            DescribeInstancesRequest describeInstancesRequest = new DescribeInstancesRequest();
            describeInstancesRequest.withInstanceIds(instanceId);
            DescribeInstancesResult describeInstancesResult = ec2.describeInstances(describeInstancesRequest);

            Instance instance = describeInstancesResult.getReservations().get(0).getInstances().get(0);
            logger.log(Level.INFO, "Current instance state: " + instance.getState().getName() + "..");
            if (instance.getState().getName().equals("running")) {
                instanceIp = instance.getPrivateIpAddress();
                ip2id.put(instanceIp, instanceId);
                done = true;
            }
        } catch (Exception e) {
            logger.log(Level.INFO, "Failed to get instance description, retrying..");
        }
    }

    logger.log(Level.INFO, "Instance ran with IP: " + instanceIp + ".");
    return instanceIp;
}

From source file:fr.xebia.cloud.amazon.aws.tools.AmazonAwsUtils.java

License:Apache License

/**
 * <p>//w  w w .  j  a v  a 2 s .c o  m
 * Create EC2 instances and ensure these instances are successfully started.
 * </p>
 * <p>
 * Successfully started means they reached the
 * {@link InstanceStateName#Running} state.
 * </p>
 * <p>
 * If the startup of an instance failed (e.g.
 * "Server.InternalError: Internal error on launch"), the instance is
 * terminated and another one is launched.
 * </p>
 * <p>
 * Max retry count: 3.
 * </p>
 *
 * @param runInstancesRequest
 * @param ec2
 * @return list of "Running" created instances. List size is greater or
 *         equals to given {@link RunInstancesRequest#getMinCount()}
 */
@Nonnull
public static List<Instance> reliableEc2RunInstances(@Nonnull RunInstancesRequest runInstancesRequest,
        @Nonnull AmazonEC2 ec2) {
    int initialInstanceMinCount = runInstancesRequest.getMinCount();
    int initialInstanceMaxCount = runInstancesRequest.getMaxCount();

    try {
        int tryCount = 1;
        List<Instance> result = ec2.runInstances(runInstancesRequest).getReservation().getInstances();
        result = AmazonAwsUtils.awaitForEc2Instances(result, ec2);

        //Check for instances state
        while (result.size() < initialInstanceMinCount && tryCount < 3) {
            runInstancesRequest.setMinCount(initialInstanceMinCount - result.size());
            runInstancesRequest.setMaxCount(initialInstanceMinCount - result.size());

            List<Instance> instances = ec2.runInstances(runInstancesRequest).getReservation().getInstances();
            instances = AmazonAwsUtils.awaitForEc2Instances(instances, ec2);
            result.addAll(instances);
            tryCount++;
        }

        //Check for SSH availability
        for (Iterator<Instance> itInstance = result.iterator(); itInstance.hasNext();) {
            Instance instance = itInstance.next();
            try {
                if (instance.getImageId().equals(InfrastructureCreationStep.GRAPHITE_IMAGE_ID)) {
                    awaitForSshAvailability(instance, "root");
                } else {
                    awaitForSshAvailability(instance, "ec2-user");
                }
            } catch (IllegalStateException e) {
                //Not available => terminate instance
                ec2.terminateInstances(
                        new TerminateInstancesRequest(Lists.newArrayList(instance.getInstanceId())));
                itInstance.remove();
            }
        }

        if (result.size() < initialInstanceMinCount) {
            throw new IllegalStateException("Failure to create " + initialInstanceMinCount + " instances, only "
                    + result.size() + " instances ("
                    + Joiner.on(",").join(
                            Collections2.transform(result, AmazonAwsFunctions.EC2_INSTANCE_TO_INSTANCE_ID))
                    + ") were started on request " + runInstancesRequest);
        }

        return result;
    } finally {
        // restore runInstancesRequest state
        runInstancesRequest.setMinCount(initialInstanceMinCount);
        runInstancesRequest.setMaxCount(initialInstanceMaxCount);
    }
}

From source file:jp.aws.test.ec2.EC2Instance.java

License:Apache License

/**
 * EC2/*  www.ja  v a2  s . c o m*/
 *
 * @param imageId
 * @param min
 * @param max
 * @param instanceType
 * @param keyPairName
 * @param availabilityZone
 * @param securityGroups
 * @return Vector<Instance>
 * @throws Exception
 */
public Vector<Instance> launchEC2Instances(String imageId, int min, int max, String instanceType,
        String keyPairName, String availabilityZone, Collection<String> securityGroups, String additionalInfo,
        String userData) throws Exception {

    Vector<Instance> newInstances = new Vector<Instance>();

    if (min <= 0 || max <= 0 || min > max) {
        return newInstances;
    }

    RunInstancesRequest request = new RunInstancesRequest();
    request.setImageId(imageId);
    request.setInstanceType(instanceType);
    request.setMinCount(min);
    request.setMaxCount(max);
    Placement p = new Placement();
    if (availabilityZone.toLowerCase().equals("any"))
        availabilityZone = ""; // ??????
    p.setAvailabilityZone(availabilityZone);
    request.setPlacement(p);
    request.setSecurityGroups(securityGroups);
    request.setKeyName(keyPairName);// assign Keypair name for this request
    request.setUserData(userData);
    request.setAdditionalInfo(additionalInfo);

    // 
    RunInstancesResult runInstancesRes = clientManager.ec2().runInstances(request);
    String reservationId = runInstancesRes.getReservation().getReservationId();

    List<Instance> instances = runInstancesRes.getReservation().getInstances();
    if (runInstancesRes != null) {
        for (Instance instance : instances) {
            // EC2InstanceObject newInstanceObject = new
            // EC2InstanceObject();
            // newInstanceObject.setDnsName(i.getPublicDnsName());
            // newInstanceObject.setInstanceId(i.getInstanceId());
            // instances.add(newInstanceObject);
            // newInstances.add(newInstanceObject);
            newInstances.add(instance);
        }
    }

    return newInstances;
}

From source file:n3phele.factory.ec2.VirtualServerResource.java

License:Open Source License

private int addOnDemandInstance(List<VirtualServer> items) {

    RunInstancesRequest vs = new RunInstancesRequest();

    vs.setMinCount(items.size());//from  w  ww .j av a  2s . c om
    vs.setMaxCount(items.size());
    String token = items.get(0).getIdempotencyKey();

    if (token != null && token.length() > 64) {
        token = token.substring(token.length() - 64);
    }
    vs.setClientToken(token);
    HashMap<String, String> map = items.get(0).getParametersMap();
    Injector.inject(vs, map);
    if (map.containsKey("availabilityZone") || map.containsKey("groupName")) {
        Placement p = new Placement();
        if (map.containsKey("availabilityZone")) {
            String availabilityZone = map.get("availabilityZone");
            if (availabilityZone != null && !availabilityZone.equals("")) {
                p.setAvailabilityZone(map.get("availabilityZone"));
                vs.setPlacement(p);
            }
        }
        if (map.containsKey("groupName")) {
            String groupName = map.get("groupName");
            if (groupName != null && !groupName.equals("")) {
                p.setGroupName(map.get("groupName"));
                vs.setPlacement(p);
            }
        }

    }
    if (items.size() == 1 && createWithZombie(items.get(0))) {
        return 1;
    }
    AmazonEC2Client client = getEC2Client(items.get(0).getAccessKey(), items.get(0).getEncryptedKey(),
            items.get(0).getLocation());
    RunInstancesResult result = null;
    try {
        result = client.runInstances(vs);
    } catch (AmazonServiceException e) {
        log.log(Level.WARNING, "EC2 error " + e.getErrorCode(), e);
        throw new WebApplicationException(e, Status.BAD_REQUEST);
    } catch (AmazonClientException e) {
        log.log(Level.SEVERE, "EC2 AmazonClientException", e);
        log.severe("Check for orphaned VMs");
        try {
            result = client.runInstances(vs);
        } catch (Exception e2) {
            log.log(Level.SEVERE, "EC2 AmazonClientException", e2);
            throw new WebApplicationException(e, Status.BAD_REQUEST);
        }
    }
    int i = 0;
    for (Instance ec2Instance : result.getReservation().getInstances()) {
        log.info("Create VM[" + i + "] has Instance id " + ec2Instance.getInstanceId());
        items.get(i).setInstanceId(ec2Instance.getInstanceId());
        i++;
    }

    return result.getReservation().getInstances().size();
}

From source file:net.firejack.aws.web.controller.AWSController.java

License:Apache License

@ResponseBody
@RequestMapping(value = "instance", method = RequestMethod.POST)
public Status spotInstance(@RequestBody InstanceModel instance) {
    if (amazonEC2 == null)
        throw new AmazonServiceException("Amazon service can't initialize");
    if (!instance.isValid())
        throw new AmazonServiceException("Invalid message");

    RunInstancesRequest runInstancesRequest = new RunInstancesRequest();
    runInstancesRequest.setInstanceType(instance.getInstanceType());
    runInstancesRequest.setImageId(instance.getAmi());
    runInstancesRequest.setMinCount(1);/*from  w ww  . ja v  a  2s. c  o m*/
    runInstancesRequest.setMaxCount(1);
    runInstancesRequest.setKeyName(instance.getKey());
    runInstancesRequest.setSecurityGroupIds(Arrays.asList(instance.getSecurityGroup()));

    amazonEC2.runInstances(runInstancesRequest);

    return new Status("Server has been started");
}

From source file:net.firejack.aws.web.controller.AWSController.java

License:Apache License

@ResponseBody
@RequestMapping(value = "install", method = RequestMethod.POST)
public Status startInstance(@RequestBody Auth auth) {
    if (!auth.isValid())
        throw new AmazonServiceException("Access or Secret Key is empty");

    if (amazonEC2 != null) {
        amazonEC2.shutdown();//from   ww  w. j  a va 2 s .co  m
    }

    amazonEC2 = new AmazonEC2Client(new BasicAWSCredentials(auth.getAccessKey(), auth.getSecretKey()));
    amazonEC2.setRegion(RegionUtils.getRegion(instanceRegion));

    RunInstancesRequest runInstancesRequest = new RunInstancesRequest();
    runInstancesRequest.setInstanceType(InstanceType.fromValue(instanceType));
    runInstancesRequest.setImageId(instanceAmi);
    runInstancesRequest.setMinCount(1);
    runInstancesRequest.setMaxCount(1);

    KeyPair keyPair = createKeyPair();
    String privateKey = keyPair.getKeyMaterial();
    String fileName;
    try {
        fileName = saveKeyFile(keyPair.getKeyName(), privateKey);
    } catch (FileNotFoundException e) {
        throw new AmazonServiceException("Could not create the key file");
    } catch (UnsupportedEncodingException e) {
        throw new AmazonServiceException("Could not create the key file");
    }
    runInstancesRequest.setKeyName(keyPair.getKeyName());

    CreateSecurityGroupResult securityGroupResult = createSecurityGroupWithRules();
    Collection securityGroupIds = new ArrayList();
    securityGroupIds.add(securityGroupResult.getGroupId());
    runInstancesRequest.setSecurityGroupIds(securityGroupIds);

    amazonEC2.runInstances(runInstancesRequest);

    return new Status("Server has been started", fileName);
}