Merge pull request #20 from simple-rules/ricl-spot
added python script for generating spot instance launch spec.pull/22/head
commit
4598fb27ef
@ -0,0 +1,70 @@ |
||||
import os |
||||
import argparse |
||||
import json |
||||
import time |
||||
import datetime |
||||
|
||||
REGION_NAME = 'region_name' |
||||
REGION_KEY = 'region_key' |
||||
REGION_SECURITY_GROUP = 'region_security_group' |
||||
REGION_HUMAN_NAME = 'region_human_name' |
||||
|
||||
INSTANCE_TYPE = 'm3.medium' # 't2.micro' |
||||
AMI = 'ami-f2d3638a' # 'ami-a9d09ed1' |
||||
# base64 userdata.sh |
||||
USER_DATA = 'IyEvYmluL2Jhc2gKeXVtIC15IHVwZGF0ZQp5dW0gaW5zdGFsbCAteSBydWJ5CmNkIC9ob21lL2VjMi11c2VyCmN1cmwgLU8gaHR0cHM6Ly9hd3MtY29kZWRlcGxveS11cy13ZXN0LTIuczMuYW1hem9uYXdzLmNvbS9sYXRlc3QvaW5zdGFsbApjaG1vZCAreCAuL2luc3RhbGwKLi9pbnN0YWxsIGF1dG8=' |
||||
IAM_INSTANCE_PROFILE = 'BenchMarkCodeDeployInstanceProfile' |
||||
|
||||
def read_configuration_file(filename): |
||||
config = {} |
||||
with open(filename,'r') as f: |
||||
for line in f: |
||||
vals = line.strip().split(',') |
||||
region_num = vals[0] |
||||
config[region_num] = {} |
||||
config[region_num][REGION_NAME] = vals[1] |
||||
config[region_num][REGION_KEY] = vals[2] |
||||
config[region_num][REGION_SECURITY_GROUP] = vals[3] |
||||
config[region_num][REGION_HUMAN_NAME] = vals[4] |
||||
return config |
||||
|
||||
def create_launch_specification(region_num): |
||||
input_cli = {} |
||||
input_cli['ImageId'] = AMI |
||||
# input_cli['Placement'] = { |
||||
# "AvailabilityZone": config[region_num][REGION_NAME] +"a" |
||||
# } |
||||
input_cli['SecurityGroups'] = [ "richard-spot-instance SSH" ] # [ config[region_num][REGION_SECURITY_GROUP] ] |
||||
input_cli['IamInstanceProfile'] = { |
||||
"Name": IAM_INSTANCE_PROFILE |
||||
} |
||||
input_cli['KeyName'] = "richard-spot-instance" # config[region_num][REGION_KEY] |
||||
input_cli['UserData'] = USER_DATA |
||||
input_cli['InstanceType'] = INSTANCE_TYPE |
||||
# folder = "launch_specs/" + "session-"+ current_session |
||||
folder = "launch_specs/latest" |
||||
if not os.path.exists(folder): |
||||
os.makedirs(folder) |
||||
launch_spec_file = os.path.join(folder,config[region_num][REGION_HUMAN_NAME]+".json") |
||||
with open(launch_spec_file,'w') as g: |
||||
json.dump(input_cli,g) |
||||
print("Launch spec: %s" % launch_spec_file) |
||||
return launch_spec_file |
||||
|
||||
def create_instances(region_list): |
||||
for i in range(len(region_list)): |
||||
region_num = region_list[i] |
||||
launch_spec_file = create_launch_specification(region_num) |
||||
|
||||
if __name__ == "__main__": |
||||
parser = argparse.ArgumentParser(description='This script helps you start instances across multiple regions') |
||||
parser.add_argument('--regions',type=str,dest='regions',default='3',help="a comma-separated-value list of all regions") |
||||
# configuration file contains the number/name/security-group etc. information of each region. |
||||
parser.add_argument('--config',type=str,dest='config',default='configuration.txt') |
||||
args = parser.parse_args() |
||||
config = read_configuration_file(args.config) |
||||
region_list = args.regions.split(',') |
||||
time_stamp = time.time() |
||||
current_session = datetime.datetime.fromtimestamp(time_stamp).strftime('%Y-%m-%d-%H-%M-%S') |
||||
print("current session is %s" % current_session) |
||||
create_instances(region_list) |
@ -0,0 +1,5 @@ |
||||
aws ec2 request-spot-instances \ |
||||
--instance-count 1 \ |
||||
--block-duration-minutes 60 \ |
||||
--launch-specification file://launch_specs/latest/ohio.json |
||||
# --dry-run # uncomment this line to send a real request. |
Loading…
Reference in new issue