首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在嵌套ARM模板中使用resourceId函数时出错

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

Stack Overflow用户
提问于 2021-04-30 00:06:09
回答 1查看 161关注 0票数 1

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

代码语言:javascript
复制
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)

导致模板失败的部分在函数app的属性中的appSettings中,它试图列出存储帐户密钥。我见过的所有示例模板(包括Azure中的导出模板选项),请按照下面的代码使用listKeys(resourceId('Microsoft.Storage/storageAccounts',‘storageaccountnamehere’执行此操作:

代码语言:javascript
复制
"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://docs.microsoft.com/en-us/azure/azure-resource-manager/templates/scope-functions?tabs=azure-powershell

我尝试了resourceId函数的许多变体,比如包括资源组名、资源组名称和订阅ID -所有这些都会返回略微不同的错误。

完整的嵌套模板如下:

代码语言:javascript
复制
{
        "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"
                            }
                        }
                ]
            }
        }
    }
EN

回答 1

Stack Overflow用户

发布于 2021-05-04 12:22:37

将嵌套模板的作用域放在与父模板不同的资源组中。看起来您的存储帐户位于不同的RG中,而不是您要部署的功能。默认情况下,resourceId函数假定资源与您部署模板的RG相同(在您的示例中是嵌套的RG)。

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

顺便说一句,你有没有考虑过在IaaC上使用Azure Bicep来代替ARM?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67321114

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档