AWS AppStream2.0を使った踏み台構築手順
AWS AppStream2.0 は Citrix XenApp や Microsoft RemoteApp みたいなソリューションのマネージドサービス。Windows Server上のアプリケーション画面やデスクトップを配信できる。
クライアント ➡ AppStream(ログインポータル・コネクションブローカー・リバプロ) ➡ 公開サーバ
このサービスでRDPクライアントやTeraterm等を公開すれば、パブリック・サブネットが無いシステムに対しても簡単に作業用の踏み台サーバを構築できる。
今まではAWS System ManagerやRDゲートウェイを構築していたので、導入や維持が面倒だった。
リッチクライアントも用意されているが、HTML5対応しているのも使い勝手がいい。
- 1. Image Builderで公開サーバのデプロイ元となるインスタンスを構成する
- 2. イメージをカスタマイズする
- 3. Image Assistant からFleet用のスナップショットを作成する
- 4. Fleetを作成する
- 5. Stackの設定を作成する
- 6. ローカルユーザを作成してStackにアサインする
1. Image Builderで公開サーバのデプロイ元となるインスタンスを構成する
イメージビルダーで公開サーバのカスタマイズを行い、インスタンスのスナップショットを作成する。
実際にユーザがアクセスする先のインスタンス群は「フリート」と呼ばれ、このスナップショットからデプロイされる。
AWS Console: AppStream2.0 ➡ Images ➡ Image Builder ➡ Launch Image Builder
- Choose Image
用途に従いベースイメージを選択する。
今回は Instance Family = General Purpose を選択して標準的なWindows Server 2019イメージを選択した。
Choose Image | AppStream-Graphics-Design-WinServer2019-12-28-2020 |
- Configure Image Builder
Name | fumidai_win2019-001 |
Instance Type | 2vCPU, 7.5GB RAM を選択 |
Endpoint | Internet クライアントから公開サーバへの接続をDirectConnect、VPNでクローズしたい場合のみエンドポイントを指定。VPC内のPrivateLink経由でAppStreamサービスにアクセスするネットワークフローになる。 |
IAM Role | 設定しない*1 |
- Network access
イメージのカスタマイズ作業をどのサブネットで実行するのか設定する。
この環境では、パブリック・サブネットとNATインスタンスがデプロイ済の為、イメージはプライベート・サブネットにデプロイすることにした。
Default Internet Access | Off イメージにPublicIPをセットする。NATが無いパブリック・サブネットにデプロイする場合はOnにする。 |
VPC | デプロイ先のVPCを指定 |
Subnet | プライベート・サブネットを指定 |
Security Group | プライベート・サブネットに配置するので In/Out:Any Permit とした |
- Launch をクリックするとベースイメージがデプロイされる
2. イメージをカスタマイズする
AWS Console: AppStream2.0 ➡ Images ➡ Image Builder
15分程度でイメージのステータスが Peding ➡ Running に遷移する。
イメージを選択し [Connect] ボタンをクリックするとログオン画面が表示される。
Local Administrator でWindowsにログオンし、OSの設定変更やアプリのインストールを実行する。
この例では以下のカスタマイズを実施した。
- Windows Server 2019の日本語化
- Start -> Settings -> Time and language -> Language から日本語の言語パックをインストール
- Powershellを管理者権限で実行し、以下のコマンドを実行
# タイムゾーン変更 Set-Timezone -Name "Tokyo Standard Time" # リージョン Set-WinHomeLocation -GeoId 122 # システムロケール Set-WinSystemLocale -SystemLocale ja-JP # 言語リストの優先順位 Set-WinUserLanguageList -LanguageList ja-JP,en-US -Force # レガシーな言語バーを表示 Set-WinLanguageBarOption -UseLegacySwitchMode -UseLegacyLanguageBa # OSのUI言語 Set-WinUILanguageOverride ja-JP # デフォルト入力メソッド Set-WinDefaultInputMethodOverride -InputTip "0411:00000411" # ログオフ logoff
3. Image Assistant からFleet用のスナップショットを作成する
デスクトップの Image Assistant を起動し、ウィザードに従って設定を進める。
- ADD APPS
- 公開するアプリケーションのパス、起動パラメータを設定する
Remote Desktop Client | C:\Windows\System32\mstsc.exe |
Teraterm | C:\Program Files (x86)\teraterm\ttermpro.exe |
Chrome | C:\Program Files\Google\Chrome\Application\chrome.exe |
- CONFIGURE APPS
- Template User にスイッチしてアプリケーションのデフォルト設定を実施する
- 今回は何も実行しない
- TEST
- Test User でサインインし、インストールしたアプリが正常起動することを確認する
- OPTIMIZE
- [Launch]ボタンをクリックすると登録したアプリが自動起動し最適化が実行される
- CONFIGURE IMAGE
- ここで設定した Name がフリート設定時にイメージの選択肢として表示される
Name | fumidai_win2019-20210124-001 |
Always use latest agent version | On |
[Disconnect and Create Image] ボタンをクリックするとデスクトップから切断され、スナップショットの作成が実行される。
AWS Console: AppStream2.0 ➡ Images ➡ Image Builder
30分程度でイメージのステータスが Snapshotting ➡ Stopped に遷移する。
今後アプリや設定のアップデートの際はこのイメージを更新し、都度 Image Assistant でスナップショットを追加していく。
4. Fleetを作成する
フリートは同じスナップショットからデプロイされた公開サーバ群のこと。
Citrix XenAppでいうマシンカタログに相当する。
AWS Console: AppStream2.0 ➡ Fleets ➡ Create Fleet
- Fleet Details
Name | fumidai_win2019_fleet |
- Choose imaga
- Private でフィルタして、自身が作成したイメージのスナップショットを選択する
Image | fumidai_win2019-20210124-001 |
- Configure fleet
- デプロイする公開サーバのスペック、フリートタイプ(課金タイプ)、セッション設定、キャパシティを設定する
- 課金タイプが On-Demand の場合、Suspend状態の公開サーバにログオンする際120秒待ち時間が発生する
- キャパシティ設定 = Auto Scaling設定 で、ユーザ接続数に応じてインスタンスをスケールする
Instance Family | General Purpose | |
Choose instance type | 2vCPU, 4GB RAM | |
Fleet Type details | On-demand | |
Maximum session duration in minutes | 960min | |
Disconnect timeout in minutes | 15min | |
Idle disconnect timeout in minutes | 15min | |
Minimum capacity | 1 1以上にすること。0の場合インスタンスが全く起動しなかった。 |
|
Maximum capacity | 5 | |
Stream view | application デスクトップを公開する場合は Desktop を選択 |
|
Scaling Details | default | |
IAM Role | 設定しない |
- Configure Network
- フリートをデプロイするサブネット、アタッチするセキュリティグループを設定する
- イメージのカスタマイズ時と同様、既存のプライベート・サブネットを指定した
Default Internet Access | Off | |
Subnet | 既存のプライベート・サブネット | |
Security Group | default |
[Create] ボタンをクリックするとフリートのデプロイが開始される。
AWS Console: AppStream2.0 ➡ Fleets
30分程度でフリートのステータスが Starting ➡ Running に遷移する。
- フリートタイプ = On-Demand の課金について
5. Stackの設定を作成する
公開するフリートとログインポータル設定、ユーザレベル設定のセットをStackと呼ぶ。
Citrix XenAppでいうデリバリーグループに相当。
AWS Console: AppStream2.0 ➡ Stacks ➡ Create Stack
- Stack Details
- ログインポータルに表示される名前、先の手順でデプロイしたフリート、アクセス経路を指定する
Name | fumidai_for_myvpc |
Display name | Fumidai for MyVPC ログインポータルに表示される名前 |
Fleets | fumidai_win2019_fleet |
Endpoint | Internet |
Embed Appstream2.0 | 何も設定しない 自前のWebサイトにAppStreamの画面を埋め込む時に使うらしい |
- Enable Storage
- ユーザのログイン時、フリート内の公開サーバはランダム選出される(Floating)
- Citrix XenApp等ではNASにホームフォルダを用意するが、AppStream2.0の場合はS3を使用可能
- S3バケットは自動的に作成される
- Google Drive、MS OneDriveの指定も可能
- ログアウト後もユーザ個別のアプリ設定を保持したい場合は、後述の User Settings で Enable application settings persistence をOnにする
Enable home folders | On |
- Use Settings
Clipboard | Copy and paste Copyのみ、Pasteのみ、両方無効が選択可能 |
File transfer | Upload and Download Uploadのみ、Downloadのみ、両方無効が選択可能 |
Print to Local device | Disabled |
Password sign in for Active Directory | Enabled |
Smart card sign in for Active Directory | Disaled |
Enable application settings persistence | On |
Settings group | fumidai_for_myvpc 複数のStackで設定置き場を共有したい場合にこのグループ名を指定する |
6. ローカルユーザを作成してStackにアサインする
公開サーバログオン時のユーザ認証は、AppStreamのローカルユーザ、自身の所有しているActive Directory、SAMLのいずれかを構成出来る。
クライアントの接続元IPでアクセス制限を実行したい場合は、SAMLのIDプロバイダ側で制御する必要がある。例えばAzure ADの条件付きアクセス。
AppStreamのローカルユーザを使用する。
AWS Console: AppStream2.0 ➡ User Pool ➡ Create User
Emailは実在のメールアドレスを指定すること。
ユーザを作成したら、前のステップで作成したStackにアサインする。
AWS Console: AppStream2.0 ➡ User Pool ➡ ユーザを選択 ➡ Action ➡ Assign stack
アサインしたStack用のログインポータルのURLがユーザのEmailに送信される。
初回ログイン時はパスワードの初期化を要求される。ログイン後、公開アプリケーションのアイコンが表示されていれば成功!