Documentation https://learn.microsoft.com/en-us/cli/azure/functionapp?view=azure-cli-latest#az-functionapp-create states the following regarding the --plan parameter:
Name or resource id of the function app service plan...
This led me to believe that it is possible to inform the resource id (e.g. /subscriptions/{Subscription Id}/resourceGroups/{Resource Group Name}/providers/Microsoft.Web/serverFarms/{App Service Plan Name}) to the --plan parameter as well.
So, based on your scenario, I run az functionapp create passing the App Service Plan resource id in the --plan parameter. In addition, I added the --debug option to get more details about the execution. Find the last part of the command output and error message below:
--- Command ---
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"
--- Partial Output ---
...
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
Per debug information, it is looking for the App Service plan (which name was not parsed properly) in the resource group defined by --resource-group parameter.
I might be missing something, it could be a documentation issue, etc.
In any case, I filed the following issue to track/clarify this:
https://github.com/Azure/azure-cli/issues/6532