我有一堆嵌套的 ARM 模板,打算使用 Azure PS 进行部署。
做到这一点的唯一方法是将这些模板托管在 a 中Azure blob container
,然后在中生成SAS token
并发送这两个参数main ARM template
(指向嵌套的参数)。
这是生成 SAS 令牌的 PS:
$SasToken = ConvertTo-SecureString -AsPlainText -Force (New-AzureStorageContainerSASToken -Container $StorageContainerName -Context $StorageAccount.Context -Permission r -ExpiryTime (Get-Date).AddHours(4))
这是我的部署脚本的 2 个部分,它们将令牌传递给主 ARM 模板:
$Parameters['_artifactsLocationSasToken'] = $SasToken
和
New-AzureRmResourceGroupDeployment -Name ((Get-ChildItem $TemplateFile).BaseName + '-' + ((Get-Date).ToUniversalTime()).ToString('MMdd-HHmm')) `
-ResourceGroupName $ResourceGroupName `
-TemplateFile $TemplateFile `
-TemplateParameterObject $Parameters `
-Force -Verbose `
-ErrorVariable ErrorMessages
以下是主 ARM 模板的接收参数声明:
"_artifactsLocationSasToken": {
"type": "securestring"
}
这是同一主 ARM 模板中的嵌套资源模板(恰好是 cosmos db):
{
"apiVersion": "2017-05-10",
"dependsOn": [
"[concat('Microsoft.Resources/deployments/', variables('vnetConfig').Name)]"
],
"name": "[variables('cosmosDbConfig').Name]",
"properties": {
"mode": "Incremental",
"templateLink": {
"uri": "[concat(parameters('_artifactsLocation'), '/', variables('nestedTemplatesFolder'), '/cosmosdb.json', parameters('_artifactsLocationSasToken'))]"
},
"parameters": {
"cosmosDbConfig": {
"value": "[variables('cosmosDbConfig')]"
}
}
},
"type": "Microsoft.Resources/deployments"
}
当我运行这些时,我得到这个错误:
错误:代码=无效模板;消息=部署模板验证失败:“在第 16 行和第 39 列为模板参数“_artifactsLocationSasToken”提供的值无效。
SAS token
如果我在嵌套模板资源(在主模板中)中硬编码并将类型从更改securestring
为string
,它就可以工作!我错过了什么?