package com.myproject; import com.amazonaws.services.ec2.AmazonEC2; import com.amazonaws.services.ec2.model.IamInstanceProfileSpecification; import com.amazonaws.services.ec2.model.InstanceType; import com.amazonaws.services.ec2.model.RunInstancesRequest; import com.amazonaws.services.ec2.model.ShutdownBehavior; import org.apache.commons.io.FileUtils; import java.io.File; import java.io.IOException; import static javax.xml.bind.DatatypeConverter.printBase64Binary; public class Ec2Utils { public static void run(AmazonEC2 machines, String pathToScript, int count, String profileArn) throws IOException { machines.runInstances( new RunInstancesRequest() .withImageId("ami-c7c0d6b3") // This used to be the official, Ireland running, 32 bit Amazon Machine Image. Or pick, for instance, [Ubuntu](http://cloud-images.ubuntu.com/locator/ec2/) .withInstanceType(InstanceType.T1Micro) // Smallest possible, cheapest. Be warned: Cc28xlarge can set you back 3.75$ per call per machine per hour... [Pricing](http://aws.amazon.com/fr/ec2/#pricing) .withMaxCount(count) .withMinCount(count) .withInstanceInitiatedShutdownBehavior(ShutdownBehavior.Terminate) .withIamInstanceProfile(new IamInstanceProfileSpecification().withArn(profileArn)) .withUserData(printBase64Binary(FileUtils.readFileToString(new File(pathToScript), "UTF-8").getBytes("UTF-8"))) ); } }