rozszerzenie Desired State Configuration za pomocą szablonów usługi Azure Resource Manager
Uwaga
Przed włączeniem rozszerzenia DSC chcielibyśmy wiedzieć, że nowsza wersja dsC jest teraz ogólnie dostępna, zarządzana przez funkcję usługi Azure Automange o nazwie konfiguracja maszyny. Funkcja konfiguracji maszyny łączy funkcje obsługi rozszerzeń Desired State Configuration (DSC), Azure Automation State Configuration i najczęściej żądanych funkcji z opinii klientów. Konfiguracja maszyny obejmuje również obsługę maszyny hybrydowej 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 rozszerzeń Desired State Configuration (DSC). Wiele przykładów używa metody RegistrationURL (podanej jako ciąg) i RegistrationKey (podanej jako psCredential do dołączenia za pomocą Azure Automation. Aby uzyskać szczegółowe informacje na temat uzyskiwania tych wartości, zobacz Use DSC metaconfiguration to register hybrid machines (Używanie metakonfiguracji DSC do rejestrowania maszyn hybrydowych).
Uwaga
Przed włączeniem rozszerzenia DSC chcielibyśmy wiedzieć, że nowsza wersja dsC jest teraz ogólnie dostępna, zarządzana przez funkcję usługi Azure Automange o nazwie konfiguracja maszyny. Funkcja konfiguracji maszyny łączy funkcje obsługi rozszerzeń Desired State Configuration (DSC), Azure Automation State Configuration i najczęściej żądanych funkcji z opinii klientów. Konfiguracja maszyny obejmuje również obsługę maszyny hybrydowej za pośrednictwem serwerów z obsługą usługi Arc.
Uwaga
Mogą wystąpić nieco inne przykłady schematów. Zmiana schematu nastąpiła w wersji 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 zawiera sekcję 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 ma 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 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 | ciąg | Określa wersję 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 | ciąg | Określa lokalizację adresu URL, z której należy pobrać plik konfiguracji DSC .zip. Jeśli podany adres URL wymaga tokenu SYGNATURy dostępu współdzielonego, 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 zostanie podana żadna wartość, rozszerzenie wywołuje domyślny skrypt konfiguracji, aby ustawić metadane lokalizacji Configuration Manager (LCM), a argumenty powinny zostać podane. |
settings.configuration.script | ciąg | 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 parametr 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, aby ustawić metadane LCM i należy podać argumenty. |
settings.configuration.function | ciąg | Określa nazwę konfiguracji DSC. Konfiguracja o nazwie musi zostać uwzględniona w skrycie, który definiuje plik settings.configuration.script . Ta właściwość jest wymagana, jeśli zdefiniowano wartość 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, aby ustawić metadane 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 | ciąg | 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 SYGNATURy dostępu współdzielonego, ustaw właściwość protectedSettings.configurationDataUrlSasToken na wartość tokenu SAS. |
settings.privacy.dataCollection | ciąg | Włącza lub wyłącza zbieranie danych telemetrycznych. Jedyne możliwe wartości tej właściwości to Enable, Disable, "" 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 lokalizacje alternatywne, 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 rozszerzenia 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 | ciąg | Określa token sygnatury dostępu współdzielonego używany do uzyskiwania dostępu do adresu URL zdefiniowanego przez parametr settings.configuration.url . Ta właściwość jest szyfrowana. |
protectedSettings.configurationDataUrlSasToken | ciąg | 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 lokalne Configuration Manager podstawowe. Aby skonfigurować tylko właściwości LCM wymienione w poniższej tabeli, możesz użyć domyślnego skryptu konfiguracji rozszerzenia DSC.
Nazwa właściwości | Typ | Opis |
---|---|---|
protectedSettings.configurationArguments.RegistrationKey | PSCredential | Wymagana właściwość. Określa klucz używany dla węzła do zarejestrowania się 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 | ciąg | 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 | ciąg | Wymagana właściwość. Określa konfigurację węzła na koncie usługi Automation do przypisania do węzła. |
settings.configurationArguments.ConfigurationMode | ciąg | Określa tryb LCM. Prawidłowe opcje obejmują ApplyOnly, ApplyandMonitor i ApplyandAutoCorrect. Wartość domyślna to ApplyandMonitor. |
settings.configurationArguments.RefreshFrequencyMins | uint32 | Określa, jak często program 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 program 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 uruchomić ponownie, jeśli operacja DSC żąda go. Wartość domyślna to false. |
settings.configurationArguments.ActionAfterReboot | ciąg | Określa, co się dzieje 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 program LCM zastępuje istniejące moduły w węźle. Wartość domyślna to false. |
ustawienia a ustawienia 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 za pomocą 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 procedury obsługi rozszerzeń DSC.
W tym przykładzie użyto szablonów 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żna pobrać pliki .zip z dowolnej lokalizacji.
W szablonie Resource Manager następujący kod nakazuje maszynie wirtualnej pobranie poprawnego pliku, a następnie uruchomienie odpowiedniej funkcji 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 Azure Automation
Poniższy przykład pobiera wartość RegistrationUrl i RegistrationKey, odwołując się do właściwości konta 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]"
}
}
}
Aktualizacja z poprzedniego formatu
Wszystkie ustawienia w poprzednim formacie rozszerzenia (i które mają publiczne właściwości ModulesUrl, ModuleSource, ModuleVersion, ConfigurationFunction, SasToken lub Properties) automatycznie dostosowują się do bieżącego formatu rozszerzenia. Biegają tak jak wcześniej.
Poniższy schemat przedstawia wygląd poprzedniego schematu 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"
}
Poniżej przedstawiono, 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. ModulesUrl |
settings.configuration.script | Pierwsza część ustawień. ConfigurationFunction (przed \\) |
settings.configuration.function | Druga część ustawień. ConfigurationFunction (po \\) |
settings.configuration.module.name | Ustawienia. ModuleSource |
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}'. Jedyne możliwe wartości to "", "Włącz" i "Wyłącz". "WmfVersion jest '{0}'. Tylko możliwe wartości to ... i "latest".
Problem: Podana wartość jest niedozwolona.
Rozwiązanie: zmień nieprawidłową wartość na prawidłową. 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 są rozpoznawane jako prawidłowe lokalizacje, do których rozszerzenie może uzyskać dostęp na maszynie zdalnej.
Nieprawidłowy typ klucza rejestracji
"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ótów .
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 konfiguracjeArgumenty
"Znaleziono zduplikowane argumenty "{0}" w konfiguracji publicznej 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 parametru settings.configuration.script"
"ustawienia. Configuration.script wymaga określenia parametru settings.configuration.url"
"ustawienia. Configuration.url wymaga określenia parametru 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
- Dowiedz się więcej o używaniu zestawów skalowania maszyn wirtualnych z rozszerzeniem DSC platformy Azure.
- Dowiedz się więcej na temat bezpiecznego zarządzania poświadczeniami w usłudze DSC.
- Zapoznaj się z wprowadzeniem do procedury obsługi rozszerzenia DSC platformy Azure.
- Aby uzyskać więcej informacji na temat rozszerzenia DSC programu PowerShell, przejdź do centrum dokumentacji programu PowerShell.