Amazon AppStream 2.0のイメージをコマンドラインから作成する
Amazon AppStream 2.0 のイメージビルダーには Image Assistant CLI(image-assistant.exe
)というプログラムがインストールされています。
このプログラムを使用し、コマンドラインからカスタムイメージを作成する方法を紹介します。
前提
イメージビルダーは、2019 年 7 月 26 日以降にリリースされたバージョンの AppStream 2.0 エージェントを使用する必要があります。
やってみた
次の手順でイメージを作成します。
- イメージビルダーを起動
- イメージビルダーに必要なアプリケーションをインストール
- アプリケーションのメタデータを登録
- イメージを作成
- フリートにイメージを紐付け
- アプリケーションの動作確認
インストールするアプリケーションには SSH クライアントの PuTTY を利用します。
また、イメージビルダー内のコマンドライン操作には PowerShell を利用します。
1. イメージビルダーを起動
イメージビルダーを起動し、インスタンスに Connect し、Administrator でログインします。
2. イメージビルダーに必要なアプリケーションをインストール
PuTTY をダウンロードします。
PS C:\Users\ImageBuilderAdmin> Invoke-WebRequest ` -Uri https://the.earth.li/~sgtatham/putty/latest/w64/putty-64bit-0.72-installer.msi ` -OutFile putty-64bit-0.72-installer.msi
インストールを実行します。
PS C:\Users\ImageBuilderAdmin> msiexec /i putty-64bit-0.72-installer.msi ` /passive /l*v install-putty-64bit-0.72-installer.msi.log PS C:\Users\ImageBuilderAdmin> dir 'C:\Program Files\PuTTY\' Directory: C:\Program Files\PuTTY Mode LastWriteTime Length Name ---- ------------- ------ ---- -a---- 7/14/2019 8:59 AM 1471 LICENCE -a---- 7/14/2019 9:01 AM 327552 pageant.exe -a---- 7/14/2019 9:01 AM 680856 plink.exe -a---- 7/14/2019 9:01 AM 688504 pscp.exe -a---- 7/14/2019 9:01 AM 704392 psftp.exe -a---- 7/14/2019 8:59 AM 295163 putty.chm -a---- 7/14/2019 9:01 AM 886144 putty.exe -a---- 7/14/2019 9:01 AM 404864 puttygen.exe -a---- 7/14/2019 8:58 AM 1573 README.txt -a---- 7/14/2019 8:58 AM 104 website.url
PuTTY は C:\Program Files\PuTTY\
以下にインストールされています。
3. アプリケーションのメタデータを登録
add-application
API でアプリケーションを登録します。
# アプリケーションを登録 PS C:\Users\ImageBuilderAdmin> image-assistant add-application ` --display-name PuTTY ` --name PuTTY-0.72 ` --absolute-app-path "C:\Program Files\PuTTY\putty.exe" ` --working-directory "C:\Program Files\PuTTY" { "status": 0, "message": "Success" } # 登録済みアプリケーション一覧を確認 PS C:\Users\ImageBuilderAdmin> image-assistant list-applications { "status": 0, "message": "Success", "applications": [ { "Name": "PuTTY-0.72", "AbsoluteAppPath": "C:\\Program Files\\PuTTY\\putty.exe", "DisplayName": "PuTTY", "AbsoluteIconPath": "C:\\ProgramData\\Amazon\\Photon\\AppCatalogHelper\\AppIcons\\3de069ab-6079-4399-af8f-745920ff9a48.png", "WorkingDirectory": "C:\\Program Files\\PuTTY", "AbsoluteManifestPath": "C:\\ProgramData\\Amazon\\Photon\\AppCatalogHelper\\AppManifests\\9d3bfe1f-89bf-47d0-9267-42c0ae93b146.txt" } ] }
--display-name
はユーザーが起動アプリケーションを選択するときに利用され、--name
はイメージビルダー内のアプリケーション管理に利用されます。
そのため、--display-name
は汎用的な名前にし、--name
にはバージョンも含めた名前にすると管理しやすいでしょう。
4. イメージを作成
create-image
API でイメージを作成します。
PS C:\Users\ImageBuilderAdmin> image-assistant create-image ` --name CLI20191001 ` --description "CLI Image Created At 20191001" ` --use-latest-agent-version { "status": 0, "message": "Success" }
イメージ名はリージョン内でユニークである必要があります。
--name
にはイメージ作成日時を含めた名前にすると管理しやすいでしょう。
このコマンドを実行すると、イメージビルダーインスタンスはステータスが RUNNNING
から SNAPSHOTTING
に遷移し、ユーザーはログアウトします。
イメージビルダーのステータスは、最終的には STOPPED
になります。
同時に、作成命令を行ったイメージが Image Registry にPENDING
で作成されているのを確認できます。
このステータスが AVAILABLE
になると、利用可能です。
残念ながら、ステート遷移時にイベントは発火されないようです。
5. フリートにイメージを紐付け
最後に作成したイメージをフリートに紐付けます。
コンソールのフリート編集画面からイメージを選択することもできますし、以下のように update-fleet
API で更新することも可能です。
# フリートに紐付いたイメージを確認 $ aws appstream describe-fleets --name CLI { "Fleets": [ { "Arn": "arn:aws:appstream:eu-central-1:123456789012:fleet/CLI", "Name": "CLI", "DisplayName": "CLI", "Description": "CLI Fleet", "ImageName": "CLI20190908", "ImageArn": "arn:aws:appstream:eu-central-1:123456789012:image/CLI20190908", ... } ] } # フリートのイメージを「CLI20191001」に変更 $ aws appstream update-fleet \ --name CLI \ --image-name CLI20191001 { "Fleet": { "Arn": "arn:aws:appstream:eu-central-1:123456789012:fleet/CLI", "Name": "CLI", "DisplayName": "CLI", "Description": "LI Fleeta", "ImageName": "CLI20191001", "ImageArn": "arn:aws:appstream:eu-central-1:123456789012:image/CLI20191001", ...
6.アプリケーションの動作確認
ストリームにアクセスすると、追加したアプリケーション PuTTY が利用可能になっています。
改善ポイント
今回はイメージを作成するミニマムな手順のみをお伝えしたため、いくつかの改善ポイントを紹介します。
設定をカスタマイズ
イメージ作成時に、アプリケーションや Windows の設定を行ったり、アプリケーションの起動パフォーマンスを最適化することも可能です。 詳細は、次のドキュメントを参照ください。
デフォルトのアプリケーションおよび Windows 設定とアプリケーション起動パフォーマンス - Amazon AppStream 2.0
リモートサーバーからイメージ作成
今回はイメージ作成作業をイメージビルダー内から行いました。
イメージビルダーをリモートから管理し、リモートからコマンドを実行することも可能です。 詳細は、次のドキュメントを参照ください。
最後に
Image Assistant CLI を利用して、コマンドラインから AppStream 2.0 のイメージを作成する方法を紹介しました。
イメージ作成手順をスクリプト化すると、再現性の確保や情報の共有が容易になるほか、アプリケーションの更新作業のように、同じ操作を定期的に繰り返すケースで有効活用できます。
今後、SSM 経由で外部からイメージビルダーにコマンドを投入できたり、イメージ作成完了時にイベント通知されるようになると、イメージ作成パイプラインをより構築しやすくなると思います。
参考
- Amazon AppStream 2.0 Adds CLI Operations for Programmatic Image Creation
- Creating an image programmatically with AppStream 2.0 Image Assistant CLI operations | Desktop and Application Streaming
- Create Your AppStream 2.0 Image Programmatically by Using the Image Assistant CLI Operations - Amazon AppStream 2.0