私は普段の業務でアプリケーション開発のフロントエンドやバックエンドを担当しています。
AWSといってもS3やSESなどを部分的に触る程度で、
「AWSを使ってどのようにインフラを構築しているのか?」
「沢山のサービスの中で何を利用しているのか?」
「各サービスが何をしているのか?」
といったことは正直わかりませんでした。
それでも業務上困ることはなかったのですが、あるとき案件でNext.jsを扱って「ホスティング」について調べる機会があり、S3とLambda@Edgeを使ったホスティングができるといったことが分かりました。
ただ、分かったのはいいものの、設定の仕方やメリットなどを説明できず、もどかしさを感じ、せっかくなら自分でインフラ構築もできるようになりたいと思い、AWSアソシエイトの勉強をはじめました。
今回はAWSの概要とよく使用されるサービスについてご紹介します。
インフラとは何か?
まず「インフラ」とはどのような領域を指すのかご説明します。
例えば私たちがショッピングサイトなどを見るときには、大きく分けて3つの登場人物が存在します。
①クライアント(パソコンやスマホなど)
②ネットワーク(インターネットなど)
③サーバー(サービスを提供するコンピューター)
最初にWifiに接続したパソコン(①)でGoogleChromeなどのインターネットブラウザを起動し、「Amazon」といった検索ワードを使って検索します。
するとインターネット(②)を通じて、ショッピングサイトのソースコードなどが置かれているサーバー(③)にリクエストが送信され、サーバーは閲覧に必要なデータをパソコンに送り返します。
インフラとは②と③の総称で、インフラエンジニアはこの環境の設計や構築を担当します。
クラウドとは何か?
AWSはクラウドコンピューティングサービスと称されますが、「クラウド」とは一体何を指しているでしょうか?
クラウドという概念を理解するには、まず対となる「オンプレミス」を理解した方がわかりやすいと思います。
オンプレミスでは下記の図のように、会社Aが自身でサーバーを所有し、業務に必要なアプリケーションなどを設置しています。
従業員はパソコンなどをこのサーバーにつないで日々の業務を行います。
このように自前でインフラを用意して、使用・管理する形式を「オンプレミス」と呼びます。
それに対してクラウドは、AWSでいうとAmazonが世界各地にデータセンター(サーバーの設置場所)を保有しており、各データセンターはインターネットに接続されています。
弊社などWEBアプリケーションを開発する業者は、データセンターにあるサーバーの仮想領域の一部をレンタルし、アプリケーションなどを管理&配信しています。
このようにネットワーク経由でインフラを使用・管理する形式を「クラウド」と呼びます。
ここで、オンプレミスとクラウドのメリット・デメリットを簡単にご紹介します。
AWSとは何か?
先程ご説明したとおり、AWSはAmazonが提供するクラウドコンピューティングサービスです。
AWS公式の「製品」を見ていただくとわかりますが、提供されているサービスの種類は200を超えています。
ですので、AWSでインフラを構築する際は、要件や予算に合わせて使用するサービスを適切に選択する必要があります。
なお、同じようなクラウドコンピューティングサービスとしては、「Microsoft Azure」「Google Cloud」などが存在しますが、canalysが2022年に行った調査によるとAWSが31%のシェアを占めています。
WEBアプリケーションのインフラに使用されるサービスの一例
実際はアプリケーションの要件によって使用するサービスが異なりますが、一般的なアプリケーションでよく使われるサービスをご紹介します。
IAM
IAMは「Identity and Access Management」の略称で、AWSのサービスやリソースを安全に操作するために、ユーザまたはグループ単位でアクセス許可を細かく設定・管理できる機能です。
例えば、システムのメンテナンス用にIAM以外の全てのAWSサービスにフルアクセスできるユーザー(パワーユーザー)をつくったり、アプリケーションのデプロイ用にEC2にのみアクセスを許可したユーザを作成したりすることができます。
IAMはセキュリティ上とても重要な機能なので、AWSが定めるベストプラクティス(Well-Architected Frameworkといいます)で設定・管理方法が細かく書かれています。
VPC
VPCは「Virtual Private Cloud」の略称で、仮想ネットワークを提供するサービスです。
例えば動画配信サービスのインフラをつくりたいとなったときに、AWS内にそのサービス専用のプライベートなネットワークをつくることができます。
EC2
EC2は「Elastic Compute Cloud」の略称で、LinuxやUbuntuといったOSを搭載した仮想サーバーを提供するサービスです。
NginxやApacheをインストールしてWebサーバーにしたり、MySQLなどのデータベースエンジンをインストールしてデータベースサーバーとしても利用可能です。
RDS
RDSは「Relational Database Service」の略称で、MySQLやPostgreSQLなどを利用できるマネージド型リレーショナルデータベースです。
単にデータベースを使用するだけであれば、EC2インスタンスにMySQLをインストールするといったこともできますが、RDSは「マネージド型」なので、スナップショットを使ったバックアップの復元や、ソフトウェアの自動パッチ適用、イベント監視などシステムを運用する上で重要なサービスが既に揃っています。
なお、対応しているデータベースエンジンは以下のとおりです。
- Amazon Aurora
- MySQL
- MariaDB
- PostgreSQL
- Oracle
- Microsoft SQL Server
S3
S3は「Simple Storage Service」の略称で、容量無制限のストレージサービスです。
「標準 – IA」や「Glacier Instant Retrieval」といった複数のストレージタイプが存在し、データへのアクセス頻度に応じてより低価格なストレージタイプを選択することで、料金を節約することができます。
またサーバーサイド言語(PHPなど)を使用しない静的ウェブサイトであれば、EC2ではなくS3でホスティングを行うことで料金を節約することができます。
Route53
Route53はドメインを管理したり、DNSルーティングを設定したりするサービスです。
CloudFront
CloudFrontは、HTML/CSS/JavaScriptファイル・動画・画像といった静的なファイルをキャッシュしてEC2などのWebサーバーの代わりにコンテンツを配信してくれるCDNサービスです。
CloudFrontを利用することでコンテンツの表示速度を高速化したり、EC2の負荷を軽減できるといったメリットがあります。
ちなみに、CloudFrontを利用すると表示速度が上がるのは、エッジロケーションと呼ばれるデータセンターとは別のサーバーが各地に点在しており、クライアントから距離的に一番近いエッジサーバーからコンテンツを配信しているかららしいです。
おわりに
以上、AWSの概要と各サービスについてご紹介してきました。
インフラというと非常に難解なイメージを持っていましたが、一つひとつは割とシンプルで、実際にハンズオンで学習してみても思ったより簡単に操作できました。
AWSアソシエイトの試験が終わったら、Next.jsのアプリケーションのホスティングやAWS Amplifyでのアプリケーション構築など試して記事にしていこうと思います。