Назад | Перейти на главную страницу

Как проекты ARM в Visual Studio загружают свои DSC (и другие) ресурсы?

Я немного работал с шаблонами ARM, но создание проектов ARM в Visual Studio - новое дело. Когда вы создаете ресурсы виртуальной машины, а затем впоследствии создаете сценарий или расширение DSC, в дополнение к новому JSON вносятся изменения Powershell, но при следующем запуске сценария Powershell снова запрашивается _artifactsLocation и _artifactsSASToken.

Может ли кто-нибудь объяснить, к чему относятся эти значения, указать мне на документацию, чтобы убедиться, что развертывание шаблона ARM для группы ресурсов загружает сопутствующие дополнительные ресурсы сценария / DSC и обеспечивает их выполнение? Вся документация, которую мне удалось найти, относится к веб-приложениям и предполагает, что актив, который вы хотите загрузить, является запускаемым веб-приложением.

РЕДАКТИРОВАТЬ ДЛЯ ЧЕТКОСТИ: когда вы добавляете ресурс DSC в существующий проект ARM в Visual Studio, он добавляет код для создания контейнеров хранения и загрузки сценариев DSC, но это кажется неполным? Запуск сценария из командной строки PowerShell запрашивает неполные параметры, по-видимому, игнорируя код, который создает учетную запись хранения, если она не существует ...

Вам необходимо загрузить zip-файл DSC в учетную запись хранилища Azure. Путь https://<accoutn name>.blob.core.windows.net/<container name>/DSC/<name.zip>.

_artifactsLocation путь к вашей учетной записи хранения, значение https://<accoutn name>.blob.core.windows.net/<container name>.

_artifactsSASToken токен SAS вашей учетной записи хранения. О токене sas см. Здесь ссылка на сайт.

Вы можете получить два значения, используя Power Shell.

$StorageAccountContext = (Get-AzureRmStorageAccount | Where-Object{$_.StorageAccountName -eq $StorageAccountName}).Context

# Generate the value for artifacts location if it is not provided in the parameter file
$ArtifactsLocation = $OptionalParameters[$ArtifactsLocationName]
if ($ArtifactsLocation -eq $null) {
    $ArtifactsLocation = $StorageAccountContext.BlobEndPoint + $StorageContainerName
    $OptionalParameters[$ArtifactsLocationName] = $ArtifactsLocation
}

# Generate the value for artifacts location SAS token if it is not provided in the parameter file
$ArtifactsLocationSasToken = $OptionalParameters[$ArtifactsLocationSasTokenName]
if ($ArtifactsLocationSasToken -eq $null) {
    # Create a SAS token for the storage container - this gives temporary read-only access to the container
    $ArtifactsLocationSasToken = New-AzureStorageContainerSASToken -Container $StorageContainerName -Context $StorageAccountContext -Permission r -ExpiryTime (Get-Date).AddHours(4)
    $ArtifactsLocationSasToken = ConvertTo-SecureString $ArtifactsLocationSasToken -AsPlainText -Force
    $OptionalParameters[$ArtifactsLocationSasTokenName] = $ArtifactsLocationSasToken
 }
}

Посмотри это пример на GitHub.