はじめに
アプリケーションを作成して配信するときに、Web アプリケーションで提供する形式がよくとられます。一方、デスクトップにインストールする形式で使ってきたアプリケーションが有る場合、これをいきなり Web アプリケーションに実装変更していくのは、なかなか大変な作業です。
そこで、Amazon Appstream 2.0 を使うことで、いままでのデスクトップアプリケーションを活用しながら、遠隔のストリーミングによるアクセスを提供できます。ブラウザ、もしくは、AppStream 2.0 専用のクライアントアプリケーションを通じて、お客様へ提供できます。
今回は、Amazon Appstream 2.0 の Workshop をやってみた内容となっています。Workshop 自体は英語ですが、こちらに公開されています。
Image Builder
まず、Image Builder を作っていきます。Image Builder とは、Amazon EC2 インスタンスをベースに構成されており、ストリーミングしたいアプリケーションを含むカスタムイメージを独自に作成するために使用されます。Image Builder の環境にアクセスして、必要なアプリケーションの設定などを事前にイメージとして固めていくことができます。
それでは作成していきましょう。
Image Builder の作成
AppStream 2.0 の画面を開き、Get Started を選択します。
Skip を押します
Launch Image Builder を押します
ベースとなるマシンイメージを選択します。今回は、Windows Server 2019 のマシンイメージを選択します。
Next
Image Builder の名前などを指定します
Image Builder の Instance type を指定します
Image Builder のストリーミングインスタンスが属するAmazon VPCとサブネットを選択します。これにより、インスタンス上で起動したアプリケーションが、Amazon VPC内のネットワークリソースに接続できるようになります。
Launch を押します
Image Builder の作成が開始されました。Running まで約15分ほどかかるので、待ちましょう。
一定時間後、Running になりました。
Image Builder に接続
作成した Image Builder の詳細画面で、Connect を押します
Administrator を選択
Windows のデスクトップ画面が立ち上がる
動作確認用アプリケーションをインストール
次の 2 つの URL は、Chrome と Notepad ++ のダウンロードページです。動作確認用として、インストールしていきましょう。
Image Builder の中で、通常の Windows のようにインストールを進めていきます。
msi を実行して、インストールをしている様子
Notepad++ をインストールしている様子
言語設定
デフォルトでは、表示言語やキーボードの入力が英語のままなので、日本語に変更をしていきます。詳細は次のDocument に乗っています。
Switch User を押します。
Template User を押します。
設定のボタンをおす
Time & Language を選択します
Add Language
Next
Install
Install がはじまる
Install 完了後、Option を押す
日本語を一番上の優先度にする
キーボードの設定に移動する
キーボードの詳細設定
日本語にする
再度ログイン後、日本語が入力できることを確認する
スイッチユーザーで、Administrator に切り替える
Administrator
Image Assistant の設定
この時点で、2つのアプリケーションがインストールされ、設定されたImage Builderインスタンスが完成しています。これから、Image Assistant を使って、アプリケーションの公開設定を進めていきましょう。
アプリケーションの追加
このステップでは、ストリーミングに有効にするローカルにインストールされたアプリケーションを定義します。ここで定義する設定には、名前、表示名、起動する実行ファイル、表示するアイコンが含まれます。
デスクトップの Image Assistant Icon を開く
AppStream 2.0 の Image Assistant が立ち上がります。Add App で、配信するためのアプリケーションを指定します。
Chrome のプログラムを選択
名前や Icon などを指定する画面が開かれます。このまま Save を押します。
Chrome が追加されました。引き続き Add App で Notepad++ を追加していきます。
選択します。
同様に Save を押します。
Next を押します。
デフォルトのまま、Next を押します。
アプリケーションの検証
これで、アプリケーションのインストールと設定が完了しました。このステップでは、Test User アカウントを使用して検証を行います。このアカウントは、昇格権限やローカル管理者権限を持たないローカルアカウントなので、アプリケーションが正しく起動することを検証します。
Switch User を押します。
Test User を選択します。
これで、通常のエンドユーザー権限を持つローカルユーザーで、イメージビルダーのインスタンスに接続されました。アプリケーションの検証を進めることができます。
Image Assistant の Icon をクリックします。
Chrome をクリックします。
すると、Chrome が正常に開きました。起動は問題ないので、このまま Chrome を閉じます。
同様に、Notepad も起動します。
こちらも正常に開けました。
これで、昇格権限や管理者権限を持たないユーザーでも、アプリケーションを正常に起動できることが確認できました。
Switch User を選択して、Administrator に戻ります。
Administrator を選択します。
Test が完了したので、Next を押します。
アプリケーションの起動方法を設定
このステップでは、アプリケーションのストリーム起動時のパフォーマンスが最適になるよう、最終的な起動方法を調整していきます。
ここでいう「最適化」とは、アプリケーションの起動方法を見直し、エンドユーザーがストリーミング再生する際に、できるだけ早く利用可能な状態になるよう、ストリーミングサービスに最適なチューニングを指示する裏方のプロセスを指します。
Launch を選択します。
AppStream 2.0は、リストにある最初のアプリケーションを自動的に起動します。アプリケーションが完全に起動したら、必要な入力を行い、アプリケーションの初回実行を確認してください。例えば、Google Chromeの場合、完全に起動する前に設定のインポートを求められることがありますが、これらの設定をスキップすることができます。
正常に Chrome が立ち上がり検索できる状態となっているので、Continue を押して次のアプリケーションを開きます。
Notepad が起動されます。必要に応じて、設定を入れておきます。
このまま Continue を押します。
イメージ名の設定
このステップでは、Image Name を指定して、作成を進めていきます。
Image の作成
リモートセッションから切断され、Image 作成処理が開始されます。
リモートセッションは直ちに切断され、ブラウザに[Lost Connectivity]ウィンドウが表示されたままになります。イメージの作成が開始され、イメージの作成中は再接続できないので、そのブラウザウィンドウを閉じます。
Image Registory に、作成した Image が登録されます。Pending となっており、作成完了まで 15 分ほど掛かります。
Status が Available に変わりました。
なお、Image Builder は自動的に停止状態になっている。
Fleet の作成
AppStream 2.0のフリートは、アプリケーションストリーミングインフラのハードウェアおよびスケーリング構成です。プロビジョニングにより、使用するインスタンスの種類、エンドユーザーに提供するインスタンス数、スケールアップ(およびスケールダウン)のポリシーを設定することができます。
Create Fleet
On-Demand タイプを選択
名前などを入れる
instance type を選択します。最大セッション時間はデフォルトのままにしておきます。
Fleet capacity で、最小・最大インスタンス数を指定できます。
提供する AppStream 2.0 の画面を、アプリケーションだけなのか、Desktop も含めて配信するのかを指定します。今回は、Application を選びます。
スケーリングポリシーを指定できます。
- 残りキャパシティに応じたスケールや、スケジュールに応じたスケールが可能
Next を押します。
前の手順で作成した Image を指定します。
アプリケーションを動かすインスタンスが稼働する VPC や Subnet, Security Group などを指定します。
Create を押します。
Fleet が作成されました。
Stack の作成
AppStream 2.0スタックは、フリート、ユーザーアクセスポリシー、ストレージ構成で構成されます。
Stackの作成
フリートへのアクセスを制御するためのスタックを設定および作成します。
Create Stack
名前や、対象の Fleet を選択します。
VPC Endpoint や、埋め込み用の入力欄がありますが、このまま Next を押します。
Enable home folders を有効化します。
これにより、エンドユーザーは、Amazon Simple Storage Service(S3)によってバックアップされた、セッション間のファイルを保存するための永続的な場所を得ることができます。
デフォルトの設定のまま Next を押します。クリップボードの有効化や、ファイル転送の有効化などをカスタマイズ可能です。
Create Stack
Stack が作成されました。
Streaming URL の作成
Stack が作成され、エンドユーザーがアクセスできるストリーミング環境の準備が出来ました。アクセスするには、Streaming URL が必要なので、作成をしていきます。
Get URL を選択します。
Streaming URL が生成されました。
https://appstream2.ap-northeast-1.aws.amazon.com/authenticate?parameters=eyJ0eXBlIjoiRU5EX1VTRVIiLCJleHBpcmVzIjoiMTY0NDAzNDI5MiIsImF3c0FjY291bnRJZCI6IjM3Mjk1Mjc1MjU4MCIsInVzZXJJZCI6IkxhYlVzZXIiLCJjYXRhbG9nU291cmNlIjoic3RhY2svV29ya3Nob3AtU3RhY2siLCJmbGVldFJlZiI6ImZsZWV0L1dvcmtzaG9wLUZsZWV0IiwiYXBwbGljYXRpb25JZCI6IiIsInVzZXJDb250ZXh0IjoiIiwibWF4VXNlckR1cmF0aW9uSW5TZWNzIjoiNTc2MDAifQ%3D%3D&signature=GkNUPwojDxy62Vdl41FN7kPKI6pFwqIaxOwe8XT4dDw%3D
ブラウザで動作確認
ゲストユーザーで Chrome を立ち上げアクセスすると、特に認証は聞かれずアクセスできました。Chrome を選択してみましょう。
On-demand モードなので、約2分ほど起動を待機します。
Chrome だけ立ち上がりました。
日本語で入力し、Chrome を使った検索が出来ました。
AppStream 2.0 Client をインストール
前提条件などが記載されています。
次の URL から、Client をインストールします。インストールするタイプの Client は、Windows のみ存在します。
Next
Client 側のロギングを有効化します。
Finish を押します。
AppStream 2.0 の Client で動作確認
AppStream 2.0 の Client を立ち上げ、Streaming URL を入力して Connect を押します。
Chrome を選択します。
待ち時間が発生します。
AppStream 2.0 の画面でも、日本語入力が出来ました。
UserPool によるアクセス管理
AppStream 2.0 には、UserPool という概念があります (Cognito の UserPool とは別物です)。UserPool を使うことで、AppStream 2.0 としてのローカルなユーザーを作成し、ID 管理が出来ます。
User pool の画面に移動し、Create User を押します。
メールアドレスや名前を入れて、Create を押します。
作成されました。
作成したユーザーに、Stack を紐づけます。
紐づける Stack を選んで、Assign Stack を選択します。
ユーザー作成時に指定したメールアドレスに、案内のメールが届きます。アクセス先のURLと、一時的なパスワードが記載されています。
ブラウザで動作確認
リンクにアクセスすると、ログインを求められます。送られた一時的なパスワードをつかって、ログインを行います。
新しいパスワードを設定します。
ログインできたので、Chrome のアイコンを選択します。
通常通り、Chrome が立ち上がって検索できます。
AppStream 2.0 の Client で動作確認
メールで送付された URL を、AppStream 2.0 のクライアントに入れて、Connect を押します。
Mail と Password の入力が求められます。
はい、AppStream 2.0 の Client でも正常に動作します。
付録 : Instance が不足しているとき
次のようにエラーが表示される
参考URL
Workshop の URL
https://catalog.us-east-1.prod.workshops.aws/v2/workshops/e324c13e-2ded-4da2-ad9c-f685305156ac/en-US/