はじめに
サーバレスアプリケーションとは、サーバを必要とせず動作させることができるアプリケーションのことを指します。
ユーザが自身でサーバを立てて運用するのではなく、AWSに代表されるクラウドサービスを組み合わせて、アクセスがあったときなど、必要なときのみクラウドサービスを呼び出して、サービスを提供するアプリケーションになります。
これにより、必要なときだけサービスが起動するので、常時稼働させなければならないサーバに比べて費用がかからないといったコストメリットや、サーバがダウンすることがないので可用性について気にする必要がない、現状のアプリケーションがそのまま利用できる、といった様々なメリットがあります。
そこで、本書では、一からサーバレスによるアプリケーションを作成することを通して、必要な知識を学んでいただけるようまとめました。
サーバレスアプリケーションとしてWebアプリケーションを構築するだけでなく、様々な定期処理といったスケジューリング処理もサーバレスに実行できる章も設けておりますので、ここで得た知識を応用できる場面は広いのではないかと思います。
01 サーバレスアプリケーションのメリット
サーバレスアプリケーションには次のようなメリットがあります。
1. 費用が安い
通常、物理サーバを用意する場合や、クラウドサービスを利用してサーバを立ち上げる場合でも、いつアクセスがきてもレスポンスが返せるよう、常時サーバを稼働させておく必要があります。
一方、サーバレスアプリケーションでは常にサーバを稼働させておく必要がありません。
リクエストがあったときなど必要なときだけ起動するので、常時稼働しているサーバに比べて費用がかからないというメリットがあります。
2. 可用性を気にしなくてよい
通常、アプリケーションの運用ではサーバがダウンすることに備えて、サーバの冗長化(※1)を行ったり、ロードバランシング(※2)を行う必要があります。
一方、サーバレスアプリケーションではサーバの存在をほぼ意識しなくてもよいため、サーバがダウンすることがありません。
そのため、ロードバランシングや、サーバの可用性(※3)を考慮しなくてもよくなります。
※1 システムがダウンしても稼働できるように予備のシステムを用意して運用しておくこと。
※2 複数のシステム間で、負荷がかからないように処理を分散すること。
※3 システムが継続して稼働できる割合。
3. 自動でスケーリング
通常、アプリケーションの拡大に応じて多数のリクエストが発生するようになり、パフォーマンスが求められるほど、スペックを上げるなどサーバのスケールアップが必要になります。
そしてスケールアップしたサーバを常時起動しておく必要があり、その分の費用がかかってしまいます。
サーバレスアプリケーションでは自動でスケーリングしてくれるので、リクエスト数の増加に備えた対策や、あらかじめサーバをスケールアップしておく必要がなくなります。
4. 現状のフレームワークを利用できる
現状のアプリケーションフレームワークをそのまま利用できます。
そのため、これまで利用していたアプリケーションフレームワークを利用してアプリケーションを開発しつつ、ローカルサーバを立ち上げて動作確認し、本番はサーバレスアプリケーションとしてデプロイ(※4)することもできます。
※4 プログラムを特定の環境に配置して利用できるようにすること。
02 サーバレスアプリケーションを実現するAWSサービス
本書ではクラウドサービスとしてAWSを使用します。サーバレスアプリケーションを実現するためのAWSサービスについて紹介します。
1. AWS Lambda
AWS Lambdaとは、サーバを用意することなく、AWS上で任意の小さな関数(プログラム)を実行するためのサービスです。このAWS Lambdaは、様々なイベントを受け取って、それをトリガーに用意したプログラムを実行することができます。
AWS Lambdaはコードがトリガーされたときのみ、100ミリ秒単位で金額が発生するだけなので、サーバを立ち上げて常駐させておくのに比べて大きなコストメリットがあります。また、イベントは同時に1つではなく、並行して受け取りそれぞれ処理することができます。そのため、急なトラフィック増大にも自動でスケーリングされ対応することができます。
プログラミング言語としてはNode.js、Java、C#、Go、Pythonなどをサポートしていますので、本書で利用するPythonでもプログラムを書くことが可能です。このAWS Lambdaの活用により、サーバレスでアプリケーションを構築することが可能になります。
2. Amazon API Gateway
Amazon API Gatewayとは、スケーラブルなAPIエンドポイントを提供するサービスです。つまり、大量のトラフィックがあっても対応可能な、クライアントからのアクセス用のWeb URLを利用することができます。
Webアプリケーションでは、URLにリクエストがあると、そのリクエストに応じた処理を行いレスポンスを返します。この処理をサーバレスアプリケーションに置き換えると、以下のようになります。
- Amazon API Gatewayで用意したURLにリクエスト
- そのリクエストに応じてAWS Lambdaを呼び出し処理を実行
- レスポンスを返す
3. Amazon DynamoDB
Amazon DynamoDBは、スループットを自動的にスケーリングするサーバレスデータベースです。データを保護するために継続的にバックアップが行われ、10ミリ秒単位のレスポンスを実現できる、NoSQLデータベースです。
読み込みキャパシティ、書き込みキャパシティ、データストレージの量に応じて費用が発生します。
読み込みスループットは、強力な整合性のある読み込みなら1秒あたり1回ごとに1キャパシティを消費し(4KBまで)、毎月25キャパシティユニットまでは無料、それ以降はユニットごとに料金が発生します。
書き込みスループットは、1秒あたりの(1KBまでの)書き込み1回ごとに1キャパシティを消費し、毎月25キャパシティユニットまでは無料、それ以降はユニットごとに料金が発生します。
データストレージは毎月最初の25GBまでは無料で、それ以降は月額で料金が発生します(いずれも2021年1月時点)。
例を挙げると、1レコードあたり最大の4KBを使ったとしても、625万レコードを作成する規模になるまで費用がかからないことになります。
キャパシティについても1時間あたり90,000アクセスを超えるアクセスがなければ無料で使用することができる、大きなコストメリットがあるサービスです。
本書ではコストメリットがあり、自動でスケーリングするサーバレスデータベースとして、Amazon DynamoDBを利用します。本書ではAWSを使用しますが、AWSの詳細は専門書を参考にしてください。