公開日:2022年6月20日最終更新日: 2022年6月21日
近年クラウドサービスの活用方法として「サーバーレスアーキテクチャ」が注目されています。各種システムを構築するためにはサーバーを用意するのが当たり前でしたが、現在はサーバーを用意しない、つまり「サーバーレス」が増えているのです。
ただ、サーバーレスアーキテクチャが注目されているものの、具体的な実装などが理解されていない状況です。今回はサーバーレスアーキテクチャの概要とAWSで実装する場合に利用するサービスや事例をご紹介します。
目次 <Contents>
サーバーレスアーキテクチャとは
冒頭でも触れましたが、サーバーレスアーキテクチャといわれても、具体的なイメージが持てない人は多いでしょう。まずはキーワードの意味について解説していきます。
サーバーレスアーキテクチャの概要
実はサーバーレスアーキテクチャに明確な定義はありません。そのため、皆さんがキーワードの意味を理解できていなくとも不思議ではないのです。その時々において意味合いは変化しますが、AWSに絞ったサーバーレスアーキテクチャはEC2やElastiCache、Redshiftなどを利用していないものです。
つまり、いわゆる仮想サーバーに該当する機能を利用せず、コードの実行環境やデータベースだけで構築されたアーキテクチャを指します。一般的なシステムにはあって当然のサーバーを利用せず、それに置き換わる仕組みだけで構築するのです。
サーバーレスアーキテクチャの特徴
システムを構築するにあたってサーバーを利用しないため、サーバーのコストがかかりません。購入費用や設置費用はもちろん、メンテナンス費用やサーバーの設定にかかわる人件費なども不要である点が特徴です。
また、設定や運用をあまり意識しなくてよくなるため、間接的にシステムの開発工数を減らせます。
本来、システムは設定や運用を加味して細かく作り込むものです。しかし、サーバーレスアーキテクチャでこれらが無視できるようになれば、設計や実装をしなくて済みます。
他にも、基本的にサーバーレスアーキテクチャはそれぞれが疎結合です。これが影響し、スケールの拡張などもしやすくなっています。サーバーを利用する際に意識すべきほとんどのポイントが無視できるのは大きな特徴です。
AWSでサーバーレスを実現するための主要なサービス
AWSでサーバーレスシステムを構築するためには、特定のサービスを利用する必要があります。AWSでサーバーレスアーキテクチャを実装するサービスを紹介します。
AWS Lambda
AWSでサーバーレスアーキテクチャを実現するにあたり、なくてはならない存在です。作成したプログラムを定義したり実行したりするサービスです。
一般的にプログラムを実行するためには、サーバーを立てて実行環境を構築しなければなりません。プログラミング言語に適したサーバーを構築して、ソフトウェアのインストールやセッティングをする必要があります。
しかし、AWS Lambdaを利用すればこのようなサーバーは必要ありません。ビジネスロジックはすべてAWS Lambdaで実装したり管理したりするようにすればよいのです。様々な処理やデータベースなどとのアクセスは、AWS Lambdaに実装されているプログラムで実装できます。
Amazon API Gateway
自分で開発したAPIを公開したり管理したりするサービスです。一般的なAPIを公開するためには、公開に適したサーバーが必要です。用意したAPIサーバーと関連するサーバーを連携させて、ビジネスロジックの呼び出しやデータベースの連携などをします。
また、単純にAPIを公開するだけではなく、認証機能や監視機能の実装が可能です。本来、これらについてもサーバーを用意して自分で実装する必要があります。しかし、AWSのサービスを利用すれば自分の管理から外れるのです。
Amazon SNS
情報を通知するためのサーバーを用意しなくても、Amazon SNSで通知を実装できます。ユーザーのアクションやシステムトラブルをトリガーに通知できるため、システムでの実装は不要です。
ただ、通知機能を実装できるものの、基本的には外部からのトリガーが必要です。Amazon SNSにスケジュールを登録して動作させるような使い方はできません。また、通知できる容量にも制限があるためその点は考慮しましょう。
Amazon SQS
サーバー内にミドルウェアをインストールすると、AWSのサービスなどが柔軟に呼び出せなくなります。CLIの利用などは考えられますが、利便性は欠けると考えてよいでしょう。それに対してAWS Step FunctionsはAWS LambdaなどAWSのサービスを順番に処理可能であり、非常に利便性の高いものです。
サーバーレスでキューイングを実装するためのサービスで、システム間で情報をやりとりするにあたってAmazon SQSにキューイングすれば、直接データをやりとりする必要がなくなります。また、「データ中継サーバー」などのような中間システムを構築する必要がありません。
サーバー内にミドルウェアをインストールすると、AWSのサービスなどが柔軟に呼び出せなくなります。CLIの利用などは考えられますが、利便性は欠けると考えてよいでしょう。それに対してAWS Step FunctionsはAWS LambdaなどAWSのサービスを順番に処理可能であり、非常に利便性の高いものです。
AWSにおけるサーバーレスシステムの実装例
AWSの公式サイトを参照してみると、サーバーレスシステムの実装例が数多く公開されています。これらの中には複雑で理解しにくいものもあれば、初心者向けで理解しやすいものもあります。今回はサーバーレスアーキテクチャの理解しやすい事例をご紹介します。
画像のリサイズシステム
AWSでサーバーレスアーキテクチャを構築するシンプルな事例です。S3に画像データが格納された事実をLambdaでキャッチし、Lambdaでそのデータ内容を処理します。サーバー内にファイルを格納せず、S3とLambdaというAWSのサーバーレスサービスだけで完結している点が特徴です。
活用の事例としてはブログやECサイトの自動リサイズなどが考えられます。サーバー内に高画質な画像データを大量に格納すると容量を圧迫するため、リサイズ機能だけをサーバーレスで構築するのです。
認証情報が必要なWEBサイト
WEBサイトをサーバーレスで実装する事例です。一般的にWEBサイトを構築するためには「WEBサーバー」を構築する必要がありますが、今回は「AWS Amplify Console」に置き換えています。こちらはサーバーレスでWEBサイトを表示できるものだと理解しておくとよいでしょう。
また、認証には「Amazon Cognito」を利用しています。こちらはサーバーレスアーキテクチャに限らず利用される認証・許可サービスです。本来は「認証サーバー」などを用意して対応しますが、Amazon Cognitoを利用すればサーバーレスで実装できます。
まとめ
サーバーレスアーキテクチャについてご説明しました。明確な定義はなく意味合いは環境によって異なりますが、AWSにおいてはEC2などの仮想サーバーを利用しないシステム構築だと理解するとよいでしょう。
AWSでサーバーレスアーキテクチャを実装するならば、利用するサービスは限られています。今回ご紹介したものを中心に、サーバーレスアーキテクチャで利用する王道サービスを学んでおきましょう。
なお、サーバーレスアーキテクチャで利用するサービスは「サーバーレス専用サービス」とは限りません。一般的なサーバーを用いたシステムと併用するサービスも多々あるため、その点は誤解してはなりません。