Amazon AppStream 2.0でアプリケーションを配信する #reinvent
ども、大瀧です。
デスクトップアプリケーションをWebブラウザ経由で配信するAppStreamについて、以下の記事ではAppStream2.0の構成済みのデモをご紹介しました。
本エントリーでは、所有するAWSアカウントにAppStream環境を構築し、アプリケーションを配信する様子をレポートします。
動作確認環境
- リージョン : AWS東京リージョン
- AppStream 2.0 Image : Amazon-AppStream2-Sample-Image-12-1-16
1. VPCの事前準備
AppStreamを実行するためには、VPCとそれに付随したいわゆるPrivate Subnetが必要です。具体的には、VPCにNATインスタンスないしNATゲートウェイを用意し、デフォルトルートをそれらに向けておきます。
AppStreamで配信されるアプリケーションを実行するインスタンスはFleetというクラスタ単位で管理され、Fleetに所属するインスタンスはAmazon VPC内に接続するENIを利用します。ENI自体は自動で作成されるのですが、Fleet作成時に、先ほど設定したVPCサブネットを選択するというわけです。
2. Stack/Fleetの作成
それでは、AppStreamの管理画面からFleetを作成します。AppStreamの初期画面から[Get Started]をクリックしQuick Linksの画面を[Skip]ボタンで流すと、Stackの一覧画面が表示されます。
StackはAppStreamの最も上位の概念で、前述のFleetと紐付けて利用します。[Create Stack]からのStack作成ウィザードでFleetもセットで作成されます。
任意のStack名を入力し、[Next]をクリックします。
Choose Image画面では、インスタンスのイメージを選択します。現時点でユーザー独自のイメージ作成機能は無いようなので、Windows Server 2012 R2ベースでいくつかのアプリケーションが入っているこのイメージ一択です。独自のアプリケーションをインストールしたイメージが作り込めるといろいろユースケースが考えられそうですね。選択し、[Next]をクリックします。
続いてFleetの構成画面に進みます。EC2のAuto Scalingのような感覚でいくつかあるインスタンスファミリー、タイプを選択します。Windows Serverベースだからなのか、比較的大きめのサイズ(*.medium〜)から選択します。
[Network access]セクションでは、先ほど用意したVPCおよびサブネットを選択します。
[Connection details]セクションと[Fleet capacity]は、Fleet構成で最も大切な設定です。AppStreamのアクティブユーザーセッションはFleetインスタンスを1:1で占有します。つまり、複数のユーザーでFleetを利用する場合、その同時ユーザー/接続数分だけインスタンスが必要です(1セッション内で複数のアプリケーションを実行することはできます)。そのインスタンス数を決めるのが[Desired Capacity]です。一方でユーザーセッションが切れれば、他のユーザー向けにセッションを払い出すことが可能です。そのセッションのタイムアウトが[Disconnect timeout]です。もちろんユーザーから明示的にセッションを切断することもできますが、適切なタイムアウト設定でセッションを有効に使い回すのが望ましい運用と言えるでしょう。今回はお試しなので、1インスタンスとしました。
これで、確認画面に進み[Create]ボタンをクリックすれば、StackおよびFleetの作成が開始します。作成状況は、Stackを選択し[Fleet Details]タブの[Status]で確認します。「Running」になれば作成完了です。
3. アクセスURLの生成
作成したAppStream環境にWebブラウザ接続するためには、そのURLを生成します。Stackを選択し、[Actions] - [Create streaming URL]をクリックします。
続いてユーザーIDと有効期間を求められるの任意の設定を選択し[Get URL]ボタンをクリックします。
表示されたURLをクリップボードにコピーしておきましょう。
4. 動作確認
Webブラウザに手順3で生成したURLを貼り付け、アクセスしてするとAppStreamの画面が表示されます。
とりあえず、Firefoxを起動し、ifconfig.me
にアクセスしてみました。今回はVPCにNATゲートウェイを構成したので、そのNATゲートウェイに紐付くElastic IP経由でアクセスしていることが確認できました!
また、notepad++など他のアプリケーションを立ち上げるとアプリケーションを実行するインスタンスのディスク構成などが少し見えてきます。約10GBのXドライブをユーザー領域として利用できます。
ただ、ユーザーセッションとインスタンスの紐付けはDisconnect timeoutの時間内でしか考慮されないため、次回接続時に同じインスタンスに同じデータが保持されることを期待するような使い方は向いていないと思います。代わりにWebクライアントにはXドライブにファイルをアップロードする機能があるので、Xドライブは一時作業領域と割り切って利用するのが良いと思います。
まとめ
AppStreamの構築から利用するまでの流れをご紹介しました。まずはカスタムイメージに期待したいところですが、NATを介すことからElastic IPによってグローバルIPを特定できるため、余計なプラグイン/アドオンの入っていないクリーンなWebブラウザ環境からIPアクセス制限のかかったWebシステムにアクセスさせたいといったユースケースでうまく活用できるかな、と思いました。