Powershell

Visual Studio 中的 ARM 項目如何上傳其 DSC(和其他)資產?

  • January 18, 2018

我曾經使用過一些 ARM 模板,但在 Visual Studio 中建構 ARM 項目是新的。當您創建 VM 資源並隨後創建腳本或 DSC 擴展時,除了新的 JSON 之外,還會進行 Powershell 更改,但 Powershell 腳本的下一次執行會提示新的 _artifactsLocation 和 _artifactsSASToken。

有人能解釋一下這些值指的是什麼嗎,請指出如何確保資源組的 ARM 模板部署上傳隨附的附加腳本/DSC 資產並確保它們被執行的文件?我能找到的所有文件都涉及 Web 應用程序,並假設您要上傳的資產是要執行的 Web 應用程序。

為清晰而編輯:當您將 DSC 資源添加到 Visual Studio 中的現有 ARM 項目時,它會添加程式碼以創建儲存容器並上傳 DSC 腳本,但這似乎不完整?從 powershell 提示符執行腳本會提示輸入不完整的參數,似乎忽略了創建儲存帳戶的程式碼(如果它不存在)…

您需要將 DSC zip 文件上傳到 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 上的此範例

引用自:https://serverfault.com/questions/892784