当服务计划位于不同的资源组中时如何部署 Azure Functions 应用程序
How to deploy an Azure Functions App when the Service plan is in a different Resource Group
我有两个不同的 Azure Functions 应用程序(A 和 B),它们使用相同的应用程序服务计划而不是消费计划。 Azure Function App A 在资源组 1 中,Azure Function App B 在资源组 2 中。如果我的 App Service Plan 在资源组 1 中,我可以毫无问题地编写 Azure Function App A 的创建脚本,如下所示:
az functionapp create --resource-group $serverData.ResourceGroupName \
--plan $serverData.FunctionAppServicePlanName \
--name $serverData.FunctionAppName \
--storage-account $serverData.LrsStorageAccountName
但是,如果我尝试创建 Azure Function App B,上面的命令将不起作用。它告诉我找不到应用程序服务计划。现在,我可以通过门户创建它,但我想编写脚本。
有没有办法告诉 Azure CLI App Service Plan 在资源组 1 中,尽管我正在尝试在资源组 2 中创建 Azure Function App?
编辑添加-
根据 Evandro 的回答,并查看 source code 这是一个错误,这是不可能的。
这是因为代码不解析资源 ID,而是采用应用程序名称并传递 --resource-group 变量(我已为此提交修复)
在纠正此问题之前,您唯一的解决方案是在同一个 RG 中创建一个应用程序,然后将其移动到您想要的位置。
原答案
如果您查看 az functionapp create
的文档
对于 --plan
有以下 -
Name or resource id of the function app service plan. Use 'appservice plan create' to get one.
如果你指定了一个名称,它希望在同一个资源组中找到它,如果它不在同一个资源组中你需要发送完整的资源ID
像这样
$ID = $(az appservice plan show --name $name --resource-group $RG | jq '. | .id')
az functionapp create --resource-group $serverData.ResourceGroupName \
--plan $ID \
--name $serverData.FunctionAppName \
--storage-account $serverData.LrsStorageAccountName
文档 https://docs.microsoft.com/en-us/cli/azure/functionapp?view=azure-cli-latest#az-functionapp-create 关于 --plan 参数的说明如下:
Name or resource id of the function app service plan...
这让我相信可以告知资源 ID(例如 /subscriptions/{Subscription Id}/resourceGroups/{Resource Group Name}/providers/Microsoft.Web/serverFarms/{App Service Plan Name}) 也添加到 --plan 参数中。
因此,根据您的情况,我 运行 az functionapp create 在--计划参数。此外,我添加了 --debug 选项以获取有关执行的更多详细信息。在下面找到命令输出和错误消息的最后一部分:
---命令---
az functionapp create --resource-group "abc" --plan "/subscriptions/{Subscription Id}/resourceGroups/azfuncrg/providers/azfunc" --name "functioappname" --storage-account "/subscriptions/{Subscription Id}/resourceGroups/azfuncrg/providers/Microsoft.Storage/storageAccounts/azfuncstorage"
---部分输出---
...
msrest.http_logger : Response status: 404
msrest.http_logger : Response headers:
msrest.http_logger : 'Cache-Control': 'no-cache'
msrest.http_logger : 'Pragma': 'no-cache'
msrest.http_logger : 'Content-Type': 'application/json; charset=utf-8'
msrest.http_logger : 'Expires': '-1'
msrest.http_logger : 'x-ms-failure-cause': 'gateway'
msrest.http_logger : 'x-ms-request-id': 'd4ebc73a-a7ca-45b2-bd59-710aeea1faf2'
msrest.http_logger : 'x-ms-correlation-request-id': 'd4ebc73a-a7ca-45b2-bd59-710aeea1faf2'
msrest.http_logger : 'x-ms-routing-request-id': 'WESTUS2:20180608T002628Z:d4ebc73a-a7ca-45b2-bd59-710aeea1faf2'
msrest.http_logger : 'Strict-Transport-Security': 'max-age=31536000; includeSubDomains'
msrest.http_logger : 'X-Content-Type-Options': 'nosniff'
msrest.http_logger : 'Date': 'Fri, 08 Jun 2018 00:26:28 GMT'
msrest.http_logger : 'Content-Length': '139'
msrest.http_logger : Response content:
msrest.http_logger : b'{"error":{"code":"ResourceNotFound","message":"The Resource \'Microsoft.Web/serverFarms/azfunc\' under resource group \'abc\' was not found."}}'
The plan 'azfunc' doesn't exist
根据调试信息,它正在 --resource-group 参数定义的资源组中查找应用服务计划(名称未正确解析)。
我可能遗漏了一些东西,这可能是文档问题等。
无论如何,我向 track/clarify 提交了以下问题:
https://github.com/Azure/azure-cli/issues/6532
我有两个不同的 Azure Functions 应用程序(A 和 B),它们使用相同的应用程序服务计划而不是消费计划。 Azure Function App A 在资源组 1 中,Azure Function App B 在资源组 2 中。如果我的 App Service Plan 在资源组 1 中,我可以毫无问题地编写 Azure Function App A 的创建脚本,如下所示:
az functionapp create --resource-group $serverData.ResourceGroupName \
--plan $serverData.FunctionAppServicePlanName \
--name $serverData.FunctionAppName \
--storage-account $serverData.LrsStorageAccountName
但是,如果我尝试创建 Azure Function App B,上面的命令将不起作用。它告诉我找不到应用程序服务计划。现在,我可以通过门户创建它,但我想编写脚本。
有没有办法告诉 Azure CLI App Service Plan 在资源组 1 中,尽管我正在尝试在资源组 2 中创建 Azure Function App?
编辑添加-
根据 Evandro 的回答,并查看 source code 这是一个错误,这是不可能的。
这是因为代码不解析资源 ID,而是采用应用程序名称并传递 --resource-group 变量(我已为此提交修复)
在纠正此问题之前,您唯一的解决方案是在同一个 RG 中创建一个应用程序,然后将其移动到您想要的位置。
原答案
如果您查看 az functionapp create
的文档对于 --plan
有以下 -
Name or resource id of the function app service plan. Use 'appservice plan create' to get one.
如果你指定了一个名称,它希望在同一个资源组中找到它,如果它不在同一个资源组中你需要发送完整的资源ID
像这样
$ID = $(az appservice plan show --name $name --resource-group $RG | jq '. | .id')
az functionapp create --resource-group $serverData.ResourceGroupName \
--plan $ID \
--name $serverData.FunctionAppName \
--storage-account $serverData.LrsStorageAccountName
文档 https://docs.microsoft.com/en-us/cli/azure/functionapp?view=azure-cli-latest#az-functionapp-create 关于 --plan 参数的说明如下:
Name or resource id of the function app service plan...
这让我相信可以告知资源 ID(例如 /subscriptions/{Subscription Id}/resourceGroups/{Resource Group Name}/providers/Microsoft.Web/serverFarms/{App Service Plan Name}) 也添加到 --plan 参数中。
因此,根据您的情况,我 运行 az functionapp create 在--计划参数。此外,我添加了 --debug 选项以获取有关执行的更多详细信息。在下面找到命令输出和错误消息的最后一部分:
---命令---
az functionapp create --resource-group "abc" --plan "/subscriptions/{Subscription Id}/resourceGroups/azfuncrg/providers/azfunc" --name "functioappname" --storage-account "/subscriptions/{Subscription Id}/resourceGroups/azfuncrg/providers/Microsoft.Storage/storageAccounts/azfuncstorage"
---部分输出---
...
msrest.http_logger : Response status: 404
msrest.http_logger : Response headers:
msrest.http_logger : 'Cache-Control': 'no-cache'
msrest.http_logger : 'Pragma': 'no-cache'
msrest.http_logger : 'Content-Type': 'application/json; charset=utf-8'
msrest.http_logger : 'Expires': '-1'
msrest.http_logger : 'x-ms-failure-cause': 'gateway'
msrest.http_logger : 'x-ms-request-id': 'd4ebc73a-a7ca-45b2-bd59-710aeea1faf2'
msrest.http_logger : 'x-ms-correlation-request-id': 'd4ebc73a-a7ca-45b2-bd59-710aeea1faf2'
msrest.http_logger : 'x-ms-routing-request-id': 'WESTUS2:20180608T002628Z:d4ebc73a-a7ca-45b2-bd59-710aeea1faf2'
msrest.http_logger : 'Strict-Transport-Security': 'max-age=31536000; includeSubDomains'
msrest.http_logger : 'X-Content-Type-Options': 'nosniff'
msrest.http_logger : 'Date': 'Fri, 08 Jun 2018 00:26:28 GMT'
msrest.http_logger : 'Content-Length': '139'
msrest.http_logger : Response content:
msrest.http_logger : b'{"error":{"code":"ResourceNotFound","message":"The Resource \'Microsoft.Web/serverFarms/azfunc\' under resource group \'abc\' was not found."}}'
The plan 'azfunc' doesn't exist
根据调试信息,它正在 --resource-group 参数定义的资源组中查找应用服务计划(名称未正确解析)。
我可能遗漏了一些东西,这可能是文档问题等。
无论如何,我向 track/clarify 提交了以下问题: https://github.com/Azure/azure-cli/issues/6532