サーバーレスの主要なユースケース
目次
サーバーレスのメリット
AWS(Amazon Web Services)では近年様々なサービスがリリースされており、サーバーレスで多様なアプリケーションを構築できるようになっています。本記事では、サーバーレスの主要なユースケースについて記載していきます。そもそもサーバーレスを採用することで、どのようなメリットがあるのでしょうか。具体的に見ていきましょう。
サーバーの運用が不要
一般的にITシステムの運用を行う際には、アプリケーションが稼働している物理サーバ、OS、ミドルウェアの運用保守も必要です。具体的には、サーバ(機器自体)が故障していないか確認する、OSやアプリケーションのログにエラーは出力されていないか監視をする、ライセンスを定期的に更新する、といったことを日々行っていく必要があります。
しかしながら、サーバーレスの場合はOSやミドルウェア、物理サーバーの運用管理はすべてAWSが行います。可用性や拡張性の設計に関しても、AWSなどのクラウド提供者側で実施するため、運用を行っている中でリソース拡張作業を行う、といったことも不要になります。そのため、サーバーの運用に関する様々な業務を削減することができ、運用コストの削減だけでなく、人的リソースをアプリケーション開発にそそぐことができます。
利用した分だけの課金
サーバーレスは、オンプレミスやIaaSなどの他のクラウド利用形態と違い、利用した時間や実行回数に応じて課金がされます。例えば、オンプレミスはサーバーを設置していなくても場所を借りるだけでも利用料金がかかりますし、IaaSの場合は、サーバーの利用契約を3か月単位で結ぶ場合では、3か月の間に使っても使わなくても課金が発生してしまいます。
一方でサーバレスは、プログラムを実行した時間に応じた課金体系です。例えばAWS Lamndaは、Lambda関数のリクエスト数(実行回数)と、Lambda関数のメモリに応じた実行時間に対する課金体系です。このように、使った分だけ課金されるので、コスト効率が非常に優れています。
高速開発が可能
一般的なプリケーションの設定は、アプリケーション自体の設計のほかに、OSやミドルウェアの設計も行います。しかしながら、先述のように、サーバレスの場合はクラウド提供者側でOSやミドルウェアの設計を行うため、利用者側での対応が不要です。したがって、設計工程を大幅に短縮することができ、アプリケーションやITシステムの高速開発が可能です。
AWS上でサーバーレスを活用してDXを実現するスタイルズのサーバーレス開発サービスはこちら→
サーバーレスのデメリット
サーバーレスにもやはりデメリットが存在します。開発の際には、留意して、事前に対策を行っておくといいでしょう。
学習コストが存在する
サーバーレスのサービスには様々な部品(サービス)、設定項目が存在するため、それらに関する学習コストがかかってしまいます。たとえば、AWSでサーバレスのサービスを構築する場合、S3、API Gateway、AWS Lambda、DynamodDBといったサービスについて理解をしておかないと、利用料金が高くなってしまったり、思うように性能が出なかったりと、十分にサーバレスのメリットを得ることはできません。
機能の制約がある
AWS Lambda、DynamoDBといったサービスは、機能の制約があります。たとえば、AWS Lambdaは、15分以上の時間がかかる処理は行えないことになっており、それ以上の時間がかかるような処理には向いていません。また、DynamoDBは格納する1つのデータサイズが上限400 KBとなっており、扱うデータ量が1つあたり400KBよりも大きいITシステムには向いていません。
このように、サーバレスで使うサービスにおいては、それぞれ制約があるので、処理時間や扱うデータのサイズ、実行できる回数については事前に確認を行うと良いでしょう。
サーバーレスのユースケース
それでは、サーバーレスサービスの組み合わせにより、どのようなサービスが構築できるのかを記載していきます。基本的には、AWSのサーバーレスサービスの基本的な部品は下記のように利用します。以下の基本的なサービスを組み合わせて、様々なサービスを構築していきます。
ユースケース例:動的Web、モバイルバックエンド
- API公開の典型的なサーバーレス実装です。
- リクエスト/レスポンス型向け(同期モデル)です。
- REST APIを経由してDBの情報を同期的に参照/更新します。
- SPAやモバイルアプリで多様されるパターンです。
- レガシーなWebサーバー/APIサーバーの置き換えにも適用が可能です。
- API Gatewayの統合タイムアウトが30秒であることを考慮し、超える可能性がある場合は、非同期呼び出しの適用も考慮が必要です。
ユースケース例:リアルタイムモバイル・モバイルオフライン処理
- リアルタイム通信要件や非接続状態(オフライン)でも動作する要件があるモバイル向きです。
- AWS Appsyncはリアルタイム機能とオフライン機能を備えたフルマネージドなGraphQLサービスです。
- フロントエンドには、AWS Amplifyの適用も可能です。
- GraphQLのモデリングによってAPIを設計します。
- データソースとしては、AWS Lambda、Amazon DynamoDB、Amazon Aurora Severless等を利用可能です。
ユースケース例:シンプルなデータ加工(画像の例)
- データの投入をトリガーとしてファイル情報を引き渡して、処理を起動します。
- Amazon S3からAWS Lambdaを非同期に呼び出します。
- Amazon S3のイベント発行はAt Leaset Onceなので、起動漏れはありませんが、重複して呼び出された場合の考慮をしておく必要があります。
AWS上でサーバーレスを活用してDXを実現するスタイルズのサーバーレス開発サービスはこちら→
ユースケース例:流入データの連続処理
- Kinesisに連続して流入するデータを定期的に受信して、データ加工を行って格納します。
- ストリーミングデータを変換してAmazon S3やAmazon Redshift、Amazon Elasticsearchなどに保存するユースケースであれば、Amazon Kinesis Data Firehoseの利用も検討すべきです。
ユースケース例:イベント駆動の業務処理連携
- 次の処理のためのラスクをキュー(またはS3)にPushして、次の処理に非同期で連携します。
- 一つのトピックに対して、複数の処理を個別に実行することも可能です。
- 順序性が大事なビジネスロジックの場合は、Amazon SQSのFIFOキューと組み合わせての実行も可能です。
ユースケース例:アプリケーションフロー処理
- 一連の処理フローを可視化して、エラー処理のフロー管理としても利用可能です。
- AWS Step Functionsによってリトライや例外処理を宣言的に設定することが可能です。
- AWS Step FunctionsからAWS Step Functionsへの呼び出しや、他の処理の完了を待機してから再開することも可能です。
その他のユースケース
紹介したような特殊な処理以外にもサーバーレスは様々な機能を有しています。例えば、Lambda、API Gateway、S3、DynamoDBを利用すれば、簡単なWebアプリケーションの構築が可能になります。Amazon connectを利用すれば、サーバーレスでコールセンターの設立が可能です。
このように、AWSの様々なサービスを組み合わせることで、高速かつ幅広くITシステムの構築が可能になることが、サーバーレスの大きな特徴です。AWSのサービスは種類が非常に多いため、すべてのサービスの機能を覚えることは非常に難しく、それぞれの制約についても気にするとなると、手間がかかる部分はありますが、そのような場合はAWSのノウハウを豊富に持っているベンダーに相談してみるといいでしょう。