Windows IIS サービスの移行計画をカスタマイズする
移行の作成時に入力された移行計画ファイルを確認します。移行計画は、移行を実行する前にカスタマイズできます。移行計画の詳細は、移行元 VM からワークロード コンテナ アーティファクトを抽出するために使用されます。
このセクションでは、移行の内容と、移行を実行してデプロイ アーティファクトを生成する前に考慮すべきカスタマイズについて説明します。
始める前に
このドキュメントでは、すでに移行計画を作成し、移行計画ファイルが作成されていることを前提としています。
移行計画の構造
以下に、移行計画の完全な構造を示します。以降のセクションでは、この枠組み、各要素の概要、変更方法について説明します。
globalSettings:
globalIis:
enablegmsa: string
apppools:
- enable32bitapponwin64: bool
identitytype: string
managedruntimeversion: string
name: string
connectionStrings:
add:
- connectionstring: string
name: string
providername: string
security:
authentication:
windowsAuthentication:
enabled: bool
providers:
- value: string
authorization:
add:
- access_type: string
roles: string
users: string
verbs: string
remove:
- roles: string
users: string
verbs: string
image:
extraFeatures:
- string
target:
baseVersion: string
requirements:
- string
warnings:
- string
msvcRuntimes:
- string
pathEnvVarAdditionalEntries:
- string
images:
- name: string
probes:
enabled: bool
livenessProbe:
probehandler:
exec:
command:
- string
- string
initialdelayseconds: int
timeoutseconds: int
periodseconds: int
successthreshold: int
failurethreshold: int
terminationgraceperiodseconds: optional[int]
readinessProbe:
probehandler:
exec:
command:
- string
- string
initialdelayseconds: int
timeoutseconds: int
periodseconds: int
successthreshold: int
failurethreshold: int
terminationgraceperiodseconds: optional[int]
useractions:
files:
- source: string
target: string
registry:
currentcontrolset:
- path: string
software:
- path: string
workloads:
sites:
site:
- applications:
- applicationpool: string
path: string
virtualdirectories:
- path: string
physicalpath: string
bindings:
- port: int
protocol: string
sslflags: int
connectionstrings:
- connectionstring: string
name: string
providername: string
name: string
security:
authentication:
windowsAuthentication:
enabled: bool
providers:
- value: string
authorization:
add:
- access_type: string
roles: string
users: string
verbs: string
remove:
- roles: string
users: string
verbs: string
serverautostart: bool
version: string
globalSettings
セクション
globalSettings
セクションには、この VM から IIS サイトを実行している Pod の基本的な要件を記述します。検出プロセスで、移行元の VM の全般的な構成が検索され、このセクションに挿入されます。以下で説明するように、これらの構成には特定のイメージ構成に存在するフィールドが含まれますが、すべてのイメージに同時に影響します。
image
セクション
globalSettings
に続く image
セクションには、Pod にインストールする Windows 機能のリストを記述します。検出プロセスで、元の VM 上に存在し、Windows コンテナにインストール可能なすべての Windows 機能がこのセクションに挿入されます。
msvcRuntimes
セクション
移行するアプリケーションが特定のバージョンの Microsoft Visual C++ Runtime(MSVCRT)に依存している可能性があります。Migrate to Containers は、移行元 VM にインストールされているランタイムを自動的に検出し、移行計画に含めます。
移行計画のランタイムのリストを変更するには、msvcRuntimes
のメンバーを追加または削除します。
使用可能な値の完全なリストは次のとおりです(2015 ランタイムには、2017、2019、2022 のサポートも含まれています)。
msvcRuntimes:
- MSVC2012_x64
- MSVC2013_x64
- MSVC2015_x64
- MSVC2012_x86
- MSVC2013_x86
- MSVC2015_x86
pathEnvVarAdditionalEntries
セクション
Windows IIS アプリケーションには、デフォルト以外の PATH
環境変数エントリが含まれている可能性があります。これらのエントリは移行元 VM で自動的に検出され、移行計画に含まれます。pathEnvVarAdditionalEntries
のメンバーを編集することで、PATH
環境変数を変更できます。
pathEnvVarAdditionalEntries:
- "C:\\myDllsFolder"
- "C:\\ProgramData\\SomeSoftware"
image セクションを編集する
次のような場合は、image
セクションの編集が必要になります。
提案された機能の一部が移行後のサイトで不要な場合。移行元の VM に IIS サイトのホスト以外の用途がある場合、この状況が発生します。
移行計画の IIS セクションを変更し、追加の Windows 機能に依存する構成を追加する場合(たとえば、Windows 認証は Windows 認証機能に依存します)。
target
セクション
target
セクションでは、使用する Windows ベースイメージを指定します(たとえば 1909)。このフィールドを編集することはほとんどありません。
images
セクション
images
セクションの各サブアイテムに、単一の出力イメージを指定します。
アーティファクト zip には、このようなイメージごとに個別のサブディレクトリがあり、独自の Dockerfile
と deployment_spec.yaml
が存在します(コンテナ イメージのデプロイをご覧ください)。
name
フィールド
name
フィールドには、イメージ名を記述します。これは、イメージのサブディレクトリの名前と、アーティファクト内の deployment_spec.yaml
ファイルに影響します。
probes
フィールド
probes
フィールドには、イメージのヘルスプローブ構成を記述します。kubelet のプローブの詳細については、livenessProbe、readinessProbe、startupProbe を構成するをご覧ください。
IIS 正常性プローブを編集する
正常性プローブでは、マネージド コンテナのダウンタイムと準備状況をモニタリングできます。正常性プローブによるモニタリングは、移行されたコンテナのダウンタイムを減らし、モニタリングを改善する効果があります。
不明なヘルス状態は、可用性の低下、可用性モニタリングの誤判定、データ損失を引き起こす可能性があります。正常性プローブがなければ、kubelet は、コンテナの健全性を想定することしかできず、準備ができていないコンテナ インスタンスにトラフィックを送信する可能性があります。インスタンスの準備ができていない場合は、トラフィックが失われる可能性があります。kubelet は、フリーズされたコンテナを検出できず、コンテナは再起動されません。
正常性プローブは、コンテナの起動時に小さなスクリプト ステートメントを実行します。このスクリプトは、成功したプローブの種類をチェックします。これは、使用されるプローブのタイプによって定義されます。期間は移行計画の periodSeconds
フィールドで定義されます。これらのプローブは、移行計画をカスタマイズするときに手動で定義できます。
構成可能なプローブには 3 種類あります。すべてのプローブは probe v1 core リファレンスで定義されている probe v1 core で、対応する container v1 core のフィールドと同じ関数を共有します。
*livenessProbe: livenessProbe は、コンテナを再起動するタイミングを把握するために使用します。
readinessProbe: readinessProbe は、コンテナがトラフィックの受信を開始する準備が整うタイミングを認識するために使用します。プローブが成功した場合にのみ Pod へのトラフィックの送信を開始するには、readinessProbe を指定します。readinessProbe が livenessProbe と同様に機能する場合もあります。ただし、readinessProbe は、Pod がトラフィックを受信せずに起動し、プローブが成功した後にのみトラフィックの受信を開始することを示します。
startupProbe: kubelet は startupProbe を使用して、コンテナ アプリケーションが起動した時間を特定します。このようなプローブが構成されている場合、プローブが成功するまで稼働チェックと準備チェックが無効になり、それらのプローブがアプリケーションの起動を妨げないようにします。
調査後、プローブ構成が移行計画に追加されます。プローブは、次の例に示すようにデフォルトの構成で使用できます。デフォルトの構成では、livenessProbe と readinessProbe に exec
コマンドを使用します。どちらも probe.ps1
という PowerShell スクリプトを使用しており、IIS コマンドライン ツール appcmd を呼び出して IIS サイトのステータスを確認します。
プローブはデフォルトで無効になっています。プローブを有効にするには、enabled
フラグを true
に設定します。
images: name: IMAGE_NAME probes: enabled: false livenessProbe: probehandler: exec: command: - powershell.exe - C:\m4a\probe.ps1 initialdelayseconds: 0 timeoutseconds: 1 periodseconds: 10 successthreshold: 1 failurethreshold: 3 terminationgraceperiodseconds: null readinessProbe: probehandler: exec: command: - powershell.exe - C:\m4a\probe.ps1 initialdelayseconds: 0 timeoutseconds: 1 periodseconds: 10 successthreshold: 1 failurethreshold: 3 terminationgraceperiodseconds: null
windowsServices
セクション
移行中に作成された Windows コンテナは、単一の Windows IIS サービスを実行し、監視します。ただし、一部のワークロードでは、正しく機能させるために追加のサービス(データベース、ロギング メカニズム、プロキシなど)の実行が必要になる場合があります。
移行後のコンテナで追加のサービスを実行するには、windowsServices
セクションにエントリを追加し、useractions
セクションに必要なバイナリをコピーします。
version: v1
globalSettings:
target:
…
globalIIS:
…
images:
- name: migrated-image-zgwb2
workloads:
sites:
site:
- applications:
...
bindings:
- port: 80
protocol: http
name: Default Web Site
…
windowsServices:
- MyService
useractions:
files:
- source: C:\Program Files\MyService
target: C:\Program Files\MyService
registry:
currentcontrolset:
- key: services\MyService
useractions
セクション
useractions
セクションでは、移行するその他のファイルとレジストリキーを指定します。
例:
useractions: files: - source: DRIVE:\FOLDER-OR-FILE-PATH target: DRIVE:\FOLDER-OR-FILE-PATH - source: C:\myfolder target: C:\myfolder - source: D:\myfile target: D:\myfile - source: D:\myfile target: C:\myfile ... registry: currentcontrolset: - path: KEY ... software: - path: KEY ...
currentcontrolset
と software
に指定されたパスは、HKEY_LOCAL_MACHINE\System\CurrentControlSet
レジストリ ハイブまたは HKEY_LOCAL_MACHINE\Software
レジストリ ハイブの鍵です。
useractions
セクションを編集する
デフォルトでは、イメージにコピーされるファイルは、指定したイメージ内のサイトの仮想ディレクトリのみです。
コードまたは構成でこのディレクトリの外部からファイルをインポートする場合は、これらのファイルを useractions
セクションに追加する必要があります。
また、コードが依存するレジストリ値は、useractions
registry
セクションを編集して追加する必要があります。
IIS に関連する設定
IIS 関連の設定には、特定のサイトに関連する設定(イメージ仕様の一部)とすべてのサイトに関連する設定(gloabalIis
セクションの下)があります。
sites
セクション
sites セクションには、特定のイメージに移行するサイトを記述します。同じサイトを複数のイメージに含めることができます。
Cloud Load Balancing、Ingress、または Cloud Service Mesh を使用して SSL 構成を処理する場合は、protocol
を http
に設定する必要があります。
sites: site: - applications: - path: / virtualdirectories: - path: / physicalpath: '%SystemDrive%\inetpub\wwwroot' bindings: - port: 8080 protocol: http name: Default Web Site
apppools
セクション
apppools
セクションには、移行後の Pod に作成されるアプリケーション プールを記述します。
identitytype
フィールドには、アプリケーション プールの IIS ID を ApplicationPoolIdentity
(デフォルト)、NetworkService
、LocalSystem
、LocalService
のいずれかとして指定します。
詳細については、IIS の ID についてとアプリケーション プールの ID をご覧ください。
identitytype
を含む移行計画の例を次に示します。
migrationPlan: applications: iis: applicationhost: apppools: - name: DefaultAppPool # Allowed values include: ApplicationPoolIdentity (default), NetworkService, LocalSystem, LocalService identitytype="NetworkService" - managedruntimeversion: v4.0 name: .NET v4.5 Classic - managedruntimeversion: v4.0 name: .NET v4.5
コンテナ アーティファクトを生成する移行計画を実行すると、Migrate to Containers は identitytype
フィールドの設定に従って、必要な Dockerfile ディレクティブを自動的に追加します。
たとえば、identitytype
を NetworkService
に設定した場合、ディレクティブは次の形式になります。
RUN c:\windows\system32\inetsrv\appcmd.exe set apppool \"DefaultAppPool\" \"/-processModel.identityType:NetworkService\";
Migrate to Containers はターゲット identitytype
に従って読み取り用の ACL ディレクティブをサイトのフォルダに自動的に追加します。IUSR には組み込みユーザーを追加します。これは、元のアプリケーション アカウントが継承されているか、明示的に指定されているアプリケーション ファイル システムの項目に対して、自動的に行われます。
詳細については、ACL を設定するをご覧ください。
enablegmsa
フィールド
enablegmsa
フィールドは移行計画の糖衣構文です。これは、アプリケーション プールの identity フィールドを上書きするためのショートカットです。
enablegmsa
フィールドでサポートされている値は次のとおりです。
auto
(デフォルト): Migrate to Containers が現在の構成を使用できないと判断した場合、gMSA を使用するために移行後のコンテナを変換します。all
: gMSA を使用するために、移行後のコンテナを常に変換します。identitytype
の設定は無視します。この場合、identitytype
は常にNetworkService
に設定されていると解釈されます。
enablegmsa
を含む移行計画の例を次に示します。
migrationPlan: applications: iis: # Allowed values include: auto (default), all enablegmsa: auto|all
詳細については、gMSA を使用するようにアプリを構成するをご覧ください。
接続文字列
接続文字列は、移行後のコンテナ ワークロードから .NET Framework データ プロバイダへの接続を定義します。
Migrate to Containers は、サイトおよびグローバル スコープの接続文字列をサポートします。
サイトに接続文字列を追加するには、移行計画の site
定義を編集して connectionstrings
プロパティを設定します。
sites: site: # Add the site connection strings here. connectionstrings: - name: connectionname1 providername: System.Data.SqlClient connectionstring: Database=connectedDB1;Password=Welcome1;User=admin; - name: connectionname2 providername: System.Data.OleDb connectionstring: Database=connectedDB2;Password=Welcome2;User=admin; - applications: - path: / virtualdirectories: ...
接続文字列をグローバル スコープに追加する(すべてのサイトからアクセスできるようにする)には、globalIis
の直下の接続文字列を編集します。
globalIis: enablegmsa: auto connectionStrings: connectionstring: - name: connectionname3 providername: System.Data.SqlClient connectionstring: Database=connectedDB3;Password=Welcome3;User=admin; applicationhost: ...
ここで
name
には接続名を指定します。providername
には、必要に応じてデータ プロバイダのタイプを指定します。Migrate to Containers は、System.Data.SqlClient
の値のみをサポートします。これは、.NET Framework データ プロバイダをサポートする値です。System.Data.SqlClient
System.Data.OleDb
System.Data.Odbc
System.Data.OracleClient
connectionstring
には、データ プロバイダへの接続に使用する接続文字列を指定します。
接続文字列セクションを編集する
Migrate to Containers は、移行した VM で検出された接続文字列を自動的に移行計画にコピーします。
一部の接続文字列が検出されないため、上記のように移行計画を編集して追加する必要があります(たとえば、接続文字列が applicationhost.config
ファイルの暗号化セクションにある場合)。
移行計画に追加する接続文字列を決定する方法については、実行時の接続文字列の取得に関する Microsoft のドキュメントをご覧ください。
接続文字列の外部依存関係
- 接続文字列には、ファイルへの参照や、サイトに関連付けられている Windows ユーザーへの参照などの依存関係を含めることができます。移行計画にカスタム ユーザー アクションを追加して、ファイル システム内の別のファイルをコピーできます。Dockerfile を手動で編集して Windows ユーザーを追加します。
- 接続文字列には、外部データソースへの参照などの依存関係を含めることができます。移行されたコンテナ ワークロードがデータソースにアクセスできるようにするには、これらの依存関係を手動で移行する必要があります。
security
セクション
security セクションには、認証と認可のサブセクションがあります。
- Windows 認証では、Active Directory ユーザーを確認します。
- Windows 認可は、どのユーザーに IIS ウェブサイトへのアクセスを許可するかを指定するメカニズムです。アクセスタイプは HTTP 動詞(POST、GET、PUT、PATCH、DELETE)です。
接続文字列の場合と同様に、すべてのサイトに対して認証または認可を設定するには、次の例のように globalIis
を編集します。特定のサイトに対して認証または認可を設定するには、サイトの要素を編集します。
globalIis: security: authentication: windowsAuthentication: providers: - NTLM authorization: - add: user:John access: role: - remove: user:Jane access: GET role: ...
ここで
providers
には、セキュリティ プロトコルのプロバイダを指定します。user
には、ユーザー名を指定します。access
には、ユーザーの権限を指定します。アクセスタイプは HTTP 動詞(POST、GET、PUT、PATCH、DELETE)です。role
には、特定の権限ロールを指定します。
次のステップ
- 移行の実行方法を学ぶ。