-
-
Save liambennett/618f4586b6dcbc451ba3749b616f5cc0 to your computer and use it in GitHub Desktop.
Create AWS VPC
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
#!/usr/bin/env python | |
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