Amazon Appstream2.0でMFCアプリを配信する

# はじめに
Senju Family、mPLATを簡単にお試し利用ができるmPLAT/Tourサービスでは、MFCアプリケーションである「千手ブラウザ」をインストール不要で手軽に、セキュアに利用できるよう、Amazon AppStream2.0を利用して配信しています。

AppStream2.0を利用してみて、主にオートスケーリング面で事前の想定通りの動作をしなかったり、直に端末にインストールして利用する場合と比べて、利用ができない機能などがあったため、整理してみました。

# 環境構築
AppStream2.0でのアプリケーション配信準備は、ImageBuilderでのイメージ化、Fleetの作成、Stackの作成とFleetとの紐づけ、UserPoolでのユーザーの作成と通常通り進めていきます。
もちろん千手ブラウザのアプリケーション自体に手を入れる必要はありませんでした。

# オートスケーリングの設定
## 事前の想定
+ 利用者の接続に応じてインスタンスが増え、5ユーザーまでが利用可能。
+ 同時利用が５ユーザーを超えた場合はエラー画面が表示される。
+ 2ユーザー目以降が接続をすると、スケールアウトが完了するまでの1-2分ほど待たされて利用可能となる。

## 設定内容
システム構成は次の図のようになります。
![appstream.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2683528/9bb13006-bee2-c431-b041-ecc29d0d0dd3.png)

Fleet Capacityは下記の通りに設定しました。

|  Fleet type |  Always-on  |
| :-- | :--|
| Minimum capacity | 1(台)  |
| Maximum capacity | 5(台)  |
| Desired capacity | 1(台)  |
| Scale Out Policies | Capacity Utilizationが100%以上の時、1インスタンス追加  |
| Scale In Policies | Capacity Utilizationが40%以上の時、1インスタンス削除  |

最低インスタンス数はコストを考えると0でもよいのですが、利便性を考えて1台としました。
空きインスタンスがなくなった場合にインスタンス追加、空きインスタンスに余裕ができたら削除としています。

## 実際の動作
+ 利用者の接続に応じてインスタンスが増え、5ユーザーまでが利用可能。
+ 同時利用が５ユーザーを超えた場合はエラー画面が表示される。
+ 2ユーザー目以降が接続をすると、スケールアウトが完了していない場合は、エラー画面が表示される。
   スケールアウトが完了するまでの10分程度経過後に再接続すると利用可能となる。
![appstream02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2683528/72406a83-ec80-3983-8638-122869866ab7.png)

スケールアウトには時間がかかるため、最低インスタンス数を超えるアクセスの増加には注意が必要でした。

[Amazon AppStream 2.0 リソースのモニタリング](https://docs.aws.amazon.com/ja_jp/appstream2/latest/developerguide/monitoring.html#appstream-metrics "Amazon AppStream 2.0 リソースのモニタリング")
>プロビジョニングが開始されると、通常はインスタンスがストリーミングに使用可能になるまでに、10～20 分かかります。

利用者が「No streaming resources are available.」の画面となった場合は、スケールアウトが完了しても自動では画面表示がされないため、利用者側で再度アクセスの操作が必要となります。
![appstream03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2683528/caacce5f-da32-4dad-83d5-6e252e499d3e.png)

## Desired capacityの設定
Fleet Capacity設定のDesired capacityに手動で設定した値は、Fleet開始時のみ意味を持つことにも注意が必要です。
Fleet開始直後にはDesired capacityに設定した台数のインスタンスが起動されます。
その後、ポリシーに従って、インスタンスの増減が行われます。
Fleet開始後にもDesired capacityの値は設定可能に見えますが、システムにより自動的に値が設定され、手動で値を設定しても上書きされ、特にスケーリングの動作は変わりません。
![appstream04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2683528/f85382b4-e862-bbf5-40ca-b7f3b901bba2.png)


## Elastic Fleetsに期待
新しいFleet typeであるElastic Fleetsでは、「事前の想定」と近い動作になり、アクセスの増加にも素早く対応ができそうなことを確認しています。
さらに、Elastic Fleetsでは、スケールアウト、スケールインのポリシーなども設定不要でAWSに任せられるようになっています。
ただし、2022年8月現在、用意されているWindowsインスタンスは英語版のみとなっており、アプリの日本語表示が文字化けしてしまいます。
今後、日本語版Windowsの提供など対応がされた場合は、Elastic Fleetsへ移行したいと考えています。

# Appstream2.0でできないこと
Appstream2.0で千手ブラウザのアプリケーションを配信した場合、Webブラウザ経由でのアクセス、データが非永続的などの特徴により、端末にインストールして利用する場合と比べて、利用ができない機能も存在します。
Appstream2.0で他のアプリケーションを配信する場合も、同様の制限があることを考慮する必要があります。

## 警報装置の対応
千手ブラウザでは、障害メッセージの発生時等に、パトランプ点灯、ビープ音やサウンドファイルの再生、Windowsトースト通知ポップアップで注意を促す機能がありますが、Apsstream2.0によるWebブラウザからの千手ブラウザ利用では、これらの機能は利用ができません。

## 千手ブラウザオプションの新規設定
千手ブラウザでは、千手ブラウザオプションという、動作オプション設定があります。
オプションの設定は、クライアントサイドのテキストファイルに保存がされます。
アプリケーション起動時にテキストファイルを読み込んで反映させる動作となっており、Appstream2.0ではデータは非永続的で、新規接続時には過去にユーザーが行った変更はリセットされるため、利用者が千手ブラウザオプション設定を変更することはできません。
mPLATでは、イメージ作成時に、よく使われるオプションはあらかじめ設定をして提供をしています。

## データのインポート／エクスポート
千手ブラウザでは、テキスト形式または独自のバイナリ形式で定義データのインポート(読み込み)／エクスポート(書き出し)を行う機能があります。
既定のフォルダにファイルを置くだけでは、千手ブラウザの端末とユーザー端末との間でファイルのコピーはできません。
Appstream2.0でのファイルのアップロード、ダウンロードの手順を行うことで、端末間とのファイルのやり取りが可能です。

### データのエクスポート
千手ブラウザで「データの書き出し」の操作を行うと、「名前を付けて保存」ダイアログで保存先を選択することができます。
ここで、フォルダ[C:\Users\PhotonUser\My Files\Temporary Files]を指定してファイルを保存します。
![senju04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2683528/92a426cc-3982-659b-5f45-5715b5236f8f.png)

次に、Appstream2.0のファイルメニューを選択し、「Temporary Files」の配下の保存したファイルを選択すると、千手ブラウザ端末からユーザー端末にファイルがコピーされます。
![senju06-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2683528/241bcceb-a7c3-e17b-3355-efbf2ee32d28.png)

### データのインポート
ユーザー端末にインポート用のファイルを用意します。
Appstream2.0のファイルメニューを選択し、Temporary Filesを開いて「Upload Files」からユーザー端末のインポート用のファイルを選択すると、千手ブラウザの端末へファイルがコピーされます。

![senju08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2683528/7be99518-fbbf-4133-5cfe-31d527cd0304.png)

千手ブラウザで「データの読み込み」の操作を行うと、「データの読み込み」ダイアログでファイルを選択することができます。
ここで、フォルダ[C:\Users\PhotonUser\My Files\Temporary Files]にアップロードされたファイルを選択します。
![senju10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2683528/8c728705-6ec3-705f-d160-038060a11dd9.png)

# まとめ
Appstream2.0を使って千手ブラウザを配信することで、利用者はWebブラウザ経由で手軽にアプリケーションを利用することができます。
オートスケーリングの設定に関しても、同時アクセス増加時のスケールアウトに要する時間に注意が必要ですが、利用者の増減に合わせて、必要なキャパシティを提供し、コストをコントロールすることが可能です。
また、Webブラウザ経由でもほとんどの機能は問題なく利用可能で、GUIによるSenjuの設定、操作、参照等を支障なく行うことができます。
![appstream05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2683528/c99e246f-434d-5fa2-1ced-0a37a3c0db4c.png)

# mPLAT/Tourのご紹介
「mPLAT/Tour」は、Senjuをクラウド型で提供しているmPLATを、メールアドレスを登録するだけで気軽にトライアル利用できるサービスです。
各種課題ごとに予めサンプル画面と環境設定が用意されているため、初心者でも簡単に、実践的な運用業務をご体験いただけます。
今回ご紹介したような、Amazon Appstream2.0での千手ブラウザ配信をサービスの一部として利用しています。

_/_/ 詳しいご説明、お申し込みはコチラ↓_/_/
https://exp.mplattour.cloud/navi/index