カスタム マシン構成パッケージの成果物の作成方法

開始する前に、マシン構成の概要ページを参照することをお勧めします。

Windows と Linux の両方の監査および構成時に、マシン構成では Desired State Configuration (DSC) が使用されます。 DSC 構成では、マシンが満たす必要のある条件を定義します。

重要

環境の状態を監査するカスタム パッケージと、構成を適用するパッケージは一般公開 (GA) のサポート状態にあります。 ただし、次の制限事項が適用されます。

マシン構成パッケージを使って構成を行うには、Azure VM ゲスト構成拡張のバージョン 1.26.24 以降、または Arc エージェントのバージョン 1.10.0 以降が必要です。

GuestConfiguration モジュールは Ubuntu 18 以降でのみ使用できます。 ただし、モジュールによって生成されるパッケージとポリシーは、Azure または Arc でサポートされるすべての Linux ディストリビューションおよびバージョンで使用できます。

macOS でのテスト パッケージは使用できません。

カスタム コンテンツ パッケージでは、秘密や機密情報を使用しないでください。

Azure または非 Azure マシンの状態を管理するための独自の構成を作成するには、次の手順を使用します。

PowerShell 7 および必要な PowerShell モジュールをインストールする

まず、「マシン構成作成環境を設定する方法」の手順に従います。 これらの手順は、OS、GuestConfiguration モジュール、PSDesiredStateConfiguration モジュールに必要なバージョンの PowerShell をインストールするのに役立ちます。

構成を作成する

構成パッケージを作成する前に、DSC 構成を作成してコンパイルします。 Windows および Linux の構成例を使用できます。

重要

Windows の構成をコンパイルする場合は、PSDesiredStateConfiguration バージョン 2.0.7 (安定版リリース) を使用します。 Linux 用の構成をコンパイルする場合は、プレリリース バージョン 3.0.0 をインストールします。

この構成例は、Windows マシン用です。 ProcessMachine スコープで MC_ENV_EXAMPLE 環境変数を作成するようにマシンを構成します。 変数の値は 'This was set by machine configuration' に設定されます。

Configuration MyConfig {
    Import-DscResource -Name 'Environment' -ModuleName 'PSDscResources'
    Environment MachineConfigurationExample {
        Name   = 'MC_ENV_EXAMPLE'
        Value  = 'This was set by machine configuration'
        Ensure = 'Present'
        Target = @('Process', 'Machine')
    }
}

MyConfig

その定義を MyConfig.ps1 スクリプト ファイルに保存すると、スクリプトを実行して構成をコンパイルできます。

. .\MyConfig.ps1
    Directory: C:\dsc\MyConfig

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a---           5/16/2023 10:39 AM           1080 localhost.mof

構成は、現在の作業ディレクトリの MyConfig フォルダー内の localhost.mof ファイルにコンパイルされます。 パッケージ名として使用する名前 (例: MyConfig.mof) に localhost.mof の名前を変更します 。

Rename-Item -Path .\MyConfig\localhost.mof -NewName MyConfig.mof -PassThru
    Directory: C:\dsc\MyConfig

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a---           5/16/2023 10:40 AM           1080 MyConfig.mof

注意

この例では、Windows マシンの構成を作成してコンパイルする方法を示します。 Linux の場合は、PowerShell クラスを使用してカスタム DSC リソース モジュールを作成する必要があります。 「PowerShell クラスを使用したカスタム DSC リソースの記述」記事には、マシン構成でテストされたカスタム リソースと構成の完全な例が含まれています。

この記事の残りの部分は、プラットフォーム固有の考慮事項に言及している場合を除き、Linux および Windows マシン用に定義された構成に適用されます。

構成パッケージの成果物を作成する

MOF をコンパイルしたら、サポート ファイルをまとめてパッケージ化する必要があります。 完成したパッケージは、Azure Policy の定義を作成するためにマシン構成によって使われます。

New-GuestConfigurationPackage コマンドレットでパッケージを作成します。 構成で必要とされるモジュールは、モジュール内のコマンドでパッケージにそれらを追加できるように、開発環境用に $Env:PSModulePath で使用可能である必要があります。

Windows コンテンツを作成するときの New-GuestConfigurationPackage コマンドレットのパラメーター:

  • 名前: マシン構成のパッケージ名。
  • 構成:コンパイル済み DSC 構成ドキュメントの完全なパス。
  • パス:出力フォルダーのパス。 このパラメーターは省略可能です。 指定しないと、パッケージは現在のディレクトリに作成されます。
  • 種類: (AuditAuditandSet) 構成で監査のみを行う必要があるかどうか、または目的の状態でない場合に構成でコンピューターの状態を変更する必要があるかどうかを判断します。 既定値は、Audit です。

この手順では昇格を必要としません。 コマンドを複数回実行した場合、Force パラメーターは既存のパッケージを上書きするために使用されます。

次のコマンドを実行すると、パッケージの成果物が作成されます。

# Create a package that will only audit compliance
$params = @{
    Name          = 'MyConfig'
    Configuration = './MyConfig/MyConfig.mof'
    Type          = 'Audit'
    Force         = $true
}
New-GuestConfigurationPackage @params
# Create a package that will audit and apply the configuration (Set)
$params = @{
    Name          = 'MyConfig'
    Configuration = './MyConfig/MyConfig.mof'
    Type          = 'AuditAndSet'
    Force         = $true
}
New-GuestConfigurationPackage @params

オブジェクトは、作成されたパッケージの名前パスと共に返されます。

Name     Path
----     ----
MyConfig C:\dsc\MyConfig.zip

マシン構成の成果物の予想されるコンテンツ

完成したパッケージは、Azure Policy の定義を作成するためにマシン構成によって使われます。 パッケージは次のもので構成されます。

  • MOF としてのコンパイル済み DSC 構成
  • モジュール フォルダー
    • GuestConfiguration モジュール
    • DscNativeResources モジュール
    • MOF に必要な DSC リソース モジュール
  • パッケージ typeversion を格納する metaconfig ファイル

PowerShell コマンドレットにより、パッケージ .zip ファイルが作成されます。 ルート レベル フォルダーまたはバージョン フォルダーは必要ありません。 パッケージの形式は、.zip ファイルである必要があります。圧縮を解除されたときの合計サイズが 100 MB を超えることはできません。

Expand-Archive コマンドレットを使用して、アーカイブを展開して検査できます。

Expand-Archive -Path .\MyConfig.zip -DestinationPath MyConfigZip

PowerShell を使用すると、圧縮されていないパッケージの合計サイズを取得できます。

Get-ChildItem -Recurse -Path .\MyConfigZip |
    Measure-Object -Sum Length |
    ForEach-Object -Process {
        $Size = [math]::Round(($_.Sum / 1MB), 2)
        "$Size MB"
    }

サードパーティ製ツールを使用したマシン構成の拡張

マシン構成の成果物パッケージを拡張して、サードパーティ製のツールを含めることができます。 マシン構成を拡張するには、2 つのコンポーネントの開発が必要です。

  • サードパーティ製ツールの管理に関連するすべてのアクティビティを処理する Desired State Configuration リソース
    • インストール
    • Invoke
    • 出力の変換
  • ツールがネイティブで使用するための正しい形式のコンテンツ

コミュニティ ソリューションがまだ存在しない場合、DSC リソースにはカスタム開発が必要です。 コミュニティ ソリューションを見つけるには、PowerShell ギャラリーで GuestConfiguration タグを検索します。

Note

マシン構成の拡張性は、"ライセンス持ち込み" シナリオです。 サードパーティ製ツールを使用する前に、その使用条件が満たされていることを確認してください。

開発環境に DSC リソースをインストールした後、New-GuestConfigurationPackageFilesToInclude パラメーターを使用して、コンテンツ アーティファクトにサードパーティ製のプラットフォームのコンテンツを含めます。

次のステップ