【AWSでキメる】 サムライアプスのサーバーレスウェブサイト制作術(1)
サムライアプスのウェブサイトは、 Amazon S3 を使ってサーバーレスで構築されています。本シリーズでは、サーバーレスウェブサイトの構築方法を、実際に稼働している本サイトの場合を例にして紹介していきます。
サーバーレスとは?
サーバーレスという用語をいきなり使っていますが、どのような意味なのでしょうか。インターネット上で何かサービスをするにあたってサーバーがないということはあり得ないわけで、奇妙な用語です。
サムライアプスも利用しているクラウドプロバイダである Amazon Web Services (AWS) の よくある質問には下記のように書かれています。
Q: What makes a service or application serverless?
We founded the concept of serverless on the following tenets: no server management, pay-for-value services, continuous scaling, and built-in fault tolerance. When adopting a serverless service or building a serverless architecture, these ideals are fundamental to serverless strategy.
(DeepL を用いた翻訳)
Q:サービスやアプリケーションをサーバーレスにする理由は何ですか?私たちは、サーバー管理不要、従量制サービス、継続的なスケーリング、 組み込みのフォールトトレランスという信条をもとにサーバーレスの概念を確立しました。 サーバーレスサービスを採用したり、サーバーレスアーキテクチャを構築する場合、 これらの理想がサーバーレス戦略の基本になります。
キモは、障害対応や機材増強も含めたサーバーという物理的なマシンの管理一切をAWSに任せ、私たちユーザーは使った分だけ料金を支払う従量制で利用する、という点です。
中小企業が、自社で構築・運営するために利用するという観点では、下記のメリットが重要です。
- 運用負担の軽減 インフラ管理の大半がクラウドプロバイダに任せられるため、運用・監視に費やす時間と人材の確保がほぼ不要となります。障害監視だけでなく、急に注目を浴びてアクセスが急増した場合でも自動的にサーバーの増強が行われるため安心です。アクセスが落ち着けば、自動的に戻ります。
- コスト負担の軽減 中小企業のウェブサイトはトラフィックが大きくないため、非常に少額の料金で済みます。アクセス急増のケースでも、増えた時間帯の分だけ多く払うだけです。
デメリットとしては、次が考えられます。
- 技術者確保 運用時はほぼ監視不要ですが、構築や改造をする場合は技術者の確保が必要です。
- ベンダーロックイン サーバーレスには標準がなく、クラウドプロバイダの変更にはプログラムの移植が必要です。
ウェブサイトにはウェブサーバーとコンテンツが必要
サーバーレスに限らず、ウェブサイトを作るには次の2つが必要です。
- ウェブサーバー 読者からのリクエストに対して、指定されたURLのコンテンツを返却します。
- コンテンツ ウェブサイトのコンテンツです。
現在のウェブ技術は、様々な要求にこたえるために、非常に多様化しています。 大きくは、静的サイトと、動的サイトに分けられます。
- 静的サイト あるページのリクエストに対し、いつも同じコンテンツを返します。
- 動的サイト あるページのリクエストに対し、データベース等を参照してコンテンツを生成して返します。
動的サイトを作成するには、データベースとコンテンツの生成処理を行う必要がある分、コストがかかります。
サムライアプスのサイトは、運用とコスト負担を最小にすることを重要視して静的サイトとして作られています。
(しかし、実は動的サイトのようなことも実現可能です。これはまたの機会に)
利用する具体的なサーバーレスサービス
前述のとおり、サムライアプスでは Amazon Web Services (AWS) を利用していますが、具体的には下記のサービスを組み合わせています。
- Amazon S3 本来はストレージサービスですが、ウェブサーバーとして使うことができます。
- CloudFront Distribution S3 自体はアクセス性能が低いため、それを補う Content Delivery Network という仕組みです。
- AWS Identity and Access Management (IAM) アクセス制限を行うために使われるサービスです。S3 のデフォルトドメイン名でのアクセスを禁止するために用います。
- CloudFront Function テスト用サイトの、パスワード制限を導入するために用います。
- Certificate Manager ドメイン所有の証明書を発行します。
https://で始まるサイト(暗号化されて安全な通信が行える)にするために必要です。 - Route53 samurai-apps.com という名前でアクセスできるようにするための、 Domain Name Service (DNS) のサービスです。
- その他、ログや、パラメータの保存などもあります。
以上の構成は、コストは極めて低く抑えながら、十分な性能を発揮することができ、サーバーレスでウェブサイトを作る場合の定石となっています。
次回はソースコードの解説
次回以降は、実際に使っているソースコードを使いながら、さらに詳しい紹介をしていきたいと思います。
お楽しみに。
これにてご免!