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

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

Introduction

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

Prototype


public Integer getMinCount() 

Source Link

Document

The minimum number of instances to launch.

Usage

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

License:Apache License

/**
 * <p>/*from www  .  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  w  w .jav  a2  s.com

    // 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 av a 2 s . c o m
 * 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);/*ww  w .  j ava2s  . co m*/
    if (request.getMaxCount() == null)
        request.setMaxCount(1);

    return awsHttpClient.runInstances(request);
}