Amazon Web Services ブログ

独自の AWS データベースを使って最新のアプリケーションを構築する

万能のモノリシックデータベースの時代は終わりました。Amazon.com の CTO 兼副社長である Werner Vogels が述べたように、「1 つのデータベースで複数の異なるユースケースのニーズを満たすことはほとんどありません」。 以前は、ウェブアプリケーションは LAMP スタック (Linux、Apache、MySQL、および PHP) を使用して構築されていました。そこでは、1 つのデータベースが数多くのさまざまなエクスペリエンスに使われていました。対照的に、Expedia、Airbnb や Capital One といったお客様の今日のウェブアプリケーションが使用しているのは、単一のデータベースではありません。いくつかの異なるタイプのデータベースを使用しています。

確かに、今日の開発者は多数の独自のデータベースを使って高度に分散されたアプリケーションを構築しています。ある意味では、(複雑なアプリケーションをより小さな部分に分割することで) 開発者は最善を尽くしています。それにより、正しい仕事のために正しいツールを選ぶことが可能になります。

このブログ記事では、AWS の独自のデータベースと、それらを使用してお客様のために豊かなエクスペリエンスを創出する方法について説明します。また、これらのデータベースがアプリケーションのさまざまなエクスペリエンスを強化するための詳細な事例を紹介し、数分で自分でアプリケーションをスピンアップするために必要なツールを提供します。

AWS のお客様から、特定のパフォーマンスとビジネスニーズを備えた、スケーラブルかつ高性能で機能的なアプリケーションを構築したいという声をいただいています。ここ数年で、当社はグラフデータベース用の Amazon Neptune、完全マネージド型で商用グレードのリレーショナルデータベース用の Amazon Aurora のような新しいサービス、さらに Amazon Aurora Serverless など、絶えず改善されている機能セットを導入することで、お客様のニーズに応えてきました。AWS re:Invent 2018 において、AWS は独自のデータベースのファミリーに次のいくつかの追加機能を追加することを発表しました。

2019 年 1 月、AWS は Amazon DocumentDB を発表しました (MongoDB との互換性あり)。これらの追加により、開発者は、リレーショナルデータベース、キーバリューデータベース、ドキュメントデータベース、インメモリデータベース、検索データベース、グラフデータベース、時系列データベース、および元帳データベースを、個々のユースケースに合わせて選択できるようになりました。これらの各データベースは、適切なジョブに適したツールとなるように構築されています。

AWS のお客様による独自のデータベースの使用方法

AWS のお客様は、これら独自のデータベースをどのように一緒に利用しているのでしょうか? AWS re:Invent 2018 で、当社は The Right Tool for the Right Job (適切な仕事に適したツール) の発表を行いました このセッション (ご視聴されることをお勧めします!) では、AWS のお客様がさまざまなデータベースを一緒に使用して、お客様に豊かでエンドツーエンドのエクスペリエンスを提供する方法について説明しました。

このセッションでは、AWS の独自のアーキテクチャを使用してお客様がどのようにアプリケーションを構築しているかの実例を示すデモを披露しました。デモでは、ウェブストアフロント (この場合は書店) を複数のデータベース上にどう構築して、それぞれが異なるユースケースに対処するかについて概説しました。デモのクリップは 21:43 から始まります。

オンライン書店のデモアプリケーション: 独自のデータベースを使用してさまざまなユースケースに対処する方法

上記のクリップは、オンライン書店のデモアプリケーションを紹介しています (次のスクリーンショットを参照)。最新のフルスタックウェブアプリケーションと同様に、このアプリケーションにも、製品カタログ、製品検索、ベストセラーリスト、ソーシャルリコメンデーションなど、さまざまなユースケースがあります。

図 1: AWS Bookstore Demo App のスクリーンショット

製品カタログのユースケースから始めましょう。ユーザーが書店のウェブストアフロントにアクセスすると、製品の一覧が表示されることを期待するかもしれません。製品には通常、説明、数量、場所、価格などの一意の識別子と属性が含まれています。技術的な意味では、これらのタイプの属性 (つまりアクセスパターン) を取得する方法は、多くの場合、製品の一意の識別子に基づくキーバリュー検索です。つまり、製品の一意の識別子を指定すると、アプリケーションはこれらの他の属性を取得できます。このユースケースは、Amazon DynamoDB を書店の製品カタログの永続的な記録システムとして最適なものにします (ユースケースが決定を左右することを忘れないでください)。DynamoDB は、キーバリュー検索に対してあらゆる規模で高速かつ予測可能なパフォーマンスを発揮するためです。DynamoDB を使用すると、データベースを再設計または変更しなくても、製品カタログを数百の製品から数十億の製品に拡張できます。

2 番目のユースケースは、顧客が製品カタログを検索できるようにすることです。顧客が書店に来店したとき、購入するか、カタログを通して検索して次に読む素晴らしい本を見つけようとするでしょう。今日の世界では、ユーザーは自分が探しているものを見つけるためにキーワード検索で効率的に探すように訓練されています。Amazon Elasticsearch Service (Amazon ES) は、これらのユーザーニーズを解決するデータベーステクノロジーです。自然言語機能、多面的なナビゲーション、ランク付けされた結果を使用して、Amazon ES は顧客が商品カタログの中で欲しい製品をすばやく見つけるのを助けます。

書店アプリケーションは、 (DynamoDB の) 製品カタログを Amazon ES の検索インデックスと同期させる必要があります。DynamoDB のカタログの製品テーブルから製品が追加、更新、または削除されるたびに、その変更を Amazon ES の検索インデックスにも反映させる必要があります。これを行う簡単な方法の 1 つは、AWS Lambda とともに Amazon DynamoDB Streams を使用して、DynamoDB の製品カタログに変更が加えられるたびに Amazon ES インデックスを非同期的に更新することです。下の図 2 で、このためのアーキテクチャを見ることができます。

3 番目のユースケースは、製品カタログのベストセラーリストです。これにより、書店のユーザーは売れている「上位 20」の本が何であるかを確認できます。このエクスペリエンスでは、理想的なデータベースは書店がユーザーがウェブページを更新するたびにすべての購入にわたって長くて高価な合計クエリを実行する必要なしに、リーダーボードを維持できるようにします。Amazon ElastiCache for Redis は、書店がすばやく効果的にベストセラーリストを作成することを可能にするソートセットを含む組み込みのインメモリデータ構造など、まさに必要なものを提供します。それを実行するために、書店は新しい製品が購入されるたびに ElastiCache の最新のステータスを更新するために注文テーブルから DynamoDB Streams (製品検索ユースケースに似ている) を使うことができます。ベストセラーリストが利用できれば、書店はそのウェブサイトのホームページにもリストの一部を表示できます。さらに、データはインメモリであり、組み込みのソートセットを介して利用できるため、書店ではベストセラーリストのクエリに対してマイクロ秒の読み取りレイテンシーしか発生しません。

4 番目のユースケースは、書店の顧客がより文脈的に適切なコンテンツ (この場合は友人が購入したものに基づくコンテンツ) を見つけるのに役立つソーシャルレコメンデーションを提供することです。ソーシャルレコメンデーションは書店のホームページやサイト上の他のページにあるので、レコメンデーションは速くなければなりません。また、ウェブサイトが拡大するにつれて、ソリューションはより多くの製品、ページ、およびユーザーに対応する必要があります。これらの要件を満たすことで、Amazon Neptune のような独自のグラフデータベースは、データ内のリンクをナビゲートするのに自然に適合し、社会的なつながりや関連する購買活動に基づくレコメンデーションを可能にします。Neptune は、グラフの関係をたどるためにクエリをすばやく構築して実行するために必要な機能とパフォーマンスを提供します。また、パフォーマンスを犠牲にすることなく、ウェブサイト (とアプリケーション) が拡大するにつれてスケールします。

これらすべての情報を取得して更新するために、ウェブストアフロントは一連のさまざまな API 呼び出しを行います。Amazon API Gateway と AWS Lambda を利用した、バックエンドでのアプリケーションの外観は次のとおりです。

図 2: AWS Bookstore Demo App のアーキテクチャ図

この書店アプリケーションでは、アプリケーションの主なユースケースを評価し、各ユースケースに最適なデータベースを選択しました。独自のデータベースを使用すると、スケーラブルで高性能で機能的なバックエンドインフラストラクチャを作成してアプリケーションにパワーを与え、各ユースケースに最適なコンポーネントを使って対処することができます。このアプローチに従うことによって、自身のリソースで同様のアーキテクチャを構築することができます。

起動して実行する

ウェブアプリケーションを作成するどのお客様も、コンポーネントを選択するというほぼ同じプロセスを経なければなりませんが、それは長い過程の半分に過ぎません。おそらくもっと重要なことは、希望するアーキテクチャを選択した後、毎回スタックを最初から構築する必要があるということです。ここから当社は考えました: アーキテクチャを構築しやすくしてはどうか? 非常に多くの顧客がとてもよく似たプロセスをたどるので、どうすればこれを単純化できるだろうか? まだ学習段階または探索段階にあるお客様にとって、これらの独自のデータベースを使用して、フルスタックのアプリケーションを数分で起動および実行できるようにするにはどうすればよいだろうか?

これらの質問に答えるために、この書店全体のデモアプリケーションスタック全体をわずか数分でエンドツーエンドで自動作成するための単一の AWS CloudFormation テンプレートを作成しました。さらに、GitHub でソースコード、画像、サンプルデータをすべて利用できるようにして、デプロイ、探索、変更、および拡張できるようにしています。

図 3: GitHub の AWS Bookstore Demo App リポジトリ

re:Invent セッションで示したように、AWS Bookstore Demo Appは、4 つの独自のデータベースを利用して強力で機能的なユーザーエクスペリエンスを提供する実用的なアプリケーションです。AWS CloudFormation を使用すると、数回クリックするだけでアプリケーションを AWS アカウントにデプロイできます (詳細については、GitHub の readme.md ファイルを参照してください)。アカウントにデプロイしたら、Amazon DynamoDB、Amazon Elasticsearch、Amazon ElastiCache for Redis、および Amazon Neptune でデータセットを調べることができます。readme.md ファイルには、これを実行する方法を順を追って説明する追加の手順と、すべてがどのように適合するかについての解説が含まれています。サンドボックスや学習ツールとしてこのアプリを使用して、このようなアーキテクチャがどのように適合するかを調べたり、独自のアプリケーションを構築するための入門テンプレートとして使用できます。

アプリケーションの要件が異なるとどうなるでしょうか?

AWS Bookstore Demo App は、ウェブストアフロントなど、スケーラブルで高性能なフルスタックアプリケーションを構築するための独自のデータベースを使用する方法のほんの一例です。このスタックをベースラインとして使用したいけれども、ユースケースがリレーショナルデータベース (Amazon RDS など) により適している場合は、代わりにそれを使用するようにアプリケーションを変更できます。パフォーマンスを向上させるために ElastiCache を他のデータベースコンポーネントの前にキャッシュするために利用したい場合は、それも追加できます。実際、repo をフォークしてデモアプリケーションを修正し、さらに知りたい分野を探ることをお勧めします。データベースの種類を入れ替えたり、さまざまなコンポーネントを試したり、独自のリソースやデータをロードしたりできます。他の人が使用するのに価値があると思われるような興味深いものを開発した場合は、デモを拡張できるようにプルリクエストを送信してください。

アプリケーションが大きく異なりますが、それでも構築するための基本的なフルスタックアプリケーションを探している場合は、AWS Bookstore Demo App は AWS Full-Stack Template の上に構築されます (GitHub 上でも利用できます)。AWS Full-Stack Template は、基本的なウェブアプリケーションを起動および実行するために必要な基本的なサービス、コンポーネント、および配管を提供し、時間を節約し、アプリケーションの差別化要因に集中するのに役立ちます。旅行予約ツール、ブログ、その他のウェブアプリなど、想像するあらゆるアプリケーションを作成するために AWS Full-Stack Template の上に構築することができます。AWS Bookstore Demo App は、AWS Full-Stack Template を使用して作成できるもののほんの一例です。

次にアプリケーションを使用するときは、どのデータベースが裏側にあるかを想像してみてください。たぶん、エクスペリエンスを活気づけるために一緒に稼働しているデータベース (と他のサービス) がいくつかあるはずです。もっと学びたい、そして構築を始めたいのなら、スピン用にこれらのフルスタックアプリケーションの 1 つを持っておきましょう。何を構築したか、お話を聞けるのを楽しみにしてますね!

 


著者について

 

John Reed は、AWS のシニアプロダクトマネージャーで、Deep Learning と AI に取り組んでいます。余暇には、ガジェットをいじったり、スキー、バックパッキングや他のアウトドア活動をしたりすることを楽しんでいます。

 

 

 

 

Joseph Idziorek は、アマゾン ウェブ サービスのプリンシパルプロダクトマネージャーです。