Share via


Desired State Configuration-extensie met Azure Resource Manager-sjablonen

Notitie

Voordat u de DSC-extensie inschakelt, willen we graag dat u weet dat er nu een nieuwere versie van DSC algemeen beschikbaar is, die wordt beheerd door een functie van Azure Automange met de naam machineconfiguratie. De functie voor machineconfiguratie combineert functies van de dsc-extensiehandler (Desired State Configuration), Azure Automation State Configuration en de meest gevraagde functies uit feedback van klanten. Machineconfiguratie omvat ook ondersteuning voor hybride machines via servers met Arc.

In dit artikel wordt de Azure Resource Manager-sjabloon voor de extensie-handler Desired State Configuration (DSC) beschreven. Veel van de voorbeelden gebruiken RegistrationURL (geleverd als een tekenreeks) en RegistrationKey (geleverd als een PSCredential voor onboarding met Azure Automation. Zie DSC-metaconfiguratie gebruiken om hybride machines te registreren voor meer informatie over het verkrijgen van deze waarden.

Notitie

Voordat u de DSC-extensie inschakelt, willen we graag dat u weet dat er nu een nieuwere versie van DSC algemeen beschikbaar is, die wordt beheerd door een functie van Azure Automange met de naam machineconfiguratie. De functie voor machineconfiguratie combineert functies van de dsc-extensiehandler (Desired State Configuration), Azure Automation State Configuration en de meest gevraagde functies uit feedback van klanten. Machineconfiguratie omvat ook ondersteuning voor hybride machines via servers met Arc.

Notitie

U kunt iets andere schemavoorbeelden tegenkomen. De wijziging in het schema is opgetreden in de release van oktober 2016. Zie Bijwerken van een eerdere indeling voor meer informatie.

Voorbeeld van een sjabloon voor een Windows-VM

Het volgende codefragment wordt weergegeven in de sectie Resource van de sjabloon. De DSC-extensie neemt standaarduitbreidingseigenschappen over. Zie De klasse VirtualMachineExtension voor meer informatie.

{
  "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"
        }
      ]
    }
  }
}

Sjabloonvoorbeeld voor virtuele-machineschaalsets van Windows

Een knooppunt van een virtuele-machineschaalset heeft een eigenschappensectie met het kenmerk VirtualMachineProfile extensionProfile . Voeg onder extensies de details voor DSC-extensie toe.

De DSC-extensie neemt standaarduitbreidingseigenschappen over. Zie de klasse VirtualMachineScaleSetExtension voor meer informatie.

"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"
              }
            ]
          }
        }
      }
    ]
  }

Gedetailleerde informatie over instellingen

Gebruik het volgende schema in de sectie instellingen van de Azure DSC-extensie in een Resource Manager-sjabloon.

Zie Standaardconfiguratiescript voor een lijst met argumenten die beschikbaar zijn voor het standaardconfiguratiescript.

"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"
}

Details

Naam van eigenschap Type Description
settings.wmfVersion tekenreeks Hiermee geeft u de versie van Windows Management Framework (WMF) op die op uw VM moet worden geïnstalleerd. Als u deze eigenschap instelt op nieuwste , wordt de meest recente versie van WMF geïnstalleerd. Op dit moment zijn de enige mogelijke waarden voor deze eigenschap 4.0, 5.0, 5.1 en nieuwste. Deze mogelijke waarden zijn onderhevig aan updates. De standaardwaarde is nieuwste.
settings.configuration.url tekenreeks Hiermee geeft u de URL-locatie van waaruit uw DSC-configuratie .zip bestand te downloaden. Als voor de opgegeven URL een SAS-token is vereist voor toegang, stelt u de eigenschap protectedSettings.configurationUrlSasToken in op de waarde van uw SAS-token. Deze eigenschap is vereist als settings.configuration.script of settings.configuration.function zijn gedefinieerd. Als er geen waarde wordt opgegeven voor deze eigenschappen, roept de extensie het standaardconfiguratiescript aan om LCM-metagegevens (Location Configuration Manager) in te stellen en moeten argumenten worden opgegeven.
settings.configuration.script tekenreeks Hiermee geeft u de bestandsnaam van het script dat de definitie van uw DSC-configuratie bevat. Dit script moet zich in de hoofdmap bevinden van het .zip-bestand dat is gedownload van de URL die is opgegeven door de eigenschap settings.configuration.url . Deze eigenschap is vereist als settings.configuration.url of settings.configuration.script zijn gedefinieerd. Als er geen waarde wordt opgegeven voor deze eigenschappen, roept de extensie het standaardconfiguratiescript aan om LCM-metagegevens in te stellen en moeten argumenten worden opgegeven.
settings.configuration.function tekenreeks Hiermee geeft u de naam van uw DSC-configuratie. De configuratie met de naam moet worden opgenomen in het script dat door settings.configuration.script wordt gedefinieerd. Deze eigenschap is vereist als settings.configuration.url of settings.configuration.function zijn gedefinieerd. Als er geen waarde wordt opgegeven voor deze eigenschappen, roept de extensie het standaardconfiguratiescript aan om LCM-metagegevens in te stellen en moeten argumenten worden opgegeven.
settings.configurationArguments Verzameling Definieert alle parameters die u wilt doorgeven aan uw DSC-configuratie. Deze eigenschap is niet versleuteld.
settings.configurationData.url tekenreeks Hiermee geeft u de URL op van waaruit het bestand met configuratiegegevens (.psd1) moet worden gedownload om te gebruiken als invoer voor uw DSC-configuratie. Als voor de opgegeven URL een SAS-token is vereist voor toegang, stelt u de eigenschap protectedSettings.configurationDataUrlSasToken in op de waarde van uw SAS-token.
settings.privacy.dataCollection tekenreeks Hiermee schakelt u telemetrieverzameling in of uit. De enige mogelijke waarden voor deze eigenschap zijn Inschakelen, Uitschakelen, '' of $null. Als u deze eigenschap leeg of null laat, wordt telemetrie ingeschakeld. De standaardwaarde is ''. Zie Azure DSC-extensiegegevens verzamelen voor meer informatie.
settings.advancedOptions.downloadMappings Verzameling Definieert alternatieve locaties van waaruit WMF moet worden gedownload. Zie Azure DSC-extensie 2.8 en downloads van de extensieafhankelijkheden toewijzen aan uw eigen locatie voor meer informatie.
protectedSettings.configurationArguments Verzameling Definieert alle parameters die u wilt doorgeven aan uw DSC-configuratie. Deze eigenschap is versleuteld.
protectedSettings.configurationUrlSasToken tekenreeks Hiermee geeft u het SAS-token op dat moet worden gebruikt voor toegang tot de URL die settings.configuration.url definieert. Deze eigenschap is versleuteld.
protectedSettings.configurationDataUrlSasToken tekenreeks Hiermee geeft u het SAS-token op dat moet worden gebruikt voor toegang tot de URL die settings.configurationData.url definieert. Deze eigenschap is versleuteld.

Standaardconfiguratiescript

Zie Basisinstellingen voor lokale Configuration Manager voor meer informatie over de volgende waarden. U kunt het standaardconfiguratiescript voor de DSC-extensie gebruiken om alleen de LCM-eigenschappen te configureren die in de volgende tabel worden vermeld.

Naam van eigenschap Type Description
protectedSettings.configurationArguments.RegistrationKey PSCredential Vereiste eigenschap. Hiermee geeft u de sleutel op die wordt gebruikt voor een knooppunt om te registreren bij de Azure Automation-service als het wachtwoord van een PowerShell-referentieobject. Deze waarde kan automatisch worden gedetecteerd met behulp van de listkeys-methode voor het Automation-account. Zie het voorbeeld.
settings.configurationArguments.RegistrationUrl tekenreeks Vereiste eigenschap. Hiermee geeft u de URL op van het Automation-eindpunt waar het knooppunt probeert te registreren. Deze waarde kan automatisch worden gedetecteerd met behulp van de verwijzingsmethode voor het Automation-account.
settings.configurationArguments.NodeConfigurationName tekenreeks Vereiste eigenschap. Hiermee geeft u de knooppuntconfiguratie in het Automation-account toe te wijzen aan het knooppunt.
settings.configurationArguments.ConfigurationMode tekenreeks Hiermee geeft u de modus voor LCM. Geldige opties zijn ApplyOnly, ApplyandMonitor en ApplyandAutoCorrect. De standaardwaarde is ApplyandMonitor.
settings.configurationArguments.RefreshFrequencyMins uint32 Hiermee geeft u op hoe vaak LCM probeert te controleren met het Automation-account op updates. De standaardwaarde is 30. De minimumwaarde is 15.
settings.configurationArguments.ConfigurationModeFrequencyMins uint32 Hiermee geeft u op hoe vaak LCM de huidige configuratie valideert. De standaardwaarde is 15. De minimumwaarde is 15.
settings.configurationArguments.RebootNodeIfNeeded booleaans Hiermee geeft u op of een knooppunt automatisch opnieuw kan worden opgestart als een DSC-bewerking dit aanvraagt. De standaardwaarde is false.
settings.configurationArguments.ActionAfterReboot tekenreeks Hiermee geeft u op wat er gebeurt na het opnieuw opstarten bij het toepassen van een configuratie. Geldige opties zijn ContinueConfiguration en StopConfiguration. De standaardwaarde is ContinueConfiguration.
settings.configurationArguments.AllowModuleOverwrite booleaans Hiermee geeft u op of LCM bestaande modules op het knooppunt overschrijft. De standaardwaarde is false.

settings versus protectedSettings

Alle instellingen worden opgeslagen in een tekstbestand voor instellingen op de VM. Eigenschappen die worden vermeld onder instellingen zijn openbare eigenschappen. Openbare eigenschappen worden niet versleuteld in het tekstbestand instellingen. Eigenschappen die worden vermeld onder protectedSettings worden versleuteld met een certificaat en worden niet weergegeven als tekst zonder opmaak in het instellingenbestand op de VM.

Als de configuratie referenties nodig heeft, kunt u de referenties opnemen in protectedSettings:

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

Voorbeeld van configuratiescript

In het volgende voorbeeld ziet u het standaardgedrag voor de DSC-extensie. Dit is het verstrekken van metagegevensinstellingen aan LCM en het registreren bij de Automation DSC-service. Configuratieargumenten zijn vereist. Configuratieargumenten worden doorgegeven aan het standaardconfiguratiescript om LCM-metagegevens in te stellen.

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

Voorbeeld met behulp van het configuratiescript in Azure Storage

Het volgende voorbeeld is afkomstig uit het overzicht van de DSC-extensiehandler. In dit voorbeeld worden Resource Manager sjablonen gebruikt in plaats van cmdlets om de extensie te implementeren. Sla de IisInstall.ps1 configuratie op, plaats deze in een .zip-bestand (bijvoorbeeld) iisinstall.zipen upload het bestand vervolgens in een toegankelijke URL. In dit voorbeeld wordt Azure Blob Storage gebruikt, maar u kunt .zip bestanden downloaden vanaf elke willekeurige locatie.

In de sjabloon Resource Manager wordt de vm met de volgende code geïnstrueerd om het juiste bestand te downloaden en vervolgens de juiste PowerShell-functie uit te voeren:

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

Voorbeeld met registratiewaarden waarnaar wordt verwezen Azure Automation

In het volgende voorbeeld worden de RegistrationUrl en RegistrationKey opgehaald door te verwijzen naar de Azure Automation accounteigenschappen en de methode listkeys te gebruiken om de primaire sleutel (0) op te halen. In dit voorbeeld zijn de parameters automationAccountName en NodeConfigName opgegeven voor de sjabloon.

"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]"
        }
    }
}

Bijwerken vanuit een eerdere indeling

Alle instellingen in een eerdere indeling van de extensie (en die de openbare eigenschappen ModulesUrl, ModuleSource, ModuleVersion, ConfigurationFunction, SasToken of Properties hebben) worden automatisch aangepast aan de huidige indeling van de extensie. Ze rennen net zoals ze eerder deden.

In het volgende schema ziet u hoe het vorige instellingenschema eruit zag:

"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"
}

De vorige indeling wordt als volgt aangepast aan de huidige indeling:

Naam van huidige eigenschap Vorige schema-equivalent
settings.wmfVersion Instellingen. WMFVersion
settings.configuration.url Instellingen. ModulesUrl
settings.configuration.script Eerste deel van de instellingen. ConfigurationFunction (vóór \\)
settings.configuration.function Tweede deel van de instellingen. ConfigurationFunction (na \\)
settings.configuration.module.name Instellingen. ModuleSource
settings.configuration.module.version Instellingen. ModuleVersion
settings.configurationArguments Instellingen. Eigenschappen
settings.configurationData.url protectedSettings.DataBlobUri (zonder SAS-token)
settings.privacy.dataCollection Instellingen. Privacy.dataCollection
settings.advancedOptions.downloadMappings Instellingen. AdvancedOptions.DownloadMappings
protectedSettings.configurationArguments protectedSettings.Properties
protectedSettings.configurationUrlSasToken Instellingen. SasToken
protectedSettings.configurationDataUrlSasToken SAS-token van protectedSettings.DataBlobUri

Problemen oplossen

Hier volgen enkele van de fouten die u kunt tegenkomen en hoe u deze kunt oplossen.

Ongeldige waarden

"Privacy.dataCollection is '{0}'. De enige mogelijke waarden zijn '', 'Enable' en 'Disable''. "WmfVersion is '{0}'. Alleen mogelijke waarden zijn ... en 'nieuwste'.

Probleem: een opgegeven waarde is niet toegestaan.

Oplossing: Wijzig de ongeldige waarde in een geldige waarde. Zie de tabel in Details voor meer informatie.

Ongeldige URL

"ConfigurationData.url is '{0}'. Dit is geen geldige URL: 'DataBlobUri is '{0}'. Dit is geen geldige URL' Configuration.url is '{0}'. Dit is geen geldige URL'

Probleem: een opgegeven URL is niet geldig.

Oplossing: Controleer al uw opgegeven URL's. Zorg ervoor dat alle URL's worden omgezet naar geldige locaties waartoe de extensie toegang heeft op de externe computer.

Ongeldig type RegistrationKey

"Ongeldig type voor parameter RegistrationKey van het type PSCredential."

Probleem: De waarde RegistrationKey in protectedSettings.configurationArguments kan niet worden opgegeven als een ander type dan een PSCredential.

Oplossing: Wijzig de vermelding protectedSettings.configurationArguments voor RegistrationKey in een PSCredential-type met de volgende indeling:

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

Ongeldig ConfigurationArgument-type

"Ongeldig configurationArguments type {0}"

Probleem: de eigenschap ConfigurationArguments kan niet worden omgezet in een hash-tabelobject .

Oplossing: Maak van de eigenschap ConfigurationArguments een Hash-tabel. Volg de indeling in de voorgaande voorbeelden. Let op aanhalingstekens, komma's en accolades.

Dubbele configuratieargumenten

"Dubbele argumenten gevonden in{0} zowel openbare als beveiligde configuratieArguments"

Probleem: De ConfigurationArguments in openbare instellingen en de ConfigurationArguments in beveiligde instellingen hebben eigenschappen met dezelfde naam.

Oplossing: Verwijder een van de dubbele eigenschappen.

Ontbrekende eigenschappen

"settings. Configuration.function vereist dat settings.configuration.url of settings.configuration.module is opgegeven'

"settings. Configuration.url vereist dat settings.configuration.script is opgegeven'

"settings. Configuration.script vereist dat settings.configuration.url is opgegeven'

"settings. Configuration.url vereist dat settings.configuration.function is opgegeven'

"protectedSettings.ConfigurationUrlSasToken vereist dat settings.configuration.url is opgegeven"

"protectedSettings.ConfigurationDataUrlSasToken vereist dat settings.configurationData.url is opgegeven"

Probleem: Een gedefinieerde eigenschap heeft een andere eigenschap nodig, die ontbreekt.

Oplossingen:

  • Geef de ontbrekende eigenschap op.
  • Verwijder de eigenschap die de ontbrekende eigenschap nodig heeft.

Volgende stappen