Amazon AppStreamのサンプルを動かしてみた

# 今回の内容

最近一般公開された、話題のAmazon AppStreamのサンプルを動かしてみました。
Amazon AppStreamの概要と、サンプルの動かし方を記載します。

公式ドキュメントがどうにも読みにくくて結構苦労しました。
もし何か間違っていることあったらご指摘ください。

あと、サンプルを動かし終わった後は、EC2を落とすことを絶対に忘れないようにしましょう。

# Amazon AppStreamとはなにか

Amazon AppStreamは、スマホなどの端末から受け取った情報を元に、サーバー側でゲームの映像などを処理して、処理した結果をストリーミングでモバイルに返すことが出来るサービスです。

サーバー側でゲーム映像のレンダリングなどの重い処理をやっておき、その結果だけを返す事により、貧弱な端末でも高度なアプリケーションを動かすことが出来ます。

構成は、大きく３つに別れ、下記のようになっています。

![appstream_flow_1.png](https://qiita-image-store.s3.amazonaws.com/0/36837/390ebab3-3ee2-5884-ddb2-161a8f9d45ab.png)

◯スマホなどのデバイス上で動くアプリ
デバイスのタッチや文字入力などサーバーに送信、結果をもらって表示する。
Mac、Windows、iOS、Androidなどで動作。

◯AWS上でアプリを処理するサーバー
実際にゲームなどを処理するサーバー。
デバイスのタッチや文字入力などを受け取り、映像のレンダリングなどをして、結果をアプリに返す。
これはEC2インスタンス上のWindows 2008 R2環境上で動作する。

◯AWS上で動く認証サーバー
デバイスを認証して、アプリを処理するサーバーとつなげるための認証処理を行うサーバー。
これをなくす、Stand Alone Modeというのもあるが、本番稼働の場合は推奨されていない。

サンプルは、認証サーバーを省いたStand Alone Modeで動かせるらしいので、起動までをやってみます。


## サーバー側をStand Aloneモードで構成する

CloudFormationというサーバー環境設定自動化サービスによって、AppStreamのサンプルを動かす環境が作れるように用意されています。
今回はその手順にしたがっています。

参考：
http://docs.aws.amazon.com/appstream/latest/developerguide/appstream-getting-started.html

### Key Pairの作成
まずは今回のサーバー用のKey Pairを作成します。
「US East (N. Virginia)」のリージョンにて、
EC2のページを開き、「Key Pairs」の項目にて
「Create Key Pair」を押下。
↓
「AppStreamKeyPair」
という名前で、作ったキーを保存しておきます。

### CloudFormationでサーバー構成
サーバー側をStandAloneモードにて作成します。

「US East (N. Virginia)」のリージョンにて、CloudFormationのページに移り、「Create New Stack」を押下。
↓
「Create A New Stack」のページにて、各項目を入力

[Name]
・StreamingHost

[Source]
・Provide an S3 URL to templateをチェック
・https://s3.amazonaws.com/appstream-public/AppStreamDeveloper.template

「Next Step」を押下
↓
「Specify Parameters」のページにて、各項目を入力

[ApplicationPresignedS3Url]
・https://s3.amazonaws.com/appstream-public/XStxDirectXServerInstaller_1.3.exe (自動で入っている)

[AppStreamSDKVersion]
・1.3 (自動で入っている)

[KeyPairName]
・AppStreamKeyPair (前手順で作ったKey Pairsの名前を入れる)

[LauncherPath]
・C:\app\XStxDirectXServer\XStxDirectXServer.exe (自動で入っている)

[MicrosoftVirtualAudioDrivers]
・yes

[NvidiaGRIDdrivers]
・yes

「Next Step」を押下
↓
「Options」ページではそのまま「Next Step」
↓
「Review」ページでもそのまま「Next Step」
↓
作成途中では「CREATE_IN_PROGRESS」になっているので、これが「CREATE_COMPLETE」になるまで待つ。
↓
EC2ページに、今回ので作成したインスタンスが起動しているはずなので、
これのPublic IPをメモ。

## クライアント起動

### クライアントサンプル用意
クライアントのサンプルは、下記ページのSDKの中に入っています。
http://docs.aws.amazon.com/appstream/latest/developerguide/appstream-downloads.html

現時点では、下記が最新でした。これをダウンロードします。
https://s3.amazonaws.com/appstream-sdk/AppStreamSDK_1.3.0.17.zip

### クライアントサンプル起動

上記でダウンロードしたファイルを解凍して、「precompiled_samples」の中身を起動します。
私の環境はMacなので、下記を使いました。
AppStreamSDK_1.3.0.17/precompiled_samples/osx/build/AppStreamSample/AppStream.app

起動後、「AppStream Stand-Alone Mode」にチェックをいれて、用意したサーバーのPublic IPかPublic DNSを入力します。
そして「Connect」押下。

![client2.jpg](https://qiita-image-store.s3.amazonaws.com/0/36837/648e1237-4f45-a910-8cb4-9dd6fd27d1e4.jpeg)

動いた！
下記ページに書いてあるように、AとかDとかで動かせます。
http://docs.aws.amazon.com/appstream/latest/developerguide/appstream-build-app-sample.html

![client3.jpg](https://qiita-image-store.s3.amazonaws.com/0/36837/a8476d0e-3d12-4ae2-2913-2b3f307d59d3.jpeg)

なんでしょう・・・。正直な感想をいうと・・・、ちょっとしょぼい。

そしてすぐ動かなくなって落ちる！
さらにその後サーバー再起動するまで繋げなくなる！
・・・なんでしょう。この微妙な気持ちは・・・。

とりあえず、
**EC2は絶対に落とし忘れないようにしましょう。**

# 感想

とりあえずサンプル起動までしてみましたが、非常に公式ドキュメントがわかりづらく、サンプルが残念なこともあり、まだまともに使える段階にはない気がしました。

あと、サーバー側はDirectXとかを使うみたいですが、やったこと無いのでちょっとプログラムイメージがつかなかったです。

また、個人で試すには結構金がかかるので、しばらくは様子見かなと。
サービス自体は面白いので、また後ほどチャレンジしたいです。