Skip to content

Instantly share code, notes, and snippets.

@mandeepbal
Forked from garnaat/gist:5154370
Last active August 31, 2015 03:55
Show Gist options
  • Save mandeepbal/d0c0a23e4707d2da9a75 to your computer and use it in GitHub Desktop.
Save mandeepbal/d0c0a23e4707d2da9a75 to your computer and use it in GitHub Desktop.

Revisions

  1. @garnaat garnaat created this gist Mar 13, 2013.
    60 changes: 60 additions & 0 deletions gistfile1.py
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,60 @@
    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)