現代では、クラウドコンピューティングの進化により、サーバーを所有する必要がなくなりました。AWSのサーバーレス技術であるLambdaを中心に、必要な時だけリソースを使用し、コストを最適化できます。
そこで本記事では、AWSにおけるサーバーレスの概要と、環境構築の手順、実践的なユースケースを解説します。サーバー運用の手間を大幅に削減できるサーバーレスの魅力について見ていきましょう。
目次
サーバーレスコンピューティングとは、サーバーをプロビジョニングしたり管理したりすることなく、コードを実行できるクラウドのコンピューティングモデルです。
従来のクラウドサービスはリソースを事前にプロビジョニングする必要がありましたが、サーバーレスコンピューティングではリソースの割り当てや管理が自動的に行われます。AWSのサーバーレスコンピューティングサービスの代表が「AWS Lambda」となり、Lambdaはイベントドリブンのコード実行環境で、サーバーをプロビジョニングすることなくコードを実行できます。
まずはサーバーレスコンピューティングとクラウドの違いについて見ていきましょう。
サーバーレスはクラウドサービスの一種ですが、従来のクラウドサービスとは異なる点があります。従来のクラウドサービス(PaaSやIaaS)では、以下の作業が発生します。
一方、サーバーレスでは以上の作業が不要になります。 サーバー環境の管理から開放されるため、本来のアプリケーション開発に専念できるでしょう。
従来のクラウド |
サーバーレス |
サーバー管理が必要 |
サーバー管理不要 |
固定費用発生 |
従量課金制 |
サーバーレスは、利用した分のみの従量課金制が一般的です。 アプリケーションの利用状況に合わせて、柔軟にコストを最適化できるでしょう。
「AWS Lambda」は上記でも簡単に紹介しましたが、AWSのサーバーレスコンピューティングサービスの代表格となっています。
Lambdaは、プログラミング言語を用いて関数を登録するだけで、その関数を実行することができます。利用できる言語には、Java、Ruby、Python、Goなどがあります。
Lambdaの利用料金は従量課金制で、以下の2つの料金を支払います。
料金種別 |
無料利用枠 |
超過した場合の課金 |
リクエスト料金 |
1,000,000件まで無料 |
1,000,000件ごとに0.2oUSD |
コンピューティング価格 |
400,000GB/秒まで無料 |
1GB/秒につき0.00001667USD |
Lambdaの特徴として、サーバーの準備や管理が不要なことが挙げられます。関数の実行環境はAWSが用意してくれるため、ユーザーはアプリケーション開発に専念できるでしょう。
「AWS Lambda」の使い方やメリットについては、以下の記事でさらに詳しく解説しています。ぜひご覧ください。
EC2とLambdaの最大の違いは、利用者側で用意する環境の有無にあります。EC2は以下のようにインフラ環境を利用者側で構築する必要があります。
一方、Lambdaはクラウド側で実行環境がすべて用意されているため、利用者側でインフラ環境を構築する必要はありません。利用者は関数の実装と定義さえすれば、Lambdaに実装した処理を実行できます。
EC2はインフラ環境の構築・運用が必要ですが、Lambdaは不要なため、アプリケーション開発に専念できるというメリットがあります。
Amazon EC2については以下の記事でさらに詳しく解説しています。サーバーレスコンピューティングサービスの導入を検討されている方は、ぜひご覧ください。
『Amazon EC2とは?インスタンスの料金体系やメリット・注意点』
AWSでサーバーレスは、以下のステップを踏んで環境構築しましょう。
それぞれのステップについて詳しく解説します。
AWSサーバーレスアーキテクチャにおいて、アプリケーションの設計はビジネスロジックを機能コンポーネントから切り離すことが重要です。これにより、モジュール性が高まり、堅牢で進化的なアーキテクチャを実現できます。
具体的には、以下の2つのアプローチが一般的です。
アプローチ |
特徴 |
単一責任のLambda関数 |
ひとつの関数にひとつの責務を持たせる。コードの分離が容易でリソースの最適化が可能。 |
Lambda-lith |
ひとつの関数にすべての責務を持たせる。コード凝縮度が高く、設定の一元化が可能。 |
いずれのアプローチにも一長一短がありますが、適切に設計することで、堅牢で保守性の高いサーバーレスアプリケーションを構築できます。
AWSサーバーレス環境を構築するための開発環境は、主に以下の2点を整備する必要があります。
ローカル開発に必要な「AWS Serverless Application Model(SAM)」のコマンドラインツールです。
SAM CLIとAWS Toolkitをインストールすれば、ローカル環境でのAWSサーバーレス開発が可能になります。
次に、Lambda関数の作成と設定をしましょう。Lambda関数を設定するためには、以下の手順を踏みます。
作成後は、テストイベントを用意しテスト実行することで、関数が正常に動作するかを確認できます。
AWSでサーバーレスアプリケーションを構築する際、API Gatewayを使ってAPIを公開することができます。API Gatewayは、以下のような機能を提供しています。
例えば、Lambda関数をAPIとして公開する場合は、以下の手順で行います。
このようにAPI Gatewayを使うことで、Lambdaなどのサーバーレスリソースを外部に公開できるようになります。
AWS LambdaからDynamoDBにデータを書き込む際は、DynamoDBのPutItemAPIを利用します。PutItemAPIではプライマリキーを指定し、そのキーがテーブル内に存在しなければ新規にアイテムを追加、存在すればアイテムの内容を置き換えます。
例えば注文IDをプライマリキーとし、PutItemAPIで注文情報を書き込むと以下のようになります。
def create_order(dynamodb, tableName, orderId, customerId, count): table = dynamodb.Table(tableName) try: response = table.put_item( Item={ "order_id": orderId, "customer_id": customerId, "count": Decimal(count), "order_created": Decimal(str(datetime.now().timestamp())) } ) except: print("create an order item error!") return response |
このように、同じ注文IDで複数回実行されても最終的な結果は変わらずに、べき等性 (ある操作を複数回行っても結果(状態)が同じになる性質) が担保されます。
AWSサーバーレスは、さまざまなユースケースで活用できます。
それぞれのユースケースについて詳しく見ていきましょう。
AWSサーバーレスでウェブアプリケーションを構築する場合、以下のようなアーキテクチャが一般的です。
サービス |
役割 |
AWS Lambda |
サーバーレス関数を実行 |
Amazon API Gateway |
HTTPリクエストを受け付け、Lambdaを呼び出す |
Amazon DynamoDB |
NoSQLデータベースとしてデータを永続化 |
Amazon S3 |
静的ウェブサイトの配信、アプリデータの保管 |
このようにAWSの各サービスを組み合わせることで、スケーラブルでレジリエントなウェブアプリケーションが実現できます。 例えば、Lambdaでサーバーサイドのロジック処理を行い、DynamoDBにデータを格納、S3でフロントエンド側の静的コンテンツを配信するといった運用が考えられます。
データ処理の例として、AWS LambdaとAmazon Kinesisを活用したリアルタイムストリーム処理があります。Kinesisでデータストリームを作成し、Lambdaでストリームへレコードを追加するなどの処理が可能です。
また、画像処理のユースケースもあります。例えばAWS LambdaとAmazon S3を組み合わせて、アップロードされた画像をリアルタイムでサムネイルに変換したり、その他の加工を施すことができます。
さらに、バッチ処理も重要なユースケースのひとつです。例えば、AWS Lambdaを使って定期的にAmazon S3のファイルを処理し、別のストレージにデータを移行することができます。
自動化バッチ処理は、AWSサーバーレスのよくあるユースケースのひとつです。大量のデータを効率的に処理することができるため、ファイル取り込み処理やキューベースの処理、トランザクションジョブなどに活用されています。
例えば、ファイル取り込み処理をサーバーレスで実現する場合は以下のようなアーキテクチャが考えられます。
このようにAWS Step Functions、Lambda、S3などを組み合わせることで、サーバーレスでスケーラブルな大規模バッチ処理を実現できます。
AWSでは、Lambdaの他にもさまざまなサーバーレスサービスが提供されています。
本項目では、これらのAWSサーバーレスサービスについて解説します。サーバーレスサービスを組み合わせ、サーバーを管理する必要がないスケーラブルなアプリケーションを構築しましょう。
Amazon API Gatewayは、Amazon Web Servicesが提供するフルマネージド型のWebサービスAPIです。 Amazon API Gatewayでは、AWS上のデータ、ビジネスロジック、あるいはその他のサービスをWebサービスとして公開することができます。
クライアントアプリケーションからの受信リクエストを処理し、適切なバックエンドサービスにルーティングしてくれます。セキュリティ制御、監視、スロットリングなどの機能も備えています。
AWSのサーバーレスサービスのひとつであるAWS Step Functionsは、マイクロサービスワークフローのコーディネーションにおいて重要な役割を果たします。Step Functionsではステートマシンを構築し、複数のAWSサービスをまたいだタスクフローを簡単に定義できます。例えば次のようなユースケースがあります。
このようにStep Functionsを利用することで、複雑なマイクロサービスアーキテクチャでも、サーバーレスで簡単かつ信頼性の高い実行を実現できます。
Amazon SNS(Simple Notification Service)は、アプリケーション間(A2A)およびアプリケーションからユーザーへ(A2P)の2つの方法で通知を送信できるサーバーレスのPub/Subメッセージングサービスです。
A2Aでは、分散システムやマイクロサービス、イベント駆動型のサーバーレスアプリケーション間での高スループットなプッシュベースの多対多メッセージングが可能です。対象サービスは以下の通りです。
サービス |
説明 |
Amazon SQS |
メッセージキューイングサービス |
AWS Lambda |
サーバーレス実行環境 |
その他HTTPSエンドポイント |
- |
A2Pでは、SMSテキスト、プッシュ通知、Eメールを活用し、ユーザーへの通知配信が可能です。
Amazon SQS(Simple Queue Service)は、AWSのマネージドメッセージキューサービスです。メッセージの送受信を簡単に行えるよう設計されており、サーバーレスアプリケーションの構成要素としてよく利用されます。
メッセージキューはアプリケーションの疎結合を実現する手段として有用で、以下のようなメリットがあります。
Amazon SQSには以下のような特徴があります。
特徴 |
説明 |
高可用性 |
複数のアベイラビリティゾーンに冗長化 |
スケーラビリティ |
トラフィックの増加に合わせて自動スケーリング |
セキュリティ |
VPC 内でのプライベートキューが利用可能 |
AWSのマネージドサービスなので、メッセージングのインフラ構築・運用は不要で、開発に専念できるでしょう。
Amazon S3(Simple Storage Service)とは、クラウド上でオブジェクト(ファイル)を格納・管理するための、高可用性・高信頼性・高パフォーマンスなオブジェクトストレージサービスです。
Amazon S3を使えば静的なウェブサイトをホスティングできます。ウェブサーバーの設定や管理は不要で、HTMLやCSS、JavaScriptなどの静的コンテンツをS3バケットにアップロードするだけで公開できます。
Amazon DynamoDBはNoSQLの分散型データベースサービスです。従来のリレーショナルデータベース(RDS)とは異なり、データを完全に分散させることで、理論上無限の読み書き性能を実現できます。
RDSとDynamoDBの違いは以下の通りです。
RDS |
DynamoDB |
強い一貫性 |
最終的な整合性(デフォルト) |
スケール性能に限界 |
無限の拡張性 |
このように、DynamoDBは一貫性を若干犠牲にする代わりに、高いスケーラビリティを確保しています。そのため、大量データの処理が必要なIoTシステムや、可用性の高いWebアプリケーションなどに適しています。
株式会社ICの「ITソリューション」は、業界・規模を問わず幅広い企業のシステム開発を請け負っています。ソフトウェア開発からインフラ設計構築、24時間フルサポートのシステム運用支援で、貴社をサポートいたします。
経験豊富なスタッフが、プロジェクトの規模に応じて最適なチームを編成し、高い技術力でお客さまのニーズに対応します。また、開発から運用までワンストップで対応可能なのが特徴です。
運用体制や業務フローの見直しも定期的に実施しているので、開発・導入後もご安心ください。
ITソリューションのサービスについてさらに詳しく知りたい方は、以下のページをご覧ください。
今回は、AWSサーバーレスの代表「AWS Lambda」やAWSでサーバーレス環境を構築するためのステップについてご紹介しました。
AWSのサーバーレスサービスを活用すると、サーバーの管理運用が不要になり、開発者はアプリケーションの開発に専念できるようになります。従来のサーバー環境と比べ、コスト削減やリソース最適化、高い拡張性などのメリットがあります。
しかし一方で、サーバーレスアーキテクチャには「リソースに割り当てるメモリは最大10GB」、「AWS Lambdaの最大実行時間は15分」などの制約があることも覚えておきましょう。
このようにサーバーレスには適した用途と適さない用途があるため、アプリケーションの要件を考慮して適切に設計する必要があります。
サーバーレスサービスの導入を検討されている方は、システム開発のICにご相談ください。サーバーレスを含むクラウドソリューションの構築から運用まで、高い技術力とサービスでお客さまをサポートいたします。
※2024年4月時点の仕様です。現在は異なっている可能性があります。