AWS LambdaとAPI Gatewayで作るサーバーレスなWebアーキテクチャー
目次
サーバーレスアーキテクチャの概要と利点
サーバーレスアーキテクチャの概要
サーバーレスとは、クラウド利用のひとつの形態です。『サーバーレス』と言いつつも、実際にはAWSやGoogleなどが管理している物理サーバーが存在しています。
サーバーレスとは、いわゆる「SaaS:Software as a Service(アプリケーションをインターネット上で利用できるサービス)」や、「FaaS:Function as a Service(インターネットを通じて、プログラミングで作成した処理の定義・実行のみをおこなうクラウドの利用形態)」で構築したアプリケーションの総称です。
クラウド上のSaaSやFaaSを駆使し、システム開発者はクラウドにあるサーバーの存在を意識せずにアプリケーションやデータベースの利用ができるクラウド利用形態のことを『サーバーレス』といいます。そして、サーバーレスのサービスを利用してシステムを構築する考え方・設計のことを『サーバーレスアーキテクチャ』といいます。
サーバーレスアーキテクチャの利点とは?
サーバーレスアーキテクチャには、従来のシステム開発とは異なる下記のような利点が存在しています。
スケーラビリティに優れる
アプリケーションの負荷に応じて自動的にスケーリング(処理能力を拡張させること)します。これにより、予測不能なアクセス、トラフィックの急激な増加に対応するための追加のリソースを手動で追加する必要がなくなります。
コスト効率がよい
サーバーレスは、オンプレミスやIaaSなどの他のクラウド利用形態と違い、利用した時間や実行回数に応じて課金がされます。例えば、オンプレミスはサーバーを設置していなくてもラックの利用料金がかかります。サーバーレスアーキテクチャによるシステムは、リソースが起動している(利用されている)場合のみ課金される従量課金制となっています。
これにより、使用しない時間にサーバーを稼働させる必要がなくなり、コストが削減されます。
サーバー運用の人件費が不要
一般的にITシステムの運用を行う際には、アプリケーションが稼働している物理サーバー、OS、ミドルウェアの運用保守も必要です。例えば、、サーバー(機器自体)が故障していないか確認する、OSやアプリケーションのログにエラーが出力されていないか監視をする、ライセンスを定期的に更新する、といった内容です。
サーバーレスシステムにおいてはこのような運用の大部分がAWSにより提供されるので、運用コストの削減をするだけでなく、人的リソースをアプリケーション開発に注力できます。
AWS上でサーバーレスを活用してDXを実現するスタイルズのクラウドネイティブ開発サービスはこちら→
AWS Lambdaの基本的な使い方と機能の紹介
AWS Lambdaとは、Amazon Web Servicesで利用できるFaaSサービスです。プログラミングコードやライブラリを用意するだけでクラウド上で実行ができるという特徴があります。
AWS Lambdaの基本的な使い方は?
Lambdaでは、実行するためのコードの単位を「関数」と呼びます。関数はコンソールやコマンド(AWS CLL)などから作成できます。関数をそのまま実行することもできますし、「イベント」という引数を渡すことで起動することもできます。具体的には、ストレージサービス(S3)への書き込みやAPI Gatewayからのリクエストを起点として起動をすることができます。したがって、Lambdaの使い方としてSaaSやFaasサービス同士を連携させる起点として利用することも可能です。
また、Lambdaの起動や処理のエラーは、自動的にAWSの監視系マネージドサービスであるAmazon CloudWatchにログとして送信することができます。これにより、関数のパフォーマンスをモニタリングし、問題が発生した場合に迅速に対応することが可能になります。
EC2との違いは?
AWSには、仮想サーバーを利用できる「EC2」というサービスも存在しますが、下記のような違いがあります。
- EC2はOSがインストールされた直後の状態で提供されるIaaSサービスであるため、ミドルウェアやパッケージのインストールが必要
- EC2はサーバー内のデータのバックアップやログのローテーションなど、運用設計が必要
- EC2は脆弱性の管理がOSやミドルウェアに対しても必要になり、セキュリティ上の考慮点が増える
API Gatewayの概要と機能の紹介
Amazon API Gatewayとは、APIの公開や管理、実行を容易にするサービスです。
APIとは?
APIとは、アプリケーションが呼び出せば予期した結果が返される仕組みです。例えば、レストランに行った際にメニューを見て食べたいものを注文すると思いますが、食べたいものを注文(リクエスト)すると、食べ物(レスポンス)が返ってきます。このようにアプリケーションなどのやり取りの部分を他のシステムやアプリケーションに公開することにより、データや機能を共有できるようにする仕組みです。
APIの作成だけでなく、管理、認証と認可、監視、バージョン管理といった運用に必要な機能もそろっているため、開発と運用が簡略化できます。
API Gatewayの機能は?
アプリケーションにおけるAPIも多岐にわたり、不具合等が生じたらアップデートや追加が必要になります。API Gatewayには、作成したAPIの管理や運用をサポートする機能が存在します。具体的には下記の通りです。
- APIの作成とデプロイ…RESTful APIやWebSocket APIなどのAPIを作成し、デプロイすることができます。
- 認証と認可…API Gatewayは、後続のLambdaなどに連携する際に認証等が必要な場合、AWSの認証サービス(Cognitoなど)に連携することができます
- リクエストのルーティング…多岐にわたるリクエストを、後続のサービスへ連携することができます。
- キャッシュ…API Gatewayは、リクエストのレスポンスをキャッシュしておくことができます。これにより、Webアプリケーションなどにおいて処理の遅延を軽減したり、バックエンドサービスへの負荷の軽減に役立ちます。
LambdaとAPI Gatewayを組み合わせたWebアプリケーションのアーキテクチャ
実際にサーバーレスアーキテクチャを用いた3層Webアプリケーションの構成を考えてみます。
構成と使用するサービス
- ロードバランシング…ロードバランシングはAPI Gatewayを利用して、後続のLambdaやS3にWeb経由のアクセスを振り分けるようにします
- フロントエンド層…フロントエンド層はAWS S3にJavaScriptや画像などの静的コンテンツを配置しておき、API Gatewayを通じてユーザーに配信します。
- アプリケーション層…アプリケーション層にはLambdaを利用します。後続のデータベース層に連携できるように、単一のLambda関数ではなく、複数のLambdaを用意しておく場合もあります。
- データベース層…DynamoDBとよばれるサーバーレスのサービスを利用します。LambdaからDynamoDBにクエリを実行し、結果をAPI Gateway経由で送り返します。
構成における考慮点
- IAMロールに注意する
AWSにおいてはAPI Gateway→Lambdaや、Lambda→DynamoDBといったサービス間の連携には権限の設定が必要です。権限の設定については、IAMというサービスにおいてIAMロールを作成し、各サービスに付与を行います。権限について、漏れなく付与されているかについても考慮します。 - Lambdaでのメッセージのやり取り
AWS Lambdaでは先述のように「イベント」という文字列を受け取って起動やDynamoDBとのやりとりをおこないます。JSON形式での記述が必要となるため、JSONについては必ず押さえておくようにするといいでしょう。
AWS上でサーバーレスを活用してDXを実現するスタイルズのクラウドネイティブ開発サービスはこちら→
まとめ
サーバーレスアーキテクチャは、アプリケーション開発においてインフラの運用管理を大幅に軽減する設計の考え方です。従来のアプリケーション開発よりも簡単かつ高速にデプロイが可能となり、コストや人的リソースの効率化につながります。
いきなり複雑なシステムを構築する際には適応は難しいですが、まずは通常のWebアプリケーションから試行してみるといいでしょう。