首页 > 解决方案 > zip 部署后,函数应用程序主机密钥正在重置

问题描述

我想要实现的是:

我必须使用 zip deploy 部署一个 azure 函数并将其与 APIM 关联。

$apiUrl = "https://$FunctionAppName.scm.azurewebsites.net/api/zipdeploy"
            $base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f $username, $password)))
            $userAgent = "powershell/1.0"
            Invoke-RestMethod -Uri $apiUrl -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)} -UserAgent $userAgent -Method POST -InFile $filePath -ContentType "multipart/form-data"

功能部署成功,然后我尝试添加一个 APIM 并将其中一个功能连接到它。问题就从这里开始。脚本和 ARM 模板是有效的 APIM 将被成功创建。但是x-functions-key添加到后端的内容不存在于 azure 功能主机键列表中。因此,我在测试 APIM 端点时收到401 Unauthorized响应。

{
            "type": "Microsoft.ApiManagement/service/backends",
            "apiVersion": "2020-12-01",
            "name": "[concat(variables('apiManagementServiceName'), variables('functionAppNameWithaSlashAtStart'))]",
            "dependsOn": [
                "[resourceId('Microsoft.ApiManagement/service', variables('apiManagementServiceName'))]"
            ],
            "properties": {
                "description": "rigado-function",
                "url": "[concat(concat('https://', parameters('functionAppName')),'.azurewebsites.net/api')]",
                "protocol": "http",
                "resourceId": "[concat('https://management.azure.com', resourceId('Microsoft.Web/sites', parameters('functionAppName')))]",
                "credentials": {
                    "header": {
                        "x-functions-key": [
                            "[listkeys(concat(variables('functionAppId'), '/host/default/'),'2016-08-01').functionKeys.default]"
                        ]
                    }
                },
                "skipCertificateChainValidation": "false",
                "skipCertificateNameValidation": "false"
            }
    }

对此有任何想法吗?这是因为 zip 部署吗?

注意:我注意到的一件事是,如果我在函数部署后尝试运行 APIM 部署位,它可以正常工作。

标签: azureazure-functionsazure-api-management

解决方案


推荐阅读