AWSで別のVPCを作ってパブリックに設定する

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にしました。

VPC setting

2. Subnetを作成

作ったVPC内に小分けにしたグループを作るイメージです。

これも左側メニューから “Subnet” を選び、 “Create Subnet"へ進みます。 ここでも分かりやすい名前をつけてあげれば大丈夫です。 僕はAZリージョンごとに2つ作成しました。(ap-northeast-1aとap-northeast-1c用)

なお、SubnetのCIDRはそれぞれ 10.10.0.0/2010.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 route tables setting

これでVPCがインターネットゲートウェイの設定もされて、晴れてパブリックになりました!

参考リンク

@takp