我曾经使用过 ARM 模板,但在 Visual Studio 中构建 ARM 项目还是个新手。当您创建 VM 资源,然后创建脚本或 DSC 扩展时,除了新的 JSON 之外,还会进行 Powershell 更改,但下次运行 Powershell 脚本时会再次提示输入 _artifactsLocation 和 _artifactsSASToken。
有人能解释一下这些值指的是什么吗?告诉我如何确保资源组的 ARM 模板部署上传随附的附加脚本/DSC 资产并确保它们被执行的文档?我能找到的所有文档都涉及 Web 应用程序,并假设您要上传的资产是一个要运行的 Web 应用程序。
编辑清晰度:当您在 Visual Studio 中将 DSC 资源添加到现有 ARM 项目时,它会添加代码来创建存储容器并上传 DSC 脚本,但这似乎不完整?从 powershell 提示符运行脚本会提示参数不完整,似乎忽略了创建存储帐户的代码(如果不存在)...
答案1
您需要将 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 上。