Amazon Web Services ブログ

Step Functions を使用するともっとうまくできます

私はよく Amazon のイノベーション文化についてプレゼンテーションを行いますが、Amazon の創設者 Jeff Bezos の意義深い引用を取り上げたスライドから始めることが多くあります。

お客様にお会いして、私たちがお客様の創造性や夢の追及をどのように支援できているかについて知るのは楽しいものです。今年に入って、Coca-Cola Company の Patrick と歓談し、AWS Step Functions や他の AWS のサービスを使用して Coke.com の Vending Pass プログラムをサポートした方法を教えてもらいました。このプログラムでは、Coca-Cola Vending Pass を使用したモバイル支払いをサポートしている自動販売機で製品を購入することで、ドリンクがプレゼントされます。参加者が NFC 対応電話をスワイプすると Apple Pay または Android Pay で購入が完了し、自動販売機で個人が識別されてクレジットを獲得できます。このクレジットを貯めることで、将来自販機で無料で購入できます。

スワイプ後、SNS トピックと AWS Lambda 関数の組み合わせにより既存のバックエンドコードに対する 1 組の呼び出しが開始され、販売ポイントがカウントされて参加者の記録が更新されます。残念ながらバックエンドコードは反応が鈍く多少のタイミング依存性があり、更新が行われず Vending Pass 利用者が混乱する可能性がありました。この問題に対する初期のソリューションは非常にシンプルでした。Lambda コードを変更して 2 つの呼び出しの間に 90 秒間のディレイを含めたのです。これにより問題は解決しましたが、処理時間がかかるのはいいことではありませんでした (Lambda 関数の使用料金は 100 ms 間隔のリクエスト所要時間に基づいています)。

ソリューションの費用対効果を向上させるため、チームは AWS Step Functions に注目し、非常にシンプルなステートマシンを構築しました。以前のブログ投稿で書いたように、Step Functions により、簡単に構築できる視覚的なワークフローを使用して分散アプリケーションとマイクロサービスのコンポーネントを大規模に調整できます。

Coke は非常にシンプルなステートマシンを構築して、ビジネスロジックを簡易化し、コストを削減しました。他のお客様も同様に簡易化できるはずです。またはシーケンシャルおよびパラレル実行や、代替ステートを使用する判断や選択を行う機能など、他のステップ関数機能を利用することもできます。Coke のステートマシンは次のようなものです。

FirstState および SecondState の各ステート (Task ステート) は該当する Lambda 関数を呼び出し、その間に Step Functions は 90 秒のディレイ (Wait ステート) を設けます。この変更によりロジックが簡易化されコストを削減できました。このすべての構成を以下に示します。

次のステップ
この最初の成功により、彼らはサーバーレスコンピューティングにより注目し、他のプロジェクトでの使用を検討しました。Patrick の話では、すでに生産性の飛躍的な向上と見られ、また開発者は喜んでいるそうです。開発者はサーバーがプロビジョニングされるのを待つ必要がなくなり、(Jeff が言うように) 創造性を解き放ち夢を追求できるようになりました。彼らは Coca-Cola Vending Pass での初使用例を大きく超えて、Step Functions を使用して自分たちのアプリケーションのスケーラビリティ、機能性、信頼性を改善するつもりです。たとえば、Coke は Lambda、Step Functions、および API Gateway を使用して、食品サービスパートナーに栄養情報を発行するサーバーレスソリューションを構築済みです。

Patrick のチームは現在、マシンラーニングと人工知能を使用した実験を行っています。彼らは、Instagram に掲載される写真のストリームを分析し、味やフレーバーのトレンドを抽出するプロトタイプアプリケーションを構築しました。このアプリケーション (簡易的なワンデープロトタイプとして構築) は LambdaAmazon DynamoDBAmazon API Gateway、および Amazon Rekognition を利用しており、Patrick の言葉によると、「大成功であり可能性のかたまり」だそうです。

サーバーレスアプリケーションをさらにすばやく構築するために、開発チームでは Serverless Application Framework 上に構築された内部 CI/CD リファレンスアーキテクチャを作成しました。このアーキテクチャには、内部サービスおよびアセットにアクセスするための Serverless のガイド付きツアーおよびいくつかのボイラープレートコードが含まれています。このモデルによって、有望なプロジェクトを「個人とコンピュータ 1 台」から開発チーム全体に簡単に拡大できると Patrick は言っていました。

Patrick は AWS re:Invent で私の同僚 Tim Bray の次に登壇予定です。ぜひ SRV306 – State Machines in the Wild! How Customers Use AWS Step Functions に参加して彼らに会ってください。

Jeff;