AWSサーバーレスでゼロからスケールまで

近年、クラウドネイティブアプリケーションは多くの企業がスケーラブルなアプリケーションを構築するための標準となっています。クラウドテクノロジーの多くの進化の中で、サーバーレスアーキテクチャは革新的なアプローチとして目立ちます。使いやすさと効率性は現代のアプリケーション開発にとって最も望ましい特性であり、サーバーレスアーキテクチャはこれらを提供しています。これにより、サーバーレスはクラウドプロバイダと消費者の両方にとってゲームチェンジャーとなっています。

このアプローチでアプリケーションを構築したい企業に対して、主要なクラウドプロバイダはいくつかのサーバーレスソリューションを提供しています。この記事では、このアーキテクチャの特徴、利点、課題、およびユースケースについて探究します。この記事では、概念を探るためにAWSを例に挙げましたが、同様の概念はすべての主要なクラウドプロバイダに適用されます。

サーバーレス

サーバーレスとは、サーバーが存在しないことを意味するわけではありません。単に、それらのサービスの基盤がクラウドプロバイダによって管理されていることを意味します。これにより、アーキテクトや開発者はインフラストラクチャの管理を気にすることなくアプリケーションを設計および構築することができます。これは、乗り物共有アプリUberを使用するのと似ています。乗り物が必要なとき、車を所有または維持することを気にする必要はありません。Uberがすべてを処理し、あなたは乗車料金を支払って目的地に行くことに集中するだけです。

サーバーレスアーキテクチャは、多くの利点を提供し、多くのユースケースに適しており魅力的です。以下は、その主な利点のいくつかです:

Auto Scaling

サーバーレスアーキテクチャの最大の利点の一つは、スケーリングを本質的にサポートしていることです。クラウドプロバイダーは、ほぼ無限のスケーラビリティを提供するための重労働を処理します。たとえば、サーバーレス技術を使用して構築されたアプリが突然人気を得た場合、ツールやサービスは自動的にアプリのニーズに応じてスケールします。サーバーやその他のリソースを追加するために真夜中に起きる必要はありません。

イノベーションに集中する

サーバーの管理に煩わされることがなくなったので、アプリケーションの構築や、アプリの成長に向けた機能追加に集中できます。小規模、中規模、大規模のどの組織にとっても、このアプローチは本当に重要なこと、すなわちビジネスの成長に集中するのに役立ちます。

コスト効率

従来のサーバーモデルでは、未使用のリソースに対して前払いで支払い、使用していないときでも管理するため、無駄なコストが発生することがよくあります。サーバーレスは、使用した分だけ支払うモデルに切り替えることでこれを変えます。ほとんどのシナリオでは、実際に使用したリソースにのみ支払います。構築したアプリがすぐに注目を集めない場合、コストは最小限になり、1年分の支払いの代わりに1回のセッション分を支払うようなものです。アプリのトラフィックが増えると、コストもそれに応じて増加します。

市場投入までの時間の短縮

サーバーレスフレームワークを使用すると、従来のサーバーモデルと比較して、アプリケーションをはるかに迅速に構築および展開できます。アプリが準備できたら、サーバーレスリソースを使用して最小限の労力で展開できます。サーバー管理に時間を費やす代わりに、開発や新機能の追加に集中し、より迅速に出荷することができます。

運用保守の削減

クラウドプロバイダーがインフラを管理しているため、消費者はプロビジョニング、維持、スケーリング、セキュリティパッチや脆弱性の対処について心配する必要はありません。

サーバーレスフレームワークは柔軟性を提供し、さまざまなユースケースに適用できます。Webアプリケーションの構築やリアルタイムデータの処理であっても、これらのユースケースに必要なスケーラビリティと効率を提供します。

AWSサーバーレスを使用したWebサービスAPIの構築

サーバーレスアーキテクチャの利点について説明しましたので、実践的な例について詳しく見ていきましょう。このセクションでは、AWSサーバーレスリソースを使用してシンプルなバックエンドWebアプリケーションを作成します。AWSサーバーレスリソースを使用します。

上記のバックエンドアプリケーションデザインには、Webアプリケーション用のAPIを提供するための3つのレイヤーが含まれています。AWSにデプロイされると、API消費のためのゲートウェイエンドポイントが利用可能になります。ユーザーがAPIを呼び出すと、リクエストはAPIゲートウェイを介して適切なLambda関数にルーティングされます。Lambda関数が各APIリクエストにトリガーされ、DynamoDBにアクセスしてデータの保存と取得を行います。この設計は、需要が増加するにつれて自動的にスケーリングする、コスト効率の良いソリューションであり、オーバーヘッドを最小限に抑えたAPIの構築に最適です。この設計のコンポーネントはお互いにうまく統合され、柔軟性を提供します。

このアーキテクチャには、コンピューティングとストレージの2つの主要なコンポーネントがあります。

サーバーレスコンピューティング

サーバーレスコンピューティングは、クラウドネイティブアプリケーションおよびサービスの構築と展開の方法を変えました。これは、リソースを無駄にすることなく、ミリ秒レベルの粒度でリアルな従量課金モデルを約束します。そのシンプルさと経済的な利点により、このアプローチは人気を集め、多くのクラウドプロバイダーがこれらの機能をサポートしています。

サーバーレスコンピューティングを使用する最も簡単な方法は、プラットフォームによってオンデマンドで実行されるコードを提供することです。このアプローチは、関数として表現された小さなコードの断片を一定の時間だけ実行できるようにすることに焦点を当てたファンクション・アズ・ア・サービス(FaaS)プラットフォームの台頭をもたらしました。関数は、HTTPリクエスト、ストレージの変更、メッセージ、または通知などのイベントによってトリガーされます。これらの関数はコード実行が完了すると呼び出されて停止するため、永続的な状態を保持しません。状態を維持したりデータを永続化するために、耐久性のあるストレージ機能を提供するDynamoDBのようなサービスを使用します。

AWS Lambdaは、需要に応じてスケーリングする能力があります。たとえば、AWS Lambdaは2024年のプライムデーに13兆回以上の呼び出しを処理しました。このような能力は、突然のトラフィックの急増を処理する上で重要です。

サーバーレスストレージ

サーバーレスコンピューティングエコシステムにおいて、サーバーレスストレージとは、インフラストラクチャを管理することなく、自動的にスケーリングされるクラウドベースのストレージソリューションを指します。これらのサービスには、オンデマンドの拡張性、高い可用性、および従量課金など多くの機能があります。たとえば、DynamoDBは、キー/値とドキュメントデータモデルを扱うために設計された、完全に管理されたサーバーレスNoSQLデータベースです。これは、どのスケールでも一貫したパフォーマンスを必要とするアプリケーション向けに特別に構築されており、シングルデジットミリ秒のレイテンシを提供します。また、他の多くのサービスとシームレスに統合できる機能も提供しています。

主要なクラウドプロバイダーは、S3、ElastiCache、Auroraなど、特定のニーズに対応するさまざまなサーバーレスストレージオプションを提供しています。

その他のユースケース

前述のセクションでは、ウェブアプリケーションのバックエンドAPIを構築するためにサーバーレスアーキテクチャを活用する方法について説明しました。サーバーレスアーキテクチャから利益を得ることができるいくつかの他のユースケースがあります。それらのユースケースのいくつかは次のとおりです:

データ処理

データストア内のデータ変更に基づいてサービスに通知を送信するためにサーバーレスアーキテクチャをどのように活用できるかについて、別の例を見てみましょう。たとえば、eコマースプラットフォームでは、注文の作成時に複数のサービスに通知する必要があるとします。AWSエコシステム内では、注文は作成時にDynamoDBに保存されることがあります。他のサービスに通知するために、このストレージイベントに基づいて複数のイベントをトリガーできます。

DynamoDB Streamsを使用すると、このイベントが発生したときにLambda関数を呼び出すことができます。このLambda関数はその後、変更イベントをSNS(Simple Notification Service)にプッシュできます。SNSは、これらのイベントに興味を持っている複数の他のサービスに通知する通知サービスとして機能します。

リアルタイムファイル処理

多くのアプリケーションでは、ユーザーがアップロードした画像を保存し、リサイズのために処理し、異なる形式に変換し、分析する必要があります。この機能を実現するために、AWSサーバーレスアーキテクチャを以下の方法で使用できます。画像がアップロードされると、Lambda関数を起動するイベントをトリガーするように構成されたS3バケットにプッシュされます。Lambda関数は画像を処理し、DynamoDBにメタデータを保存し、リサイズされた画像を別のS3バケットに保存できます。このスケーラブルなアーキテクチャを使用すると、何らかのインフラストラクチャを管理したり手動で介入する必要なく、何百万もの画像を処理できます。

課題

サーバーレスアーキテクチャは多くの利点を提供しますが、対処する必要がある特定の課題も抱えています。

コールドスタート

サーバーレス関数が呼び出されると、プラットフォームはコードを実行するために新しいコンテナを作成、初期化、実行する必要があります。このプロセスはコールドスタートと呼ばれ、ワークフローに追加のレイテンシをもたらす可能性があります。関数を温かく保つやプロビジョニングされた同時実行性を使用することで、この遅延を軽減することができます。

監視とデバッグ

呼び出しが多数あるため、監視とデバッグは複雑になる可能性があります。広く使われているアプリケーションの問題を特定し、デバッグすることは難しい場合があります。これらの問題に対処するために、メトリクス、ログ、およびアラートのためにAWS Cloudwatchなどのツールを設定することを強く推奨します。

サーバーレスアーキテクチャは自動的にスケールしますが、ボトルネックを防ぐためにリソースの設定を最適化する必要があります。適切なリソースの割り当てとコスト最適化戦略の実施が不可欠です。

結論

サーバーレスアーキテクチャは、サーバーレスコンピューティングとストレージによって支えられたクラウドネイティブアプリケーションの開発に向けた大きな一歩です。イベント駆動型ワークフロー、データ処理、ファイル処理、ビッグデータ分析など、さまざまなタイプのアプリケーションで広く使用されています。そのスケーラビリティ、敏捷性、高可用性により、サーバーレスアーキテクチャはあらゆる規模のビジネスにとって信頼できる選択肢となっています。

Source:
https://dzone.com/articles/from-zero-to-scale-with-aws-serverless