Last active
August 29, 2015 14:02
-
-
Save krhoyt/23cfd4cf7705a261f2e6 to your computer and use it in GitHub Desktop.
Create a Kaazing Gateway instance on Amazon Web Services EC2
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# AWS Python library | |
import boto | |
# Hidden password input | |
import getpass | |
# Unique file name | |
import tempfile | |
# OS-level chmod access | |
import os | |
import stat | |
# Constants | |
AWS_ACCESS_KEY = "__YOUR_ACCESS_KEY__" | |
AWS_SECRET_KEY = "__YOUR_SECRET_KEY__" | |
KAAZING_GROUP_NAME = "kaazing-security-group" | |
KAAZING_GROUP_DESCRIPTION = "Kaazing Security Group" | |
KAAZING_INSTANCE_ID = "ami-6fbd8f06" | |
KAAZING_KEY_PAIR = "kaazing-key-pair" | |
KAAZING_REGION = "us-east-1c" | |
KAAZING_SIZE = "t1.micro" | |
LOCAL_KEY_PAIR = "kaazing-key-pair.pem" | |
# == | |
# Get preferred naming if any | |
# == | |
# Get AWS access key from user | |
user_input = raw_input( "AWS access key [" + AWS_ACCESS_KEY + "]: " ) | |
if len( user_input ) != 0: | |
AWS_ACCESS_KEY = user_input | |
# Get AWS secret key from user | |
user_input = getpass.getpass( "AWS secret key (hidden): " ) | |
if len( user_input ) != 0: | |
AWS_SECRET_KEY = user_input | |
# Get desired EC2 key pair name from user | |
user_input = raw_input( "EC2 key pair name [" + KAAZING_KEY_PAIR + "]: " ) | |
if len( user_input ) != 0: | |
KAAZING_KEY_PAIR = user_input | |
# Get desired local key pair name from user | |
user_input = raw_input( "Local key pair name [" + LOCAL_KEY_PAIR + "]: " ) | |
if len( user_input ) != 0: | |
LOCAL_KEY_PAIR = user_input | |
# Get security group name from user | |
user_input = raw_input( "Security group name [" + KAAZING_GROUP_NAME + "]: " ) | |
if len( user_input ) != 0: | |
KAAZING_GROUP_NAME = user_input | |
user_input = raw_input( "Security group description [" + KAAZING_GROUP_DESCRIPTION + "]: " ) | |
if len( user_input ) != 0: | |
KAAZING_GROUP_DESCRIPTION = user_input | |
# == | |
# Get to work | |
# == | |
# EC2 connection | |
ec2 = boto.connect_ec2( AWS_ACCESS_KEY, AWS_SECRET_KEY ) | |
# Check for EC2 key pair | |
ec2_pairs = ec2.get_all_key_pairs() | |
ec2_pair_found = False | |
for ec2_pair in ec2_pairs: | |
if ec2_pair.name == KAAZING_KEY_PAIR: | |
print "EC2 key pair named {} already exists.".format( KAAZING_KEY_PAIR ) | |
ec2_pair_found = True | |
break | |
# Create EC2 key pair | |
if ec2_pair_found == False: | |
ec2_pair = ec2.create_key_pair( KAAZING_KEY_PAIR ) | |
print "Creating EC2 key pair named {}.".format( KAAZING_KEY_PAIR ) | |
# Check local key pair | |
local_pair_found = os.path.isfile( LOCAL_KEY_PAIR ) | |
# Do not overwrite existing | |
if local_pair_found == True: | |
# Random file name | |
LOCAL_KEY_PAIR = tempfile.gettempprefix() + ".pem" | |
# Let user know about key pair file name | |
print "Local key pair file already exists in directory." | |
print "Generating random file name for local key pair." | |
print "Local key pair file name for this instance is: {}".format( LOCAL_KEY_PAIR ) | |
# Save key pair to file | |
pem = open( LOCAL_KEY_PAIR, "w" ) | |
pem.write( ec2_pair.material ) | |
pem.close() | |
# Check local key pair for permissions | |
permissions = oct( os.stat( LOCAL_KEY_PAIR ).st_mode & 0777 ) | |
# Change permissions for SSH usage | |
if int( permissions ) > 400: | |
print "Changing permissions on {} (for SSH).".format( LOCAL_KEY_PAIR ) | |
os.chmod( LOCAL_KEY_PAIR, stat.S_IRUSR ) | |
# Check for existing security group | |
groups = ec2.get_all_security_groups() | |
group_found = False | |
for group in groups: | |
if group.name == KAAZING_GROUP_NAME: | |
print "Security group named {} already exists.".format( KAAZING_GROUP_NAME ) | |
group_found = True | |
break | |
# Security group not found | |
if group_found == False: | |
# Create new security group | |
print "Creating security group named {}.".format( KAAZING_GROUP_NAME ) | |
ec2.create_security_group( KAAZING_GROUP_NAME, KAAZING_GROUP_DESCRIPTION ) | |
# Add rules to security group | |
print "Opening ports 8000-8001 (for Kaazing Gateway) in security group." | |
ec2.authorize_security_group( KAAZING_GROUP_NAME, None, None, "tcp", 8000, 8001, "0.0.0.0/0" ) | |
print "Opening port 22 (for SSH) in security group." | |
ec2.authorize_security_group( KAAZING_GROUP_NAME, None, None, "tcp", 22, 22, "0.0.0.0/0" ) | |
else: | |
# Check existing rules | |
print "Checking rules on existing security group." | |
gateway_ports = False | |
ssh_port = False | |
for rule in group.rules: | |
if int( rule.from_port ) == 22 and int( rule.to_port ) == 22: | |
ssh_port = True | |
if int( rule.from_port ) == 8000 and int( rule.to_port ) == 8001: | |
gateway_ports = True | |
# Create rules if needed | |
if gateway_ports == False: | |
print "Opening ports 8000-8001 (for Kaazing Gateway) in security group." | |
ec2.authorize_security_group( KAAZING_GROUP_NAME, None, None, "tcp", 8000, 8001, "0.0.0.0/0" ) | |
if ssh_port == False: | |
print "Opening port 22 (for SSH) in security group." | |
ec2.authorize_security_group( KAAZING_GROUP_NAME, None, None, "tcp", 22, 22, "0.0.0.0/0" ) | |
# Run the instance | |
print "Starting new Kaazing Gateway instance." | |
ec2.run_instances( KAAZING_INSTANCE_ID, 1, 1, KAAZING_KEY_PAIR, [KAAZING_GROUP_NAME], None, None, KAAZING_SIZE, KAAZING_REGION ) | |
print "Kaazing Gateway instance is initializing - thanks for playing!" |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment