Created
March 13, 2013 17:35
-
-
Save garnaat/5154370 to your computer and use it in GitHub Desktop.
Configure a internet-connected VPC from scratch
This file contains hidden or 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
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