Microsoft Visual Studioライセンスが含まれたAMIがリリースされました。EC2上でVisual Studioを使いやすくなりました

EC2上でVisual Studioを正式に使う方法をご案内します
2022.08.03

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは。
ご機嫌いかがでしょうか。
"No human labor is no human error" が大好きな吉井 亮です。

Microsoft Visual Studio ライセンスが含まれる AMI が利用可能になりました。
Windows Server On EC2 で Visual Studio を使いたい需要は多いと思います。AWS 公式からアナウンスされたことで Visual Studio を EC2 上で使いやすくなった嬉しいアナウンスです。

提供方法

AWS Marketplace で提供されています。

AWS Marketplace Visual Studio Professional
AWS Marketplace Visual Studio Enterprise

提供バージョン

Visual Studio 各エディションは 2022 になります。(2022年8月3日時点)

Windows Server は 2022 になります。(2022年8月3日時点)

料金体系

Visual Studio ライセンスはユーザーごとの月額課金になります。原文では non-prorated と書いてあるので日割り計算は無いものと考えています。

Visual Studio ライセンスと別にユーザーごとに Remote Desktop Services (RDS) Subscriber Access License (SAL) が必要です。
AWS Marketplace Win Remote Desktop Services SAL

別途 EC2 料金が発生します。(インスタンス、EBS、ネットワーク等)
Amazon EC2 の料金

また、AWS Managed Microsoft AD でディレクトリを作成する必要があります。
東京リージョンで AWS Managed Microsoft AD Standard Edition を1ヶ月744時間利用すると約109USD~ + 転送料金になります。(2022年8月3日時点)
AWS Directory Service の料金

やってみた

前準備

EC2 インスタンスが Systems Manager と通信可能であるような構成にします。
Internet Gateway へのルートが確率されたサブネット、VPC エンドポイントを作るなどの構成にしてください。

Visual Studio 用インスタンスプロファイルの作成

ユーザーが意識しない裏側で Systems Manager が活躍してくれています。
Systems Manager が問題なく動作する権限をもったインスタンスプロファイルを作成します。
作成自体は一般化していると思うので手順は割愛します。公式ドキュメントを参照ください。Create an IAM instance profile for Systems Manager

インスタンスプロファイルには以下の管理ポリシーを紐付けてください。

  • AmazonSSMManagedInstanceCore
  • AWSMarketplaceMeteringFullAccess

AWS Marketplace でサブスクライブする

AWS Marketplace で使いたいエディションをサブスクライブします。
※ 事前に Visual Studio を使いたい AWS アカウントのマネジメントコンソールにログインしておくと楽かと思います。

以下の何れから使いたいエディションのリンクを開き Continue to Subscribe をクリックします。
AWS Marketplace Visual Studio Professional
AWS Marketplace Visual Studio Enterprise

RDS SAL も同時に必要です。以下のリンクを開き Continue to Subscribe をクリックします。
Win Remote Desktop Services SAL

Accet Terms をクリックします。

「Thank you for subscribing to this product! You can now configure your software.」を表示されることを確認します。

License Manager service-liked role の作成

AWS マネジメントコンソールで License Manager を開きます。

左側ペインの ユーザーベースのサブスクリプションユーザーの関連付け をクリックします。

ロールを作成する旨のポップアップが出ます。同意して作成します。

AWS Managed Microsoft AD を作成する

ライセンスを管理する用途のディレクトリを作成します。
手順は割愛します。公式ドキュメント Create your AWS Managed Microsoft AD directory を参照ください。
ディレクトリ作成は少々時間を要します。(20分以上)

License Manager で AWS Managed Microsoft AD をユーザーベースのサブスクリプションの ID プロバイダーとして登録

Visual Studio を利用しているユーザーをカウントするために必要な設定だと想定します。
今回提供された Visual Studio ライセンスは「ユーザーベースサブスクリプション」と呼ばれるものを利用してユーザーごとのサブスクリプションを追跡しているようです。

AWS マネジメントコンソールで License Manager に戻ります。

左側ペインの 設定 を開きます。

「AWS Managed Microsoft Active Directory」という項目が追加表示されています。
項目内にある 設定 をクリックします。

前の手順で作成した AWS Managed Microsoft AD と使いたい製品を指定します。

しばらく待ちます。(10~30分程度)

EC2 インスタンスを起動

Amazon EC2 コンソールにアクセスします。

イメージAMI カタログ を選択します。

AWS Marketplace AMI タブを選択します。

検索ボックスに「Visual Studio」を入力し、Enter キーを押します。

パブリッシャーAmazon Web Services に絞り込みます。

検索結果から使用するエディションを選択します。

ポップアップが開いたら 続行 をクリックします。

AMI でインスタンスを起動 をクリックします。

EC2 インスタンス起動ウィザードが開始します。以下の点に留意して EC2 インスタンスを作成します。

  • Nitro ベースのインスタンスを選択します。(Graviton を除く)
  • AWS Managed Microsoft AD ディレクトリに接続できる VPC とサブネット、セキュリティグループを選択する
  • 前の手順で作成した Visual Studio 用インスタンスプロファイルを割り当てる

License Manager で EC2 の状態を確認する

AWS マネジメントコンソールで License Manager に戻ります。

左側ペインの ユーザーベースのサブスクリプションユーザーの関連付け をクリックします。

前の手順で起動した EC2 インスタンスが表示されています。インスタンス設定ステータスが「アクティブ」になっていることを確認します。

ユーザーを AWS Managed Microsoft AD に追加する

AWS Managed Microsoft AD に Visual Studio を利用するユーザーを追加します。
ここで追加するユーザー単位でライセンスがカウントされます。

追加手順は難しくないので割愛します。以下の公式ドキュメントを参照ください。
AWS Managed Microsoft AD でユーザーとグループを管理する
AWS Managed Microsoft AD もしくは Simple AD のグループポリシーを使用して、EC2 Windows インスタンスへの RDP アクセスをドメインユーザーに許可する方法を教えてください。

ユーザーを製品に関連付ける

製品を使うユーザーを関連付けます。

AWS マネジメントコンソールで License Manager に戻ります。

左側ペインの ユーザーベースのサブスクリプション製品 をクリックします。

使う製品にチェックを入れ ユーザーをサブスクライブ をクリックします。

ユーザー名とドメインを入力します。ユーザーをサブスクライブをクリックします。

ユーザーをインスタンスに関連付ける

ユーザーがどのインスタンスで Visual Studio を使うのかを関連付けます。

License Manager 画面のままです。
左側ペインの ユーザーベースのサブスクリプションユーザーの関連付け をクリックします。

対象の EC2 インスタンスにチェックを入れ、ユーザーを関連付ける をクリックします。

ユーザー名とドメインを入力します。ユーザーを関連付けるをクリックします。

RDP で EC2 インスタンスへ接続する

製品とインスタンスの関連付けが終わったらリモートデスクトップで EC2 インスタンスへ接続します。
ログインは AWS Managed Microsoft AD のユーザーで接続してください。

接続後、スタートメニューに Visual Studio が表示されています。

ユーザーベースのサブスクリプションからユーザーの関連付けを解除する

使わなくなったユーザーは関連付けを解除します。
AD 側でユーザー削除するだけは不十分ですのでご注意ください。

AWS マネジメントコンソールで License Manager を開きます。

左側ペインの ユーザーベースのサブスクリプションユーザーの関連付け をクリックします。

ユーザーの関連付けを解除するインスタンスをクリックします。

解除するユーザーにチェックを入れ ユーザーの関連付けを解除 をクリックします。

左側ペインの ユーザーベースのサブスクリプション製品 をクリックします。

ユーザーの関連付けを解除する製品をクリックします。

解除するユーザーにチェックを入れ ユーザーのサブスクリプションを解除 をクリックします。

サブスクライブされたユーザー数を確認します。

AWS Managed Microsoft AD に条件付きフォワーダーを追加する

オンプレミスにある社内システムなどの他ドメインの名前解決をしたいケースがあると思います。その際には AWS Managed Microsoft AD に条件付きフォワーダーを設定します。
AWS CLI で以下のコマンドを実行します。

aws ds create-conditional-forwarder --directory-id ディレクトリID --remote-domain-name フォワードしたいドメイン名 --dns-ip-addrs "フォワード先DNSのIPアドレス1" "フォワード先DNSのIPアドレス2"

# 確認コマンド
aws ds describe-conditional-forwarders --directory-id ディレクトリID

]

AWS Managed Microsoft AD に関連付けられているセキュリティグループのアウトバウンドにフォワード先 DNS サーバー IP アドレスを許可するルールを追加します。

はまり

License Manager は ENI をサブネット分作成します。
その ENI に関連付けられるセキュリティグループは default になっていました。
Security Hub などの対応で default アウトバウンドルールを消している場合はディレクトリ設定が失敗します。新しいセキュリティグループを作成して ENI に関連付けてください。

まとめ

想像していたよりやる事が多かった感想です。
Microsoft 社に限らずソフトウェアライセンスは複雑になることが多く、構成に頭を悩ませるところだと思います。
今回のアナウンスによって一つ解決策が示せるようになったのはポジティブに捉えています。

参考

New – Run Visual Studio Software on Amazon EC2 with User-Based License Model
AWS Marketplace Visual Studio Professional
AWS Marketplace Visual Studio Enterprise
AWS Marketplace Win Remote Desktop Services SAL
User-based subscriptions in AWS License Manager
Visual Studio入りAMIが使える様になった件をライセンス面から調査してみた
[小ネタ] AWS License ManagerでRemote Desktop SALを単品でサブスクライブできるのか試してみた
Visual Studio入りEC2にRDP接続できなくなったので色々試してみた

以上、吉井 亮 がお届けしました。