gpt4 book ai didi

azure - 在嵌套 ARM 模板中使用 resourceId 函数时出错

转载 作者:行者123 更新时间:2023-12-03 03:49:31 25 4
gpt4 key购买 nike

我尝试在嵌套模板中部署函数应用程序(应用程序服务)、应用程序服务计划和 Azure 存储帐户,但当我尝试部署时出现错误:

Status Message: The Resource 'Microsoft.Storage/storageAccounts/saaccountname389' under resource group '<null>' was not found. For more details please go to https://aka.ms/ARMResourceNotFoundFix (Code:ResourceNotFound)

导致模板失败的部分位于函数应用属性的 appSettings 中,该部分尝试列出存储帐户 key 。我见过的所有示例模板(包括 Azure 中的导出模板选项),都按照我的代码使用 listKeys(resourceId('Microsoft.Storage/storageAccounts', 'storageaccountnamehere') 执行此操作:

"appSettings": [
{
"name": "AzureWebJobsStorage",
"value": "[concat('DefaultEndpointsProtocol=https;AccountName=',variables('Resources').FunctionStorageAccName,';AccountKey=',listKeys(resourceId('Microsoft.Storage/storageAccounts', variables('Resources').FunctionStorageAccName), '2019-06-01').keys[0].value,';EndpointSuffix=','core.windows.net')]"
},
{
"name": "WEBSITE_CONTENTAZUREFILECONNECTIONSTRING",
"value": "[concat('DefaultEndpointsProtocol=https;AccountName=',variables('Resources').FunctionStorageAccName,';AccountKey=',listKeys(resourceId('Microsoft.Storage/storageAccounts', variables('Resources').FunctionStorageAccName), '2019-06-01').keys[0].value,';EndpointSuffix=','core.windows.net')]"
}

我看到的模板和我见过的其他模板之间的唯一区别是我的模板是嵌套的,我认为我可能没有在嵌套模板中正确使用resourceId,但是我真的无法弄清楚我需要做什么不同的是,MS 文档没有指出太多清晰度:https://learn.microsoft.com/en-us/azure/azure-resource-manager/templates/scope-functions?tabs=azure-powershell .

我尝试了 resourcesId 函数的许多变体,例如包含资源组名称、资源组名称和订阅 ID - 所有返回的错误都略有不同。

完整的嵌套模板如下:

{
"name": "data",
"type": "Microsoft.Resources/deployments",
"apiVersion": "2017-05-10",
"resourceGroup": "[variables('ResourceGroups').RGFunction]",
"dependsOn": [
"[resourceId('Microsoft.Resources/resourceGroups',variables('ResourceGroups').RGFunction)]"
],
"properties": {
"mode": "Incremental",
"template": {
"$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"resources": [
{
"apiVersion": "2018-11-01",
"name": "[variables('Resources').FunctionName]",
"type": "Microsoft.Web/sites",
"kind": "functionapp",
"location": "[parameters('locationName')]",
"tags": {},
"dependsOn": [
"[variables('Resources').FunctionASPName]",
"[variables('Resources').FunctionStorageAccName]"
],
"properties": {
"name": "[variables('Resources').FunctionName]",
"siteConfig": {
"appSettings": [
{
"name": "FUNCTIONS_EXTENSION_VERSION",
"value": "~3"
},
{
"name": "FUNCTIONS_WORKER_RUNTIME",
"value": "dotnet"
},
{
"name": "AzureWebJobsStorage",
"value": "[concat('DefaultEndpointsProtocol=https;AccountName=',variables('Resources').FunctionStorageAccName,';AccountKey=',listKeys(resourceId('Microsoft.Storage/storageAccounts', variables('Resources').FunctionStorageAccName), '2019-06-01').keys[0].value,';EndpointSuffix=','core.windows.net')]"
},
{
"name": "WEBSITE_CONTENTAZUREFILECONNECTIONSTRING",
"value": "[concat('DefaultEndpointsProtocol=https;AccountName=',variables('Resources').FunctionStorageAccName,';AccountKey=',listKeys(resourceId('Microsoft.Storage/storageAccounts', variables('Resources').FunctionStorageAccName), '2019-06-01').keys[0].value,';EndpointSuffix=','core.windows.net')]"
},
{
"name": "WEBSITE_CONTENTSHARE",
"value": "[concat(toLower(variables('Resources').FunctionName), 'a97a')]"
}
],
"use32BitWorkerProcess": true
},
"serverFarmId": "[concat('/subscriptions/', subscription().subscriptionId,'/resourcegroups/', variables('ResourceGroups').RGFunction, '/providers/Microsoft.Web/serverfarms/', variables('Resources').FunctionASPName)]",
"clientAffinityEnabled": false
}
},
{
"apiVersion": "2018-11-01",
"name": "[variables('Resources').FunctionASPName]",
"type": "Microsoft.Web/serverfarms",
"location": "[parameters('locationName')]",
"kind": "",
"tags": {},
"dependsOn": [],
"properties": {
"name": "[variables('Resources').FunctionASPName]",
"workerSize": "[parameters('FunctionConfiguration').ASPworkerSize]",
"workerSizeId": "[parameters('FunctionConfiguration').ASPworkerSize]",
"numberOfWorkers": "[parameters('FunctionConfiguration').ASPnumberOfWorkers]"
},
"sku": {
"Tier": "[parameters('FunctionConfiguration').ASPsku]",
"Name": "[parameters('FunctionConfiguration').ASPskuCode]"
}
},
{
"apiVersion": "2019-06-01",
"type": "Microsoft.Storage/storageAccounts",
"name": "[variables('Resources').FunctionStorageAccName]",
"location": "[parameters('locationName')]",
"tags": {},
"sku": {
"name": "Standard_LRS"
},
"properties": {
"supportsHttpsTrafficOnly": true,
"minimumTlsVersion": "TLS1_2"
}
}
]
}
}
}

最佳答案

您将嵌套模板的范围限定到与父资源组不同的资源组中。看来您的存储帐户与您要部署的功能位于不同的 RG 中。默认情况下,resourceId 函数假定资源与您进行模板部署的资源位于同一 RG 中(在您的情况下是嵌套资源)。

您需要在 resourceId 函数中指定存储帐户所在的资源组的名称,或者将存储帐户 key 作为 securestring 参数传递到嵌套模板中。

顺便说一句 - 您是否考虑过将 Azure Bicep 用于 IaaC 而不是 ARM?

关于azure - 在嵌套 ARM 模板中使用 resourceId 函数时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67321114/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com