alvinalexander.com | career | drupal | java | mac | mysql | perl | scala | uml | unix  

Java example source code file (Ec2BoxCreator.java)

This example Java source code file (Ec2BoxCreator.java) is included in the alvinalexander.com "Java Source Code Warehouse" project. The intent of this project is to help you "Learn Java by Example" TM.

Learn more about this Java project at its project page.

Java - Java tags/keywords

amazonec2, arraylist, boxes, describeinstancesresult, ec2boxcreator, instancestate, launchspecification, list, requestspotinstancesrequest, runinstancesrequest, spotinstancerequest, string, terminateinstancesrequest, terminateinstancesresult, util

The Ec2BoxCreator.java Java example source code

/*
 *
 *  * Copyright 2015 Skymind,Inc.
 *  *
 *  *    Licensed under the Apache License, Version 2.0 (the "License");
 *  *    you may not use this file except in compliance with the License.
 *  *    You may obtain a copy of the License at
 *  *
 *  *        http://www.apache.org/licenses/LICENSE-2.0
 *  *
 *  *    Unless required by applicable law or agreed to in writing, software
 *  *    distributed under the License is distributed on an "AS IS" BASIS,
 *  *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *  *    See the License for the specific language governing permissions and
 *  *    limitations under the License.
 *
 */

package org.deeplearning4j.aws.ec2;

import com.amazonaws.regions.*;
import com.amazonaws.services.ec2.AmazonEC2;
import com.amazonaws.services.ec2.model.*;
import org.deeplearning4j.aws.s3.BaseS3;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

/**
 * Creates Ec2Boxes
 * @author Adam Gibson
 *
 */
public class Ec2BoxCreator extends BaseS3 {


	private String amiId;
	private int numBoxes;
	private String size;
	private List<String> boxesCreated;
	private String securityGroupId;
	private String keyPair;
    private Regions regions = Regions.DEFAULT_REGION;
	private static final Logger log = LoggerFactory.getLogger(Ec2BoxCreator.class);
	
	//centos
	public final static String DEFAULT_AMI = "ami-8997afe0";
	/**
	 * 
	 * @param numBoxes number of boxes
	 * @param size the size of the instances
	 */
	public Ec2BoxCreator(int numBoxes,String size,String securityGroupId,String keyPair) {
		this(DEFAULT_AMI,numBoxes,size,securityGroupId,keyPair);
	}


	/**
	 * 
	 * @param amiId amazon image id
	 * @param numBoxes number of boxes
	 * @param size the size of the instances
	 * @param securityGroupId
	 */
	public Ec2BoxCreator(String amiId, int numBoxes,String size,String securityGroupId,String keyPair) {
		super();
		this.amiId = amiId;
		this.numBoxes = numBoxes;
		this.size = size;
		this.keyPair = keyPair;
		this.securityGroupId = securityGroupId;
	}

	public void createSpot() {
		// Initializes a Spot Instance Request
		RequestSpotInstancesRequest requestRequest = new RequestSpotInstancesRequest();

		// Request 1 x t1.micro instance with a bid price of $0.03.
		requestRequest.setSpotPrice("0.03");
		requestRequest.setInstanceCount(Integer.valueOf(1));

		// Setup the specifications of the launch. This includes the
		// instance type (e.g. t1.micro) and the latest Amazon Linux
		// AMI id available. Note, you should always use the latest
		// Amazon Linux AMI id or another of your choosing.
		LaunchSpecification launchSpecification = new LaunchSpecification();
		launchSpecification.setImageId("ami-8c1fece5");
		launchSpecification.setInstanceType("t1.micro");

		// Add the security group to the request.
		List<String> securityGroups = new ArrayList();
		securityGroups.add("GettingStartedGroup");
		launchSpecification.setSecurityGroups(securityGroups);

		// Add the launch specifications to the request.
		requestRequest.setLaunchSpecification(launchSpecification);

		// Call the RequestSpotInstance API.
		RequestSpotInstancesResult requestResult = getEc2().requestSpotInstances(requestRequest);


		List<SpotInstanceRequest> requestResponses = requestResult.getSpotInstanceRequests();

		// Setup an arraylist to collect all of the request ids we want to
		// watch hit the running state.
		List<String> spotInstanceRequestIds = new ArrayList<>();

		// Add all of the request ids to the hashset, so we can determine when they hit the
		// active state.
		for (SpotInstanceRequest requestResponse : requestResponses) {
			System.out.println("Created Spot Request: "+requestResponse.getSpotInstanceRequestId());
			spotInstanceRequestIds.add(requestResponse.getSpotInstanceRequestId());
		}

	}

    public void setRegion(Regions regions) {
        this.regions = regions;
    }


    /**
     * Create the instances
     */
    public void create() {
		RunInstancesRequest runInstancesRequest = 
				new RunInstancesRequest().withImageId(amiId)
				.withInstanceType(size).withKeyName(keyPair)
				.withMinCount(1).withSecurityGroupIds(securityGroupId)
				.withMaxCount(numBoxes);
        AmazonEC2 ec2 = getEc2();
        ec2.setRegion(com.amazonaws.regions.Region.getRegion(regions));
		List<Instance> boxes  = ec2.runInstances(runInstancesRequest)
				.getReservation().getInstances();
		if(boxesCreated == null) {
			boxesCreated = new ArrayList<>();
			for(Instance i : boxes)
				boxesCreated.add(i.getInstanceId());
			
			
			
			log.info("Boxes created " + boxesCreated);
		}
		else {
			blowupBoxes();
			boxesCreated.clear();
			for(Instance i : boxes)
				boxesCreated.add(i.getInstanceId());
			
		}
	}

	
	

	public List<InstanceStateChange> blowupBoxes() {
		TerminateInstancesRequest request = new TerminateInstancesRequest()
		.withInstanceIds(boxesCreated);
		
		if(boxesCreated != null) {
			TerminateInstancesResult result = getEc2().terminateInstances(request);
			List<InstanceStateChange> change = result.getTerminatingInstances();
			log.info("Boxes destroyed " + boxesCreated);
			return change;
		}
		
		return Collections.emptyList();
	}
	
	
	public void blockTillAllRunning() {
		while(!allRunning()) {
			try {
				Thread.sleep(1000);
			} catch (InterruptedException e) {
				Thread.currentThread().interrupt();
			}
			log.info("Not all created...");
		}
	}
	
	public boolean allRunning() {
		if(boxesCreated == null)
			return false;
		else {
			DescribeInstancesResult result = getEc2().describeInstances();
			List<Reservation> reservations = result.getReservations();
			for(Reservation r : reservations) {
				List<Instance> instances = r.getInstances();
				for(Instance instance : instances) {
					InstanceState state = instance.getState();
					if(state.getCode() == 48)
						continue;
					if(state.getCode() != 16)
						return false;
				}
			}
		
			return true;
		}
		
		
	}

	public List<String> getHosts() {
		DescribeInstancesResult result = getEc2().describeInstances();
		List<String> hosts = new ArrayList<>();
		List<Reservation> reservations = result.getReservations();
		for(Reservation r : reservations) {
			List<Instance> instances = r.getInstances();
			for(Instance instance : instances) {
				InstanceState state = instance.getState();
				if(state.getCode() == 48)
					continue;
				hosts.add(instance.getPublicDnsName());
			
			}
		}
		
		return hosts;
	}

	public  List<String> getBoxesCreated() {
		return boxesCreated;
	}




}

Other Java examples (source code examples)

Here is a short list of links related to this Java Ec2BoxCreator.java source code file:

... this post is sponsored by my books ...

#1 New Release!

FP Best Seller

 

new blog posts

 

Copyright 1998-2021 Alvin Alexander, alvinalexander.com
All Rights Reserved.

A percentage of advertising revenue from
pages under the /java/jwarehouse URI on this website is
paid back to open source projects.