外部へ RDP が出来ない環境から、EC2 に RDP したいときに使える AppStream 2.0
これから AWS を使ってみようと試したところ、社外ネットワークへの RDP や SSH がブロックされていて接続できない! ってご経験ないでしょうか。私は前職でそういう経験あります。。
ある程度 AWS が社内環境で普及しているなら、Site-to-Site の VPN を設置してもらえばよいのですが、個人レベルで検証しているときに「社内ネットワークとつなぎたいんですが、、」ってなかなか言いにくかったり、面倒な手続きに巻き込まれてしまったりで億劫になりますよね。。
今回は、そんなときに使える AppStream 2.0 のご紹介です。
もちろん AppStream 2.0 以外の選択もあるかと思いますので、あくまで選択肢の1つとしてお考えください。
AppStream 2.0 とは
AppStream 2.0 は デスクトップアプリケーション配信のマネージドサービスです。アプリケーションはストリーミング配信で利用しますので、基本的には HTTP/HTTPS での接続ができれば OK です。(Microsoft Active Directory でユーザー認証したいときは、もちろん該当ポートの開放が必要です) アプリケーション配信ってどんなもん?という方は、サンプルアプリケーション(無料)で実際にお試しいただくと良いかと思います。
また、AppStream 2.0 の基盤は AWS 管理アカウント側にあり、配信基盤からユーザーの VPC に ENI をアタッチして接続する形になります。ざっくり図にすると、以下のとおりです。
ENI をアタッチして接続しますので、パブリックセグメントをもたない EC2 に対しても接続できるという利点があります。また、AD 環境は必須ではないので仮想デスクトップサービスの Amazon WorkSpaces と比べて導入しやすいという利点もあります。
設定
導入のステップとしては、下記のとおりです。
- Image Builder でアプリケーション配信のイメージを作成
- フリートとスタックの作成
- フリート: アプリケーション配信するインスタンスの設定(インスタンスタイプ、フリートタイプ、ネットワーク、オートスケール設定など)
- スタック: フリートへのアクセス制御設定(外部ストレージ、クリップボード、ファイル転送、アプリケーション設定の永続化 など)
- ユーザー作成
詳細な手順は、過去に池田の記事がございますので、こちらを参照ください。
リモートデスクトップをイメージに含める
※デフォルトではロケール設定が英語なので、こちらの手順を参考に日本語化しておくのが良いでしょう
今回はリモートデスクトップを利用したいので、先の記事でいうと「Image Assistantの起動」の際に、以下のアプリケーションを追加します。
- %systemroot%\System32\mstsc.exe または
- %systemroot%\SysWOW64\mstsc.exe
ついでに TeraTerm もダウンロードして、インストールしたものをイメージに追加してみました。
フリート
フリートは下記のような環境で検証しました。フリートタイプはオンデマンドを選択しておくと、ストリーム配信していないときに自動的にインスタンスが停止しますので、利用具合によってはコストを抑えることが出来ます。(停止料金 $0.029/h は課金されます)その他、セッションのタイムアウトや、スケーリングポリシーはデフォルトのまま設定していますが、ここも無駄なコストを抑えるためのポイントになるので、ある程度の利用状況が把握できたら調整いただくのが良いかと思います。
項目 | 設定値 |
---|---|
Desired Capacity | 1 |
Instance Type | stream.standard.medium |
Fleet Type | On-Demand |
Maximum session duration | 960 min |
Disconnect timeout | 15 min |
Idle disconnect timeout | 15 min |
Minimum capacity | 1 |
Maximum capacity | 5 |
Scale Out Policies | キャパシティ使用率 75% 以上で 2 インスタンス追加 |
Scale In Policies | キャパシティ使用率 25% 以下で 1 インスタンス削減 |
スタック
スタックは先に作成していたフリートを指定した程度で、その他はデフォルトで設定しています。ホームフォルダとして S3 が使えるので、ファイルの受け渡しなどに重宝します。
ユーザー作成
ユーザー作成すると登録したメールアドレスにログインページのリンクと、初期パスワードがメールで通知されます。作成したユーザーに、作成したばかりのスタックをアサインします。
いざアクセス
今回は別 VPC に EC2 を準備して、以下のように HTTP/HTTPS アウトバウンドのみを許可したセキュリティグループをアタッチしました。
ではこの EC2 から AppStream に接続します。ログインすると、イメージに含めた「リモートデスクトップ」「TeraTerm」が選択できるようになっています。リモートデスクトップをダブルクリックしてストリーミングを開始します。
フリートタイプがオンデマンドの場合、セッションを開始するまでに2分以内の待ち時間が発生します。この待ち時間が許容できない場合は、オンデマンドではなく常時稼働のフリートタイプを使用してください、ただしコストはかかります。
セッションが開始されると、おなじみのリモートデスクトップの接続コンソールが起動します。フリートからは ENI で接続しているので、ここで指定するのはプライベートアドレスになります。
はい、問題なく RDP が許可されていないネットワークから、RDP を利用することができましたね!
ついでに TeraTerm も試しました。 S3 のホームフォルダに保管しておいたキーペアファイルを使って、アクセスできますね。
料金
オンデマンド料金
気になる料金ですが、一番安価なインスタンスが stream.standard.medium
が 2vCPU 4GiB メモリで $0.12/h ですので、t3.medium 以下を踏み台に使っているなら、そちらのほうがコスト的にはお安いです。また、ストリーミングセッション毎にインスタンスが割当られるので、その点もご注意ください。
オンデマンド停止中インスタンス料金
ストリーミング配信していない停止中(2分以内にセッション開始できる状態)でも $0.029/h の課金が発生します。夜間など確実に使わない時間帯はフリートそのものを停止しておくのがコスト的には良さそうです。
ユーザー料金
フリートインスタンスでストリーミングセッションを開始した各ユーザーに $4.19/月 の Microsoft RDS SAL 料金が課金されます。これは日割りされませんので、その月に一度でもストリーミングセッションを開始したら課金の対象になる点はご注意ください。(Image Builder は RDS SAL 料金は課金されません。)
学校、大学、特定の公共機関では、Microsoft RDS SAL ユーザー料金割引の対象となる場合は $0.44/月 になります。(資格要件については、Microsoft のライセンス規約およびドキュメントを参照)
Microsoft ライセンスモビリティをお持ちの場合は、Microsoft RDS CAL ライセンスを持ち込んで使用できます。持ち込みライセンスによってカバーされるユーザーについては、月額のユーザー料金が発生しません。
オートスケーリング
デフォルト値のままスケーリングポリシーを設定したときの、インスタンス状態の遷移です。In Use Capacity Average
がストリーミングセッション利用中の数(オンデマンド課金対象)になります。1のタイミングでセッションが開始されたので、Capacity Utilization Average
が向上し 2 のタイミングでしきい値の 75% を超えています。これをトリガーにスケーリングが発動し、3 のタイミングで Available Capacity Average
が 0 から 2 に増加しています。Available Capacity Average
はユーザーセッションに使用可能なアイドル状態のインスタンス数(オンデマンド停止中インスタンス課金対象)になりますので、オートスケーリングが機能していることがわかりますね。
デフォルト値のスケールアウト、スケールインの詳細は下記のようになっていました。しきい値や間隔は利用状況によって調整いただくのが良いかと思います。
踏み台インスタンスを通常時停止させているような場合、利用者に EC2 の操作権限をもたせるか、利用の都度、連絡をもらって踏み台を起動する、というような運用をされているケースもあるかと思いますが、AppStream だとセッション開始で柔軟にインスタンスが増減してくれるので管理者の負担的にも楽ですね。
さいごに
AppStream 2.0 は、NICE Desktop Cloud Visualization (NICE DCV) を使用してストリーミングしています。NICE DCV は、さまざまなネットワーク状況において高品質なアプリケーション動画をストリーミングするために使用される専用のイケイケなプロトコルです。今回は RDP という使い方でしたが、3D シミュレーションや CAD などグラフィック性能が求められるアプリケーション配信にも利用できるスゴイやつです。
なかなか便利なサービスだと思うのですが、Developers.IO ではまだ記事数が少ないので、もっと認知度をあげていきたいと思います!
以上!大阪オフィスの丸毛(@marumo1981)でした!