Jenkins Amazon EC2 agent cloud - Windows slaves
boto.ec2 can be perfectly used to start / stop / terminate instances on the go.
I use a script for that.Here is a piece of it that I can share. I'm not able to share some parts. Thank you for understanding.
#!/usr/bin/pythonimport boto.ec2import sysimport time# specify AWS keysauth = {"aws_access_key_id": "YOUR_KEY", "aws_secret_access_key": "YOUR_SECRET_KEY"}def main(): # read arguments from the command line and # check whether at least two elements were entered if len(sys.argv) < 2: print "Usage: python aws.py {start|stop}\n" sys.exit(0) else: action = sys.argv[1] if action == "start": startInstance() elif action == "stop": stopInstance() else: print "Usage: python aws.py {start|stop}\n"def startInstance(): print "Starting the instance..." # change "eu-west-1" region if different try: ec2 = boto.ec2.connect_to_region("eu-west-1", **auth) except Exception, e1: error1 = "Error1: %s" % str(e1) print(error1) sys.exit(0) # change instance ID appropriately try: instances = ec2.start_instances(instance_ids="ID_INSTANCE TO START") instances[0].update() while instances[0].state != "running": print instances[0].state time.sleep(5) instances[0].update()#this part manage the association of Elastic IP ec2.associate_address("ID_INSTANCE","ELASTIC IP") except Exception, e2: error2 = "Error2: %s" % str(e2) print(error2) sys.exit(0)def stopInstance(): print "Stopping the instance..." try: ec2 = boto.ec2.connect_to_region("eu-west-1", **auth) except Exception, e1: error1 = "Error1: %s" % str(e1) print(error1) sys.exit(0) try: ec2.stop_instances(instance_ids="INSTANCE_ID") instances[0].update() while instances[0].state != "stopped": print instances[0], instances[0].state time.sleep(5) instance.update() print "Instance stopped : " except Exception, e2: error2 = "Error2: %s" % str(e2) print(error2) sys.exit(0)if __name__ == '__main__': main()