List of usage examples for com.amazonaws.services.ec2.model RunInstancesRequest getMaxCount
public Integer getMaxCount()
The maximum number of instances to launch.
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); }