こんにちは。かじです。今回は、AWSのVPCとサブネットについて解説したいと思います。
AWSのVPCとサブネットは、AWS上にインフラを構築する上で重要な概念になるので是非クリアしていただけたらと思いますし、その一助になればと考えております。
1.VPCとは
VPCとはVirtual Private Cloudの略で日本語に直すと仮想プライベートクラウドとなりますが、日本語にしたところであまり意味は分かりませんね。VPCを紐解く上で、LANとネットワークという単語の意味を押さえておきましょう。
1-1.ネットワークとLANとは
ネットワークとは、複数のコンピュータを繋ぐ仕組みのことを言います。有線のケーブルもそうですし、家庭や社内などでパソコンが繋がっている無線LANも複数のコンピュータを繋げるためのネットワークです。
次にLANです。LANとはLocal Area Networkの略で、家の中や会社の中など限られた空間で使用されるネットワークを指します。こちらも無線LANに繋がっているデバイスはLANに繋がっている状態といえます。
よく家の中でLANにスマホやパソコンを繋ぐとインターネットが使えると考えますが、無線LANルーターは厳密には家の中でのネットワークを構築しているだけといえます。
それではインターネットとはなんでしょうか。インターネットとは複数のLANによって構築されたネットワーク同士を繋ぎ合わせた仕組みになります。無線LANルータでLANネットワークを構築した後、プロバイダが構築したWAN(Wide Area Network)によってネットワーク同士が繋がり、インターネットサービスを利用することが可能になります。
1-2.VPC
話は戻ってVPCです。クラウド上に構築される仮想ネットワークになります。VPCはAWSの利用者がネットワークの範囲などを定義して作成します。これから作成する様々なAWSリソースが作成したVPC内に配置することで、AWS上に構築したクラウドサーバーをプライベートに繋ぐことができます。プライベートに繋ぐというのは、インターネットを介さずにローカルなネットワークのみで繋ぐということです。
インターネットは多くの人が使用します。それだけ攻撃を受ける危険があるということです。サーバを構築する上で、最低限の必要を除いて、インターネットに繋がないというのが、VPCを使用する意義になります。最低限のインターネットを繋ぐ意味とはなんでしょうか。
下記のような要素が考えられると思います。
・WEBサービスの外部への公開
・外部サービスとの連携
主に上記の二つを除くとAWS内に構築したネットワークだけでシステムを構築することができ、よりサーバーのセキュリティを担保することができます。
VPCを複数作成する場合、VPCは互いに独立しており、干渉もしません。
2.サブネットとは
VPCを作成したら、次にネットワークを分割しサブネットを作成します。
なぜネットワークを分割するのでしょうか。
これにはいくつかの理由があります。
一つ目は、セキュリティを担保するということです。WEBサーバーとDBサーバーを用意したシステムで、インターネットに繋ぐことを例にしてみたいと思います。WEBサーバーは、クライアントからのHTTPリクエストを受け付けてHTTPレスポンスをクライアントに返すため、インターネットに繋がっている必要があります。一方でDBサーバーはWEBサーバー上のアプリケーションからの問い合わせに応じて、DBの参照や更新を行います。そうなるとDBサーバーはWEBサーバーとプライベートなネットワークで繋がっていれば良く、インターネットに出る必要はありません。
という訳で、インターネットはWEBサーバーにだけ繋ぎたいとすると、WEBサーバーとDBサーバーが同一のネットワーク内にあると、どちらもインターネットに繋がってしまい、設定上不都合が生じます。
VPCを分割してサブネットを作成すると、このサブネットはインターネットに繋いで、このサブネットはプライベートな通信だけをするというような設定をすることができ、セキュリティが向上することができます。
次に、冗長性の向上です。WEBサーバーを同一のネットワーク内に二つ構築し、災害によるAWSデータセンターへの障害が起きた場合、AWS常に構築したサーバーは全てダウンしてしまいます。それを回避するためにAWSはアベイラビリティゾーンといってデータセンターを同じ地域であっても何箇所かに分散させています。
VPCは一つのリージョン内で複数のアベイラビリティゾーンにまたがって構築します。そのため、VPCを分割してサブネットを作る際に、別々のアベイラビリティゾーンに各サブネットを配置することで冗長性を高めることができます。
これがサブネットを作る主な理由になります。
サブネット自体、ネットワークでも用いられる考え方になりますので、ネットワークの勉強と捉えて学習されてもいいかもしれません。
3.最後に
このネットワークの考え方がIaaSにおいての学習障壁の高さであり、レンタルサーバーなど簡易的に開始できるサービスとの大きな違いになるかと思います
ネットワークはプログラミングから学習を始めている方は、なかなか難しい部分でもあると思いますが、アプリケーション開発において是非クリアして欲しい知識かなと思います。
今回はここまでになります。
最後まで閲覧くださり、ありがとうございました。
コメント