Skip to content

Instantly share code, notes, and snippets.

@krhoyt
Last active August 29, 2015 14:02
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save krhoyt/23cfd4cf7705a261f2e6 to your computer and use it in GitHub Desktop.
Save krhoyt/23cfd4cf7705a261f2e6 to your computer and use it in GitHub Desktop.
Create a Kaazing Gateway instance on Amazon Web Services EC2
# 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