Amazon AppStream2.0とは
Amazon AppStream2.0は、サーバー上で動かすアプリケーションの画面をインターネットを通じてユーザーのブラウザーに動画配信するサービスです。デスクトップ仮想化のように利用することができます。アプリケーションの実行はAWS内(AppStreamサーバー上)で実行されるため、データそのものはインターネットの外には出ていかずセキュアに利用できます。また使用した分だけ課金される仕組みです。
料金
公式サイトで確認できます。
AppStreamのフリートインスタンスの種類とOS、月間の利用時間により料金が決まります。
Windowsサーバーの場合、1回でも接続するとRDPライセンス(4.19USD/month、シングルセッションの場合)が必要となりますので、ちょっと自宅でためそうにも少しハードルが高いです。
ここではLinuxインスタンス(RDPライセンス料がかかりません)を使用して動作を確認しようと思います。
アーキテクチャ図
今回予定している構成図です。以前作成したPrivateSubnet1と2にAppStream Fleetを配置します。
IAM Identity Centerをうっすらと表示させている理由は、Amazon Linux 2のストリーミングができたら、接続を試す予定があるためです。

ImageBuilderでイメージを作成
まずはイメージを作成していきます。
マネジメントコンソール > AppStream2.0 > Images と開き、「Image Builder」タブを開きます。
まだ何も作成されていません。「Launch Image Builder」をクリックします。

「Choose an Image」で、AmazonLinux2ベースのイメージを選択します。
投稿時点では2023.11.13のものが最新のようでした。

「Configure Image Builder」で、ImageBuilderの名前設定します。

インスタンスタイプを選択します。一番コストが安い stream.standard.small(1vCPU、2GiB RAM)のTypeを選択しました。

IAM Roleは、ImageBuilderからS3などの他のサービスを利用する場合に設定します。今回利用予定はないため、設定しません。
VPC Endpointsは、VPC内のリソースと通信させる場合に設定します。こちらも利用予定はないため、設定しません。
次に、ネットワークの設定をします。予定していたPrivateSubnet1に配置します。
セキュリティグループも設定します。通信要件がないため、インバウンドは何も許可せず、アウトバンドのみALL許可にしています。

「Review and Create」で作成内容をレビューして問題なければ、「Launch Image Builder」をクリックします。

ImageBuilderの作成が開始されました。ステータスがRunningにかわるまで、5分ほど待ちます。

ステータスがRunnningに変わりました。作成したImage Builderが選択された状態で、「Connect」をクリックします。

Image Builderに接続されました。ここからアプリを登録していきます。

左上「Applicatons」 > 左の9面すごろくみたいなマークから、「Image Assistant」を起動します。

Image Assistantが起動します。「+ Add App」をクリックします。

適当にアプリを選択します。テキストエディターがあったので、それを選択してみました。

「Launch」をクリックします。アプリ起動を最適化してくれるようです。

アプリが起動したことを確認して、「Continue」をクリックします。
登録したアプリの数だけ繰り返します。

作成するフリートイメージの名前を入力して、「Next」をクリックします。

「Disconnect and Create Image」をクリックして、イメージ作成を開始します。

Image Builderへのコネクションが失われます。タブは閉じてください。

「Image Builder」タブに戻ると、ステータスが「Snapshotting」となっています。
10分〜20分はかかる場合があります。気長に待ちましょう。

ステータスが「Stopped」に変わったので、「Image Registory」タブを表示します。
イメージが作成されています。

詳細ページで「Applications」を確認すると、登録したアプリが一覧に表示されています。

これでイメージの準備はできました。
フリート起動
次に作成したイメージを使って、フリートを起動します。
AppStream2.0 > Fleetsへ移動します。
「Create Fleet」をクリックします。

「Configure Fleet」の画面で、フリートの名前を入力します。

インスタンスタイプは、Image Builder同様に一番安いタイプにします。

フリートキャパシティについては、兎に角コストがかかるといやなので、Maximam capacityを1にしました。これで2以上のセッションが接続されることはなくなります。(実際の運用でこんな設定をすることはないと思います。。。)

その他、デフォルトのままにして、「Next」をクリックします。
※今回フリートから他のAWSサービスの利用はないので、IAM rolesも設定しません。

ネットワークを設定します。フリートはサブネットを2つ設定する必要があります。予定していたPrivateSubnet1と2を設定します。通信要件もないため、インバウンドを許可していないセキュリティグループを設定します。

レビュー画面で問題なければ、「Create fleet」をクリックします。

コストがかかる旨の表示がでます。私は〜を了承したのチェックを入れて、「Create」をクリックします。
※本当にコストがかかるので、確認終わったらすぐに停止、削除するつもりです!

フリートの起動が開始されました。起動するまで10分〜20分くらいかかる場合がありますので、気長にまちましょう。

ユーザーを追加
今回はAppStream2.0自身のユーザープールを使用します。AppStream2.0 > userpoolへ移動します。
「Create User」をクリックします。

Emailなど必要な情報を入力して、「Create User」をクリックします。

ちなみに追加したユーザーの削除はGUIではできないため、AWS CLIを使用します。

スタックの作成と、ユーザーとフリートの関連づけ
AppStream2.0 > Stacksへ移動します。
「Create Stack」をクリックします。

ストレージは使用しませんので、チェックは外して「Next」をクリックします。

何にも利用しませんので、チェック外しやDisable選択を怠りません。

レビュー画面で、余分な設定をしていないことを確認したら、「Create Stack」をクリックします。

次にユーザーを割当ます。
User poolの画面で、ユーザー選択 「Action」> 「Assign Stack」をクリックします。

内容を確認して、「Assign Stack」をクリックします。

ユーザーに新しいアプリが利用できるようになった旨のメールが届きます。

AppStreamへアクセス
いよいよストリーミングの準備ができました。
ユーザーのメールにあったログインページのURLへアクセスします。
登録したメールアドレス、パスワードを入力して、「Log in」します。

アプリを選択するとストリーミングセッションの開始が始まります。

ブラウザ上でアプリケーションがストリーミングされるようになりました!

ここまで確認できたので、ログアウトします。
フリートやイメージビルダーは停止してもコストが若干かかるため、完全に削除します。
まとめ
今回は最低限必要な手順を確認しました。Windowsインスタンスを使用することのほうが多いと思いますが、Linuxでもアプリケーションのストリーミングができることを確認できました。














