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

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

Introduction

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

Prototype


public Integer getMaxCount() 

Source Link

Document

The maximum number of instances to launch.

Usage

From source file:de.fischer.thotti.ec2.EC2Executor.java

License:Apache License

/**
 *
 * @return a map with all created instances per region. The instances are
 *         sorted by their availability zone.
 *//*from  w w w. j  a v  a  2 s  .c om*/
private Map<String, SortedSet<Instance>> executeRequest(EC2RequestData<RunInstancesRequest> requestData)
        throws AWSCommunicationException {

    int requestID = 1;
    Map<String, SortedSet<Instance>> instances = new HashMap<String, SortedSet<Instance>>();
    List<Region> awsRegions = getAWSRegions();

    // @todo this should be a separate method
    for (Region region : awsRegions) {
        EC2RunnerContext context = new EC2RunnerContext();

        context.regionName = region.getRegionName();
        context.endPoint = region.getEndpoint();

        getRegionContextCache().put(context.regionName, context);
    }

    for (String regionName : requestData.getAllRegions()) {
        EC2RunnerContext ctx = getRegionContextCache().get(regionName);
        Comparator comparator = new InstaceAvailabilityComparator();
        SortedSet<Instance> reservedInstances = new TreeSet<Instance>(comparator);

        setRegionContext(ctx);
        switchCommunicationEndPoint();

        RegionRequests regionRequests = requestData.getRegion(regionName);
        List<RunInstancesRequest> runRequests = regionRequests.getRequests();

        for (RunInstancesRequest request : runRequests) {
            int maxRequested = request.getMaxCount();

            if (logger.isInfoEnabled()) {
                logger.info(
                        "Going to request max {} server instance(s) of type {} in "
                                + "region {} ({}). Internal request ID is #{}.",
                        new Object[] { request.getMaxCount(), request.getInstanceType(), regionName,
                                requestID });
            }

            RunInstancesResult result = null;

            try {
                result = getClient().runInstances(request);
            } catch (AmazonServiceException ase) {
                handleAmazonServiceException(ase);
            } catch (AmazonClientException ace) {
                handleAmazonClientException(ace);
            }

            for (Instance instance : result.getReservation().getInstances()) {
                if (logger.isInfoEnabled()) {
                    logger.info("Amazon reserved instance {} with public IP {} and DNS name {}.",
                            new Object[] { instance.getInstanceId(), instance.getPublicIpAddress(),
                                    instance.getPublicDnsName() });
                }

                reservedInstances.add(instance);
            }

            int reserved = result.getReservation().getInstances().size();
            boolean gotAllReverved = reserved == maxRequested;

            if (gotAllReverved && logger.isInfoEnabled())
                logger.info("Amazon reserved all {} requested instances " + "of request #{}.",
                        new Object[] { maxRequested }, requestID);
            else
                logger.info("Amazon reserved {} of {} requested instances " + " of request #{}.",
                        new Object[] { reserved, maxRequested, requestID });

            requestID++; // For the next request
        }

        instances.put(regionName, reservedInstances);
    }

    return instances;
}

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

License:Apache License

/**
 * <p>/*w w  w  .  ja  va  2 s  .  c  om*/
 * 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.primecloud.auto.aws.typica.EucaEc2Client.java

License:Open Source License

@Override
public RunInstancesResult runInstances(RunInstancesRequest runInstancesRequest) {
    // InstanceType
    InstanceType type = InstanceType.getTypeFromString(runInstancesRequest.getInstanceType());

    // AvailabilityZone
    String availabilityZone = null;
    if (runInstancesRequest.getPlacement() != null) {
        availabilityZone = runInstancesRequest.getPlacement().getAvailabilityZone();
    }//from w ww . j  a v  a  2 s  .  c  om

    // UserData
    String userData = runInstancesRequest.getUserData();
    if (userData != null) {
        userData = new String(Base64.decodeBase64(userData.getBytes()));

        // ??3???????
        int len = userData.getBytes().length;
        int mod = len % 3;
        if (mod != 0) {
            for (int i = 0; i < 3 - mod; i++) {
                userData += ';';
            }
        }
    }

    try {
        ReservationDescription description = jec2.runInstances(runInstancesRequest.getImageId(),
                runInstancesRequest.getMinCount(), runInstancesRequest.getMaxCount(),
                runInstancesRequest.getSecurityGroups(), userData, runInstancesRequest.getKeyName(), true, type,
                availabilityZone, runInstancesRequest.getKernelId(), runInstancesRequest.getRamdiskId(), null);
        Reservation reservation = new ReservationConverter().convert(description);
        return new RunInstancesResult().withReservation(reservation);
    } catch (EC2Exception e) {
        throw new AmazonClientException(e);
    }
}

From source file:org.gridgain.grid.spi.cloud.ec2lite.GridEc2LiteCloudSpi.java

License:GNU General Public License

/**
 * Runs Amazon EC2 instances by command.
 * <p>/*from  w w  w .  j  ava  2 s  .  c om*/
 * Command may be very complex and contain plenty of parameters.
 * Refer to class documentation for details.
 *
 * @param cmd Cloud command.
 * @throws GridSpiException Thrown if any exception occurs.
 */
private void runInstances(GridCloudCommand cmd) throws GridSpiException {
    assert cmd != null;

    RunInstancesRequest req = createRunInstancesRequest(cmd);

    Map<String, String> params = cmd.parameters();

    if (params != null && Boolean.parseBoolean(params.get(CMD_DRY_RUN_KEY))) {
        if (log.isDebugEnabled())
            log.debug("Dry run - instances run omitted.");

        return;
    }

    RunInstancesResult res;

    try {
        res = ec2.runInstances(req);
    } catch (AmazonClientException e) {
        throw new GridSpiException("Failed to perform run instances request.", e);
    }

    if (log.isDebugEnabled())
        log.debug("Sent run instances request [imgId=" + req.getImageId() + ", minCount=" + req.getMinCount()
                + ", maxCount=" + req.getMaxCount() + ']');

    Collection<String> instIds = new LinkedList<String>();

    boolean throwEx = false;

    for (Instance item : res.getReservation().getInstances()) {
        String instId = item.getInstanceId();
        String imgId = item.getImageId();

        instIds.add(instId);

        if (log.isDebugEnabled())
            log.debug("Added (ran) new instance [instId=" + instId + ", imgId=" + imgId + ']');

        if (!req.getImageId().equals(imgId))
            throwEx = true;
    }

    if (!instIds.isEmpty()) {
        if (req.isMonitoring()) {
            try {
                ec2.monitorInstances(new MonitorInstancesRequest().withInstanceIds(instIds));
            } catch (AmazonClientException e) {
                U.error(log, "Failed to start instance monitoring.", e);
            }

            if (log.isDebugEnabled())
                log.debug("Started instances monitoring: " + instIds);
        }
    }

    if (throwEx || instIds.size() != cmd.number())
        throw new GridSpiException("Cloud command has not been successfully executed: " + cmd);
}

From source file:web.component.impl.aws.AWSEC2Impl.java

@Override
public RunInstancesResult runInstances(RunInstancesRequest request) {

    if (request.getImageId() == null || request.getImageId().isEmpty())
        throw new IllegalArgumentException("Image ID not specified.");
    if (request.getInstanceType() == null || request.getInstanceType().isEmpty())
        throw new IllegalArgumentException("Instance type not specified.");
    if (request.getMinCount() == null)
        request.setMinCount(1);/* w  w  w .j  a  va2 s  .  c om*/
    if (request.getMaxCount() == null)
        request.setMaxCount(1);

    return awsHttpClient.runInstances(request);
}