Category: Application 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;

Amazon Elastic TranscoderでMPEG-DASHをサポートしました

Amazon Elastic Transcoderはビデオやオーディオといったメディアファイルを元の形式から他の形式にコンバート可能なサービスです。このサービスはロバスト、スケーラブルでコスト効果が高く簡単にご利用頂けます。ご利用頂くにはpipeline(処理で使用するインプットとアウトプットのS3バケットのペアを指定します)を作成し、トランスコードのjobを作成します。それぞれのjobはインプットバケットから処理対象のファイルを読み込み、jobで指定されたフォーマットへトランスコードを行いアウトプットバケットへ書き込みます。トランスコード(Standard Definition (SD) video, High Definition (HD) video, audio)に応じて課金を行います。トランスコードプリセット(アウトプットフォーマットとそれに関連する設定の集合)をご提供しています。お客様のご要望やエンコード技術の変化に応じて新しいプリセットやフォーマットを追加してきました。例えば、先日VP9 Codecをサポートしました。

MPEG-DASHサポート

本日、MPEG-DASH フォーマットのサポートを開始しました。このフォーマットは、HTTPサーバを用いて高画質・高音質のストリーミングをサポートします。また、アダプティブストリーミングの技術を用いて、ネットワークスループットの状況に応じてビットレートを変えて配信可能です。この技術は様々なデバイスやビットレート環境に適しており、トランスコードプロセスを簡素化し、様々なフォーマットを作成することを避けることが出来ます。

MPEG-DASHのトランスコードプロセス中に、コンテンツは様々なビットレートのセグメンとにトランスコードされ、それぞれの出力を参照するためのプレイリストが作成されます。クライアントは最初にプレイリストをダウンロードします。その後、ネットワーク帯域やレイテンシを監視し、必要なビデオセグメントを要求します。再生中にネットワーク状況が変化した場合、プレイヤは状況に応じて、ビットレートの高い(低い)セグメントを要求します。

トランスコード済みのコンテンツはS3から直接配信することも出来ますし、Amazon CloudFrontを使用して、ユーザに最も近い場所から配信することも可能です。どちらの場合でも、以下の様なCORSポリシーを作成する必要があります。

<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
  <CORSRule>
     <AllowedOrigin>*</AllowedOrigin>
     <AllowedMethod>GET</AllowedMethod>
     <MaxAgeSeconds>3000</MaxAgeSeconds>
     <AllowedHeader>*</AllowedHeader>
  </CORSRule>
</CORSConfiguration>

CloudFrontを利用する場合は、OPTIONSメソッドを有効にして、キャッシュされることを許可します

ets_dash_allow_http_methods

加えて、3つのヘッダをディストリビューションのwhitelistに追加します

ets_dash_whitelsit_headers

MPEG-DASHでトランスコード

MPEG-DASHでアダプティブビットレート機能を利用する場合、1つのトランスコードjobで別々のプリセットを利用して複数のアウトプットを作成します。これらのプリセットを選んで頂けます(ビデオ向けに4つ、オーディオ向けに1つ)

ets_pick_dash_presets

このフォーマットを利用する際、適切なセグメントデュレーション(秒)を選択します。短いデュレーションを設定すると多くの小さいセグメントを生成し、クライアントが回線状況の変化により高速に適応出来ます。

全てのビットレートを含んだ、1つのプレイリストを作成するか、みなさまの多くのお客様やコンテンツに適した特定のビットレートを選択可能です。また、ご自身のプリセットを既存のプリセットを元に作成出来ます。

ets_edit_preset

すぐにご利用頂けます

MPEG-DASHサポートは本日から、Amazon Elastic Transcoderをご利用頂ける全てのリージョンでご利用頂けます。こちらのフォーマットを利用するための追加料金は必要ありません。料金の詳細は Elastic Transcoder Pricingをご覧ください。

— Jeff (翻訳は星野が担当しました。原文はこちら)