仮想マシン+Windowsの代わりにAmazon AppStream2.0を使ってみるのはどうでしょう?


My Redmine

岩石です。

さあ冬が来ますよ。いやもう来てますよ。毎年ブログに書いてますが、寒いの苦手なんです。日本って夏があんなに暑いのに、冬もすご〜く寒いんですよね。寒暖差のおかげで良いこともたくさんありますが、やはり冬は家に篭もりがちです。お酒買い込んで冬眠準備しようと思います。

Windowsでしか動かないアプリケーションをMacで!

Jw_cadとFavBinEditを表示したAmazon AppStream2.0の画面

弊社では業務用端末(PC)はすべてMacを使用しています。また私はプライベートもすべてMacです。

Windows環境のみ動作するアプリケーションには定番的なものがあり、macOS上では動作しないため困ったり悩んだりすることが稀にあります。今まではParallels Desktopを使用して割と便利に使い分けしてましたが、macOSに対応したアプリケーションが増えてきたことや、さまざまな作業の流れをあまりネイティブアプリケーションに依存しないようにしたことでWindows(およびWindows OS上でしか動かないアプリ)を使うシーンが段々と少なくなってきました。

とはいえWindowsでしか動かない優れたアプリケーションはたくさんあります。

などなど。

他にもメールソフトやテキストエディタも定番アプリがいくつかありますね。

あとMicrosoft WordはmacOS版も存在しますが、Wordの原稿用紙モードはWindows版のみの機能です。お子様が家族にいらっしゃる場合使うことがあるかもですね(我が家では使うシーンがありました)。

今回めったに使用しないが必要という状況の解決策として Amazon AppStream2.0(以下AppStream) を使用してみることとします。AppStreamは専用アプリでの接続も可能ですがWindows用のクライアントアプリのみリリースされていますので、今回はWebブラウザでの利用を前提としています。

Amazon AppStream 2.0

Amazon AppStream 2.0(デスクトップアプリをブラウザへ安全に配信)| AWS

Amazon AppStream 2.0 は、あらゆる場所から非永続的なデスクトップとアプリケーションへのセキュアで信頼性の高い、スケーラブルなアクセスを提供します。

AppStreamを簡単に説明すると、アプリを仕込んだインスタンスを待機させ、アプリケーションを遠隔で利用するAWSのサービスです。

似たようなAWSのサービスで Amazon WorkSpacesがありますが、もっとも大きな違いとしてはWorkSpacesはOSのデスクトップ環境の遠隔利用(≒ Remote Desktop)であり、AppStreamはアプリケーションの遠隔利用という違いとなります。

管理された範囲内での使用であることや使用者はOS管理権限を持っていないことなどから誤用や不正な活動への対策にも有効と感じます。また比較するとコスト的にもメリットがあるようです。

今回のレシピ

実際に環境を構築してみました。今回はJw_cadとFavBinEditの環境を作ってみます。

Jw_cadはWindows OSで動作する2次元CADの定番のフリーソフトです。2次元CADには有償のものも含め多数優れたソフトウェアがありますが、フリーソフトであることや自由度の高さなどからJw_cadのファンも多く、業務での利用も多いようです。過去にはmacOSへの移植が有志により行われましたが、macOSの64bit化完全移行により未対応となっため現在はWindows専用アプリケーションとなってます。

バイナリエディタもWindows OSでは定番物がいくつかありますが、今回はFavBinEditを選んでみました。大きなファイルに対応していることや多くの文字コードへの対応など使いやすい機能があります。

AppStream利用の概要


クラウドあるあるの話なのですが、詳細な設定手順やスクショはすぐに意味がなくなるので要点だけまとめようと思います。

AppStreamを使用する手順としては、

  1. Image Builderで起動イメージを作成
  2. 作成したイメージから動作スペックなどを決めてFleet(稼働インスタンス)を作成
  3. 使用するFleetや動作環境などについてStackで定義

となります。

またAppStreamの設定全般ですが、OSを起動したり設定適用した内容のスナップショットを作成したりする場面が結構あり、これらの処理はAWS側で行われるため設定作業のたびに10〜20分程度の待ち時間が発生します。

Image Builder

公式の手順は下記です。
Image Builder - Amazon AppStream 2.0

Image BuilderがAppStreamの肝となるところです。AWS側で準備されているOSのイメージをベースにして利用するアプリケーションのインストールやOSの環境を整えます。最初の作業なのですが、ベースOSの起動となるので少し待ち時間が発生します。やりたいことが頭にあるので早く取り組みたいと思いますが、ゆったりした気持ちで待ちましょう。

ここでテーマとなるのは日本語化(ローカライズ)とImage Assistantの使い方、ユーザの切り替えの3点だと思います。

ローカライズについては、AppStream 2.0 ユーザーのためのデフォルトのリージョン設定を構成する - Amazon AppStream 2.0の内容で対応されることをお勧めします。「AppStream Windows 日本語」などで検索するといくつか記事を見つけることができますが、WindowsのOSバージョンなどによって同じように対応できない場合も結構あります。まずはAWSの記事に従い設定して、うまくいかない場合検索で見つけたサイトの情報を参考にするのが良いと思います。

ユーザの切り替えについて、

という考え方で選択することになります。

Image Assistant中でもこのユーザ切り替えをうまく使用して設定をしてください。

アプリケーションのインストールパスについては注意が必要です。インストールはAdministratorで行うのですが、Fleet使用ユーザ(Test User相当)は違うユーザ権限のためファイル・ディレクトリのアクセス可否が異なります。アプリケーションは Program Files 等の適切なディレクトリにインストールするのがわかりやすいです。

設定が終わるとイメージ作成のため20分程度待ち時間となります。

AWSの多くのサービスと異なり、AppStreamではサービスの設定段階というべきImage Builderを使用している時間も課金対象となります。スムーズに間違いなく設定するためには、慣れが必要と感じます。何度か練習してみるのも良いと思います。

Amazon AppStream 2.0 のImage Assistantウィンドウ

Fleet

FleetとStackについての公式のガイドはこちらに記載されています。
フリートとスタック - Amazon AppStream 2.0

Fleet設定では利用するイメージを動作させるインスタンスのスペックや同時利用についてのキャパシティ関連の設定などについて定義します。インスタンスを動作させるネットワークの設定もしますが、既に利用をしているVPC・サブネットの指定も可能です。社内に閉じたDBを使用するアプリケーションなどには不要なアクセスを制限することができるのでありがたいです。実際に使用する環境についての設定になりますので、きちんと検討して定義しましょう。

またOSの更新やアプリケーションの追加などイメージを変更する場合、Fleetで新しいイメージからインスタンスを作成します。

実際に動作するインスタンスをデプロイするため、設定変更などの場合や新イメージへの変更などの場面も含め、ここでも待ち時間が発生します。

Stack

Fleetインスタンスに対するコピペの制御やファイル保管用ストレージなどの動作環境に関する内容、ログなどについての設定を行います。権限や環境を使い分けるときは、同一のFleetについて複数のStackを作成することになります。

Active Directoryとの連携もできるようで、その機能設定の項目もありますが、私はActive DIrectoryを使用していないため試していません。もしかすると利用するためにはFleetもActive Directoryに参加する必要があるのかも...(未確認)。

G-Suite(現在の名称は Google Workspace)やOneDriveとの連携項目もあるのでファイル保管など他のクラウドと連携して使いやすくなるかもしれません。今回はWindowsアプリをMacで動かすことがテーマなので割愛します。そのうち試してみます。

利用可能なアプリケーションが表示されたAmazon AppStream 2.0の画面

認証関連

ブラウザ利用での認証に関する公式ドキュメントは下記になります。
AppStream 2.0 ユーザーの接続方法を構成する (ウェブブラウザ) - Amazon AppStream 2.0

認証についてはUser poolで利用者を定義しID・パスワードでの認証かストリーミングURL(期限付きのユニークなURL)、SAML2.0でのIDフェデレーションに対応しています。今回の利用想定ではUser poolかIDフェデレーションが適していると思われますが、安全面を考えると可能なら後者を利用された方がよいと感じます。

User poolを使用する場合、利用者のメールアドレスを設定しStackを割り当てます。登録したメールアドレス宛にログインURLが書かれたメールが届きます。

IDフェデレーションで使用する場合はAppStreamの画面からではなく、IAM(Identity and Access Management)で目的のStackに対しての許可をIdpに対して設定することになります。

シングルサインオンアクセス (SAML 2.0) - Amazon AppStream 2.0

私はプライベートでGoogle WorkSpace Business Starterを使用しているのでGoogleへのログインで認証連携しています。Googleでのログインを使ったAppStreamへのIDフェデレーション設定についてはクラスメソッドさんの記事がとてもわかりやすいです。
「AppStream 2.0」でSAML 2.0を使ったIDフェデレーションを設定する (Google Cloud Identity編) | DevelopersIO

料金

今回の目的は時々しか使用しないアプリケーションのために仮想マシンアプリとWindows OSを導入することの代替案としてのアイデアです。

AWSの料金についてはこちら(料金 - Amazon AppStream 2.0 | AWS)に詳細が記載されてますが、ちょっとややこしいです。試算のためのツール(表計算シート)も公開されています。
Amazon AppStream 2.0 releases a simple pricing tool | Desktop and Application Streaming

ただし今回想定する利用案の計算にはマッチしません。実際に積算してみることにします。(ネットワーク使用料は想定が難しいことや、全体金額への影響が小さいので省きます)

仮定条件として

と想定すると下記の通りです。

項目 数量 単価 金額
Image Builder 1h 0.12USD 0.12USD
Fleet 5h 0.12USD 0.6USD
Fleet (On-Demand Stopped) 715h (24*30-5) 0.029USD 20.735USD
利用ユーザ 1人 4.19USD 4.19USD
合計 25.645USD

ここのところ為替相場が不安定でレートをどれぐらいで計算するのが良いかわかりませんが、高め(円安)でみると毎月4000JPY程度にはなりそうです。仮想マシンアプリケーションはOSSで無料のOracle VirtualBoxという選択肢もあるので思ったより高いと感じますね。目につくのはオンデマンドFleetの停止中(On-Demand Stopped)の金額ですね。月額のほとんどの金額はこの内容です。使用していなくてもオンデマンドですので待機中はそれなりの金額がかかるようです。

本当に稀にしか使用しないのであれば、通常Fleetは停止しておき、使用する際にAWSマネジメントコンソールかAWS CLIなどを使用してFleetを起動するとFleet (On-Demand Stopped) の費用を抑えることができます。起動にはやはり時間がかかり、20分ぐらい(?)待つ必要がありますが待機中の時間を減らすことでオンデマンド停止中インスタンス料金の削減ができます。

上記の条件について5時間の利用が月に1回として、使用前後に1時間を追加と想定すると

項目 数量 単価 金額
Image Builder 1h 0.12USD 0.12USD
Fleet 5h 0.12USD 0.6USD
Fleet (On-Demand Stopped) 2h (1*2) 0.029USD 0.058USD
利用ユーザ 1人 4.19USD 4.19USD
合計 4.968USD

5USDを下回り、レートを高めにみても750JPY程度となります。これぐらいの金額なら選択肢の一つとして考えてみても良さそうですよね?ちょっと面倒くささが残りますが、コストが問題ならこういうやり方もありかな?

あ、使用後にはちゃんとFleetインスタンスを停止しないといけないですね。こういうトラップへの対策は別途考える必要がありますね。

業務で複数名が使用することを考えると決められた時刻に起動や停止を組み込んでも良さそうですね。EventBridgeでできそうですが、どうかな(未検証)?

解決できない内容

WindowsアプリをMacで使用することができるようになりましたが、このやり方では使えないアプリやシーンもあります。

例えば下記の内容などになります。

こういった物理的な制約やライセンス的に想定されていない使用形態などが障壁になる可能性があります。どうしてもそのアプリでないと困るのであれば、なんだかんだで仮想マシンとWindows OSの導入が一番楽だと感じます。管理コストや物理的な面で問題なければ中古WindowsPCの購入がかえって一番安いかもしれないですね。

ですが、無駄に物理的な管理対象を増やさずアプリのみ使うというアイデアは面白いと感じました。管理コストを考えるとTCO的には安くつくかもしれません。また他の用途・課題にも対応できそうです。

次回予告?

ここまで一般的なAppStreamの使い方の想定で書きましたが、AppStreamにはElastic Fleetという動作イメージを作らないサーバレス(?)な形態のサービス提供も追加されていました。OSの起動イメージはAWS提供のものを使用し、Amazon S3に配置したアプリケーションファイルをマウントして起動するタイプのFleetとなります。

実はまだ検証しておらず、ローカライズとかインストーラータイプのアプリケーションへの対応など気になります。

特に取り上げるトピックがない限り、次回のブログ(来年2月ごろ)に使ってみた感想など書いてみようと考えています。

【スタッフ募集中】
弊社ではAWSを活用したソリューションの企画・設計・構築・運用や、Ruby on Rails・JavaScriptフレームワークなどを使用したアプリケーション開発を行うスタッフを募集しています。詳細はこちら
弊社での勤務に関心をお持ちの方は、知り合いの弊社社員・関係者を通じてご連絡ください。

My Redmine

こちらの記事もオススメです!
Dockerを使うとRedmineのテストが少しだけ楽になりました
RedmineのテストにDockerを使うことで、仮想マシンの構築作業が不要になり楽になりました。
RubyWorld Conference 2022 に出展
3年ぶりにオフライン開催されたRubyWorld Conference 2022 に出展しました。
オープンソースカンファレンス 2022 でセミナー発表しました
OSC 2022オンラインFallで「はじめてのプロジェクト管理ツール〜Redmine超入門〜」を発表。
Redmineで構築されている国民年金基金連合会の「他年金調査 事業所回答システム」を調べてみた
Redmineを利用して構築されている国民年金基金連合会の「他年金調査 事業所回答システム」を調べてみました。
RedmineのSettingクラスのコードを読んでみる
RedmineのSettingクラスの実装があまり見ない感じで面白かったので紹介します。
ファーエンドテクノロジーからのお知らせ(2024/04/24更新)
入門Redmine 第6版 出版記念企画セミナー「Redmineのアクセス制御」【2024/5/30開催】
入門Redmine 第6版(2024年3月23日発売)の書籍から「Redmineのアクセス制御」について解説します。
My Redmine 初回ご契約で「入門Redmine 第6版」プレゼントのお知らせ
Redmineのクラウドサービス「My Redmine」を初めてご契約いただいたお客様にRedmine解説書「入門Redmine 第6版」を進呈いたします。
2024年度ブランドパートナーに島根県在住のモデル ユイさんを継続起用
ユイさん(モデルスタジオミューズ所属)をファーエンドテクノロジーの2024年度ブランドパートナーとして継続して起用します。
My Redmine スタンダードプランおよびAdminサポートデスクプランの料金改定のお知らせ【2024年4月ご利用分より】
2024年4月ご利用分より、My Redmine スタンダードプラン(民間企業・個人向け及び官公庁向け)とAdminサポートデスクプランの料金を改定いたします。
Redmineの最新情報をメールでお知らせする「Redmine News」配信中
新バージョンやセキュリティ修正のリリース情報、そのほか最新情報を迅速にお届け