DSC リソース

Microsoft の Desired State Configuration (DSC) プラットフォームでは、DSC リソースは、システムの設定を管理するための標準化されたインターフェイスを表します。 リソースは、コンポーネントをファイルとしてジェネリックとしてモデル化することも、IIS サーバー設定として固有にモデル化することもできます。 リソースでは、命令型ではなく宣言型の構文が使用されます。 DSC では、システムを目的の状態に設定する方法を指定する代わりに、目的の状態を指定します。 リソースは"方法" を処理します。

リソースは、構成可能なコンポーネントの インスタンス を管理します。 たとえば、リソースは環境変数を PSDscResources/Environment 管理します。 各環境変数は、リソースの異なるインスタンスです。 すべてのリソースは、リソースのインスタンスを検証および管理する方法を説明するスキーマを定義します。

DSCv3 では、いくつかの種類のリソースがサポートされています。

  • リソース マニフェストで定義されたリソースは、 コマンド ベースの リソースです。 DSC では、マニフェストを使用して、リソースを呼び出す方法と、リソース インスタンスのプロパティを検証する方法を決定します。
  • リソース グループは、リソース インスタンスの配列をresources受け取って処理する プロパティを持つコマンド ベースのリソースです。 リソース グループは、リソースを実行するユーザーの変更など、入れ子になったリソース インスタンスに特別な処理を適用する場合があります。
  • リソース プロバイダーは、DSCv3 でコマンド ベース以外のリソースを使用できるようにするリソース グループです。 たとえば、リソース プロバイダーでは DSC/PowerShellGroup 、PowerShell モジュールに実装されている DSC リソースを使用できます。

リソースの種類の名前

リソースは、完全修飾型名によって識別されます。 型名は、構成ドキュメント内のリソースを指定するために使用され、コマンドを使用する場合は --resource フラグの値として使用 dsc resource * されます。

リソースの完全修飾型名は、次の構文を使用します。

<owner>[.<group>][.<area>]/<name>

すべてのリソースで と を owner 定義する name必要があります。 groupおよび area コンポーネントを使用すると、 や Microsoft.SqlServer.Database/RoleなどのMicrosoft.SqlServer/Database関連する名前空間にリソースを整理できます。

型名と DSC による型名の検証方法の詳細については、「 DSC リソースの完全修飾型名スキーマ リファレンス」を参照してください

リソースのプロパティ

リソースのプロパティは、インスタンスを管理するためにユーザーが宣言できる設定とオプションです。 リソースには常に少なくとも 1 つのプロパティがあります。 リソースは、スキーマでプロパティを定義します。

既定では、プロパティは省略可能です。 リソースは、現在のタスクまたは目的に関連するプロパティのみを使用して、直接呼び出したり、構成で宣言したりできます。 インスタンスのすべてのプロパティを宣言する必要はありません。 プロパティには、目的の状態の既定値が設定されている場合があります。

ほとんどのプロパティは、基本的な種類の 1 つです。

  • 文字列プロパティでは、プロパティ値が などの machine一連の文字である必要があります。
  • 整数型のプロパティでは、プロパティ値を小数部を含まない数値である必要があります (例: 5)。
  • ブール型のプロパティでは、プロパティ値が または falseであるtrue必要があります。
  • 配列プロパティには、プロパティ値が項目の一覧である必要があります。 通常、配列プロパティは、終了コード整数のリストやファイル パスのリストなど、値が特定の型である必要があることを指定します。

複合プロパティでは、プロパティ値が定義されたサブプロパティを持つオブジェクトである必要があります。 サブプロパティは basic 型でも複合型でもかまいませんが、通常は基本型です。

リソースの一覧表示

DSC を使用して、 コマンドを使用して使用可能なリソースを dsc resource list 一覧表示できます。 DSC は、 PATH を検索してコマンド ベースのリソースを検索し、使用可能なリソース プロバイダーを呼び出してリソースを一覧表示します。

既定では、このコマンドは検出されたすべての DSC リソースを返します。

dsc resource list
type                       version tags                        description
----                       ------- ----                        -----------
Test/TestGroup             0.1.0
Microsoft/OSInfo           0.1.0   {os, linux, windows, macos} Returns information about the operating system.
Microsoft.Windows/Registry 0.1.0   {Windows, NT}               Registry configuration provider for the Windows Registry
                                                               This is a test resource.
DSC/PowerShellGroup        0.1.0   {PowerShell}                Resource provider to classic DSC Powershell resources.
DSC/AssertionGroup         0.1.0                               `test` will be invoked for all resources in the supplied configuration.
DSC/ParallelGroup          0.1.0                               All resources in the supplied configuration run concurrently.
                                                               This is a test resource.
DSC/Group                  0.1.0                               All resources in the supplied configuration is treated as a group.

リソースの種類名、説明、タグで結果をフィルター処理できます。 詳細については、「dsc リソースの一覧」を参照してください。

リソースの呼び出し

コマンドを使用してリソースを dsc resource * 直接呼び出し、3 つの DSC 操作 GetTestSet を使用して 1 つのインスタンスを管理できます。

操作の取得

すべてのリソースは 、リソース インスタンスの実際の状態を取得する Get 操作を実装します。 コマンドを dsc resource get 使用して操作を呼び出します。

たとえば、 リソースを Microsoft.Windows/Registry 使用して、レジストリ キー値の実際の状態を取得できます。

'{
    "keyPath": "HKLM\\Software\\Microsoft\\Windows NT\\CurrentVersion",
    "valueName": "SystemRoot"
}' | dsc resource get --resource Microsoft.Windows/Registry
actualState:
  $id: https://developer.microsoft.com/json-schemas/windows/registry/20230303/Microsoft.Windows.Registry.schema.json
  keyPath: HKLM\Software\Microsoft\Windows NT\CurrentVersion
  valueName: SystemRoot
  valueData:
    String: C:\WINDOWS

操作をテストする

一部のリソースでは 、テスト 操作が実装されています。 テスト操作を実装していないリソースの場合、DSCv3 は合成テストを使用してインスタンスの状態を検証できます。 合成テストは、インスタンスのプロパティの必要な値と実際の値の厳密な大文字と小文字を区別しない比較です。 テスト操作自体を実装する必要があるのは、高度または複雑な検証要件を持つリソースだけです。

コマンドを dsc resource test 使用して操作を呼び出します。 DSC は、次を含むデータを返します。

  • インスタンスの目的の状態。
  • インスタンスの実際の状態。
  • インスタンスが目的の状態であるかどうか。
  • 目的の状態ではないプロパティの一覧。

たとえば、特定のレジストリ キーが存在するかどうかをテストできます。

'{
    "keyPath": "HKCU\\key\\that\\does\\not\\exist",
}' | dsc resource test --resource Microsoft.Windows/Registry
desiredState:
  keyPath: HKCU\key\that\does\not\exist
actualState:
  $id: https://developer.microsoft.com/json-schemas/windows/registry/20230303/Microsoft.Windows.Registry.schema.json
  keyPath: ''
  _inDesiredState: false
inDesiredState: false
differingProperties:
- keyPath

操作の設定

ほとんどのリソースは Set 操作を実装します。これにより、インスタンスに目的の状態が適用されます。 DSCv3 で使用する場合、 Set 操作は べき等です。つまり、インスタンスが目的の状態でない場合にのみ、リソースによって操作が呼び出されます。 操作はべき等であるため、繰り返し呼び出す操作は、1 回呼び出すのと同じです。 べき等モデルを使用すると、副作用によってコードが不必要に実行されるのを防ぐことができます。

Set 操作を実装していないリソースはアサーション リソースです。 アサーション リソースを使用してインスタンスの状態を取得および検証できますが、それらを使用して目的の状態を適用することはできません。

コマンドを dsc resource set 使用して操作を呼び出します。 DSC は、次を含むデータを返します。

  • 操作前のインスタンスの状態。
  • 操作後のインスタンスの状態。
  • 操作が変更されたプロパティの一覧。

たとえば、存在しないキーの目的の状態を設定することで、レジストリ キーを作成できます。

'{
    "keyPath":   "HKCU\\example\\key",
    "valueName": "Example",
    "valueData": { "String": "This is an example." }
}' | dsc resource set --resource Microsoft.Windows/Registry
beforeState:
  $id: https://developer.microsoft.com/json-schemas/windows/registry/20230303/Microsoft.Windows.Registry.schema.json
  keyPath: ''
afterState:
  $id: https://developer.microsoft.com/json-schemas/windows/registry/20230303/Microsoft.Windows.Registry.schema.json
  keyPath: HKCU\example\key
  valueName: Example
  valueData:
    String: This is an example.
changedProperties:
- keyPath
- valueName
- valueData

リソース インスタンスの宣言

DSC 構成ドキュメントを使用すると、一度に複数のリソースまたはリソース インスタンスを管理できます。 構成ドキュメントは、リソース インスタンスのコレクションとその目的の状態を宣言します。 これにより、コンプライアンスのセキュリティ ベースラインの定義や Web ファームの設定など、さまざまなリソースとインスタンスを一緒に作成することで、複雑な目的の状態をモデル化できます。

リソース インスタンス宣言には、常に次のものが含まれます。

  • name - ドキュメント内で一意のインスタンスの、人間が判読できる短い名前。 この名前はログ記録に使用され、ドキュメント内のインスタンスの目的を文書化するのに役立ちます。
  • type - DSC がインスタンスの管理に使用するリソースを識別するリソースの完全修飾型名。
  • properties - インスタンスの目的の状態。 DSC は、リソースのインスタンス スキーマに対して値を検証します。

この構成ドキュメント スニペットの例では、リソースのインスタンスを Microsoft.Windows/Registry 宣言します。

$schema: https://schemas.microsoft.com/dsc/2023/08/configuration.schema.json
resources:
  - name: example key value
    type: Microsoft.Windows/Registry
    properties:
      keyPath: HKCU\example\key
      valueName: Example
      valueData:
        String: This is an example.

こちらもご覧ください