Windows Serverへ「役割と機能」をインストールするいくつかの方法

EC2インスタンスのWindows Serverに対して「役割と機能」をインストールする際に使える、いくつかの方法をご紹介します。
2020.03.23

みなさん、こんにちは!
AWS事業本部の青柳@福岡オフィスです。

今回は、EC2インスタンスのWindows Serverに対して「役割と機能」をインストールする際に使える、いくつかの方法をご紹介します。

リモートデスクトップ接続でGUIインストール

最も基本的な方法です。

「サーバーマネージャー」を起動して、右上の「管理」メニューから「役割と機能の追加」を選択します。

ウィザードを進めて行き、インストールする「役割」「機能」を選択します。

このように、GUIを使うと分かり易いインターフェイスで役割や機能をインストールすることができます。

SSMのセッションマネージャーを使う

リモートデスクトップ接続が利用できない場合、Systems Manager (SSM) の「セッションマネージャー」を使う方法があります。

WindwosのEC2インスタンスに対してセッションマネージャーを利用する場合、シェルとしてPowerShellを使うことになります。

PowerShellを使ってWindows Serverの役割・機能を追加する方法については、マイクロソフトのドキュメントで解説されています。

役割、役割サービス、または機能のインストールまたはアンインストール | Microsoft Docs

インストールされている役割・機能の確認

インストールを行う前に、Get-WindowsFeature コマンドレットを使って役割・機能のインストール状況の一覧を表示してみましょう。

> Get-WindowsFeature

Display Name                                            Name                       Install State
------------                                            ----                       -------------
[ ] Active Directory Federation Services                ADFS-Federation                Available
[ ] Active Directory Rights Management サービス         ADRMS                          Available
    [ ] Active Directory Rights Management サーバー     ADRMS-Server                   Available
    [ ] ID フェデレーション サポート                    ADRMS-Identity                 Available
[ ] Active Directory ドメイン サービス                  AD-Domain-Services             Available
[ ] Active Directory ライトウェイト ディレクトリ サ...  ADLDS                          Available
[ ] Active Directory 証明書サービス                     AD-Certificate                 Available
    [ ] 証明機関                                        ADCS-Cert-Authority            Available
    [ ] オンライン レスポンダー                         ADCS-Online-Cert               Available
    [ ] ネットワーク デバイス登録サービス               ADCS-Device-Enrollment         Available
    [ ] 証明機関 Web 登録                               ADCS-Web-Enrollment            Available
    [ ] 証明書の登録 Web サービス                       ADCS-Enroll-Web-Svc            Available
    [ ] 証明書の登録ポリシー Web サービス               ADCS-Enroll-Web-Pol            Available
[ ] DHCP サーバー                                       DHCP                           Available
[ ] DNS サーバー                                        DNS                            Available
・・・

「Display Name」欄は役割・機能の表示名、「Name」欄は内部名です。
(PowerShellで役割・機能のインストールなどを行う際は、対象の役割・機能を内部名で指定します)

「Install State」欄の意味は以下の通りです。

  • Installed: 役割・機能がインストールされている
  • Available: 役割・機能がインストールされていない (インストール可能)
  • Removed: 役割・機能がインストールされていない (インストールソースがローカルに存在しない)

「Removed」の場合、インストールソース (媒体) がローカルディスク上に存在しないため、インストールを実行するとインターネットからのダウンロードが発生することに留意してください。
インターネットへ通信不能な環境の場合、別途、インストール媒体を用意する必要があります。
(機能の「.NET Framework 3.5」などが該当しますが、今回は詳細な解説は行いません)

役割・機能のインストール

インストールしようとする役割・機能の内部名と、現在のインストール状況 (まだインストールされていないこと) を確認したら、Install-WindowsFeature コマンドレットを使って役割・機能をインストールします。

例えば、役割「IIS」の内部名は Web-Server ですので、インストールするには以下のように実行します。

Install-WindowsFeature -Name Web-Server

インストール処理が完了すると、結果が以下のように表示されます。

Success Restart Needed Exit Code      Feature Result
------- -------------- ---------      --------------
True    No             Success        {HTTP 共通機能, 既定のドキュメント, ディレ...

「Success」欄が「True」であればインストールは成功しています。

「Restart Needed」欄は、インストール後に再起動が必要かどうかを示しています。
「No」であれば再起動は不要ですが、「Yes」であれば再起動待ちの状態ですので手動での再起動が必要です。

Install-WindowsFeatureコマンドレットのオプション

Install-WindowsFeature コマンドレットには以下のようなオプションが用意されています。

  • -IncludeAllSubFeature: 配下の「子」役割・機能を全てインストールする
  • -IncludeManagementTools: 関連する管理ツールもインストールする
  • -Restart: インストール後に自動的に再起動を行う

-IncludeManagementTools は、GUIでインストールする場合の以下の画面に相当します。

-Restart オプションを付けると、再起動の要否に関係なく必ず再起動が行われます。
再起動が必要である役割・機能の場合にのみ付けるのが良いでしょう。

SSMのRun Commandを使う

SSMのセッションマネージャーを使うと、コマンドベースで対話的にインストールを行うことができました。

一方、バッチ処理的にインストールを行うには「Run Command」を使います。

Run Commandで実行するスクリプトを、以下のように用意します。

$featureName = 'Web-Server'
if ((Get-WindowsFeature -Name $featureName).Installed) {
    Write-Host "${featureName} is installed."
} else {
    Write-Host "Install ${featureName}..."
    $result = Install-WindowsFeature -Name $featureName -IncludeManagementTools
    if ($result.Success) {
        Write-Host 'Installation successful.'
        if ($result.RestartNeeded -eq 'Yes') {
            Write-Host 'Reboot computer...'
            exit 3010
        }
    } else {
        Write-Host 'Installation failed.'
        exit 1
    }
}
exit 0

前節で説明した通り、役割・機能のインストール時には再起動が必要な場合と不要な場合とがありますが、このスクリプトではいずれの場合にも対応するような作りになっています。

Run Commandにおける再起動を伴うスクリプトの記述方法については、下記の記事を参照してください。

[小ネタ] 再起動を伴うSSM Run Commandの書き方 | Developers.IO

スクリプトの内容を簡単に解説します。

  • 2行目のif文で対象の役割・機能が既にインストールされているか否かのチェックを行います。
  • 6行目でインストールを実行して、7行目で処理結果を判定します。
  • インストール処理が成功していれば、9行目で再起動が必要かどうかを判定します。
  • 再起動が不要な場合は、そのままスクリプトの最後までジャンプして戻り値「0」で終了します。
  • 再起動が必要な場合は、戻り値「3010」でexitすることで、Run Commandは再起動を行います。
  • 再起動後、再度スクリプトが1行目から実行されます。
  • 2行目のif文でインストール済みと判定されますので、処理を行わずにスクリプトを終了します。

Run Commandで、コマンドドキュメントに「AWS-RunPowerShellScript」を指定して、スクリプトを実行します。
(各オプションは基本的にデフォルトのままで構いません)

コマンドの処理が完了しましたら、「コマンド出力」で結果が確認できます。

Install Web-Server...

Installation successful.

ユーザーデータを使って起動時に自動インストール

ユーザーデータにPowerShellスクリプトを記述することで、新規インスタンスの起動時に役割・機能をインストールすることもできます。

IISのように再起動を伴わない役割・機能であれば、以下のようにシンプルなユーザーデータスクリプトでインストールが可能です。
ついでに、index.html ファイルにコンピューター名を埋め込む処理も追加してみます。

<powershell>
Install-WindowsFeature -Name Web-Server -IncludeManagementTools
Remove-Item -Path C:\inetpub\wwwroot\*.*
New-Item -Path C:\inetpub\wwwroot\index.html -Value $env:COMPUTERNAME
</powershell>

インスタンスの起動後、IISのインストールに少々時間がかかりますが、インストールが完了した頃合いにWebブラウザでアクセスしてみましょう。

ELB+Auto Scalingの動作テストなどでよく使われる「ユーザーデータを使ってApacheをインストールして、Webページにホスト名を埋め込む」ということを、Windowsでも行えますね。

おわりに

Windowsではリモートデスクトップ接続でGUIを操作しなければできないことが多いですが、今回紹介した方法を使えば「役割」「機能」のインストールをコマンドラインで素早く行ったり、自動化したりすることができると思います。

是非ご活用ください。