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.SqlClientSystem.Data.OleDbSystem.Data.OdbcSystem.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には、特定の権限ロールを指定します。
次のステップ
- 移行の実行方法を学ぶ。