猫でもわかるWeb開発・プログラミング

本業エンジニアリングマネージャー。副業Webエンジニア。Web開発のヒントや、副業、日常生活のことを書きます。

今更聞けないEC2, VPCとサブネット - AWSをはじめてみるその3

f:id:yoshiki_utakata:20190331034048p:plain

はじめに

この記事は、

  • EC2って何?
  • VPCって何?
  • サブネットって何?

という人向けに、これらが何か、なぜ必要なのか、といったところを解説する。

VPCやサブネットを知らないままEC2インスタンスを利用している人もいるかもしれないし、知っているけどよくわからないまま設定している人もいるかもしれないので、そういった人はぜひ読んでほしい。

EC2

EC2って何?

AWSを利用する際に必ずといっていいほど利用するのがEC2である。EC2は Elastic Computing Cloud (ECC、つまり EC2)の略で、日本語で説明すると「汎用サーバー」といったところだ。サーバーを1台渡すので、PHPなりApacheをインストールして使ってね、というのがEC2である。

EC2はどういうときに使うのか

AWSには、MySQLのようなリレーショナルデータベースサーバーを一発で建てられる RDS や、ファイルサーバーを一発で建てられる S3 といったサービスがある。しかし、「ApacheでPHPを動かしてくれるサーバーが欲しい」場合、それ専用のサービスはAWSには無い。この場合にはEC2インスタンスを作成し、そこにPHPやApacheをインストールして好きに使ってね、というわけである。*1

VPCとサブネット

VPCとは・サブネットとは

VPCとサブネットは合わせて説明したほうがわかりやすい。下記はAWSの公式ガイドに乗っている図だが、真ん中の大きな雲がVPC、その中の四角がサブネットである。この構成ではVPCの中にサブネットが2つあり、片方のサブネットにEC2が1台、もう片方にはRDSが1台ある。

f:id:yoshiki_utakata:20190408010307p:plain

VPCは Virtual Private Cloud である。VPCは要するに家の中のネットみたいな感じで、ネットからVPC内のサーバーにアクセスする場合は必ずInternet Gatewayを経由してアクセスする。

サブネットはVPCをさらに細かく分けたものである。図だとEC2サーバー(Webサーバーなど)を含んだサブネットAと、DBが存在したサブネットBが存在していて、サブネットAはインターネットからアクセス可能、サブネットBはサブネットAからのみアクセス可能、というようにサブネットごとにポリシーが設定されるようなイメージだ。

なぜVPCやサブネットを使うのか

VPCが存在するのは主にセキュリティの観点だ。VPCが無い場合、DBサーバーやEC2のサーバーはすべてグローバルIPアドレスを持つことになる。すると、だれでもDBサーバーにアクセスできてしまうのでセキュリティ上の問題がある(当然、パスワードで保護されてはいると思うが)。そこで、インターネットから隔離するのがVPCである。これにより、「DBサーバーはプライベートIPだけを持ち、同じVPC内のインスタンスとだけ通信が可能」といった設定ができるようになるわけだ。

さらにVPCの中でもサブネットに分けることで、VPC内でも不要なサーバー間の通信ができないようにし、セキュリティを硬くするのである。

EC2は使ったことあるけど、VPCとか使ったことないんだけど?

EC2サーバー立てたことあるけど、VPCとか作らなくてもサーバー立てられたよ?

確かにVPCを作らなくても、WebのコンソールからEC2サーバーを立てることはできるが、これは実は裏で勝手にVPCとサブネットが作られているのである。

アプリケーションを作っていると、いつかVPCやサブネットの存在を意識する必要が出てくる。また、VPCやサブネットを自分で管理しないと、サーバー構成がぐちゃぐちゃになってしまうだろう。次回からは、CloudFormationというツールを使いながら実際にサーバーを立てながらVPC、EC2、サブネットについて学ぶ。

まとめ

  • VPCとサブネットを作らずにEC2サーバーを立てると裏で勝手にVPCとサブネットが作られる
  • セキュリティや管理の観点から、VPCとサブネットは自分で作った方がいい
  • 次回から実際にサーバーを構築してみる

*1:当然EC2にMySQLをインストールしてデータベースとして利用することは可能だが、レプリケーションはバックアップの設定は頑張って自分で行うことになるので、専用のサービスがある場合はそちらを使うべきである