AWSでブラウザからVPCの設定をすることがよくあると思います。ブラウザで操作するよりAWS CLIを使ったほうが速いんじゃないかとふと思って試してみたのでコマンドを書いておく。

AWS CLI Command Referenceを参考にVPCを設定する。VPCはサービスコンソール上では1つのサービスだがCLIではec2のカテゴリに混ざっているのでそれっぽいものを探して実行する必要がある。

VPC

AWSではVirtual Private Cloud (VPC)という仮想ネットワークを利用することができます。プライベートなアドレス空間を割り当ててサブネット、ルーティング、インターネット接続やセキュリティグループなどが定義できます。

AmazonVPCFullAccessの権限を設定してVPCの操作ができるようにしておく必要があります。

VPCを作る

10.0.0.0/16のアドレスを持つVPCを作る。

$ aws ec2 create-vpc --cidr-block 10.0.0.0/16

出力

{
"Vpc": {
"VpcId": "vpc-********",
"InstanceTenancy": "default",
"State": "pending",
"DhcpOptionsId": "dopt-********",
"CidrBlock": "10.0.0.0/16",
"IsDefault": false
}
}

サブネットを作る

10.0.1.0/24のアドレスを持つサブネットを作る。AvailabilityZoneはap-northeast-1aを指定する。

$ aws ec2 create-subnet --vpc-id vpc-******** --cidr-block 10.0.1.0/24 \
--availability-zone ap-northeast-1a

出力

{
"Subnet": {
"VpcId": "vpc-********",
"CidrBlock": "10.0.1.0/24",
"State": "pending",
"AvailabilityZone": "ap-northeast-1a",
"SubnetId": "subnet-********",
"AvailableIpAddressCount": 251
}
}

インターネットゲートウェイ

インターネットゲートウェイを作ってVPCにアタッチする。

$ aws ec2 create-internet-gateway

出力

{
"InternetGateway": {
"Tags": [],
"InternetGatewayId": "igw-********",
"Attachments": []
}
}

作ったGWをVPCにアタッチする。

$ aws ec2 attach-internet-gateway --internet-gateway-id \
igw-******** --vpc-id vpc-********

出力は無い。

ルートテーブル

0.0.0.0/0をインターネットゲートウェイ側にルーティングする。

VPC作成時に作られたルートテーブルのIDを検索する。

$ aws ec2 describe-route-tables --filters Name=vpc-id,Values=vpc-********

出力

{
"RouteTables": [
{
"Associations": [
{
"RouteTableAssociationId": "rtbassoc-********",
"Main": true,
"RouteTableId": "rtb-********"
}
],
"RouteTableId": "rtb-********",
"VpcId": "vpc-********",
"PropagatingVgws": [],
"Tags": [],
"Routes": [
{
"GatewayId": "local",
"DestinationCidrBlock": "10.0.0.0/16",
"State": "active",
"Origin": "CreateRouteTable"
}
]
}
]
}

ルートテーブルに0.0.0.0/0を作ったインターネットゲートウェイにルーティングする設定を追加する。

$ aws ec2 create-route --route-table-id rtb-******** \
--destination-cidr-block 0.0.0.0/0 --gateway-id igw-********

出力

{
"Return": true
}

セキュリティグループ

セキュリティグループを新規作成して、設定を追加する。

$ aws ec2 create-security-group --group-name MySecurityGroup \
--description "My security group"

出力

{
"GroupId": "sg-********"
}

22番ポートと80番ポートを許可する設定をする。

$ aws ec2 authorize-security-group-ingress --group-id sg-******** \
--protocol tcp --port 22 --cidr 0.0.0.0/0
$ aws ec2 authorize-security-group-ingress --group-id sg-******** \
--protocol tcp --port 80 --cidr 0.0.0.0/0

出力なし。

まとめ

数回ポチポチする程度の設定であれば自分はブラウザで設定するほうが速いと思った。例えば、VPCにサブネットを追加するとき、サブネットを作るコマンドにVPCのIDを入れたりするのが地味にめんどくさいと思った。ブラウザからだとドロップダウンリストに表示されているものを選択してポチポチすればいいのでこっちのほうが速いと思います。

対話形式にすればもうちょっと簡単になるけど、ブラウザでいいじゃんってなりますよね。ですので、VPCの設定は画面からをオススメします。

あとCLI実行するスクリプトを作りこんで自動化したいですって人はCLIを使うよりCloudFormationというサービスを使うといいらしい。

おわり。

参考

  1. http://docs.aws.amazon.com/cli/latest/index.html
  2. http://docs.aws.amazon.com/cli/latest/reference/ec2/index.html