Office入りEC2インスタンス立ち上げ記


初めまして。
AWS でOfficeをインストールしたEC2インスタンスを起動する設定・手順について共有できればと思います。

# １. AWS EC2インスタンスについて

>　Amazon EC2(Amazon Elastic Compute Cloud) は、極めて幅広く、奥深いコンピューティングプラットフォームを提供します。また、ワークロードのニーズに最も適切に対応できるように、750 を超えるインスタンスを提供するほか、最新のプロセッサ、ストレージ、ネットワーク、オペレーティングシステム、購入モデルを選択できます。（AWS公式HPより）

　要するに、AWS EC2（Amazon Elastic Cpmpute Cloud）は「仮想サーバサービス」であり、物理サーバの構築や環境構築作業を行うことなく、仮想サーバを用意できるサービスとなっています。
　利用できるOSとしては、下記のものが主になります。
+ Amazon Linux
+ CentOS
+ Red Hat Enterprise Linux
+ Windows Server

　また、EC2インスタンスを起動するために欠かせない要素として、AMI（Amazon Machine Image）があります。
　ざっくりいうと、「EC2インスタンスを起動するための必要情報が予め設定されたテンプレート」のようなモノになります。このAMIの中にインスタンスで利用するOSの情報や、アプリケーションソフトウェア、起動許可などがパッケージ化されていて、欲しい機能が入ったAMIが提供されていれば、それを利用することで狙い通りのEC2インスタンスが簡単に複数起動することができます。

　他にも沢山設計する際に考えることはありますが、今のところは割愛させていただきます。

# ２．OfficeはEC2インスタンスで利用できるのか？
　Microsoft OfficeといえばExcelやWordをはじめとした「オフィススイート」ですが、いくつかのライブラリではOfficeのインストールが前提となるものもあります。そういったライブラリを使用したアプリケーションをEC2インスタンスで起動したサーバ上で動作させようと思うと、Officeのインストールが必要となるわけです。ただし、Microsoft Officeを仮想サーバで利用するとなった場合、Microsoftのライセンス規約が問題となってきます。
　Microsoft 製品はそれぞれ固有のライセンス条項が設定されており、Officeに関しても勿論設定されています。このライセンス条項によって、OfficeはBYOL（Bring Your Own License）で外部から資材を持ち込んでインストールすることができません。
　では、どのようにしてEC2インスタンスでOfficeを利用するかというと、先ほど紹介したAMIが登場します。AWSからMicrosoft Office LTSC Professional Plus 2021 が搭載されたWindows ServerのAMIが提供されており、このAMIからEC2インスタンスを起動すれば、既にOfficeがインストールされたWindows Serverが使えるようになるという訳です。めでたしめでたし。

# ３. Office をAWS EC2インスタンスで起動したWindows Server で使用するには？
　めでたしと喜んだのも束の間、いざ調べてみると導入手順を調べていくうちに「かなり大変そう」ということがすぐに分かりました。
　
■前提条件
1\. AWS Managed Microsoft AD用に2つのAZに分かれた2つのサブネットを用意します。
2\. Amazon Virtual Private Cloud（VPC）のDNSホスト名とDNS解決を有効にします。
3\. 利用するAmazon EC2 インスタンスは、AWS Systems Manager と通信ができるように、インスタンスにインターネットへのアウトバウンドアクセスを許可する必要があります。
4\. Officeライセンスアクティベーションの為にAWSが提供するMicorosoft KMS サーバーへの疎通が必要となり、これはAWS LicenseManagerのVPC Endpointでのみ提供されます。これはAWS LicenseManager と AWS Managed Microsoft ADの紐づけの際に生成され、事前に利用するAmazon EC2 インスタンスがインバウンド TCP ポート 1688 の接続を許可するセキュリティグループを指定もしくは作成する必要があります。
5\. 利用するAmazon EC2 インスタンスのセキュリティグループを指定又は作成し、承認された接続ソースからのインバウンド TCP ポート 3389 接続を許可します。
6\. AWS Managed Microsoft AD向けにRoute 53 Resolver Inbound Endpointを用意します。
7\. 利用するAmazon EC2 インスタンスに割り当てる、インスタンスプロファイル(IAM ロール)を用意します。
8\. Amazon EC2上のMicrosoft Office にアクセスするユーザーを、AWS Managed Microsoft ADディレクトリにプロビジョニングします。

　前提条件として必要な環境構築の設定を挙げてみましたが、AWSを触ってみないと分からない単語ばかり並んでいて、この時点で相当にややこしそうだということは分かるかと思います。
　ちなみに、ここまでの前提条件をクリアした時点での構成図が以下になります。

![構成図.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3755487/d03643ec-7f1b-a7dd-a59a-6bfd66eb914e.png)
（余計にわけわからなくなってしまった気がする・・・）

# ４. EC2インスタンスを立ち上げる手順
　前項で挙げた前提条件をクリアしつつ、Office入りのEC2インスタンスを起動する手順について説明します。

1\. VPC周りの用意
2\. IAM ロールの用意
3\. AWS Directory Service にてActive Directory の用意
4\. Route 53 Resolver Outbound Endpoint の用意
5\. AWS License Manager の用意
6\. AWS Marketplace でOffice LTSC Professional Plus 2021 および Remote Desktop Service SAL のサブスクライブ
7\. EC2インスタンスの起動
8\. 起動したEC2インスタンスへAD ユーザーの関連付け

各手順について簡単な説明を以下に挙げておきます。

### １．VPC周りの用意
　サーバーを用意する土台となるVPC（Virtual Private Cloud）を用意します。今回はap-northeast-1（東京）リージョンで作成しました。
　気を付ける点としては、DNSホスト名の有効化とDNS解決の有効化が必須になります。更にセキュリティグループの設定にて、RDP タイプのTCPポート 3389と、カスタムTCPポート 1688 のインバウンド・アウトバウンドルールを設定することをお忘れなく。
![インバウンドルール.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3755487/f7e7597a-6fcb-be98-1ea8-a0327ed288c2.png)

　また、後の手順で異なるアベイラビリティゾーンに配置されているサブネットが2つ必要になるので、この段階で作成しておきます。ap-northeast-1a とap-northeast-1c に配置されているサブネットを作成しました。
![サブネット.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3755487/3c8d3e59-996c-2934-8184-ac9e2f0684b2.png)

### ２．IAM ロールの用意
　EC2インスタンスに割り当てるIAMロールを予め作成します。EC2以外にも連携させるサービスが多くあるので、最低限紐づける必要のある管理ポリシーが以下になります。

+ AmazonSSMManagedInstanceCore
+ AmazonSSMDirectoryServiceAccess
+ AWSMarketplaceMeteringFullAccess
![ロール.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3755487/05d58ee2-cab4-4165-fbed-75e5f477183d.png)

### ３．AWS Directory Service にてActive Directoryの用意
![DirectoryService.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3755487/0f19eb09-db2d-700c-c387-a1ca16ccae5a.png)

　AWS Directory Service からAWS Managed Microsoft AD をディレクトリタイプ対象とし、ディレクトリをセットアップします。
　エディションはStandard EditionとEnterprise Edition が選択できますが、費用が大きく異なるので、要件を確認して、適切なエディションを設定するように気を付けましょう。（Standard Edition で \\$ 105.12/月、Enterprise Edition で \\$ 320.400/月）
　このセットアップの際に設定するディレクトリのDNS名もしくはディレクトリのNetBIOS名と、Admin パスワードは後のEC2インスタンス立ち上げ後のRDP接続の際に必要になるので、忘れないようにします。

### ４．Route 53 Resolver Outbound Endpoint の用意
![Route53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3755487/0573b27c-aa60-3270-be59-5b98d5868fea.png)

　Office入りのAMIからEC2インスタンスを起動する際に、自動でDNS設定を書き換えるのですが、その書き換えの為に、Route 53 Resolver Outbound Endpoint が必要になりますので、設定します。
　信頼性の向上のために、IPアドレスを2つ指定する必要があり、異なるアベイラビリティゾーンで指定することを奨励されているので、手順1で用意した二つのサブネットでそれぞれ自動選択されたIPv4アドレスを設定します。
　ルールの作成の際には、手順３で設定したActive Directoryの情報を設定することになります。

　■設定項目
+ 「ドメイン名」　→　AD「ディレクトリの DNS 名」
+ 「このルールを使用するVPC」 → AD「VPC」
+ 「ターゲット IP アドレス」2つ → AD「DNS アドレス」
※ターゲットIPアドレスで設定するポートは「53」になります。

### ５．AWS License Manager の用意
![LicenseManager.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3755487/d9b0b3bd-284e-8626-ec64-c5b1904877d8.png)

　Microsoft Office LTSCのライセンス管理の為、AWS License Manager の設定が必要になります。
　「AWS Lincense Manager の使用を開始する」ボタンからダッシュボードを表示したら、「設定」メニューを開きます。「ユーザーベースのサブスクリプション」タブから手順3で設定したActive Directory の情報（VPC・サブネット・セキュリティグループ）を設定して、「AWS Managed Microsoft AD」が「設定済み」となっていれば完了です。
![MicrosoftAD.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3755487/6adebc65-1880-8194-5446-f675c140c905.png)

### ６．AWS Marketplace でOffice LTSC Professional Plus 2021および Remote Desktop Service SAL のサブスクライブ
　手順5で設定したLicense Manager からOffice Professional Licenseの Marketplaceの製品ページへアクセスし、「Continue to Subscribe」をクリックします。
![OfficePlus.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3755487/cc8c4802-6111-ba90-cf7e-d7f04706fdca.png)

サブスクライブに際して同意を求められるので、「Accept Terms」をクリックします。サブスクライブできていることが確認できれば、License Manager の「ユーザーベースのサブスクリプション: 製品」のページで「Office Professional Plus」がアクティブになっています。
![OfficeActive.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3755487/cc83f632-f2e1-de1b-0f58-3a3b7325affe.png)


　Remote Desktop Services SAL に関しても、同様の手順でMarketplace からサブスクリプションを実施します。
![RDSSAL.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3755487/ddc1eca6-ed4c-84e6-7c1d-6b9c0d434445.png)
![RDSSALActive.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3755487/57d069eb-d35c-5d89-bd87-9ed43c6c9609.png)

### ７．EC2インスタンスの起動
　AWS EC2 のページから「インスタンスの起動」からEC2インスタンスの起動設定を入力していきます。
　「アプリケーションおよび OS イメージ（Amazon マシンイメージ）」の項目で、検索欄から「Office LTSC Professional Plus 2021」で検索すると、「AWS Marketplace AMI」のタブに1件だけAMI が表示されますので、そのAMI を選択します。
![AMI選択.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3755487/4fefeed3-9efe-6144-bb07-3455a562d948.png)

仕様確認と設定変更確認のダイアログが表示された後、AMI が選択されていることがEC2 インスタンスの設定ページで確認できます。
　「インスタンスタイプ」では一定以上のサイズのインスタンスタイプのみ許可されています。今回はr5.large サイズを選択しています。
　「ネットワーク設定」では手順1で設定したVPC・サブネット・セキュリティグループが紐づくように設定します。
　「ストレージを設定」ではGraviton ベース、Nitro ベースのインスタンスは許可されていません。今回はr5.largeを選択しています。
　「高度な詳細」のIAM インスタンスプロフィールでは「アカウントから既存のIAM ロールを選択」にチェックを入れたうえで、手順2で作成したIAM ロールを選択します。
　ここまでの設定ができれば「インスタンスの起動」からインスタンスを起動します。成功すれば、メッセージとインスタンスのIDが表示され、正常に開始したことが分かります。
![インスタンス起動.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3755487/13cde5e0-3320-ca98-f2fa-a0bca35791fe.png)

### ８．起動したEC2インスタンスへAD ユーザーの関連付け
　インスタンスを起動しただけでは終わりません。License Manager からユーザーの関連付けを実施してようやく全作業が完了となります。
　License Manager の「ユーザーベースのサブスクリプション: ユーザーの関連付け」へアクセスすると、手順7で起動したインスタンスが表示されています。
![インスタンスアクティブ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3755487/0cb34734-a72e-f78c-89ac-64388e1d3eaf.png)


　「インスタンス設定ステータス」が「アクティブ」になっていることを確認し、「ユーザーをサブスクライブして関連付ける」を選択し、ユーザーに「Admin」を入力して関連付けを実施します。※もしここまでの前提条件となる設定で間違いや漏れがあった場合は、インスタンスが条件を満たしていないということで直ちに終了されてしまいます。
　「ユーザーベースのサブスクリプション: ユーザーの関連付け」ページに戻ってユーザーの関連付けに成功すると、「関連付けられたユーザー」が0から1に変わるので成功したことを確認できます。
![インスタン牛もづけ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3755487/d71cf5e6-b3f3-574d-06ad-17f4a82f2df2.png)

　ここまで完了してようやくOffice入りのEC2インスタンスが起動できました。
　RDP接続をする際に、ユーザーIDに「｛手順3で設定したDNS名 or NetBIOS名｝\Admin」、パスワードに手順3で設定したAdmin のパスワードを入力すればログインすることができます。※EC2 ページから「Administrator」のユーザーとキーペアで復号したパスワードでログインしようとすると、「Remote Desktop Service に登録されたユーザーでしかログインできません」と怒られてしまいます。
![RDP接続.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3755487/1c9d09e4-5f1e-4365-e3d4-4da8c3001136.png)

　ログインできると、Office製品（Word, Excel, PowerPoint, Outlookなど）がインストールされており、ログインユーザーでサインインされていることが分かります。
![Excelログイン.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3755487/7a593f84-673c-87ae-8a06-a855602be1fb.png)


# ５．費用について
　現在（2024年3月）での費用としましては、Office入りのAMIを使用するための追加分で考えると、以下のようになります。

| サービス | 価格（東京リージョン） |
|:-|-:|
| Office LTSC Professional Plus 2021  |  $ 21.43 / month * unit |
| Remote Desktop Services SAL  |  $ 10.00 / month * unit |
| AWS Directory Service  | $ 106.58 / month  |
| Route 53 Resolver  |  $ 182.50 / month |


　合計で$ 320.51 程が毎月かかる費用となっています。
　Office LTSC Professional Plus 2021 と Remote Desktop Services SAL は登録したユーザーの数に比例します。
# ６．終わりに
　長くなってしまいましたが、以上になります。

　今回は初めてLicense Managerを触ったこともあり、数多くのエラーに見舞われましたが、良い経験にはなったと思っています。大量に終了されてしまったEC2インスタンスたち。。。
　Microsoftのライセンスが複雑であることはOfficeのみならず、他の製品（SQL Serverなど）でも同様であるようなので、Microsoftのライセンス規約が変わらない限りは、AWSでMicrosoftを利用する度に四苦八苦することになるのでしょう。
　果たしてそこまでの苦労・費用を払いながらOfficeを使うべきか、他の手段が取れないか、要件定義の段階からしっかりと見極めていくことが肝要なのではないかと思います。