AWS (Amazon Web Services) でVPCを別に作るという話です。
VPCを別に作成する
普段の本番環境は1つのVPC内で動いています。例えば本番のアプリケーションサーバや データベース・サーバが動いています。
今回はそれとは別に動かすサーバを立ち上げる必要があり、そのサーバの仕様上、セキュリティ的に なるべく本番環境とは異なる空間に設置したかったんですね。
そこで、別のVPCを作成して、そこで立ち上げるようにしました。 作ったVPCをインターネットに対してパブリックにする所でハマってしまったので、ここに残しておきます。
VPCとSubnetを作る
1. VPCを作成
VPCのコンソール画面から、“Create VPC"へ進みます。 Name tagやCIDRブロックを入力して作成すればOKです。
今回は、CIDRブロックを10.10.0.0/16
にしました。
2. Subnetを作成
作ったVPC内に小分けにしたグループを作るイメージです。
これも左側メニューから “Subnet” を選び、 “Create Subnet"へ進みます。 ここでも分かりやすい名前をつけてあげれば大丈夫です。 僕はAZリージョンごとに2つ作成しました。(ap-northeast-1aとap-northeast-1c用)
なお、SubnetのCIDRはそれぞれ 10.10.0.0/20
と 10.10.16.0/20
にしました。
(AvailableなIPが4,091個あるので十分ですね)
VPC内のEC2インスタンスに接続できない?
これで大丈夫かなと思い、作ったVPCに紐付いたEC2インスタンスを作成し、接続を試みます。 が、繋がらない…タイムアウトになってしまいます。
$ ssh -i "~/your-cert.pem" ec2-user@ec2-XXX-XXX-XXX-XXX.ap-northeast-1.compute.amazonaws.com
ssh: connect to host ec2-XXX-XXX-XXX-XXX.ap-northeast-1.compute.amazonaws.com port 22: Operation timed out
セキュリティグループを疑いましたが、SSHの22番ポートも開放されていて、正しく設定されています。
VPCをパブリックに設定する
作成したVPCをパブリックにするには、いくつか追加の設定が必要でした。 順を追って確認していけば良さそうです。
1. VPC: DNS hostnamesをyesに変更
作ったままでは、 DNS hostnamesが no
になってしまっているので、これを yes
に変更します。
VPCを選択して、“Edit DNS Hostnames"から変更可能です。
これをyes
に設定しないと、Public DNSがEC2に付与されません。
2. Subnet: Auto-assign Public IPをyesに変更
VPCに引き続き、Subnetの方も変更が必要でした。
“Modify auto-assign IP settings” からyes
に変更可能です。
3. インターネットゲートウェイの設定
“Internet Gateways” の設定です。 Internaet Gateway は作成されていたのですが、Route Tablesに自動で付与されていませんでした。 そこで、Route Tablesを選択し、ページ下側のRoutesを設定していきます。
Edit => Add another routeを押し、
- Destination
0.0.0.0/0
- Target
your-internet-gateway
(作成されているインターネットゲートウェイを選択)
し、SaveすればOKです。
これでVPCがインターネットゲートウェイの設定もされて、晴れてパブリックになりました!