虎塚(144)13この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。こんにちは、虎塚です。Webinarを聴講しましたので、レポートします。今回のテーマは、AppStreamで、講師はアマゾンデータサービスジャパンの榎並さんです。※すでに公式のWebinar資料が公開されていますので、お時間のある方はそちらをご覧いただければと思います。AppStreamAppStreamは、1年ほど前にリリースされたAWSのサービスですね。AppStreamアプリケーション処理をクラウドで実行し、クライアント端末に入出力をストリーミングできるサービス。重い処理をクラウドで行うので、エンドユーザのハードウェアが制約にならない。運用保守をする人がサーバ台数を考慮しなくてよい。アプリケーションの管理に注力できるユースケースAppStreamがどのようなところで使えるか、すでに使われているかについて、代表的なユースケースを3つ紹介する。CAD/3D/シミュレーションハイエンドPCでなく通常のPCで、CADや3Dシミュレーションなどのリッチなアプリケーションを実行できる。仮想サーバにはg2インスタンスを使う。クラウド上のGPUで計算処理を行い、ストリームとして配信される。このユースケースには、日産様から応援のコメントもあるとのこと。ゲーム通常、大きなファイルサイズのゲームはダウンロードが完了してから開始できるが、ダウンロード中にユーザが退屈したり離脱したりしてしまう。ダウンロード中の離脱を防ぐ仕組みとして、AppStreamを使う。Online様の事例では、大きなゲームをダウンロードしている間に、ゲームで使うアバターをAppStreamで配信して設定できるようにした。ダウンロードが完了すると、そのアバターを使ってゲームを開始できる。ゲームはクラウド上で実行されて、クライアントにダウンロードされない。そのため、海賊版を作成されるリスクを抑えられる。ハードウェアの制約なくクリエイティブなゲームを提供できるので、ゲームの作り手にとってもうれしい。シミュレーションなどの重いグラフィックス処理に利用する。クラウド上でレンダリングしてストリーム配信を行うため、病院や大学で利用されているPC以外のポータブルデバイスで、画像やシミュレーションを見たいというユースケースにも対応できる。システム概要AppStreamシステム概要AppStreamの中には、大きく2つのコンポーネントがある。eXperienceという意味。Amazonのプロプライエタリなプロトコルで、次のような特徴を持つ。サーバからユーザへ、H.264エンコードの動画と音声をUDPで転送するユーザからサーバへ、入力をTCPで転送するクライアントのネットワーク状況を計測して最適な配信を行うクライアント側アプリでプロトコルを意識せずに使えるように、AmazonからSDKが提供されている。使用するポートは次の3個。AppStream認証サービスAppStreamのアプリケーションを実行できる人を認証するサービスのこと。認証サービス自体は、AppStreamのサービスの中には含まれず、外部の認証サービスを統合して利用することを想定している。統合の実装については、サンプルのソースコードやCloudFormationテンプレートがある。DynamoDBに格納されたユーザ情報を参照して認証し、AppStreamに接続するサンプルがある。AppStreamシーケンスざっくり次のような流れになる。IDとパスワード)認証サービスからAppStreamサービスのAPIを実行するAppStreamホストのインスタンスを確認し、セッションを作成する空いているホストをクライアントに返す(=クライアントが、アサインされたAppStreamホストをAppStreamサービスから受け取る)ことで、セッションを開始するクライアントとホストがダイレクトにやり取りし、ストリーミングを開始する現在の仕様では、1つのコネクションでAppStreamホストが1台起動し、その上でAppStreamアプリが実行される。ストリーミングアプリケーション開発スタンドアローンモードSDKを使ってストリーミングアプリケーションを実装した後、スタンドアローンモードでデバッグできる。認証サービスとAppStreamサービスを経由せずに、直接AppStreamホストと通信し、アプリケーションの挙動を確認できる。オブジェクトXStxServerLibraryサーバライブラリの最上位レベルのオブジェクト。XStxServerManagerオブジェクトを作成するのに利用するXStxServerManagerクライアントセッションを管理し、アプリケーションにイベントを送信する。data)をバイトストリームで受け取るXStxIServerListenerクライアントとの接続確立/切断時に、XStxServerからイベントメッセージを受け取るXStxIServerManagerListenerAppStreamがクライアントセッションを作成/終了した時に、XStxServerManagerからイベントメッセージを受け取るXStxIVideoSourceアプリケーションから動画フレームを取得する(XStxServerから呼び出される)(入出力をバッファリングするモードとそのまま出すモードがある)ストリーミングアプリケーションの設計上の注意ストリーミングアプリケーションは特殊なので、他のクライアントアプリケーションとの違いに注意する。考えるべきポイントがいくつかある。常時ネットワーク接続アプリケーションは常時ネットワーク接続を必要とするため、ネットワークが利用できない場合について考慮するレイテンシ管理アプリケーションをAppStreamからストリーミングすると、ローカルで実行する場合と比べてレイテンシがかかる。AppStream自体のオーバーヘッドはわずかだが、変動しがちなネットワークのレイテンシを考慮する永続的ストレージ特に大事。1回終了するとAppStreamホストのインスタンスはterminateされて、データが失われる。ユーザー入力のリダイレクトストリーミングをするには、SDKに用意されたライブラリに出力をリダイレクトし、ライブラリからイベントをリスンするインターフェイスを実装するハイブリッドアプリケーションAppStreamからアプリケーション全体をストリーミングするか、デバイス上で一部の処理を実行するか、ハイブリッドにするかを考慮する。ゲームの場合、基本的な文字アニメーションはデバイスで描画し、重いグラフィックはストリーミングするなどストリーミングアプリケーションのテスト前述のスタンドアローンモードでテストを実施する。Studioで、ストリーミングアプリケーションをデバッグできる。ツールのセットアップストリーミングアプリケーションのビルドストリーミングアプリケーションをAppStreamにインストールするという作業を自動で行うため、サイレントインストーラ(*.exe)を実装する必要がある。*.zipファイルは使用できないことに注意する。クライアントアプリケーション開発ビューワ側の開発について説明する。複数の入力イベントがある場合の挙動について、仕様を考慮することさまざまなインプット方法に対応するか、1種類のインプットしか許容しないかクライアントOSごとのビルド開発者ガイドを参照する。AppStreamコーデックとオープンソースライセンスAppStreamでは、H.264/AVCフォーマットと、Opus音声フォーマットを利用している。クライアントアプリにH.264/AVCデコーダを含める必要があるが、デコーダのライセンスにアプリケーション配布側の責任で準拠するよう注意する。Consoleからデプロイできる。Consoleから確認できる。アプリケーションのログストリーミングアプリケションのログを取得し、S3に格納できる。GPUの使用状況メトリックスサービス上限緩和デフォルトで同時10セッションが上限だが、上限緩和申請できる。上限値によっては、2週間から10週間かかる可能性がある。コスト東京リージョンで、1時間のストリーミングにつき$1.20かかる。リザーブドストリーミングセッションもある。AppStreamQ&Aこのあたりから音声がちょっと途切れがちで、よく聞き取れませんでした。間違っていたらご指摘ください。今のところロードマップにはないが、要望に応じて対応するかもしれません。ミラーキャストでディスプレイを表示できるので、Androidクライアントで何とかできるかも。今のところできません。初回起動時だけかかるかもしれません。ポート番号を変更できるようになると嬉しいです。