Condividi tramite


Estensione Desired State Configuration (DSC) con modelli di Azure Resource Manager

Nota

Prima di abilitare l'estensione DSC, si vuole sapere che una versione più recente di DSC è ora disponibile a livello generale, gestita da una funzionalità denominata configurazione del computer. La funzionalità di configurazione del computer include le funzionalità del gestore dell'estensione DSC (Desired State Configuration) e le funzionalità più comunemente richieste dai commenti e suggerimenti dei clienti. La configurazione del computer include anche il supporto del computer ibrido tramite i server abilitati per Arc.

Questo articolo descrive il modello di Azure Resource Manager per il gestore dell'estensione Desired State Configuration (DSC).

Nota

Si potrebbero notare esempi di schema leggermente diversi. La modifica dello schema è avvenuta nella versione di ottobre 2016. Per maggiori dettagli, vedere Aggiornamento da un formato precedente.

Esempio bicep per una macchina virtuale

L'estensione DSC eredita le proprietà di estensione predefinite. Per altre informazioni, vedere VirtualMachineExtension class (Classe VirtualMachineExtension).

@description('URI of the configuration package')
param configUri string

@description('first configuration parameter')
param arg1 string

@description('second configuration parameter')
@secure()
param arg2 string

var configName = split(split(configUri, '/')[4], '.')[0]

resource vm 'Microsoft.Compute/virtualMachines@2023-09-01' existing = {
  name: srvName
}

resource configuration_dscext 'Microsoft.Compute/virtualMachines/extensions@2024-07-01' = {
  name: 'configurationname_dscext'
  parent: vm
  location: location
  properties: {
    publisher: 'Microsoft.Powershell'
    type: 'DSC'
    typeHandlerVersion: '2.77'
    autoUpgradeMinorVersion: true
    settings: {
      wmfVersion: 'latest'
      configuration: {
        url: configUri
        script: 'configurationname_dscext.ps1'
        function: 'configurationname_dscext'
      }
      configurationArguments: {
        arg1: arg1
      }
      advancedOptions: {
        rebootNodeIfNeeded: true
      }
    }
    protectedSettings: {
      configurationArguements: {
        arg2: arg2
      }
    }
  }
}

Esempio Bicep per i set di scalabilità di macchine virtuali Windows

Un nodo del set di scalabilità di macchine virtuali include una sezione che include un attributo extensionProfile . In extensions aggiungere i dettagli per l'estensione DSC.

Per i dettagli più recenti sulla creazione di modelli che distribuiscono le estensioni per set di scalabilità di macchine virtuali, vedere il documento Microsoft.Compute virtualMachineScaleSets

L'estensione DSC eredita le proprietà di estensione predefinite. Per altre informazioni, vedere VirtualMachineScaleSetExtension class (Classe VirtualMachineScaleSetExtension).

Impostazioni e protectedSettings

Tutte le impostazioni vengono salvate in un file di testo delle impostazioni nella macchina virtuale. Le proprietà indicate in settings sono proprietà pubbliche. Le proprietà pubbliche non sono crittografate nel file di testo delle impostazioni. Le proprietà indicate in protectedSettings vengono crittografate con un certificato e non vengono visualizzate in testo normale nel file delle impostazioni nella macchina virtuale.

Se la configurazione richiede credenziali, è possibile includerle in protectedSettings:

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

Esempio di uso dello script di configurazione in Archiviazione di Azure

L'esempio seguente è tratto da Introduzione al gestore dell'estensione DSC (Desired State Configuration) di Azure. Questo esempio usa modelli di Resource Manager anziché i cmdlet per distribuire l'estensione. Salvare la configurazione di IisInstall.ps1, inserirla in un file ZIP (esempio: iisinstall.zip) e quindi caricare il file in un URL accessibile. Questo esempio usa l'archiviazione BLOB di Azure, ma è possibile scaricare file ZIP da qualsiasi percorso.

Nel modello di Resource Manager il codice seguente indica alla VM di scaricare il file corretto e quindi eseguire la funzione PowerShell appropriata:

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

Aggiornamento da un formato precedente

Eventuali impostazioni presenti in un formato precedente dell'estensione (e che hanno le proprietà pubbliche ModulesUrl, ModuleSource, ModuleVersion, ConfigurationFunction, SasToken o Properties) vengono automaticamente adattate al formato corrente dell'estensione ed eseguite come in precedenza.

Lo schema seguente mostra l'aspetto dello schema delle impostazioni precedente:

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

Il formato precedente si adatta al formato corrente come segue:

Nome proprietà corrente Equivalente nello schema precedente
settings.wmfVersion settings.wmfVersion
settings.configuration.url settings.ModulesUrl
settings.configuration.script Prima parte delle impostazioni. ConfigurationFunction (prima di \\)
settings.configuration.function Seconda parte delle impostazioni. ConfigurationFunction (dopo \\)
settings.configuration.module.name settings.ModuleSource
settings.configuration.module.version settings.ModuleVersion
settings.configurationArguments settings.Properties
settings.configurationData.url protectedSettings.DataBlobUri (senza token di firma di accesso condiviso)
settings.privacy.dataCollection settings.Privacy.dataCollection
settings.advancedOptions.downloadMappings settings.advancedOptions.downloadMappings
protectedSettings.configurationArguments protectedSettings.Properties
protectedSettings.configurationUrlSasToken settings.SasToken
protectedSettings.configurationDataUrlSasToken Token di firma di accesso condiviso di protectedSettings.DataBlobUri

Risoluzione dei problemi

Di seguito sono riportati alcuni degli errori che possono verificarsi e la relativa soluzione.

Valori non validi

"Privacy.dataCollection è '{0}'. Gli unici valori possibili sono '', 'Enable' e 'Disable'". "WmfVersion è '{0}'. Gli unici valori possibili sono: ... e "latest".

Problema: un valore specificato non è consentito.

Soluzione: sostituire il valore non valido con un valore valido.

URL non valido

"ConfigurationData.url è '{0}'. URL non valido" "DataBlobUri è '{0}'. URL non valido" "Configuration.url è '{0}'. URL non valido"

Problema: un URL specificato non è valido.

Soluzione: verificare tutti gli URL specificati. Assicurarsi che tutti gli URL si risolvano in percorsi validi a cui l'estensione può accedere nel computer remoto.

Tipo ConfigurationArgument non valido

"Tipo configurationArguments {0} non valido"

Problema: la proprietà ConfigurationArguments non si risolve in un oggetto Hash table.

Soluzione: trasformare la proprietà ConfigurationArguments in un oggetto Hash table. Seguire il formato indicato negli esempi precedenti. Prestare attenzione alle virgolette, alle virgole e alle parentesi graffe.

ConfigurationArguments duplicato

"Trovati argomenti duplicati '{0}' in configurationArguments pubblici e protetti"

Problema: ConfigurationArguments nelle impostazioni pubbliche e ConfigurationArguments nelle impostazioni protette hanno proprietà con lo stesso nome.

Soluzione: rimuovere una delle proprietà duplicate.

Proprietà mancanti

"settings.Configuration.function richiede che venga specificato settings.configuration.url o settings.configuration.module"

"settings.Configuration.url richiede che venga specificato settings.configuration.script"

"settings.Configuration.script richiede che venga specificato settings.configuration.url"

"settings.Configuration.url richiede che venga specificato settings.configuration.function"

"protectedSettings.ConfigurationUrlSasToken richiede che venga specificato settings.configuration.url"

"protectedSettings.ConfigurationDataUrlSasToken richiede che venga specificato settings.configurationData.url"

Problema: una proprietà definita richiede un'altra proprietà mancante.

Soluzioni:

  • Specificare la proprietà mancante.
  • Rimuovere la proprietà che richiede la proprietà mancante.

Passaggi successivi