Como os projetos ARM no Visual Studio carregam seus ativos DSC (e outros)?

1

Eu trabalhei com modelos de ARM um pouco, mas a criação de projetos de ARM no Visual Studio é nova. Quando você cria recursos de VM e, subsequentemente, cria um script ou uma extensão DSC, além do novo JSON, as alterações do Powershell são feitas, mas a próxima execução do script Powershell solicita recentemente _artifactsLocation e _artifactsSASToken.

Alguém pode explicar a que esses valores se referem? Mencione-me na documentação como garantir que uma implantação de modelo ARM para um grupo de recursos carregue os recursos adicionais de script / DSC que acompanham e garanta que eles sejam executados? Toda a documentação que consegui encontrar refere-se a aplicativos da web e presume que o recurso que você deseja enviar é um aplicativo da web para ser executado.

EDIT FOR CLARITY: Quando você adiciona um recurso DSC a um projeto ARM existente no Visual Studio, ele adiciona código para criar contêineres de armazenamento e carregar os scripts DSC, mas isso parece incompleto? Executar o script a partir de um prompt do powershell solicita parâmetros incompletos, aparentemente ignorando o código que cria uma conta de armazenamento, se ela não existir ...

    
por Elomis 18.01.2018 / 02:58

1 resposta

1

Você precisa fazer upload do seu arquivo zip do DSC para a conta do Armazenamento do Azure. O caminho é https://<accoutn name>.blob.core.windows.net/<container name>/DSC/<name.zip> .

_artifactsLocation é o caminho da sua conta de armazenamento, o valor é https://<accoutn name>.blob.core.windows.net/<container name> .

_artifactsSASToken é sua conta de armazenamento SAS Token. Sobre o token sas, consulte este link .

Você pode obter os dois valores usando o 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
 }
}

Veja este exemplo no GitHub .

    
por 18.01.2018 / 03:23