AWSを学ぶときに、大きな壁となってしまいやすいのがAmazonVPC(Amazon Virtual Private Cloud)です。
オンプレミスでのネットワーク構築経験があれば、さほど難しい話でもないのですが、AWSを使う人の中には、サーバやネットワークに詳しくない方も多いので、躓きポイントになっているのでしょう。
今回は、VPCのお話をしながら、AWSで必要なネットワークの知識についてお話していきます。
そもそもサーバとは何か。ネットワークとは何か
そもそも、サーバとは何でしょう。意外と、プログラマの方でも、この問いにきちんと答えられない人は多いです。
サーバとは、「Server」の名のとおり、何かサービス(Service)を提供するものを指します。WebサーバならWeb機能、メールサーバならメール機能を提供することを意味します。提供するサービスの種類によって「○○サーバ」と呼ばれます。○○サーバの機能は、ソフトウェアで提供されます。ですから、ApacheのようなWeb機能を提供するソフトを入れれば、「Webサーバ」となりますし、PostgreSQLのようなデータベース機能を提供するソフトを入れれば、「データベースサーバ」となります。
そしてややこしいのは、「サービスを提供する機能」だけでなく、サーバ用ソフトをインストールする物理的なマシンのこともサーバと呼びます。わかりづらいですね。ですから、「サーバにサーバソフトを入れたからサーバになった!」とわかってないと意味の通じにくい話になりがちなのです。
サーバは特殊なものと思われがちですが、「サービスを提供する機能」という役割に名前が付いているだけのものです。ですから、サーバとして使われるマシンと、皆さんが使っているクライアント用のパソコンに大きな違いはありません。サーバは、その性質上、同時接続しやすかったり、壊れづらい構成になっていたりする傾向はありますが、それはあくまで「その方が便利だからそうすることが多い」程度の話で、ハードウェアがあって、OSがあって、ソフトウェアが入っていて……という構成は、クライアントパソコンと同じです。
一方、ネットワークとは、パソコン・サーバやネットワーク機器を接続して、互いに通信できるようにしたもののことを言います。社内で、パソコンから社内ファイルサーバにアクセスできるのも、ネットワークがあるからですし、そもそもインターネットはこうしたネットワークの集合体です。
Amazon VPCとは
皆さんが見ているWebサイト。これは、どこかのネットワークにサーバが置かれ、そのサーバの中にあるファイルにアクセスすることでページを閲覧できます。
つまり、Webサイトを公開したいのなら、どこかのネットワークに所属する必要があるわけです。これは、AWSのサービスでも同じです。ネットワークにつながなければなりません。
ただ、AWSのサービスには、マネージド、非マネージドに関係なく、Amazon S3のようにすでにネットワークに所属しているサービス(グローバルネットワーク所属)と、Amazon EC2やAmazon RDS(AWSのデータベースサービス)のように、そうでないサービス(非所属)が存在しています。
後者のようなネットワークにつながっていないサービスは、つながなければ使えません。
そこで使用するのが、Amazon VPCです。
Amazon VPCは、AWSアカウント専用の仮想ネットワークで、AWSで提供されるリソースのみを置くことができます。とくに、EC2やRDSの場合、作成時にVPCを選択しないと作成できません。リソースを使用するには、必須のサービスです。
ですから、自分でネットワークを設計しなくてはならないのですが、「そんなこと言われても、全然わからないぞ!!」という方もいらっしゃるでしょう。そういう人のために「デフォルトVPC」と呼ばれる選択したらすぐに使えるネットワークもあります。
必要な前提知識は?
このように、詳しくなくても使えるようなサービスは用意されていますが、サービスとしてリリースしたり、顧客に納品したりしたいのであれば、前提となる知識は知っておいたほうが良いでしょう。
自分で実験用として使ったり、たいして重要でないことをするのであれば、知識が浅くても大きな問題になりませんが、顧客や一般ユーザが絡むと、話は変わります。知識が曖昧なままリリースして、何かあれば、使う人たちが困ってしまいますし、自分たちも対応に追われてツライ状況になりがちです。
自信が持てないのならば、商売に使うべきではありません。
AWSは便利なサービスですが、魔法の杖ではないのです。
サーバを使いたいのなら、サーバの知識とLinuxはわかっておくべきです。Linuxのコマンドを知っておくことも大事ですが、少なくとも「どうしたらセキュリティ的に問題がないか」もしくは「セキュリティ的に問題があるか」を知っておきましょう。
自分たちのサーバの持つリスクの範囲を知っておくことは、すごく大切です。
ネットワークも同じです。サブネットやルーティングの基本は知っておくべきでしょう。オンプレミスで構築できるくらいの知識は必要ですが、逆に言えば、オンプレでの経験があるのであれば、すぐに使いこなせるはずです。
サーバもネットワークも自分で設計・構築するものです。便利なサービスや、参考にできるサンプルは存在しても、自分たちのシステムは、自分たちで考えて作るものであることを、忘れないようにしましょう。
ニャゴロウ先生以外の文中の図は『図解即戦力 Amazon Web Servicesのしくみと技術がこれ1冊でしっかりわかる教科書』より引用しております。おかげさまで発売後わずか2年ですが、10刷を迎える大ヒットとなりました。
この連載は、その10刷記念として企画されたものです。書籍のほうもよろしくお願いしますね!