Поделиться через


Расширение Desired State Configuration (DSC) с использованием шаблонов Azure Resource Manager

Примечание.

Прежде чем включить расширение DSC, мы хотели бы знать, что новая версия DSC теперь общедоступна, управляемая функцией с именем компьютера. Функция конфигурации компьютера включает функции обработчика расширения требуемой конфигурации состояния (DSC) и наиболее часто запрашиваемые функции из отзывов клиентов. Конфигурация компьютера также включает поддержку гибридных компьютеров с помощью серверов с поддержкой Arc.

В этой статье описывается шаблон Azure Resource Manager для обработчика расширения Desired State Configuration (DSC).

Примечание.

Вы можете встретить немного отличающиеся примеры схемы. Изменение в схеме произошло в выпуске за октябрь 2016 года. Дополнительные сведения см. в разделе об обновлении предыдущего формата.

Пример Bicep для виртуальной машины

Расширение DSC наследует свойства расширения по умолчанию. Дополнительные сведения см. в статье о классе 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
      }
    }
  }
}

Пример Bicep для масштабируемых наборов виртуальных машин Windows

Узел масштабируемого набора виртуальных машин содержит раздел, включающий атрибут extensionProfile . В разделе extensions добавьте данные о расширении DSC.

Последние сведения о создании шаблонов, которые развертывают расширения для Масштабируемые наборы виртуальных машин, см. в документе Microsoft.Compute virtualMachineScaleSets

Расширение DSC наследует свойства расширения по умолчанию. Дополнительные сведения см. в статье о классе VirtualMachineScaleSetExtension.

Параметры и защищенныеSettings

Все параметры сохраняются в текстовом файле параметров на виртуальной машине. Свойства, указанные в разделе settings, общедоступные. Общедоступные свойства не зашифрованы в текстовом файле параметров. Свойства, указанные в разделе protectedSettings, зашифрованы с помощью сертификата, а это значит, что они не отображаются как обычный текст в файле параметров на виртуальной машине.

Если для конфигурации нужны учетные данные, их можно добавить в раздел protectedSettings.

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

Пример с использованием скрипта конфигурации в службе хранилища Azure

Указанный ниже пример основан на примере конфигурации в статье Общие сведения об обработчике расширения Desired State Configuration в Azure. В этом примере для развертывания расширения используются шаблоны Resource Manager, а не командлеты. Сохраните конфигурацию IisInstall.ps1, добавьте ее в ZIP-файл (пример: iisinstall.zip) и передайте файл на доступный URL-адрес. В этом примере используется хранилище BLOB-объектов Azure, но ZIP-файл можно скачать из любого произвольного расположения.

В шаблоне Resource Manager следующий код указывает виртуальной машине скачать правильный файл и выполнить соответствующую функцию PowerShell.

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

Обновление из предыдущего формата

Все параметры в предыдущем формате расширения (содержащие общедоступные свойства ModulesUrl, ModuleSource, ModuleVersion, ConfigurationFunction, SasToken или Properties) автоматически адаптируются к текущему формату расширения. и выполняются в обычном режиме.

Раньше схема settings выглядела следующим образом:

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

Вот как меняется предыдущий формат:

Имя текущего свойства Предыдущий эквивалент схемы
settings.wmfVersion settings.wmfVersion
settings.configuration.url settings.ModulesUrl
settings.configuration.script Первая часть свойства settings.ConfigurationFunction (before \\)
settings.configuration.function Вторая часть свойства settings.ConfigurationFunction (after \\)
settings.configuration.module.name settings.ModuleSource
settings.configuration.module.version settings.ModuleVersion
settings.configurationArguments settings.Properties
settings.configurationData.url protectedSettings.DataBlobUri (без маркера SAS)
settings.privacy.dataCollection settings.Privacy.dataCollection
settings.advancedOptions.downloadMappings settings.advancedOptions.downloadMappings
protectedSettings.configurationArguments protectedSettings.Properties
protectedSettings.configurationUrlSasToken settings.SasToken
protectedSettings.configurationDataUrlSasToken Маркер SAS из свойства protectedSettings.DataBlobUri

Устранение неполадок

Ниже приведены некоторые общие ошибки и способы их устранения.

Недопустимые значения

"Privacy.dataCollection имеет значение "{0}". Единственные возможные значения это "Enable" и "Disable". "WmfVersion имеет значение "{0}". Возможные значения: … и "latest".

Проблема: предоставленное значение не допускается.

Решение. Замените недопустимое значение допустимым.

Недопустимый URL-адрес.

"ConfigurationData.url имеет значение "{0}". Это недопустимый URL-адрес." "DataBlobUri имеет значение "{0}". Это недопустимый URL-адрес." "Configuration.url имеет значение "{0}". This is not a valid URL" (Значение свойства Configuration.url — "{0}". Это недопустимый URL-адрес).

Проблема: указанный URL-адрес недействителен.

Решение. Проверьте все указанные URL-адреса. Убедитесь, что все URL-адреса разрешаются в допустимые расположения, к которым расширение может получить доступ на удаленном компьютере.

Недопустимый тип свойства ConfigurationArgument

"Недопустимый тип ConfigurationArgument: {0}"

Проблема. Невозможно разрешить свойство ConfigurationArguments в объект Hash table.

Решение. Задайте для свойства ConfigurationArguments тип Hash table. Следуйте формату из приведенного выше примеров. Обращайте внимание на кавычки, запятые и скобки.

Повторяющееся свойство ConfigurationArguments

"В общедоступном и защищенном свойстве configurationArguments найден повторяющийся аргумент "{0}"

Проблема. Свойства ConfigurationArguments из общедоступной схемы settings и ConfigurationArguments из защищенной схемы settings имеют свойства с одинаковыми именами.

Решение. Удалите одно из повторяющихся свойств.

Отсутствующие свойства

"settings.сonfiguration.function requires that configuration.url or settings.configuration.module is specified" (Для параметра settings.configuration.function требуется указать свойство settings.configuration.url или configuration.module)

"settings.сonfiguration.url requires that settings.сonfiguration.script is specified" (Для параметра settings.сonfiguration.url требуется указать свойство settings.сonfiguration.script)

"settings.сonfiguration.script requires that settings.сonfiguration.url is specified" (Для параметра settings.сonfiguration.script требуется указать свойство settings.сonfiguration.url)

"settings.сonfiguration.url requires that settings.сonfiguration.function is specified" (Для параметра settings.сonfiguration.function требуется указать свойство settings.сonfiguration.url)

"protectedSettings.ConfigurationUrlSasToken.url requires that settings.сonfiguration.function is specified" (Для параметра protectedSettings.ConfigurationUrlSasToken.url требуется указать свойство settings.сonfiguration.url)

"protectedSettings.ConfigurationDataUrlSasToken.url requires that settings.сonfiguration.function is specified" (Для параметра protectedSettings.ConfigurationDataUrlSasToken.url требуется указать свойство settings.сonfiguration.url)

Проблема. Для заданного свойства требуется другое свойство, которое отсутствует.

Решения:

  • Укажите отсутствующее свойство.
  • Удалите свойство, требующее отсутствующего свойства.

Следующие шаги