Wenn Sie eine VPC mit der Verwaltungskonsole von Amazon VPC erstellen,
Sie können aus vier Vorlagen auswählen (Stand August 2012), aber wie können Sie diese mit der API erstellen, um Ihre eigenen zu erstellen? Es ist eine Geschichte. Ist es nicht cooler und reproduzierbarer mit einem einzigen Befehl als mit einer Konsole?
Lassen Sie uns vorerst die erste "VPC mit nur einem einzigen öffentlichen Subnetz" erstellen. Die Sprache ist Python und die Bibliothek ist natürlich boto. Klicken Sie hier, um die VPC-Referenz von boto anzuzeigen (http://docs.pythonboto.org/en/latest/ref/vpc.html).
import boto.ec2
from boto.vpc import VPCConnection
#Region ist ap-northeast-1
ec2region = boto.ec2.get_region("ap-northeast-1")
def launch_vpc():
conn = VPCConnection(region=ec2region)
#Erstellen Sie eine VPC
vpc = conn.create_vpc('10.0.0.0/16')
#Richten Sie das Internet-Gateway ein
igw = conn.create_internet_gateway()
conn.attach_internet_gateway(igw.id, vpc.id)
#Erstellen Sie ein Subnetz
subnet = conn.create_subnet(vpc.id, "10.0.0.0/24")
#Routing einrichten
#Filter siehe unten
# http://docs.amazonwebservices.com/AWSEC2/latest/APIReference/ApiReference-query-DescribeRouteTables.html
route_table = conn.get_all_route_tables(filters=(("vpc-id", vpc.id),))[0]
conn.create_route(route_table.id, "0.0.0.0/0", gateway_id=igw.id)
print "Created VPC %s" % vpc.id
Es sieht so aus, aber genau genommen unterscheidet es sich ein wenig von der Vorlage.
In der Vorlage kann die Hauptrouting-Tabelle nicht ausgehen, und eine Routing-Tabelle zum Ausgehen wird separat erstellt. Im obigen Code wird jedoch ein Port zum Ausgehen für die Haupt-Routing-Tabelle bereitgestellt. Ich bin. Es wird nur eine Routing-Tabelle erstellt. Ich denke, dies ist einfacher zu verwenden, wenn Sie möchten, dass alle Server ausgehen.
Der schwierige Teil bestand darin, die der erstellten VPC zugewiesene Routing-Tabelle zuzuweisen. Ich könnte dies tun, indem ich den Filter für get_all_route_tables setze, aber ich konnte nicht dorthin gelangen. In DescribeRouteTable Reference gibt es viele Arten von Filtern. Wenn Sie boto verwenden, sollten Sie auch die API-Referenz auf der AWS-Seite überprüfen.
conn.get_all_route_tables(filters=(("vpc-id", vpc.id),))[0]
Jetzt können Sie die Routing-Tabelle abrufen, in der die VPC-ID mit vpc.id übereinstimmt.
Übrigens dachte ich zuerst daran, in Ruby zu schreiben, aber das AWS SDK für Ruby unterstützt VPC nicht. Wenn Sie AWS verwenden, ist es schließlich Python!
Recommended Posts