Example usage for com.amazonaws.services.ec2.model Placement Placement

List of usage examples for com.amazonaws.services.ec2.model Placement Placement

Introduction

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

Prototype

public Placement(String availabilityZone) 

Source Link

Document

Constructs a new Placement object.

Usage

From source file:virtualIT.java

License:Open Source License

private void runInstance(String keyName, String securityGroupName, int instanceCount, String availableZone)
        throws Exception {
    /*********************************************
      * //from w  w  w.j  a  va 2s .c  om
      *  #6 Create an Instance
      *  
      *********************************************/
    System.out.println("#5 Create an Instance");
    String imageId = "ami-ab844dc2";//Basic 32-bit Amazon Linux AMI
    String instanceType = "t1.micro";
    int minInstanceCount = instanceCount; // create 1 instance
    int maxInstanceCount = instanceCount;
    Placement placement = new Placement(availableZone);
    RunInstancesRequest instanceRun = new RunInstancesRequest();
    instanceRun.withImageId(imageId).withInstanceType(instanceType).withMinCount(minInstanceCount)
            .withMaxCount(maxInstanceCount).withKeyName(keyName).withPlacement(placement)
            .withSecurityGroups(securityGroupName);

    RunInstancesResult result = ec2.runInstances(instanceRun);

    Thread.currentThread();
    Thread.sleep(100000);

}

From source file:virtualIT.java

License:Open Source License

private void StartUsingOldAmi(int userId) throws Exception {
    /*Run instances */
    String imageId = mapUserImage.get(userId);
    System.out.println("Old Instance");
    Placement placement = new Placement(availableZone);
    RunInstancesRequest instanceRun = new RunInstancesRequest();
    instanceRun.withImageId(imageId).withInstanceType("t1.micro").withMinCount(1).withMaxCount(1)
            .withPlacement(placement).withKeyName(keyName).withSecurityGroups(securityGroupName);
    RunInstancesResult result = ec2.runInstances(instanceRun);
    describeCurrentInstances(userId);//from   www.  ja  v a2s.c om
    AttachVolume(userId);
}

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

License:Open Source License

private void setAvailabilityZone(RunInstancesRequest req, String zone) {
    try {/*from   ww  w  . j  a v  a 2  s . co m*/
        Placement p = new Placement(zone);
        req.setPlacement(p);
    } catch (Exception xxx) {
        ExceptionHandler.display(xxx);
    }
}

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);
    }// w w w. j av a2 s  . 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:datameer.awstasks.ant.ec2.Ec2LaunchTask.java

License:Apache License

@Override
public void doExecute(AmazonEC2 ec2) throws BuildException {
    LOG.info("executing " + getClass().getSimpleName() + " with groupName '" + _groupName + "'");
    try {//from w  w  w  . ja v  a  2s.  com
        boolean instancesRunning = Ec2Util.findByGroup(ec2, _groupName, false, InstanceStateName.Pending,
                InstanceStateName.Running) != null;
        if (!isReuseRunningInstances() && instancesRunning) {
            throw new IllegalStateException("found already running instances for group '" + _groupName + "'");
        }
        if (!Ec2Util.groupExists(ec2, _groupName)) {
            LOG.info("group '" + _groupName + "' does not exists - creating it");
            String groupDescription = getGroupDescription();
            if (groupDescription == null) {
                throw new BuildException("must specify groupDescription");
            }
            ec2.createSecurityGroup(new CreateSecurityGroupRequest(_groupName, groupDescription));
        }

        List<String> securityGroups = Arrays.asList("default", _groupName);
        List<IpPermission> existingPermissions = Ec2Util.getPermissions(ec2, securityGroups);
        for (GroupPermission groupPermission : _groupPermissions) {
            if (groupPermission.getToPort() == -1) {
                groupPermission.setToPort(groupPermission.getFromPort());
            }
            if (!permissionExists(groupPermission, existingPermissions)) {
                LOG.info("did not found permission '" + groupPermission + "' - creating it...");
                ec2.authorizeSecurityGroupIngress(new AuthorizeSecurityGroupIngressRequest()
                        .withGroupName(_groupName).withIpPermissions(groupPermission.toIpPermission()));
            }
        }

        InstanceGroup instanceGroup = new InstanceGroupImpl(ec2);
        RunInstancesRequest launchConfiguration = new RunInstancesRequest(_ami, _instanceCount, _instanceCount);
        if (_kernelId != null) {
            launchConfiguration.setKernelId(_kernelId);
        }
        if (_ramDiskId != null) {
            launchConfiguration.setKernelId(_ramDiskId);
        }
        launchConfiguration.setKeyName(_privateKeyName);
        launchConfiguration.setSecurityGroups(securityGroups);
        if (_userData != null) {
            launchConfiguration.setUserData(Base64.encodeBase64String(_userData.getBytes()));
        }
        if (_instanceType != null) {
            launchConfiguration.setInstanceType(_instanceType);
        }
        launchConfiguration.setPlacement(new Placement(_availabilityZone));
        if (instancesRunning) {
            instanceGroup.connectTo(_groupName);
        } else {
            instanceGroup.launch(launchConfiguration, TimeUnit.MINUTES, _maxStartTime);
            if (_instanceName != null) {
                LOG.info("tagging instances with name '" + _instanceName + " [<idx>]'");
                int idx = 1;
                for (Instance instance : instanceGroup.getInstances(false)) {
                    CreateTagsRequest createTagsRequest = new CreateTagsRequest();
                    createTagsRequest.withResources(instance.getInstanceId()) //
                            .withTags(new Tag("Name", _instanceName + " [" + idx + "]"));
                    ec2.createTags(createTagsRequest);
                    idx++;
                }
            }
        }
    } catch (Exception e) {
        LOG.error("execution " + getClass().getSimpleName() + " with groupName '" + _groupName + "' failed: "
                + e.getMessage());
        throw new BuildException(e);
    }
}

From source file:de.unibi.cebitec.bibigrid.meta.aws.CreateClusterAWS.java

@Override
public CreateClusterAWS configureClusterMasterInstance() {
    // done for master. More volume description later when master is running

    ////////////////////////////////////////////////////////////////////////
    /////////////// preparing blockdevicemappings for master////////////////
    Map<String, String> masterSnapshotToMountPointMap = this.config.getMasterMounts();
    int ephemerals = config.getMasterInstanceType().getSpec().ephemerals;
    DeviceMapper masterDeviceMapper = new DeviceMapper(config.getMode(), masterSnapshotToMountPointMap,
            ephemerals);/*from  w ww.  j a  va2s  .c o m*/
    masterDeviceMappings = new ArrayList<>();
    // create Volumes first
    if (!this.config.getMasterMounts().isEmpty()) {
        log.info(V, "Defining master volumes");
        masterDeviceMappings = createBlockDeviceMappings(masterDeviceMapper);
    }

    List<BlockDeviceMapping> ephemeralList = new ArrayList<>();
    for (int i = 0; i < this.config.getMasterInstanceType().getSpec().ephemerals; ++i) {
        BlockDeviceMapping temp = new BlockDeviceMapping();
        String virtualName = "ephemeral" + i;
        String deviceName = "/dev/sd" + ephemeral(i);
        temp.setVirtualName(virtualName);
        temp.setDeviceName(deviceName);
        ephemeralList.add(temp);
    }

    masterDeviceMappings.addAll(ephemeralList);

    base64MasterUserData = UserDataCreator.masterUserData(masterDeviceMapper, this.config,
            environment.getKeypair());

    log.info(V, "Master UserData:\n {}", new String(Base64.decodeBase64(base64MasterUserData)));
    //////////////////////////////////////////////////////////////////////////
    /////// create Placementgroup ////////////////////

    if (this.config.getMasterInstanceType().getSpec().clusterInstance) {
        if (config.isUseSpotInstances()) {
            spotInstancePlacement = new SpotPlacement(config.getAvailabilityZone());
            spotInstancePlacement.setGroupName(environment.getPlacementGroup());
        } else {
            instancePlacement = new Placement(this.config.getAvailabilityZone());
            instancePlacement.setGroupName(environment.getPlacementGroup());
        }
    }

    //////////////////////////////////////////////////////////////////////////
    /////// create NetworkInterfaceSpecification for MASTER instance with FIXED internal IP and public ip
    masterNetworkInterfaces = new ArrayList<>();

    inis = new InstanceNetworkInterfaceSpecification();
    inis.withPrivateIpAddress(environment.getMASTERIP()).withGroups(environment.getSecReqResult().getGroupId())
            .withAssociatePublicIpAddress(true).withSubnetId(environment.getSubnet().getSubnetId())
            .withDeviceIndex(0);

    masterNetworkInterfaces.add(inis); // add eth0

    slaveNetworkInterfaces = new ArrayList<>();
    inis = new InstanceNetworkInterfaceSpecification();
    inis.withGroups(environment.getSecReqResult().getGroupId())
            .withSubnetId(environment.getSubnet().getSubnetId())
            .withAssociatePublicIpAddress(config.isPublicSlaveIps()).withDeviceIndex(0);

    slaveNetworkInterfaces.add(inis);

    return this;
}

From source file:eu.stratosphere.nephele.instance.ec2.EC2CloudManager.java

License:Apache License

/**
 * Requests (allocates) instances (VMs) from Amazon EC2.
 * /*from  w ww  .  j a v a 2 s  . com*/
 * @param awsAccessId
 *        the access ID into AWS
 * @param awsSecretKey
 *        the secret key used to generate signatures for authentication
 * @param instancesToBeRequested
 *        Map containing desired instances types and count
 * @param sshKeyPair
 *        Optional parameter to insert an EC2 SSH key/value pair
 * @return
 *         List containing the instance IDs of the allocated instances.
 */
private LinkedList<String> allocateCloudInstance(final Configuration conf, final InstanceType type,
        final int mincount, final int maxcount) {

    final String awsAccessId = conf.getString(AWS_ACCESS_ID_KEY, null);
    final String awsSecretKey = conf.getString(AWS_SECRET_KEY_KEY, null);

    final String imageID = conf.getString(AWS_AMI_KEY, null);
    LOG.info("Read Amazon Machine Image from job configuration: " + imageID);

    final String jobManagerIPAddress = GlobalConfiguration.getString("jobmanager.rpc.address", null);
    if (jobManagerIPAddress == null) {
        LOG.error("JobManager IP address is not set (jobmanager.rpc.address)");
        return null;
    }
    final String sshKeyPair = conf.getString("job.ec2.sshkeypair", null);

    final AmazonEC2Client ec2client = EC2ClientFactory.getEC2Client(awsAccessId, awsSecretKey);
    final LinkedList<String> instanceIDs = new LinkedList<String>();

    // Iterate over instance types..

    final RunInstancesRequest request = new RunInstancesRequest(imageID, mincount, maxcount);
    request.setInstanceType(type.getIdentifier());

    // Set availability zone if configured
    String av = null;
    if (this.availabilityZone != null) {
        av = this.availabilityZone;
    }
    final String jobAV = conf.getString("job.ec2.availabilityzone", null);
    if (jobAV != null) {
        LOG.info("Found " + jobAV + " as job-specific preference for availability zone");
        av = jobAV;
    }

    if (av != null) {
        request.setPlacement(new Placement(av));
    }

    // TODO: Make this configurable!
    final BlockDeviceMapping bdm = new BlockDeviceMapping();
    bdm.setVirtualName("ephemeral0");
    bdm.setDeviceName("/dev/sdb1");

    if (sshKeyPair != null) {
        request.setKeyName(sshKeyPair);
    }

    final LinkedList<BlockDeviceMapping> bdmlist = new LinkedList<BlockDeviceMapping>();
    bdmlist.add(bdm);
    request.setBlockDeviceMappings(bdmlist);

    // Setting User-Data parameters
    request.setUserData(EC2Utilities.createTaskManagerUserData(jobManagerIPAddress));

    // Request instances!
    try {
        final RunInstancesResult result = ec2client.runInstances(request);

        for (Instance i : result.getReservation().getInstances()) {
            instanceIDs.add(i.getInstanceId());
        }
    } catch (AmazonClientException e) {
        // Only log the error here
        LOG.error(StringUtils.stringifyException(e));
    }

    return instanceIDs;
}

From source file:fr.xebia.demo.amazon.aws.AmazonAwsInfrastructureMaker.java

License:Apache License

public List<Instance> createTravelEcommerceTomcatServers(Distribution distribution, DBInstance dbInstance,
        String jdbcUsername, String jdbcPassword, String warUrl) {

    String userData = buildUserData(distribution, dbInstance, jdbcUsername, jdbcPassword, warUrl);

    // CREATE EC2 INSTANCES
    RunInstancesRequest runInstancesRequest = new RunInstancesRequest() //
            .withInstanceType(distribution.getInstanceType()) //
            .withImageId(distribution.getAmiId()) //
            .withMinCount(2) //
            .withMaxCount(2) //
            .withSecurityGroupIds("tomcat") //
            .withPlacement(new Placement(dbInstance.getAvailabilityZone())) //
            .withKeyName("xebia-france") //
            .withUserData(userData) //

    ;//  ww  w . ja  v a 2s  . c o  m

    RunInstancesResult runInstances = ec2.runInstances(runInstancesRequest);

    // TAG EC2 INSTANCES
    List<Instance> instances = runInstances.getReservation().getInstances();
    int idx = 1;
    for (Instance instance : instances) {
        CreateTagsRequest createTagsRequest = new CreateTagsRequest();
        createTagsRequest.withResources(instance.getInstanceId()) //
                .withTags(//
                        new Tag("Name", "travel-ecommerce-" + idx), //
                        new Tag("Type", distribution.name().toLowerCase()));
        ec2.createTags(createTagsRequest);

        idx++;
    }

    logger.info("Created {}", instances);

    return instances;
}

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.
 *//* w w  w .  j  a v  a 2 s . c o  m*/
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:integratedtoolkit.connectors.amazon.EC2.java

License:Apache License

private RunInstancesResult createMachine(String instanceCode, String diskImage) throws InterruptedException {
    //Create/*from  ww  w .  ja  v  a 2 s  .co m*/
    RunInstancesRequest runInstancesRequest = new RunInstancesRequest(diskImage, 1, 1);
    Placement placement = new Placement(placementCode);
    runInstancesRequest.setPlacement(placement);
    runInstancesRequest.setInstanceType(instanceCode);
    runInstancesRequest.setKeyName(keyPairName);
    ArrayList<String> groupId = new ArrayList<String>();
    groupId.add(securityGroupName);
    runInstancesRequest.setSecurityGroups(groupId);

    return client.runInstances(runInstancesRequest);
}