Skip to content

Instantly share code, notes, and snippets.

@garnaat
Created March 13, 2013 17:35
Show Gist options
  • Star 17 You must be signed in to star a gist
  • Fork 6 You must be signed in to fork a gist
  • Save garnaat/5154370 to your computer and use it in GitHub Desktop.
Save garnaat/5154370 to your computer and use it in GitHub Desktop.
Configure a internet-connected VPC from scratch
import boto.vpc
import time
REGION_NAME = 'us-west-2'
AMI_ID = 'ami-8e27adbe' # Amazon Linux AMI
conn = boto.vpc.connect_to_region(REGION_NAME)
# Create a VPC
vpc = conn.create_vpc('10.0.0.0/16')
# Configure the VPC to support DNS resolution and hostname assignment
conn.modify_vpc_attribute(vpc.id, enable_dns_support=True)
conn.modify_vpc_attribute(vpc.id, enable_dns_hostnames=True)
# Create an Internet Gateway
gateway = conn.create_internet_gateway()
# Attach the Internet Gateway to our VPC
conn.attach_internet_gateway(gateway.id, vpc.id)
# Create a Route Table
route_table = conn.create_route_table(vpc.id)
# Create a size /16 subnet
subnet = conn.create_subnet(vpc.id, '10.0.0.0/24')
# Associate Route Table with our subnet
conn.associate_route_table(route_table.id, subnet.id)
# Create a Route from our Internet Gateway to the internet
route = conn.create_route(route_table.id, '0.0.0.0/0', gateway.id)
# Create a new VPC security group
sg = conn.create_security_group('pycon_group',
'A group for PyCon',
vpc.id)
# Authorize access to port 22 from anywhere
sg.authorize(ip_protocol='tcp', from_port=22, to_port=22, cidr_ip='0.0.0.0/0')
# Run an instance in our new VPC
reservation = conn.run_instances(AMI_ID, key_name='aws_mitch',
security_group_ids=[sg.id],
instance_type='t1.micro',
subnet_id=subnet.id)
instance = reservation.instances[0]
# Now create an Elastic IP address for the instance
eip = conn.allocate_address(domain='vpc')
# And associate the EIP with our instance
conn.associate_address(instance_id=instance.id,
allocation_id=eip.allocation_id)
# Wait for the instance to be running and have an public DNS name
while instance.state != 'running' or not instance.public_dns_name:
instance.update()
print(instance.public_dns_name)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment