Azure 如何在每次部署时创建唯一的Guid,或在ARM模板中向用户隐藏参数newGuid()函数?
我需要使用ARM模板在每个自定义部署中使用唯一标识符来分配资源名称(uniqueName),该名称应该是全局唯一的。根据文档newGuid()以全局唯一标识符的格式返回值。此函数只能在参数的默认值中使用。 由于newGuid()函数只能在parameters部分中调用,但我不想将输入块提供给用户,因为用户可以在部署时编辑该字段,所以如何对用户隐藏该字段,或者是否有其他方法在每次部署时全局创建相同的唯一guid 我已经尝试过在变量部分使用它来创建相同的唯一guid,但它只在部署的几次中有效。我不确定是否存在部署问题,但这可能是因为guid函数并不总是使字段唯一Azure 如何在每次部署时创建唯一的Guid,或在ARM模板中向用户隐藏参数newGuid()函数?,azure,arm-template,Azure,Arm Template,我需要使用ARM模板在每个自定义部署中使用唯一标识符来分配资源名称(uniqueName),该名称应该是全局唯一的。根据文档newGuid()以全局唯一标识符的格式返回值。此函数只能在参数的默认值中使用。 由于newGuid()函数只能在parameters部分中调用,但我不想将输入块提供给用户,因为用户可以在部署时编辑该字段,所以如何对用户隐藏该字段,或者是否有其他方法在每次部署时全局创建相同的唯一guid 我已经尝试过在变量部分使用它来创建相同的唯一guid,但它只在部署的几次中有效。我不确
"variables": {
"uniqueName":"[guid(resourceGroup().id, deployment().name)]"
}
我有这个模板
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"appname": {
"defaultValue": "xyz",
"type": "String"
},
"uniqueName": {
"defaultValue": "[newGuid()]",
"type": "String"
},
"myIdentity": {
"type": "String"
}
},
"variables": {
"location": "[resourceGroup().location]",
"ResourceGroupName": "[resourceGroup().name]"
},
"resources": [
{
"type": "Microsoft.Resources/deploymentScripts",
"apiVersion": "2019-10-01-preview",
"name": "[parameters('uniqueName')]",
"location": "[variables('location')]",
"kind": "AzureCLI",
"identity": {
"type": "UserAssigned",
"userAssignedIdentities": {
"[resourceID('Microsoft.ManagedIdentity/userAssignedIdentities/', parameters('myIdentity'))]": {}
}
},
"properties": {
"AzCliVersion": "2.0.80",
"timeout": "PT10M",
"arguments": "[parameters('appname')]",
"cleanupPreference": "OnSuccess",
"retentionInterval": "P1D",
"supportingScriptUris": [
"https://some-uri/test.sh"
],
"scriptContent": "[concat('./test.sh ', string(parameters('appname')), ' > $AZ_SCRIPTS_OUTPUT_PATH')]"
}
}
],
"outputs": {
"result": {
"type": "String",
"value": "[base64(string(reference(parameters('resourceName')).outputs))]"
}
}
}
某些成功部署后出现的部署错误如下所示
{"code":"DeploymentFailed","message":"At least one resource deployment operation failed. Please list deployment operations for details. Please see https://aka.ms/DeployOperations for usage details.","details":[{"code":"Conflict","message":"{\r\n \"status\": \"canceled\",\r\n \"error\": {\r\n \"code\": \"ResourceDeploymentFailure\",\r\n \"message\": \"The resource operation completed with terminal provisioning state 'canceled'.\",\r\n \"details\": [\r\n {\r\n \"code\": \"DeploymentScriptExceededMaxAllowedTime\"\r\n }\r\n ]\r\n }\r\n}"}]}
第1点:在资源中添加此属性后,此问题得到解决。 添加此属性后,请确保某些容器未运行。手动删除以前失败的部署创建的存储帐户和容器
"cleanupPreference": "Always"
始终:一旦脚本执行进入终端状态,删除自动创建的资源。如果使用现有存储帐户,脚本服务将删除在该存储帐户中创建的文件共享。因为在清理资源之后,deploymentScripts资源可能仍然存在,所以脚本服务会在删除资源之前保留脚本执行结果,例如stdout、outputs、return value等
最初属性设置为“CleanupReference”:“OnSuccess”,它没有删除失败部署中创建的存储帐户和容器,并且在下次部署时出现问题
有关更多详细信息,请查看此
第2点。可以使用newGuid()函数创建唯一标识符,但只能在模板的参数部分创建
这将全局创建唯一的Id,但如果不想显示用户输入框,则guid()也可以使用
"variables": {
"uniqueName":"[guid(resourceGroup().id, deployment().name)]"
}
有关更多详细信息,请参阅。第1点:在参考资料中添加此属性后,此问题已得到解决。 添加此属性后,请确保某些容器未运行。手动删除以前失败的部署创建的存储帐户和容器
"cleanupPreference": "Always"
始终:一旦脚本执行进入终端状态,删除自动创建的资源。如果使用现有存储帐户,脚本服务将删除在该存储帐户中创建的文件共享。因为在清理资源之后,deploymentScripts资源可能仍然存在,所以脚本服务会在删除资源之前保留脚本执行结果,例如stdout、outputs、return value等
最初属性设置为“CleanupReference”:“OnSuccess”,它没有删除失败部署中创建的存储帐户和容器,并且在下次部署时出现问题
有关更多详细信息,请查看此
第2点。可以使用newGuid()函数创建唯一标识符,但只能在模板的参数部分创建
这将全局创建唯一的Id,但如果不想显示用户输入框,则guid()也可以使用
"variables": {
"uniqueName":"[guid(resourceGroup().id, deployment().name)]"
}
有关更多详细信息,请参阅