我有两个不同的Azure功能应用程序(A&amp; B)使用相同的应用服务计划而不是消费计划。 Azure功能应用程序A位于资源组1中,Azure功能应用程序B位于资源组2中。如果我的应用程序服务计划位于资源组1中,我可以编写Azure功能应用程序A的脚本,如下所示:< / p>
az functionapp create --resource-group $serverData.ResourceGroupName \
--plan $serverData.FunctionAppServicePlanName \
--name $serverData.FunctionAppName \
--storage-account $serverData.LrsStorageAccountName
但是,如果我尝试创建Azure Function App B,则上述命令将不起作用。它告诉我它无法找到应用服务计划。现在,我可以通过门户创建这个,但我想编写脚本。
有没有办法告诉Azure CLI应用服务计划在资源组1中,尽管我正在尝试在资源组2中创建Azure功能应用程序?
答案 0 :(得分:3)
文档https://docs.microsoft.com/en-us/cli/azure/functionapp?view=azure-cli-latest#az-functionapp-create说明了以下 - plan 参数:
功能应用服务计划的名称或资源ID ...
这让我相信可以通知资源ID(例如 / subscriptions / {Subscription Id} / resourceGroups / {Resource Group Name} /providers/Microsoft.Web/serverFarms/ {App Service Plan名称} )也适用于--plan参数。
因此,根据您的方案,我运行 az functionapp create ,在 - plan 参数中传递应用服务计划资源ID 。此外,我添加了 - 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参数定义的资源组中的App Service计划(未正确解析该名称)。
我可能会遗漏某些内容,可能是文档问题等等。
无论如何,我提交了以下问题来跟踪/澄清这一点: https://github.com/Azure/azure-cli/issues/6532
答案 1 :(得分:1)
已编辑添加 -
继续Evandro的回答,并查看source code 这是一个错误,这是不可能的。
这是因为代码不解析资源ID,而是采用应用程序名称并传递--resource-group变量(我已经为此提交了修复程序)
在纠正此问题之前,您将拥有的唯一解决方案是在同一个RG中创建一个应用程序,然后将其移动到您想要的位置。
原始答案
的文档对于--plan
,有以下内容 -
功能应用服务计划的名称或资源ID。使用&#39; appservice plan create&#39;得到一个。
如果您指定了名称,它希望在同一资源组中找到它,如果它不在您需要发送完整资源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