今回はAWSにてWebアプリケーションを構築したい場合、どういった構成がとれるのか、といった議題で執筆しようと思います。
VPCを構築
まずVPCを構築しましょう。VPCとは、「Virtual Private Cloud」の略でAWS上に仮想ネットワークを構築することが可能です。
AWS上にVPCを東京リージョンで構築したとすると下記図になるかと思います
サブネットを構築
次にサブネットを構築しましょう。サブネットにはインターネットとのアクセスを可能とする「パブリックサブネット」とVPC内で通信を行いインターネットとのアクセスを許可しない「プライベートサブネット」と大きく二つに分かれます。
パブリックサブネットとプライベートサブネットの違いは「インターネットゲートウェイ(IGW)」がサブネットのルートテーブルに設定しているかどうかと覚えているとよいかと思います。
では上記の図にパブリックサブネットとプライベートサブネットを構築してみます。
ここでAvaliability Zone(アベイラビリティゾーン)というのが図に記載されていますが、アベイラビリティゾーンとはデータセンターと思ってください。データセンターを跨ぐことで、例えば災害などでデータセンターが停電などになった場合、サーバーが停止あるいは故障してしまう可能性があるのを防ぐことができます。図のような構成を「マルチAZ」構成と呼びます。
基本的にAWSでサーバー構築する場合はマルチAZ構成で構築することをおすすめします。
EC2の構築
ここまで??が飛んでいるかも知れませんが、ここからが本題みたいなところです。「Webサーバー」の登場です。
WebサーバーにはEC2やECSなどコンピューティングサービスを選択するとよいでしょう。また、サーバーレスアプリケーションとしてLambdaを選択するのもよいかと思います。
今回はEC2で開発するとします。
筆者はWindows系で開発することが多いので、EC2のWindows Serverを選択し、EC2構築後は日本語設定やIISを構築した後、.NETフレームワークのインストールなどを行い、C#でのアプリケーションを構築したりします。
パブリックサブネットにEC2を構築しました。
ALB(アプリケーションロードバランサー)の構築
ロードバランサーの機能を持つ「ELB」を用いてそれぞれのサブネットに構築しているEC2に振り分けを行います。
インターネットから例えば「 https://www.miya.com 」とURLをたたくと、今後投稿予定ではありますが、ACM(AWS Certificate Manager)にてhttpsを実現し、www.miya.comはRoute53にてドメイン解決を行い、www.miya.comをALBのURLをドメイン登録しておくとALBからそれぞれのサブネットに構築しているEC2へ振り分けをしてくれます。
冗長構成としての役割ともなりますし、例えばABテストなどにも活用することが可能です。同一セッションであれば同じサーバーへルーティングする「スティッキーセッション」を用いることでアクセスしているサーバー依存のアプリケーションにも対応しています。
ではALBの構成も図に記載します。
RDSの構築
最後にデータベースの構築をしましょう。例えばショッピングサイトなどのECサイトを構築した場合、注文履歴などをデータベースに登録する必要があります。Web上で買い物した場合にDBに書き込みを行うためにRDSを用います。
AWSにはRDSのほかにも、「DynamoDB」や「Redshift」、「ElasticCache」などがあります。リレーショナルデータベースが必要な場合やSQLを利用したい場合はRDSを選択しましょう。
RDSにはOracleやPostgreSQLなど幅広いリレーショナルデータベース管理システムが対応しています。その中でもAWSでは「Amazon Aurora」を推奨しています。Auroraを利用することで性能が格段に高まるので、できる限りAuroraを利用することをおすすめします。
最終的なシステム構成図
インターネット経由で接続をした場合、下記構成になるかと思います。
上記の構成には、まだネットワークACLやセキュリティーグループなどのファイヤーウォールの設定やルートテーブルの設定、ACMやRoute53の話ができていないため、説明としては不十分ですが今後投稿していけばと思います。