Example usage for com.amazonaws.services.ec2 AmazonEC2 startInstances

List of usage examples for com.amazonaws.services.ec2 AmazonEC2 startInstances

Introduction

In this page you can find the example usage for com.amazonaws.services.ec2 AmazonEC2 startInstances.

Prototype

StartInstancesResult startInstances(StartInstancesRequest startInstancesRequest);

Source Link

Document

Starts an Amazon EBS-backed instance that you've previously stopped.

Usage

From source file:aws.example.ec2.StartStopInstance.java

License:Open Source License

public static void startInstance(String instance_id) {
    final AmazonEC2 ec2 = AmazonEC2ClientBuilder.defaultClient();

    DryRunSupportedRequest<StartInstancesRequest> dry_request = () -> {
        StartInstancesRequest request = new StartInstancesRequest().withInstanceIds(instance_id);

        return request.getDryRunRequest();
    };/*  w ww  .  jav  a2  s. co m*/

    DryRunResult dry_response = ec2.dryRun(dry_request);

    if (!dry_response.isSuccessful()) {
        System.out.printf("Failed dry run to start instance %s", instance_id);

        throw dry_response.getDryRunResponse();
    }

    StartInstancesRequest request = new StartInstancesRequest().withInstanceIds(instance_id);

    ec2.startInstances(request);

    System.out.printf("Successfully started instance %s", instance_id);
}

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

License:Apache License

public void startInstances(List<String> instanceIds, AmazonEC2 ec2Client)
        throws RemoteException, InterruptedException {
    StartInstancesRequest startRequest = new StartInstancesRequest(instanceIds);
    ec2Client.startInstances(startRequest);
    for (String instanceId : instanceIds) {
        waitForState(instanceId, "running", 8, ec2Client);
    }/*  www  . j  a  v a2 s.c  om*/
}

From source file:ec2.StartStopInstance.java

License:Open Source License

public static void startInstance(String instanceId) {

    final AmazonEC2 ec2 = AmazonEC2ClientBuilder.defaultClient();

    DryRunSupportedRequest<StartInstancesRequest> startInstanceDryRun = () -> {
        StartInstancesRequest request = new StartInstancesRequest().withInstanceIds(instanceId);

        return request.getDryRunRequest();
    };//from w ww .  j a va2  s . c o m

    DryRunResult dryRunResponse = ec2.dryRun(startInstanceDryRun);

    if (!dryRunResponse.isSuccessful()) {
        System.out.printf("Failed dry run to start instance %s", instanceId);
        throw dryRunResponse.getDryRunResponse();
    }

    StartInstancesRequest request = new StartInstancesRequest().withInstanceIds(instanceId);

    ec2.startInstances(request);

    System.out.printf("Successfully started instance %s", instanceId);
}

From source file:edu.umass.cs.aws.support.AWSEC2.java

License:Apache License

/**
 * Start an instance//from  w  ww.ja va 2  s .c  om
 *
 * @param ec2
 * @param createdInstanceId
 */
public static void startInstance(AmazonEC2 ec2, String createdInstanceId) {
    System.out.println("Starting Instance:" + createdInstanceId);
    List<String> instanceIds = new LinkedList<>();
    instanceIds.add(createdInstanceId);
    StartInstancesRequest startIR = new StartInstancesRequest(instanceIds);
    ec2.startInstances(startIR);
}

From source file:hudson.plugins.ec2.EC2ComputerLauncher.java

License:Open Source License

@Override
public void launch(SlaveComputer _computer, TaskListener listener) {
    try {//from www  . j  av a 2 s.c o m
        EC2Computer computer = (EC2Computer) _computer;
        PrintStream logger = listener.getLogger();

        final String baseMsg = "Node " + computer.getName() + "(" + computer.getInstanceId() + ")";
        String msg;

        OUTER: while (true) {
            switch (computer.getState()) {
            case PENDING:
                msg = baseMsg + " is still pending/launching, waiting 5s";
                break;
            case STOPPING:
                msg = baseMsg + " is still stopping, waiting 5s";
                break;
            case RUNNING:
                msg = baseMsg + " is ready";
                LOGGER.finer(msg);
                logger.println(msg);
                break OUTER;
            case STOPPED:
                msg = baseMsg + " is stopped, sending start request";
                LOGGER.finer(msg);
                logger.println(msg);

                AmazonEC2 ec2 = computer.getCloud().connect();
                List<String> instances = new ArrayList<String>();
                instances.add(computer.getInstanceId());

                StartInstancesRequest siRequest = new StartInstancesRequest(instances);
                StartInstancesResult siResult = ec2.startInstances(siRequest);

                msg = baseMsg + ": sent start request, result: " + siResult;
                LOGGER.finer(baseMsg);
                logger.println(baseMsg);
                continue OUTER;
            case SHUTTING_DOWN:
            case TERMINATED:
                // abort
                msg = baseMsg + " is terminated or terminating, aborting launch";
                LOGGER.info(msg);
                logger.println(msg);
                return;
            default:
                msg = baseMsg + " is in an unknown state, retrying in 5s";
                break;
            }

            // check every 5 secs
            Thread.sleep(5000);
            // and report to system log and console
            LOGGER.finest(msg);
            logger.println(msg);
        }

        launch(computer, logger, computer.describeInstance());
    } catch (AmazonClientException e) {
        e.printStackTrace(listener.error(e.getMessage()));
    } catch (IOException e) {
        e.printStackTrace(listener.error(e.getMessage()));
    } catch (InterruptedException e) {
        e.printStackTrace(listener.error(e.getMessage()));
    }

}

From source file:hudson.plugins.ec2.SlaveTemplate.java

License:Open Source License

/**
 * Provisions an On-demand EC2 slave by launching a new instance or 
 * starting a previously-stopped instance.
 *//*from w  ww.  java2s  . com*/
private EC2AbstractSlave provisionOndemand(TaskListener listener) throws AmazonClientException, IOException {
    PrintStream logger = listener.getLogger();
    AmazonEC2 ec2 = getParent().connect();

    try {
        String msg = "Launching " + ami + " for template " + description;
        logger.println(msg);
        LOGGER.info(msg);

        KeyPair keyPair = getKeyPair(ec2);

        RunInstancesRequest riRequest = new RunInstancesRequest(ami, 1, 1);
        InstanceNetworkInterfaceSpecification net = new InstanceNetworkInterfaceSpecification();

        if (useEphemeralDevices) {
            setupEphemeralDeviceMapping(riRequest);
        } else {
            setupCustomDeviceMapping(riRequest);
        }

        List<Filter> diFilters = new ArrayList<Filter>();
        diFilters.add(new Filter("image-id").withValues(ami));

        if (StringUtils.isNotBlank(getZone())) {
            Placement placement = new Placement(getZone());
            if (getUseDedicatedTenancy()) {
                placement.setTenancy("dedicated");
            }
            riRequest.setPlacement(placement);
            diFilters.add(new Filter("availability-zone").withValues(getZone()));
        }

        if (StringUtils.isNotBlank(getSubnetId())) {
            if (getAssociatePublicIp()) {
                net.setSubnetId(getSubnetId());
            } else {
                riRequest.setSubnetId(getSubnetId());
            }

            diFilters.add(new Filter("subnet-id").withValues(getSubnetId()));

            /* If we have a subnet ID then we can only use VPC security groups */
            if (!securityGroupSet.isEmpty()) {
                List<String> group_ids = getEc2SecurityGroups(ec2);

                if (!group_ids.isEmpty()) {
                    if (getAssociatePublicIp()) {
                        net.setGroups(group_ids);
                    } else {
                        riRequest.setSecurityGroupIds(group_ids);
                    }

                    diFilters.add(new Filter("instance.group-id").withValues(group_ids));
                }
            }
        } else {
            /* No subnet: we can use standard security groups by name */
            riRequest.setSecurityGroups(securityGroupSet);
            if (securityGroupSet.size() > 0)
                diFilters.add(new Filter("instance.group-name").withValues(securityGroupSet));
        }

        String userDataString = Base64.encodeBase64String(userData.getBytes());
        riRequest.setUserData(userDataString);
        riRequest.setKeyName(keyPair.getKeyName());
        diFilters.add(new Filter("key-name").withValues(keyPair.getKeyName()));
        riRequest.setInstanceType(type.toString());
        diFilters.add(new Filter("instance-type").withValues(type.toString()));

        if (getAssociatePublicIp()) {
            net.setAssociatePublicIpAddress(true);
            net.setDeviceIndex(0);
            riRequest.withNetworkInterfaces(net);
        }

        boolean hasCustomTypeTag = false;
        HashSet<Tag> inst_tags = null;
        if (tags != null && !tags.isEmpty()) {
            inst_tags = new HashSet<Tag>();
            for (EC2Tag t : tags) {
                inst_tags.add(new Tag(t.getName(), t.getValue()));
                diFilters.add(new Filter("tag:" + t.getName()).withValues(t.getValue()));
                if (StringUtils.equals(t.getName(), EC2Tag.TAG_NAME_JENKINS_SLAVE_TYPE)) {
                    hasCustomTypeTag = true;
                }
            }
        }
        if (!hasCustomTypeTag) {
            if (inst_tags == null) {
                inst_tags = new HashSet<Tag>();
            }
            inst_tags.add(new Tag(EC2Tag.TAG_NAME_JENKINS_SLAVE_TYPE, "demand"));
        }

        DescribeInstancesRequest diRequest = new DescribeInstancesRequest();
        diFilters.add(new Filter("instance-state-name").withValues(InstanceStateName.Stopped.toString(),
                InstanceStateName.Stopping.toString()));
        diRequest.setFilters(diFilters);

        msg = "Looking for existing instances with describe-instance: " + diRequest;
        logger.println(msg);
        LOGGER.fine(msg);

        DescribeInstancesResult diResult = ec2.describeInstances(diRequest);

        Instance existingInstance = null;
        if (StringUtils.isNotBlank(getIamInstanceProfile())) {
            riRequest.setIamInstanceProfile(
                    new IamInstanceProfileSpecification().withArn(getIamInstanceProfile()));
            // cannot filter on IAM Instance Profile, so search in result
            reservationLoop: for (Reservation reservation : diResult.getReservations()) {
                for (Instance instance : reservation.getInstances()) {
                    if (instance.getIamInstanceProfile() != null
                            && instance.getIamInstanceProfile().getArn().equals(getIamInstanceProfile())) {
                        existingInstance = instance;
                        break reservationLoop;
                    }
                }
            }
        } else if (diResult.getReservations().size() > 0) {
            existingInstance = diResult.getReservations().get(0).getInstances().get(0);
        }

        if (existingInstance == null) {
            // Have to create a new instance
            Instance inst = ec2.runInstances(riRequest).getReservation().getInstances().get(0);

            /* Now that we have our instance, we can set tags on it */
            if (inst_tags != null) {
                for (int i = 0; i < 5; i++) {
                    try {
                        updateRemoteTags(ec2, inst_tags, inst.getInstanceId());
                        break;
                    } catch (AmazonServiceException e) {
                        if (e.getErrorCode().equals("InvalidInstanceRequestID.NotFound")) {
                            Thread.sleep(5000);
                            continue;
                        }
                        throw e;
                    }
                }

                // That was a remote request - we should also update our local instance data.
                inst.setTags(inst_tags);
            }
            msg = "No existing instance found - created: " + inst;
            logger.println(msg);
            LOGGER.info(msg);
            return newOndemandSlave(inst);
        }

        msg = "Found existing stopped instance: " + existingInstance;
        logger.println(msg);
        LOGGER.info(msg);

        List<String> instances = new ArrayList<String>();
        instances.add(existingInstance.getInstanceId());
        StartInstancesRequest siRequest = new StartInstancesRequest(instances);
        StartInstancesResult siResult = ec2.startInstances(siRequest);

        msg = "Starting existing instance: " + existingInstance + " result:" + siResult;
        logger.println(msg);
        LOGGER.fine(msg);

        for (EC2AbstractSlave ec2Node : NodeIterator.nodes(EC2AbstractSlave.class)) {
            if (ec2Node.getInstanceId().equals(existingInstance.getInstanceId())) {
                msg = "Found existing corresponding Jenkins slave: " + ec2Node;
                logger.println(msg);
                LOGGER.finer(msg);
                return ec2Node;
            }
        }

        // Existing slave not found
        msg = "Creating new Jenkins slave for existing instance: " + existingInstance;
        logger.println(msg);
        LOGGER.info(msg);
        return newOndemandSlave(existingInstance);

    } catch (FormException e) {
        throw new AssertionError(); // we should have discovered all configuration issues upfront
    } catch (InterruptedException e) {
        throw new RuntimeException(e);
    }
}

From source file:jp.classmethod.aws.gradle.ec2.AmazonEC2StartInstanceTask.java

License:Apache License

@TaskAction
public void startInstance() {
    // to enable conventionMappings feature
    List<String> instanceIds = getInstanceIds();

    if (instanceIds.isEmpty()) {
        return;//from ww  w.  j a  v  a2s. c o  m
    }

    AmazonEC2PluginExtension ext = getProject().getExtensions().getByType(AmazonEC2PluginExtension.class);
    AmazonEC2 ec2 = ext.getClient();

    startInstancesResult = ec2.startInstances(new StartInstancesRequest(instanceIds));
    getLogger().info("Start EC2 instance {} requested", instanceIds);
}

From source file:org.xmlsh.aws.gradle.ec2.AmazonEC2StartInstanceTask.java

License:BSD License

@TaskAction
public void startInstance() {
    // to enable conventionMappings feature
    List<String> instanceIds = getInstanceIds();

    if (instanceIds.isEmpty())
        return;/*from w ww  . j a  v a 2  s  . co m*/

    AmazonEC2PluginExtension ext = getProject().getExtensions().getByType(AmazonEC2PluginExtension.class);
    AmazonEC2 ec2 = ext.getClient();

    startInstancesResult = ec2.startInstances(new StartInstancesRequest(instanceIds));
    getLogger().info("Start EC2 instance {} requested", instanceIds);
}