Desired State Configuration extensão com modelos de Resource Manager do Azure

Nota

Antes de ativar a extensão DSC, gostaríamos que soubesse que uma versão mais recente do DSC está agora disponível de forma geral, gerida por uma funcionalidade do Azure Automange com o nome configuração do computador. A funcionalidade de configuração do computador combina as funcionalidades do processador de extensões Desired State Configuration (DSC), Automatização do Azure State Configuration e as funcionalidades mais frequentemente pedidas a partir do feedback dos clientes. A configuração do computador também inclui suporte de máquina híbrida através de servidores compatíveis com o Arc.

Este artigo descreve o modelo de Resource Manager do Azure para o processador de extensões Desired State Configuration (DSC). Muitos dos exemplos utilizam RegistrationURL (fornecido como uma Cadeia) e RegistrationKey (fornecido como PSCredential para integrar com Automatização do Azure. Para obter detalhes sobre como obter esses valores, veja Utilizar a metaconfiguração do DSC para registar máquinas híbridas.

Nota

Antes de ativar a extensão DSC, gostaríamos que soubesse que uma versão mais recente do DSC está agora disponível de forma geral, gerida por uma funcionalidade do Azure Automange com o nome configuração do computador. A funcionalidade de configuração do computador combina as funcionalidades do processador de extensões Desired State Configuration (DSC), Automatização do Azure State Configuration e as funcionalidades mais frequentemente pedidas a partir do feedback dos clientes. A configuração do computador também inclui suporte de máquina híbrida através de servidores compatíveis com o Arc.

Nota

Poderá encontrar exemplos de esquema ligeiramente diferentes. A alteração no esquema ocorreu na versão de outubro de 2016. Para obter detalhes, consulte Atualizar a partir de um formato anterior.

Exemplo de modelo para uma VM do Windows

O fragmento seguinte vai para a secção Recurso do modelo. A extensão DSC herda as propriedades de extensão predefinidas. Para obter mais informações, veja VirtualMachineExtension class (Classe VirtualMachineExtension).

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

Exemplo de modelo para conjuntos de dimensionamento de máquinas virtuais do Windows

Um nó de conjunto de dimensionamento de máquinas virtuais tem uma secção de propriedades que tem um atributo VirtualMachineProfile, extensionProfile . Em extensões, adicione os detalhes da Extensão DSC.

A extensão DSC herda as propriedades de extensão predefinidas. Para obter mais informações, veja VirtualMachineScaleSetExtension class (Classe VirtualMachineScaleSetExtension).

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

Informações detalhadas sobre definições

Utilize o seguinte esquema na secção de definições da extensão do Azure DSC num modelo de Resource Manager.

Para obter uma lista dos argumentos disponíveis para o script de configuração predefinido, veja Script de configuração predefinido.

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

Detalhes

Nome da propriedade Tipo Descrição
settings.wmfVersion string Especifica a versão do Windows Management Framework (WMF) que deve ser instalada na VM. Definir esta propriedade como mais recente instala a versão mais recente do WMF. Atualmente, os únicos valores possíveis para esta propriedade são 4.0, 5.0, 5.1 e mais recentes. Estes valores possíveis estão sujeitos a atualizações. O valor predefinido é o mais recente.
settings.configuration.url string Especifica a localização do URL a partir da qual pode transferir a configuração do DSC .zip ficheiro. Se o URL fornecido exigir um token de SAS para acesso, defina a propriedade protectedSettings.configurationUrlSasToken como o valor do token de SAS. Esta propriedade é necessária se settings.configuration.script ou settings.configuration.function estiverem definidos. Se não for dado nenhum valor para estas propriedades, a extensão chama o script de configuração predefinido para definir metadados de localização Configuration Manager (LCM) e os argumentos devem ser fornecidos.
settings.configuration.script string Especifica o nome de ficheiro do script que contém a definição da configuração do DSC. Este script tem de estar na pasta raiz do ficheiro .zip que é transferido a partir do URL especificado pela propriedade settings.configuration.url . Esta propriedade é necessária se settings.configuration.url ou settings.configuration.script estiverem definidos. Se não for dado nenhum valor para estas propriedades, a extensão chama o script de configuração predefinido para definir metadados LCM e os argumentos devem ser fornecidos.
settings.configuration.function string Especifica o nome da configuração do DSC. A configuração com o nome tem de ser incluída no script que settings.configuration.script define. Esta propriedade é necessária se settings.configuration.url ou settings.configuration.function estiverem definidos. Se não for dado nenhum valor para estas propriedades, a extensão chama o script de configuração predefinido para definir metadados LCM e os argumentos devem ser fornecidos.
settings.configurationArguments Coleção Define todos os parâmetros que pretende transmitir para a configuração do DSC. Esta propriedade não está encriptada.
settings.configurationData.url string Especifica o URL a partir do qual pode transferir o ficheiro de dados de configuração (.psd1) para utilizar como entrada para a configuração do DSC. Se o URL fornecido exigir um token de SAS para acesso, defina a propriedade protectedSettings.configurationDataUrlSasToken como o valor do token de SAS.
settings.privacy.dataCollection string Ativa ou desativa a coleção de telemetria. Os únicos valores possíveis para esta propriedade são Ativar, Desativar, '' ou $null. Deixar esta propriedade em branco ou nula ativa a telemetria. O valor predefinido é "". Para obter mais informações, veja Recolha de dados da extensão do Azure DSC.
settings.advancedOptions.downloadMappings Coleção Define localizações alternativas a partir das quais pode transferir o WMF. Para obter mais informações, veja Azure DSC extension 2.8 and how to map downloads of the extension dependencies to your own location (Extensão 2.8 do Azure DSC e como mapear transferências das dependências da extensão para a sua própria localização).
protectedSettings.configurationArguments Coleção Define todos os parâmetros que pretende transmitir para a configuração do DSC. Esta propriedade está encriptada.
protectedSettings.configurationUrlSasToken string Especifica o token de SAS a utilizar para aceder ao URL que settings.configuration.url define. Esta propriedade está encriptada.
protectedSettings.configurationDataUrlSasToken string Especifica o token de SAS a utilizar para aceder ao URL que definições.configurationData.url define. Esta propriedade está encriptada.

Script de configuração predefinido

Para obter mais informações sobre os seguintes valores, veja Definições básicas Configuration Manager locais. Pode utilizar o script de configuração predefinido da extensão DSC para configurar apenas as propriedades LCM listadas na tabela seguinte.

Nome da propriedade Tipo Descrição
protectedSettings.configurationArguments.RegistrationKey PSCredential Propriedade necessária. Especifica a chave utilizada para um nó se registar no serviço Automatização do Azure como a palavra-passe de um objeto de credencial do PowerShell. Este valor pode ser detetado automaticamente com o método listkeys na conta de Automatização. Veja o exemplo.
settings.configurationArguments.RegistrationUrl string Propriedade necessária. Especifica o URL do ponto final de Automatização onde o nó tenta registar-se. Este valor pode ser detetado automaticamente com o método de referência na conta de Automatização.
settings.configurationArguments.NodeConfigurationName string Propriedade necessária. Especifica a configuração do nó na conta de Automatização a atribuir ao nó.
settings.configurationArguments.ConfigurationMode string Especifica o modo para LCM. As opções válidas incluem ApplyOnly, ApplyandMonitor e ApplyandAutoCorrect. O valor predefinido é ApplyandMonitor.
settings.configurationArguments.RefreshFrequencyMins uint32 Especifica a frequência com que o LCM tenta verificar com a conta de Automatização as atualizações. O valor predefinido é 30. O valor mínimo é 15.
settings.configurationArguments.ConfigurationModeFrequencyMins uint32 Especifica a frequência com que o LCM valida a configuração atual. O valor predefinido é 15. O valor mínimo é 15.
settings.configurationArguments.RebootNodeIfNeeded boolean Especifica se um nó pode ser reiniciado automaticamente se uma operação DSC o pedir. O valor predefinido é falso.
settings.configurationArguments.ActionAfterReboot string Especifica o que acontece após um reinício ao aplicar uma configuração. As opções válidas são ContinueConfiguration e StopConfiguration. O valor predefinido é ContinueConfiguration.
settings.configurationArguments.AllowModuleOverwrite boolean Especifica se o LCM substitui os módulos existentes no nó. O valor predefinido é falso.

definições vs. protectedSettings

Todas as definições são guardadas num ficheiro de texto de definições na VM. As propriedades listadas nas definições são propriedades públicas. As propriedades públicas não são encriptadas no ficheiro de texto de definições. As propriedades listadas em protectedSettings são encriptadas com um certificado e não são apresentadas em texto simples no ficheiro de definições na VM.

Se a configuração precisar de credenciais, pode incluir as credenciais em protectedSettings:

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

Script de configuração de exemplo

O exemplo seguinte mostra o comportamento predefinido da extensão DSC, que consiste em fornecer definições de metadados ao LCM e registar-se no serviço DSC de Automatização. São necessários argumentos de configuração. Os argumentos de configuração são transmitidos ao script de configuração predefinido para definir metadados LCM.

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

Exemplo com o script de configuração no Armazenamento do Azure

O exemplo seguinte é da descrição geral do processador de extensões do DSC. Este exemplo utiliza Resource Manager modelos em vez de cmdlets para implementar a extensão. Guarde a configuração do IisInstall.ps1, coloque-a num ficheiro de .zip (por exemplo: iisinstall.zip) e, em seguida, carregue o ficheiro num URL acessível. Este exemplo utiliza o armazenamento de Blobs do Azure, mas pode transferir .zip ficheiros a partir de qualquer localização arbitrária.

No modelo Resource Manager, o seguinte código indica à VM para transferir o ficheiro correto e, em seguida, executar a função adequada do PowerShell:

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

Exemplo com valores de registo Automatização do Azure referenciados

O exemplo seguinte obtém o RegistrationUrl e RegistrationKey ao referenciar as propriedades da conta Automatização do Azure e ao utilizar o método listkeys para obter a Chave Primária (0). Neste exemplo, os parâmetros automationAccountName e NodeConfigName foram fornecidos ao modelo.

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

Atualizar a partir de um formato anterior

Todas as definições num formato anterior da extensão (e que têm as propriedades públicas ModulesUrl, ModuleSource, ModuleVersion, ConfigurationFunction, SasToken ou Properties) adaptam-se automaticamente ao formato atual da extensão. Correm como antes.

O esquema seguinte mostra como era o esquema de definições anteriores:

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

Eis como o formato anterior se adapta ao formato atual:

Nome da Propriedade Atual Equivalente de esquema anterior
settings.wmfVersion definições. WMFVersion
settings.configuration.url definições. ModulesUrl
settings.configuration.script Primeira parte das definições. ConfigurationFunction (antes de \\)
settings.configuration.function Segunda parte das definições. ConfigurationFunction (depois de \\)
settings.configuration.module.name definições. ModuleSource
settings.configuration.module.version definições. ModuleVersion
settings.configurationArguments definições. Propriedades
settings.configurationData.url protectedSettings.DataBlobUri (sem token SAS)
settings.privacy.dataCollection definições. Privacy.dataCollection
settings.advancedOptions.downloadMappings definições. AdvancedOptions.DownloadMappings
protectedSettings.configurationArguments protectedSettings.Properties
protectedSettings.configurationUrlSasToken definições. SasToken
protectedSettings.configurationDataUrlSasToken Token de SAS de protectedSettings.DataBlobUri

Resolução de problemas

Seguem-se alguns dos erros que pode encontrar e como pode corrigi-los.

Valores inválidos

"Privacy.dataCollection is '{0}'. Os únicos valores possíveis são "", "Ativar" e "Desativar". "WmfVersion é '{0}'. Apenas os valores possíveis são... e "mais recente".

Problema: não é permitido um valor fornecido.

Solução: altere o valor inválido para um valor válido. Para obter mais informações, consulte a tabela em Detalhes.

URL inválido

"ConfigurationData.url is '{0}'. Este não é um URL válido" "DataBlobUri é "{0}". Este NÃO é um URL válido" "Configuration.url is '{0}". Este NÃO é um URL válido"

Problema: um URL fornecido não é válido.

Solução: verifique todos os URLs fornecidos. Certifique-se de que todos os URLs são resolvidos para localizações válidas às quais a extensão pode aceder no computador remoto.

Tipo de RegistrationKey inválido

"Tipo inválido para o parâmetro RegistrationKey do tipo PSCredential."

Problema: o valor RegistrationKey em protectedSettings.configurationArguments não pode ser fornecido como qualquer tipo diferente de PSCredential.

Solução: altere a entrada protectedSettings.configurationArguments para RegistrationKey para um tipo PSCredential com o seguinte formato:

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

Tipo de ConfigurationArgument inválido

"ConfigurationArguments type {0}inválido"

Problema: a propriedade ConfigurationArguments não consegue resolver para um objeto de tabela Hash .

Solução: torne a propriedade ConfigurationArguments numa tabela Hash. Siga o formato fornecido nos exemplos anteriores. Cuidado com aspas, vírgulas e chavetas.

Configuração DuplicadaArguments

"Foram encontrados argumentos duplicados '{0}' na configuração pública e protegidaArguments"

Problema: os ConfigurationArguments nas definições públicas e os ConfigurationArguments nas definições protegidas têm propriedades com o mesmo nome.

Solução: remova uma das propriedades duplicadas.

Propriedades em falta

"definições. Configuration.function requer que settings.configuration.url ou settings.configuration.module esteja especificado"

"definições. Configuration.url requer que settings.configuration.script esteja especificado"

"definições. Configuration.script requer que settings.configuration.url esteja especificado"

"definições. Configuration.url requer que settings.configuration.function esteja especificado"

"protectedSettings.ConfigurationUrlSasToken requer que settings.configuration.url esteja especificado"

"protectedSettings.ConfigurationDataUrlSasToken requer que settings.configurationData.url esteja especificado"

Problema: uma propriedade definida precisa de outra propriedade, que está em falta.

Soluções:

  • Indique a propriedade em falta.
  • Remova a propriedade que precisa da propriedade em falta.

Passos seguintes