Amazon AppStream 2.0 Elastic Fleets 好印象!


My Redmine

岩石です。このブログの最後の方で20円という言葉がでてきます。20円ってどれぐらいと思って、タバコの値段を思い浮かべたのですが、最近は1本25円以上になってますね。昔々20代前半にタバコを吸ってましたが1本が25円もすると思うと吸っていなかったんだろうなと思いました。

でもお酒は以前より高いものを好むようになり、案外コスト高かもしれません。きちんと計算してないですが、あまりちゃんと計算したくない気持ちもあります。嗜好品にはコストって関係ないのかもって再認識しました。

今回は前回記事(仮想マシン+Windowsの代わりにAmazon AppStream2.0を使ってみるのはどうでしょう?)の続きです。

Amazon AppStream 2.0 Elastic Fleets

前回記事の最後にこんなことを書きました。

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

ご紹介したAmazon AppStream 2.0(以下AppStream)の一般的なFleetは、OSを含めた動作イメージを作成しそれを展開して動作するものでした。 これに対してElastic Fleetsは動作させたい追加アプリケーションなどが含まれた仮想ディスクイメージ(VHD)や動作スクリプトをAmazon S3(以下S3)に配置し関連づけることで動作させることになります。

Elastic Fleetsに関するAWSのドキュメントはElastic フリート用の App Block とアプリケーションを作成して管理する - Amazon AppStream 2.0になります。このドキュメントは公式の情報であり正しいのですが、セットアップスクリプト(S3に配置したVHDや起動するアプリケーションへの関連付けを行う処理を記述したもの)に関しての内容が詳しく触れられていません(2023年3月6日現在)。

このため私はクラスメソッドさんの記事を参照して取り組みました。本当にいつも詳しい解説をありがとうございます。
[アップデート] AppStream 2.0 で新しいタイプのフリート Elastic Fleets が追加されました | DevelopersIO

今回のレシピ

今回はアプリケーションよりはElastic Fleetsについての検証がメインなので、シンプルにインストーラータイプでないものを一つだけ検証することとしてTera Termを選びました。
Tera Term Open Source Project

Tera Termはとても有名なのでアプリケーションに関する説明は省きます。以前の職場ではWindowsを使用してネットワーク機器の設定などをさせてただいていたのでとても活用させていただきました。PCからLinuxサーバのメンテナンスなどをする際にもTera Termがデフォルトアプリでした。macOSを使用するようになってからもTera Termのようなアプリケーションが存在しないか探していたぐらい好んで使用していたアプリケーションです。

VHDの作成

通常のAppStreamではImage Builderを起動し動作マシンイメージを作成するのですが、Elastic FleetsではマウントするVHDを作成することになるので、専用の環境を用意したり起動する必要はありません。ただし私はWindows環境を持ってないので今回はAmazon EC2(以下EC2)でWindowsインスタンス(Windows Server 2022)を作成しました。実際にElastic Fleetsで動作する基盤はWindows Server 2019のようですが、互換性などに問題がなければVHDは他のバージョンのWindowsで作成しても問題ないと思います。作成したVHDはS3にアップロードしますので、もしWindows PC環境をお持ちでしたらその環境で作成されるのが良いと思います。

今回はAWSのドキュメントに従いMicrosoft diskpart ユーティリティを使用してVHDを作成しました。 そしてVHDをZドライブにマウントし、Tera TermのZIPを展開したものを配置しました。

セットアップスクリプトの作成

セットアップスクリプトは実際のFleetが動作する手順などがまとめられたものになります。Elastic Fleetsでは基盤とそれが動作する仕組みのみ提供され、どのように起動するかやフォルダ関連付けなどについてはセットアップスクリプトに記載する必要があります。

これについてはクラスメソッドさんの記事を参考にしました。Windows Powershellのスクリプトです。

$VhdxPath = "C:\AppStream\AppBlocks\Teraterm\file.vhdx"
$MountPoint = 'C:\Program Files\teraterm\'
if (-not (Test-Path -LiteralPath $MountPoint)) {
    mkdir $MountPoint
}
$Vhdx = Mount-DiskImage -ImagePath $VhdxPath -StorageType VHDX -NoDriveLetter
Get-Disk -DeviceId $Vhdx.Number | Get-Partition | Add-PartitionAccessPath -AccessPath $MountPoint

内容としては、

  1. VHDの定義
  2. マウントポイントの定義
  3. マウント処理
  4. マウントポイントへVHDをマウント

という内容です。これにより作成したVHDを C:\Program Files\teraterm\ にマウントします。

VHDのパスですが、 C:\AppStream\AppBlocks\Teraterm\ の部分についての説明は、上記 VHDの作成 のところで示したAWSのドキュメントの中程「VHD 用のセットアップスクリプトを作成する」に書かれています。これによりこの後作成するApp Blockでは Teraterm というブロックを作成することになります(※名称を合わせる必要がある)。

S3へのアップロード

作成したVHDなどをS3にアップロードします。 アップロードするファイルは次の3つです。

  1. 作成したVHD
  2. 前述のセットアップスクリプト
  3. ロゴとして表示するアイコン画像

今回は使用しませんが、利用者のセッションが開始されるタイミングと終わるタイミングにスクリプトを実行することができるセッションスクリプトという機能があり、そのスクリプトを使用する場合も同様にアップロードします。 セッションスクリプトの設定については下記を参照してください。
セッションスクリプトを使用して AppStream 2.0 ユーザーのストリーミングエクスペリエンスを管理する - Amazon AppStream 2.0

アップロード先のS3へはAppStreamからのアクセス許可設定が必要です。設定するバケットポリシーについてはこちらの一番下に書かれています。今回検証用で継続して利用するわけではないので下記のようにリソースを省略して記載しました(警告は出ますが設定可能です)。リソースを特定して設定するのが望ましいと感じますので、実際に利用するものであればAWSのドキュメントに従ってオブジェクト(ファイル)を指定した方が良いと思われます(多くても4つですし)。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AllowAppStream2.0ToRetrieveObjects",
            "Effect": "Allow",
            "Principal": {
                "Service": "appstream.amazonaws.com"
            },
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::[対象バケット名称]/*"
        }
    ]
}

Applications 設定

App Block 作成

次にFleetsが動作する環境設定ともいえるApp Blocksの設定をします。ここで Setup script executable 欄に設定する値はセットアップスクリプトを実行するコマンドになりますので、今回はWindows Powershellを指定します。また Setup executable arguments のところにセットアップスクリプトのファイルを指定します。

Application 作成

実際の動作に関連する設定はApplicationsにて行います。具体的にはAppStreamの起動画面でのアイコンの選択、アプリケーションの起動設定、そして利用するApp Blockです。

AppStream Elastic Fleetsでの動作に関する設定はおおよそこのApp BlocksとApplicationsとなりますが、設定する項目が何を設定する場所か理解するとそれほど困る内容はありません。

Fleets・Stacks 設定

Fleet 作成

そしてFleetの設定をします。おおよその設定内容は前回の記事と同じです。設定項目の中でFleet TypeについてElasticを選択するとApplicationの選択など特化した内容に項目が変わります。

運用開始後にApplicationの設定を変更する場合は Fleetの Assigned applications についてAssociateしたりDisassociateしたりしてStackやFleetをSTOPさせずに変更することができます。

Stack 作成

最後にStackを設定します。Stack設定については一般的なAppStreamの設定と同じです(認証についても同様)。Fleets、Stacks共に設定にそれほど悩む内容はないのかなと思われます。

接続

User poolでユーザにStackをアサインする方法やSAMLフェデレーション設定などの準備が終われば、指定のURLにアクセスするとTera Termを利用することができるようになります。感覚的なものなのかわかりませんが、起動が早く感じます。スポット的な使用であれば全く問題ないと思います。

料金

前回も料金の話を書いたので今回も書きます。Elastic FleetsはImage Builderを使用せず、またFleetを占用しないので料金体系がややこしいAppStreamの中では比較的シンプルです。待機中は課金されず使用中のみ規定の課金が発生します。

前回の条件に合わせてみます。

通常利用案(前回記事案)

項目 数量 単価 金額
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

コスト削減案(前回記事案)

項目 数量 単価 金額
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

Elastic Fleets使用

※VHD作成のEC2料金、VHD等配置のS3費用は含めていません

項目 数量 単価 金額
Image Builder (使用なし)
Elastic Fleet 5h 0.18USD 0.9USD
利用ユーザ 1人 4.19USD 4.19USD
合計 5.09USD

条件付き利用方法と同じ(わずかに高い)程度になりましたが、特別な運用をする必要もなく普通に使えてこの金額なら良いのではないでしょうか。コストが下がった大きな理由としては待機中のFleetが課金対象にならないこととImage Builderを使わなくても動作環境が作成できることがあります。待機中のFleetが課金対象にならないのは大きなメリットで、単価は高いものの使用時間が少ない利用形態であればこちらの方が有利になります。

VHD作成コストについて、Windows PCを持っていないという方のための話が元々の想定でしたので今回はEC2でWindows Serverを立ち上げましたが、スポットインスタンスを使用することでかなり削減できると思います(Windows PCを持っている人ならそもそもこの費用はかからない!)。

費用に含めていないEC2とS3についての課金の参考額ですが、

という内容から、毎月メンテナンスしたとしても毎月0.125USD以下(高めに見積もっても20円以下)の追加コストになりそうです。

ローンチ後の管理はアプリケーションを更新したVHDをS3に置き換えるだけなので、EC2の起動時間もわずかと思われます。管理作業も楽チンですね。

まとめ

AppStreamの話を2回に分けて書きました。今回はWindowsOS機器を保有していない場合のアプリケーション利用案として考えてみましたが、テレワークでの活用やアプリケーション利用者・操作対象への接続元の限定などセキュリティ対策などの観点でも有効です。

Elastic Fleetsはドキュメントが整備されてない面もあり、とっつきにくくわからないことも多かったのですが、クラスメソッドさんのブログなどを参照しながら検証をしてみて、一般的なFleetsよりもシンプルでわかりやすく、また管理も楽なので「これはイイ!」という感想です。どちらを使うべきかという点については、メンテナンスを含めたコストで選ぶのが良いと思います。個人的にはメンテナンスが簡単そうなのでElastic Fleetsがお勧めです。

Elastic Fleetsの利用記事が少ないので、今回の内容が皆さんの参考になると幸いです。

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

My Redmine

こちらの記事もオススメです!
仮想マシン+Windowsの代わりにAmazon AppStream2.0を使ってみるのはどうでしょう?
MacでWindowsアプリを動作させるアイデアの一つとしてAppStreamを使ってみました。
伝わる文章の書き方を学ぶため「ビジネス文章力アップ講座」を受講しました
サポート業務の品質を向上のためビジネス文章力アップ講座を受講。
Gitのローカルブランチの削除を簡単にした話
ローカルブランチが溜まり気味なのが悩み。削除コマンドをエイリアスに設定し簡単に削除できるようにしました。
RedmineのREST APIを活用してプロジェクトメンバーやロール、公開設定などのレポートを作成しています
Redmineのユーザーや権限など自分たちが必要な情報を扱いやすい形式にまとめたい場合、REST APIを利用するのがお勧めです。
AWS Glue のクローラーを使用して Application Load Balancer(ALB)のログからデータカタログを作成し、Amazon Athena で検索してみた
Application Load Balancer のログが見にくいので、Glue と Athena を利用してクエリーでログを検索できるようにしました。
ファーエンドテクノロジーからのお知らせ(2024/05/09更新)
2024年5月11日 オライリー本の全冊公開日のお知らせ(もくもく勉強会も同時開催)
ファーエンドテクノロジーが所蔵するオライリー本(全冊)公開日のご案内です。公開日には「もくもく勉強会」も同時開催します。
入門Redmine 第6版 出版記念企画セミナー「Redmineのアクセス制御」【2024/5/30開催】
入門Redmine 第6版(2024年3月23日発売)の書籍から「Redmineのアクセス制御」について解説します。
My Redmine 初回ご契約で「入門Redmine 第6版」プレゼントのお知らせ
Redmineのクラウドサービス「My Redmine」を初めてご契約いただいたお客様にRedmine解説書「入門Redmine 第6版」を進呈いたします。
2024年度ブランドパートナーに島根県在住のモデル ユイさんを継続起用
ユイさん(モデルスタジオミューズ所属)をファーエンドテクノロジーの2024年度ブランドパートナーとして継続して起用します。
Redmineの最新情報をメールでお知らせする「Redmine News」配信中
新バージョンやセキュリティ修正のリリース情報、そのほか最新情報を迅速にお届け