Amazon Web Services ブログ

AWS AppConfig: プライムデーのような大規模イベントでのスケールを支える Amazon のサービス

この記事は “AWS AppConfig: The Amazon service that helps you scale for large events like Prime Day” を翻訳したものです。

Amazon はプライムデー期間中のトラフィックの増加に対応するため、多くの AWS サービスを使用しています。

Jeff Barr が以前の記事で紹介したように、プライムデーで使用される主要なサービスは以下の通りです。

一方、主要ではない他の AWS サービスが 48 時間のショッピングイベント期間中に急増するトラフィックに対応するために、Amazon を支える重要な役割を担っています。プライムデーのイベントに携わる多くのチームは、AWS AppConfig を使ってコードのデプロイとは別に動的な設定変更をデプロイしています。開発者は数秒でアプリケーションの設定を変更し、需要の急増に迅速に対応できます。

Amazon では、プライムデーやその他のイベント時に規模に応じてアプリの設定を更新しています。一部のチームは、イベント期間中に特定のサイトの機能をオン・オフしています。これは機能フラグで行うことができます。また、負荷がピークを迎えているときの効率を最大化するために、カートやチェックアウトのプログラム実行ルートを調整するチームもあります。これを運用レバーとして行っています。また、多くのインフラサービスでは、同時接続ユーザーの増加に対応するために最大スループットと秒間トランザクション数 (TPS) を調整します。この設定をリアルタイムで更新できるようにすることで、チームはより多くスケーリングする余地を確保できます。これらは、各アプリが実行時に読み込む設定データを綿密に更新することで実現されます。

この記事では、プライムデーのような、その期間中にアプリケーションがトラフィックの急増に対応しなければならないイベントに対して、エンジニアリングチームが AWS AppConfig をどのように利用できるか説明します。

動的構成の重要性

アプリケーションは、不測の事態により使用量が急増することがあります。例えば、COVID-19 発生後の数週間、多くのビデオ会議アプリやストリーミングアプリのユーザー数は 3 倍にも増加しました。また、プライムデーのような計画的なイベント向けに作られたアプリケーションでも、トラフィックが急激に変動することがあります。アプリケーションの利用者数は、イベント開始時にピークに達しますが、それ以外の時間帯でも急増することがあります。予定外のイベントでも、予定されたイベントでも、開発チームはその変化にリアルタイムで対応しなければなりません。考慮すべきスケーリング技術は数多くありますが、ここでは、実行時にアプリを更新するための技術を紹介します。

設定をコードから分離し、実行時に設定の更新を定期的にポーリングすることで、制御された方法で運用中のアプリケーションの挙動を変更できます。設定の小規模な更新は、ソフトウェアの挙動を更新する方法として、フルスタックのデプロイをするよりも安全となる傾向があります。

ソフトウェアスタック全体をデプロイするのは、時間のかかる作業です。CI/CD パイプラインがしっかりしていても、本番環境でソフトウェアを更新するためには多くのステップが必要になることがあります。さらに、コードを更新するとアプリケーションの再起動が必要となる場合があり、変更にタイムリーに対応することがさらに難しくなります。トラフィックが急増したとき、ソフトウェアスタックの全く新しいバージョンを同時にリリースすることは賢明ではありません。

そこで、AWS AppConfig が役に立ちます。アプリへのトラフィックが急増すると、AWS AppConfig は、設定の新しいバージョンを構成、検証、デプロイすることができます。これらの更新は、アプリの実行時に読み取られ、アプリのパフォーマンスを調整するのに役立ちます。設定の更新は、追加の安全制御が行われた状態で行われます。このモデルでは、コードを途中でデプロイすることはなく、設定の更新のみが行われます。

例えば、あなたが料理を注文するアプリを開発していて、大規模なマーケティングプロモーションを計画しており、それによってユーザーが増加するとします。アプリはトラフィックの増加に対応できるように時間をかけて最適化されていますが、このプロモーションでユーザーが 10 倍になると予想されます。このとき、ユーザーをできるだけ迅速かつ効率的にチェックアウトさせるように経路を最適化したいと思います。

まず、同時接続ユーザー数が増えることが分かっているので、運用上のスロットル値を動的構成にする必要があります。こうすることで、トラフィックのピーク時に制限値を即座に調整するための運用レバーを得られます。次に、チェックアウト時に関連する飲み物やデザートをユーザーに尋ねるアップセルエンジンがあるとします。このアップセルエンジンは追加のコンピューティングリソースを必要とし、料理の注文が増える場合はチェックアウトフローを遅くする可能性があります。チェックアウトフローをより早く通過できるように、ユーザー数の急増中はアップセルエンジンを無効にする機能フラグの追加を検討してください。第三に、アプリにはチェックアウト後のアンケートがあり、ユーザーに体験について質問します。アンケートを完全にオフにするのではなく、頻度を減らして、ユーザーの 20% だけに表示することにしました。チェックアウト後のアンケートの表示を制限する設定を追加します。

そして、これらの設定を即座に調整できるように、定期的に新しい設定をポーリングするようにアプリを構成します。これらの設定を調整しながらテストし、ユーザー数の急増中に機能のオン・オフ、スロットル制限の調整、アプリケーションのチューニングを行うことができます。これらの更新はすべて、新しいコードをデプロイすることなく行われます。もちろん、動的構成を使用する以外にも考慮すべきスケーリング技術がありますが、この例はスケーリングにおいて構成がいかに重要であるかを説明するものです。AWS AppConfig は、動的な構成を管理するのに役立ちます。

AWS AppConfig の開始方法

AWS AppConfigは AWS Systems Manager からアクセスできます。設定の作成は三段階で行えます。

はじめに、アプリケーションを作成します。アプリケーションは、EC2 インスタンス上で実行されるマイクロサービス、モバイルアプリケーション、または Amazon API GatewayAWS Lambda を使用するサーバーレスアプリケーションです。簡単に言うと、アプリケーションとはユーザーのために作るあらゆるシステムのことです。

次に、環境を作成します。環境とは、ベータ版や本番環境のアプリケーションなど、AppConfig ターゲットの論理的なデプロイメントグループのことです。また、ウェブ、モバイル、バックエンドコンポーネントなど、アプリケーションのサブコンポーネントの環境を定義することもできます。

そして、最後の重要なステップとして、検証ルールを設定し、アプリのデプロイメント戦略を作成します

慎重に練った計画:物事がうまくいかないとき

皆さんは「慎重に練った計画もうまくいかないことが多いものだ」という格言を聞いたことがあると思います。

ロバート・バーンズの詩の言葉は古い時代のものですが、21 世紀のクラウドの世界では、この言葉はまさに当を得ています。導入後に発見された設定ミスは、欠陥のあるコードをリリースしたのと同じくらい問題になることがあります。特にプライムデーのように、トラフィックとアプリの利用が急増するイベント時には、その結果は悲惨なものとなります。

そのため、設定の検証やデプロイの安全性は非常に重要です。AWS AppConfigでは、アプリケーションの環境 (開発、ベータ、本番など) を指定できることに加え、これらの環境ごとに Amazon CloudWatch のアラームを設定することも可能です。

AWS AppConfig バリデーターは、デプロイ前に JSON スキーマを使用した構文チェックや、AWS Lambda 関数を使用したセマンティックチェックを実施します。構成のデプロイは、すべてが検証に合格した後にのみ行われます。

ミスが雪だるま式に増えていかないように、他のフォールバックメカニズムがあります。AWS AppConfig では、構成変更を一部のユーザーにのみデプロイできるので、ユーザー全体に展開する前に構成変更の影響を分析できます。また、ベーク時間を指定することもできます。これは、構成変更を最初にデプロイしてから、デプロイを最終と見なすまでの時間枠です。

Amazon CloudWatch アラームを使用して、デプロイをプロアクティブに監視し、この時間枠内のエラーを検出できます。AWS AppConfig でエラーが発生した場合、デプロイを以前の検証済みの状態に自動的にロールバックします。このようにして、仮に慎重に練った計画がうまくいかなかったとしても、それほど長くは続かないのです。

まとめ

私たちは非線形な世界に生きており、アプリケーションでは計画的なトラフィックの急増と予期せぬトラフィックの急増が見られます。あなたのアプリケーションも、プライムデーのような急増イベントを経験するかもしれません。AWS AppConfig を使用すると、こうした変化にリアルタイムで対応することができます。ウェブサイトやアプリのトラフィックが急増したときに、顧客を喜ばせるための準備が整います。

詳しくは、以下のリソースをご覧ください。

著者について

Steve Rice

Steve Rice

Steve Rice は AWS AppConfig の Principal Product Manager です。彼は動的構成と、開発者がコードと構成を可能な限り迅速かつ安全にユーザーに届けることの支援に情熱を注いでいます。彼は CI/CD の次のステップである CI/CD/CC (Continuous Configuration) にフォーカスして時間を費やしています。

この記事の翻訳はソリューションアーキテクトの吉田幸泰が担当しました。原文はこちらです。