Udostępnij za pośrednictwem


Rozszerzenie Desired State Configuration z szablonami usługi Azure Resource Manager

Uwaga

Przed włączeniem rozszerzenia DSC chcielibyśmy wiedzieć, że nowsza wersja rozszerzenia DSC jest teraz ogólnie dostępna, zarządzana przez funkcję konfiguracji maszyny o nazwie Azure Automange. Funkcja konfiguracji maszyny łączy funkcje programu obsługi rozszerzenia Desired State Configuration (DSC), usługi Azure Automation State Configuration i najczęściej żądanych funkcji z opinii klientów. Konfiguracja maszyny obejmuje również obsługę maszyn hybrydowych za pośrednictwem serwerów z obsługą usługi Arc.

W tym artykule opisano szablon usługi Azure Resource Manager dla procedury obsługi rozszerzenia Desired State Configuration (DSC). Wiele przykładów używa metody RegistrationURL (podanej jako ciąg) i RegistrationKey (dostarczonej jako psCredential do dołączenia za pomocą usługi Azure Automation). Aby uzyskać szczegółowe informacje na temat uzyskiwania tych wartości, zobacz Używanie metakonfiguracji DSC do rejestrowania maszyn hybrydowych.

Uwaga

Przed włączeniem rozszerzenia DSC chcielibyśmy wiedzieć, że nowsza wersja rozszerzenia DSC jest teraz ogólnie dostępna, zarządzana przez funkcję konfiguracji maszyny o nazwie Azure Automange. Funkcja konfiguracji maszyny łączy funkcje programu obsługi rozszerzenia Desired State Configuration (DSC), usługi Azure Automation State Configuration i najczęściej żądanych funkcji z opinii klientów. Konfiguracja maszyny obejmuje również obsługę maszyn hybrydowych za pośrednictwem serwerów z obsługą usługi Arc.

Uwaga

Możesz napotkać nieco inne przykłady schematów. Zmiana schematu miała miejsce w wydaniu z października 2016 r. Aby uzyskać szczegółowe informacje, zobacz Aktualizowanie z poprzedniego formatu.

Przykład szablonu dla maszyny wirtualnej z systemem Windows

Poniższy fragment kodu jest kierowany do sekcji Zasób szablonu. Rozszerzenie DSC dziedziczy domyślne właściwości rozszerzenia. Aby uzyskać więcej informacji, zobacz VirtualMachineExtension, klasa.

{
  "type": "Microsoft.Compute/virtualMachines/extensions",
  "name": "[concat(parameters('VMName'), '/Microsoft.Powershell.DSC')]",
  "apiVersion": "2018-06-01",
  "location": "[parameters('location')]",
  "dependsOn": [
    "[concat('Microsoft.Compute/virtualMachines/', parameters('VMName'))]"
  ],
  "properties": {
    "publisher": "Microsoft.Powershell",
    "type": "DSC",
    "typeHandlerVersion": "2.77",
    "autoUpgradeMinorVersion": true,
    "protectedSettings": {
      "Items": {
        "registrationKeyPrivate": "[listKeys(resourceId('Microsoft.Automation/automationAccounts/', parameters('automationAccountName')), '2018-06-30').Keys[0].value]"
      }
    },
    "settings": {
      "Properties": [
        {
          "Name": "RegistrationKey",
          "Value": {
            "UserName": "PLACEHOLDER_DONOTUSE",
            "Password": "PrivateSettingsRef:registrationKeyPrivate"
          },
          "TypeName": "System.Management.Automation.PSCredential"
        },
        {
          "Name": "RegistrationUrl",
          "Value": "[reference(concat('Microsoft.Automation/automationAccounts/', parameters('automationAccountName'))).registrationUrl]",
          "TypeName": "System.String"
        },
        {
          "Name": "NodeConfigurationName",
          "Value": "[parameters('nodeConfigurationName')]",
          "TypeName": "System.String"
        }
      ]
    }
  }
}

Przykład szablonu dla zestawów skalowania maszyn wirtualnych z systemem Windows

Węzeł zestawu skalowania maszyn wirtualnych zawiera sekcję właściwości , która ma atrybut VirtualMachineProfile, extensionProfile . W obszarze rozszerzenia dodaj szczegóły rozszerzenia DSC.

Rozszerzenie DSC dziedziczy domyślne właściwości rozszerzenia. Aby uzyskać więcej informacji, zobacz VirtualMachineScaleSetExtension, klasa.

"extensionProfile": {
    "extensions": [
      {
        "name": "Microsoft.Powershell.DSC",
        "properties": {
          "publisher": "Microsoft.Powershell",
          "type": "DSC",
          "typeHandlerVersion": "2.77",
          "autoUpgradeMinorVersion": true,
          "protectedSettings": {
            "Items": {
              "registrationKeyPrivate": "[listKeys(resourceId('Microsoft.Automation/automationAccounts/', parameters('automationAccountName')), '2018-06-30').Keys[0].value]"
            }
          },
          "settings": {
            "Properties": [
              {
                "Name": "RegistrationKey",
                "Value": {
                  "UserName": "PLACEHOLDER_DONOTUSE",
                  "Password": "PrivateSettingsRef:registrationKeyPrivate"
                },
                "TypeName": "System.Management.Automation.PSCredential"
              },
              {
                "Name": "RegistrationUrl",
                "Value": "[reference(concat('Microsoft.Automation/automationAccounts/', parameters('automationAccountName'))).registrationUrl]",
                "TypeName": "System.String"
              },
              {
                "Name": "NodeConfigurationName",
                "Value": "[parameters('nodeConfigurationName')]",
                "TypeName": "System.String"
              }
            ]
          }
        }
      }
    ]
  }

Szczegółowe informacje o ustawieniach

Użyj następującego schematu w sekcji ustawień rozszerzenia DSC platformy Azure w szablonie usługi Resource Manager.

Aby uzyskać listę argumentów dostępnych dla domyślnego skryptu konfiguracji, zobacz Domyślny skrypt konfiguracji.

"settings": {
    "wmfVersion": "latest",
    "configuration": {
        "url": "http://validURLToConfigLocation",
        "script": "ConfigurationScript.ps1",
        "function": "ConfigurationFunction"
    },
    "configurationArguments": {
        "argument1": "Value1",
        "argument2": "Value2"
    },
    "configurationData": {
        "url": "https://foo.psd1"
    },
    "privacy": {
        "dataCollection": "enable"
    },
    "advancedOptions": {
        "downloadMappings": {
            "customWmfLocation": "http://myWMFlocation"
        }
    }
},
"protectedSettings": {
    "configurationArguments": {
        "parameterOfTypePSCredential1": {
            "userName": "UsernameValue1",
            "password": "PasswordValue1"
        },
        "parameterOfTypePSCredential2": {
            "userName": "UsernameValue2",
            "password": "PasswordValue2"
        }
    },
    "configurationUrlSasToken": "?g!bber1sht0k3n",
    "configurationDataUrlSasToken": "?dataAcC355T0k3N"
}

Szczegóły

Nazwa właściwości Typ Opis
settings.wmfVersion string Określa wersję programu Windows Management Framework (WMF), która powinna być zainstalowana na maszynie wirtualnej. Ustawienie tej właściwości na najnowszą wersję programu WMF. Obecnie jedynymi możliwymi wartościami tej właściwości są 4.0, 5.0, 5.1 i najnowsze. Te możliwe wartości podlegają aktualizacjom. Wartość domyślna to najnowsza.
settings.configuration.url string Określa lokalizację adresu URL, z której chcesz pobrać plik konfiguracji DSC .zip. Jeśli podany adres URL wymaga tokenu SAS na potrzeby dostępu, ustaw właściwość protectedSettings.configurationUrlSasToken na wartość tokenu SAS. Ta właściwość jest wymagana, jeśli zdefiniowano właściwość settings.configuration.script lub settings.configuration.function . Jeśli dla tych właściwości nie podano żadnej wartości, rozszerzenie wywołuje domyślny skrypt konfiguracji, aby ustawić metadane programu Location Configuration Manager (LCM) i należy podać argumenty.
settings.configuration.script string Określa nazwę pliku skryptu, który zawiera definicję konfiguracji DSC. Ten skrypt musi znajdować się w folderze głównym pliku .zip pobranego z adresu URL określonego przez właściwość settings.configuration.url . Ta właściwość jest wymagana, jeśli zdefiniowano wartość settings.configuration.url lub settings.configuration.script . Jeśli dla tych właściwości nie podano żadnej wartości, rozszerzenie wywołuje domyślny skrypt konfiguracji w celu ustawienia metadanych LCM i należy podać argumenty.
settings.configuration.function string Określa nazwę konfiguracji DSC. Konfiguracja o nazwie musi być uwzględniona w skry skrycie, który definiuje settings.configuration.script . Ta właściwość jest wymagana, jeśli zdefiniowano element settings.configuration.url lub settings.configuration.function . Jeśli dla tych właściwości nie podano żadnej wartości, rozszerzenie wywołuje domyślny skrypt konfiguracji w celu ustawienia metadanych LCM i należy podać argumenty.
settings.configurationArguments Kolekcja Definiuje wszystkie parametry, które mają zostać przekazane do konfiguracji DSC. Ta właściwość nie jest szyfrowana.
settings.configurationData.url string Określa adres URL, z którego ma być pobierany plik danych konfiguracji (psd1), który ma być używany jako dane wejściowe dla konfiguracji DSC. Jeśli podany adres URL wymaga tokenu SAS na potrzeby dostępu, ustaw właściwość protectedSettings.configurationDataUrlSasToken na wartość tokenu SAS.
settings.privacy.dataCollection string Włącza lub wyłącza zbieranie danych telemetrycznych. Jedynymi możliwymi wartościami tej właściwości są Włączone, Wyłącz, "" lub $null. Pozostawienie tej właściwości pustej lub null powoduje włączenie telemetrii. Wartość domyślna to "". Aby uzyskać więcej informacji, zobacz Zbieranie danych rozszerzenia DSC platformy Azure.
settings.advancedOptions.downloadMappings Kolekcja Definiuje alternatywne lokalizacje, z których mają być pobierane WMF. Aby uzyskać więcej informacji, zobacz Rozszerzenie DSC platformy Azure 2.8 i sposób mapowania pobierania zależności rozszerzeń na własną lokalizację.
protectedSettings.configurationArguments Kolekcja Definiuje wszystkie parametry, które mają zostać przekazane do konfiguracji DSC. Ta właściwość jest szyfrowana.
protectedSettings.configurationUrlSasToken string Określa token SAS używany do uzyskiwania dostępu do adresu URL, który definiuje settings.configuration.url . Ta właściwość jest szyfrowana.
protectedSettings.configurationDataUrlSasToken string Określa token SYGNATURy dostępu współdzielonego używany do uzyskiwania dostępu do adresu URL zdefiniowanego przez parametr settings.configurationData.url . Ta właściwość jest szyfrowana.

Domyślny skrypt konfiguracji

Aby uzyskać więcej informacji na temat następujących wartości, zobacz Ustawienia podstawowe programu Local Configuration Manager. Możesz użyć domyślnego skryptu konfiguracji rozszerzenia DSC, aby skonfigurować tylko właściwości LCM wymienione w poniższej tabeli.

Nazwa właściwości Typ Opis
protectedSettings.configurationArguments.RegistrationKey PsCredential Wymagana właściwość. Określa klucz używany do zarejestrowania węzła w usłudze Azure Automation jako hasło obiektu poświadczeń programu PowerShell. Tę wartość można automatycznie odnaleźć przy użyciu metody listkeys względem konta usługi Automation. Zobacz przykład.
settings.configurationArguments.RegistrationUrl string Wymagana właściwość. Określa adres URL punktu końcowego usługi Automation, pod którym węzeł próbuje się zarejestrować. Tę wartość można automatycznie odnaleźć przy użyciu metody referencyjnej względem konta usługi Automation.
settings.configurationArguments.NodeConfigurationName string Wymagana właściwość. Określa konfigurację węzła na koncie usługi Automation, która ma zostać przypisana do węzła.
settings.configurationArguments.ConfigurationMode string Określa tryb LCM. Prawidłowe opcje to ApplyOnly, ApplyandMonitor i ApplyandAutoCorrect. Wartość domyślna to ApplyandMonitor.
settings.configurationArguments.RefreshFrequencyMins uint32 Określa, jak często LCM próbuje sprawdzić konto usługi Automation pod kątem aktualizacji. Wartość domyślna to 30. Wartość minimalna to 15.
settings.configurationArguments.ConfigurationModeFrequencyMins uint32 Określa, jak często narzędzie LCM weryfikuje bieżącą konfigurację. Wartość domyślna to 15. Wartość minimalna to 15.
settings.configurationArguments.RebootNodeIfNeeded boolean Określa, czy węzeł można automatycznie ponownie uruchomić, jeśli operacja DSC żąda go. Wartość domyślna to false.
settings.configurationArguments.ActionAfterReboot string Określa, co się stanie po ponownym uruchomieniu podczas stosowania konfiguracji. Prawidłowe opcje to ContinueConfiguration i StopConfiguration. Wartość domyślna to ContinueConfiguration.
settings.configurationArguments.AllowModuleOverwrite boolean Określa, czy menedżer LCM zastępuje istniejące moduły w węźle. Wartość domyślna to false.

ustawienia a chronioneUstawienia

Wszystkie ustawienia są zapisywane w pliku tekstowym ustawień na maszynie wirtualnej. Właściwości wymienione w obszarze ustawień są właściwościami publicznymi. Właściwości publiczne nie są szyfrowane w pliku tekstowym ustawień. Właściwości wymienione w obszarze protectedSettings są szyfrowane przy użyciu certyfikatu i nie są wyświetlane w postaci zwykłego tekstu w pliku ustawień na maszynie wirtualnej.

Jeśli konfiguracja wymaga poświadczeń, możesz uwzględnić poświadczenia w obszarze protectedSettings:

"protectedSettings": {
    "configurationArguments": {
        "parameterOfTypePSCredential1": {
               "userName": "UsernameValue1",
               "password": "PasswordValue1"
        }
    }
}

Przykładowy skrypt konfiguracji

W poniższym przykładzie pokazano domyślne zachowanie rozszerzenia DSC, które polega na udostępnieniu ustawień metadanych LCM i zarejestrowaniu się w usłudze Automation DSC. Argumenty konfiguracji są wymagane. Argumenty konfiguracji są przekazywane do domyślnego skryptu konfiguracji w celu ustawienia metadanych LCM.

"settings": {
    "configurationArguments": {
        "RegistrationUrl" : "[parameters('registrationUrl1')]",
        "NodeConfigurationName" : "nodeConfigurationNameValue1"
    }
},
"protectedSettings": {
    "configurationArguments": {
        "RegistrationKey": {
            "userName": "NOT_USED",
            "Password": "registrationKey"
        }
    }
}

Przykład użycia skryptu konfiguracji w usłudze Azure Storage

Poniższy przykład pochodzi z przeglądu programu obsługi rozszerzeń DSC. W tym przykładzie użyto szablonów usługi Resource Manager zamiast poleceń cmdlet do wdrożenia rozszerzenia. Zapisz konfigurację IisInstall.ps1, umieść ją w pliku .zip (na przykład: iisinstall.zip), a następnie przekaż plik w dostępnym adresie URL. W tym przykładzie użyto usługi Azure Blob Storage, ale możesz pobrać .zip pliki z dowolnej lokalizacji.

W szablonie usługi Resource Manager następujący kod instruuje maszynę wirtualną, aby pobrała prawidłowy plik, a następnie uruchom odpowiednią funkcję programu PowerShell:

"settings": {
    "configuration": {
        "url": "https://demo.blob.core.windows.net/iisinstall.zip",
        "script": "IisInstall.ps1",
        "function": "IISInstall"
    }
},
"protectedSettings": {
    "configurationUrlSasToken": "odLPL/U1p9lvcnp..."
}

Przykład użycia przywołynych wartości rejestracji usługi Azure Automation

Poniższy przykład pobiera wartości RegistrationUrl i RegistrationKey , odwołując się do właściwości konta usługi Azure Automation i używając metody listkeys w celu pobrania klucza podstawowego (0). W tym przykładzie parametry automationAccountName i NodeConfigName zostały dostarczone do szablonu.

"settings": {
    "RegistrationUrl" : "[reference(concat('Microsoft.Automation/automationAccounts/', parameters('automationAccountName'))).registrationUrl]",
    "NodeConfigurationName" : "[parameters('NodeConfigName')]"
},
"protectedSettings": {
    "configurationArguments": {
        "RegistrationKey": {
            "userName": "NOT_USED",
            "Password": "[listKeys(resourceId('Microsoft.Automation/automationAccounts/', parameters('automationAccountName')), '2018-01-15').Keys[0].value]"
        }
    }
}

Aktualizuj z poprzedniego formatu

Wszystkie ustawienia w poprzednim formacie rozszerzenia (i które mają właściwości publiczne ModulesUrl, ModuleSource, ModuleVersion, ConfigurationFunction, SasToken lub Properties) automatycznie dostosowują się do bieżącego formatu rozszerzenia. Biegają tak jak wcześniej.

Poniższy schemat pokazuje, jak wyglądał poprzedni schemat ustawień:

"settings": {
    "WMFVersion": "latest",
    "ModulesUrl": "https://UrlToZipContainingConfigurationScript.ps1.zip",
    "SasToken": "SAS Token if ModulesUrl points to private Azure Blob Storage",
    "ConfigurationFunction": "ConfigurationScript.ps1\\ConfigurationFunction",
    "Properties": {
        "ParameterToConfigurationFunction1": "Value1",
        "ParameterToConfigurationFunction2": "Value2",
        "ParameterOfTypePSCredential1": {
            "UserName": "UsernameValue1",
            "Password": "PrivateSettingsRef:Key1"
        },
        "ParameterOfTypePSCredential2": {
            "UserName": "UsernameValue2",
            "Password": "PrivateSettingsRef:Key2"
        }
    }
},
"protectedSettings": {
    "Items": {
        "Key1": "PasswordValue1",
        "Key2": "PasswordValue2"
    },
    "DataBlobUri": "https://UrlToConfigurationDataWithOptionalSasToken.psd1"
}

Oto jak poprzedni format dostosowuje się do bieżącego formatu:

Bieżąca nazwa właściwości Poprzedni odpowiednik schematu
settings.wmfVersion Ustawienia. WMFVersion
settings.configuration.url Ustawienia. ModułyUrl
settings.configuration.script Pierwsza część ustawień. ConfigurationFunction (przed \\)
settings.configuration.function Druga część ustawień. ConfigurationFunction (po \\)
settings.configuration.module.name Ustawienia. Źródło modułu
settings.configuration.module.version Ustawienia. ModuleVersion
settings.configurationArguments Ustawienia. Właściwości
settings.configurationData.url protectedSettings.DataBlobUri (bez tokenu SAS)
settings.privacy.dataCollection Ustawienia. Privacy.dataCollection
settings.advancedOptions.downloadMappings Ustawienia. AdvancedOptions.DownloadMappings
protectedSettings.configurationArguments protectedSettings.Properties
protectedSettings.configurationUrlSasToken Ustawienia. Sygnatura dostępu współdzielonego
protectedSettings.configurationDataUrlSasToken Token SYGNATURY dostępu współdzielonego z identyfikatora protectedSettings.DataBlobUri

Rozwiązywanie problemów

Poniżej przedstawiono niektóre błędy, które mogą wystąpić i jak można je naprawić.

Nieprawidłowe wartości

"Privacy.dataCollection to '{0}'. Jedynymi możliwymi wartościami są "", "Włącz" i "Wyłącz". "WmfVersion to '{0}'. Tylko możliwe wartości to ... i "latest".

Problem: Podana wartość jest niedozwolona.

Rozwiązanie: zmień nieprawidłową wartość na prawidłową wartość. Aby uzyskać więcej informacji, zobacz tabelę w sekcji Szczegóły.

Nieprawidłowy adres URL

"ConfigurationData.url to '{0}'. To nie jest prawidłowy adres URL" "DataBlobUri to '{0}". To nie jest prawidłowy adres URL" "Configuration.url is '{0}". To nie jest prawidłowy adres URL"

Problem: Podany adres URL jest nieprawidłowy.

Rozwiązanie: Sprawdź wszystkie podane adresy URL. Upewnij się, że wszystkie adresy URL rozpoznają prawidłowe lokalizacje, do których rozszerzenie może uzyskać dostęp na maszynie zdalnej.

Nieprawidłowy typ registrationKey

"Nieprawidłowy typ parametru RegistrationKey typu PSCredential".

Problem: Wartość RegistrationKey w pliku protectedSettings.configurationArguments nie może być podana jako dowolny typ inny niż PSCredential.

Rozwiązanie: Zmień wpis protectedSettings.configurationArguments dla registrationKey na typ PSCredential przy użyciu następującego formatu:

"configurationArguments": {
    "RegistrationKey": {
        "userName": "NOT_USED",
        "Password": "RegistrationKey"
    }
}

Nieprawidłowy typ configurationArgument

"Nieprawidłowy typ {0}configurationArguments"

Problem: właściwość ConfigurationArguments nie może rozpoznać obiektu tabeli skrótu.

Rozwiązanie: Ustaw właściwość ConfigurationArguments na tabelę skrótów. Postępuj zgodnie z formatem podanym w poprzednich przykładach. Poszukaj cudzysłowów, przecinków i nawiasów klamrowych.

Zduplikowane konfiguracjeArguments

"Znaleziono zduplikowane argumenty "{0}" zarówno w konfiguracji publicznej, jak i chronionejArguments"

Problem: KonfiguracjeArguments w ustawieniach publicznych i ConfigurationArguments w ustawieniach chronionych mają właściwości o tej samej nazwie.

Rozwiązanie: Usuń jedną z zduplikowanych właściwości.

Brakujące właściwości

"ustawienia. Configuration.function wymaga określenia parametru settings.configuration.url lub settings.configuration.module"

"ustawienia. Configuration.url wymaga określenia ustawienia.configuration.script"

"ustawienia. Configuration.script wymaga określenia parametru settings.configuration.url"

"ustawienia. Configuration.url wymaga, aby określono parametr settings.configuration.function"

"protectedSettings.ConfigurationUrlSasToken wymaga określenia ustawienia.configuration.url"

"protectedSettings.ConfigurationDataUrlSasToken wymaga określenia ustawienia.configurationData.url"

Problem: Zdefiniowana właściwość wymaga innej właściwości, której brakuje.

Rozwiązania:

  • Podaj brakującą właściwość.
  • Usuń właściwość, która wymaga brakującej właściwości.

Następne kroki