Automatizar a implementação de recursos para a sua aplicação de funções em Funções AzureAutomate resource deployment for your function app in Azure Functions

Pode utilizar um modelo de Gestor de Recursos Azure para implementar uma aplicação de função.You can use an Azure Resource Manager template to deploy a function app. Este artigo descreve os recursos e parâmetros necessários para o fazer.This article outlines the required resources and parameters for doing so. Poderá ser necessário implementar recursos adicionais, dependendo dos gatilhos e encadernações na sua aplicação de função.You might need to deploy additional resources, depending on the triggers and bindings in your function app.

Para obter mais informações sobre a criação de modelos, consulte Authoring Azure Resource Manager templates (Criar modelos do Azure Resource Manager).For more information about creating templates, see Authoring Azure Resource Manager templates.

Para modelos de amostra, consulte:For sample templates, see:

Recursos necessáriosRequired resources

Uma implantação de funções Azure consiste tipicamente nestes recursos:An Azure Functions deployment typically consists of these resources:

RecursoResource RequisitoRequirement Referência de sintaxe e propriedadesSyntax and properties reference
Um aplicativo de funçãoA function app NecessárioRequired Microsoft.Web/sitesMicrosoft.Web/sites
Uma conta de armazenamento AzureAn Azure Storage account NecessárioRequired Microsoft.Storage/storageAcontasMicrosoft.Storage/storageAccounts
Um componente de Insights de AplicaçãoAn Application Insights component OpcionalOptional Microsoft.Insights/componentesMicrosoft.Insights/components
Um plano de hospedagemA hosting plan Opcional1Optional1 Microsoft.Web/serverfarmsMicrosoft.Web/serverfarms

1 Um plano de hospedagem só é necessário quando optar por executar a sua aplicação de função num plano Premium ou num plano de Serviço de Aplicações.1A hosting plan is only required when you choose to run your function app on a Premium plan or on an App Service plan.

Dica

Apesar de não ser necessário, recomenda-se vivamente que configuure os Insights de Aplicação para a sua aplicação.While not required, it is strongly recommended that you configure Application Insights for your app.

Conta de armazenamentoStorage account

É necessária uma conta de armazenamento Azure para uma aplicação de função.An Azure storage account is required for a function app. Precisa de uma conta de propósito geral que suporte bolhas, mesas, filas e ficheiros.You need a general purpose account that supports blobs, tables, queues, and files. Para obter mais informações, consulte os requisitos da conta de armazenamento Azure Functions.For more information, see Azure Functions storage account requirements.

{
    "type": "Microsoft.Storage/storageAccounts",
    "name": "[variables('storageAccountName')]",
    "apiVersion": "2019-04-01",
    "location": "[resourceGroup().location]",
    "kind": "StorageV2",
    "sku": {
        "name": "[parameters('storageAccountType')]"
    }
}

Além disso, a propriedade AzureWebJobsStorage deve ser especificada como uma configuração de aplicação na configuração do site.In addition, the property AzureWebJobsStorage must be specified as an app setting in the site configuration. Se a aplicação de função não utilizar o Application Insights para monitorização, também deve especificar AzureWebJobsDashboard como uma configuração de aplicação.If the function app doesn't use Application Insights for monitoring, it should also specify AzureWebJobsDashboard as an app setting.

O tempo de funcionamento das funções Azure utiliza o AzureWebJobsStorage fio de ligação para criar filas internas.The Azure Functions runtime uses the AzureWebJobsStorage connection string to create internal queues. Quando o Application Insights não está ativado, o tempo de execução utiliza o AzureWebJobsDashboard fio de ligação para iniciar sessão no armazenamento da tabela Azure e alimenta o separador Monitor no portal.When Application Insights is not enabled, the runtime uses the AzureWebJobsDashboard connection string to log to Azure Table storage and power the Monitor tab in the portal.

Estas propriedades estão especificadas na appSettings coleção no siteConfig objeto:These properties are specified in the appSettings collection in the siteConfig object:

"appSettings": [
    {
        "name": "AzureWebJobsStorage",
        "value": "[concat('DefaultEndpointsProtocol=https;AccountName=', variables('storageAccountName'), ';AccountKey=', listKeys(variables('storageAccountid'),'2015-05-01-preview').key1)]"
    },
    {
        "name": "AzureWebJobsDashboard",
        "value": "[concat('DefaultEndpointsProtocol=https;AccountName=', variables('storageAccountName'), ';AccountKey=', listKeys(variables('storageAccountid'),'2015-05-01-preview').key1)]"
    }
]

Application InsightsApplication Insights

O Application Insights é recomendado para monitorizar as suas aplicações de função.Application Insights is recommended for monitoring your function apps. O recurso Application Insights é definido com o tipo Microsoft.Insights/componentes e o tipo web:The Application Insights resource is defined with the type Microsoft.Insights/components and the kind web:

        {
            "apiVersion": "2015-05-01",
            "name": "[variables('appInsightsName')]",
            "type": "Microsoft.Insights/components",
            "kind": "web",
            "location": "[resourceGroup().location]",
            "tags": {
                "[concat('hidden-link:', resourceGroup().id, '/providers/Microsoft.Web/sites/', variables('functionAppName'))]": "Resource"
            },
            "properties": {
                "Application_Type": "web",
                "ApplicationId": "[variables('appInsightsName')]"
            }
        },

Além disso, a chave de instrumentação deve ser fornecida à aplicação de função utilizando a definição da APPINSIGHTS_INSTRUMENTATIONKEY aplicação.In addition, the instrumentation key needs to be provided to the function app using the APPINSIGHTS_INSTRUMENTATIONKEY application setting. Esta propriedade é especificada na appSettings coleção no siteConfig objeto:This property is specified in the appSettings collection in the siteConfig object:

"appSettings": [
    {
        "name": "APPINSIGHTS_INSTRUMENTATIONKEY",
        "value": "[reference(resourceId('microsoft.insights/components/', variables('appInsightsName')), '2015-05-01').InstrumentationKey]"
    }
]

Plano de hospedagemHosting plan

A definição do plano de hospedagem varia e pode ser uma das seguintes:The definition of the hosting plan varies, and can be one of the following:

Aplicação de funçõesFunction app

O recurso de aplicação de função é definido utilizando um recurso do tipo Microsoft.Web/sites e do app de funçãodo tipo :The function app resource is defined by using a resource of type Microsoft.Web/sites and kind functionapp:

{
    "apiVersion": "2015-08-01",
    "type": "Microsoft.Web/sites",
    "name": "[variables('functionAppName')]",
    "location": "[resourceGroup().location]",
    "kind": "functionapp",
    "dependsOn": [
        "[resourceId('Microsoft.Storage/storageAccounts', variables('storageAccountName'))]",
        "[resourceId('Microsoft.Insights/components', variables('appInsightsName'))]"
    ]
}

Importante

Se estiver a definir explicitamente um plano de hospedagem, será necessário um item adicional na matriz dependOn:"[resourceId('Microsoft.Web/serverfarms', variables('hostingPlanName'))]"If you are explicitly defining a hosting plan, an additional item would be needed in the dependsOn array: "[resourceId('Microsoft.Web/serverfarms', variables('hostingPlanName'))]"

Uma aplicação de função deve incluir estas definições de aplicação:A function app must include these application settings:

Nome da definiçãoSetting name DescriçãoDescription Valores de exemploExample values
AzureWebJobsStorageAzureWebJobsStorage Uma cadeia de ligação a uma conta de armazenamento que o tempo de execução de Funções utiliza para a fila internaA connection string to a storage account that the Functions runtime uses for internal queueing Ver conta de armazenamentoSee Storage account
FUNCTIONS_EXTENSION_VERSIONFUNCTIONS_EXTENSION_VERSION A versão do tempo de funcionamento das Funções AzureThe version of the Azure Functions runtime ~2
FUNCTIONS_WORKER_RUNTIMEFUNCTIONS_WORKER_RUNTIME A pilha de idiomas a ser usada para funções nesta aplicaçãoThe language stack to be used for functions in this app dotnet, node java , python oupowershelldotnet, node, java, python, or powershell
WEBSITE_NODE_DEFAULT_VERSIONWEBSITE_NODE_DEFAULT_VERSION Só é necessário se utilizar a node pilha de idiomas, especifica a versão a utilizarOnly needed if using the node language stack, specifies the version to use 10.14.1

Estas propriedades estão especificadas na appSettings coleção do siteConfig imóvel:These properties are specified in the appSettings collection in the siteConfig property:

"properties": {
    "siteConfig": {
        "appSettings": [
            {
                "name": "AzureWebJobsStorage",
                "value": "[concat('DefaultEndpointsProtocol=https;AccountName=', variables('storageAccountName'), ';AccountKey=', listKeys(variables('storageAccountid'),'2015-05-01-preview').key1)]"
            },
            {
                "name": "FUNCTIONS_WORKER_RUNTIME",
                "value": "node"
            },
            {
                "name": "WEBSITE_NODE_DEFAULT_VERSION",
                "value": "10.14.1"
            },
            {
                "name": "FUNCTIONS_EXTENSION_VERSION",
                "value": "~2"
            }
        ]
    }
}

Implantação no plano de consumoDeploy on Consumption plan

O plano de consumo atribui automaticamente a potência de computação quando o seu código está em funcionamento, escala-se conforme necessário para manusear a carga e, em seguida, escala quando o código não está em funcionamento.The Consumption plan automatically allocates compute power when your code is running, scales out as necessary to handle load, and then scales in when code is not running. Não tens de pagar por VMs ociosos, e não tens de reservar capacidade antecipadamente.You don't have to pay for idle VMs, and you don't have to reserve capacity in advance. Para saber mais, consulte a escala e hospedagem de Funções Azure.To learn more, see Azure Functions scale and hosting.

Para obter uma amostra do modelo do Gestor de Recursos Azure, consulte [a aplicação funções no plano de consumo.]For a sample Azure Resource Manager template, see Function app on Consumption plan.

Criar um plano de consumoCreate a Consumption plan

Um plano de consumo não precisa de ser definido.A Consumption plan does not need to be defined. Um deles será automaticamente criado ou selecionado numa base por região quando criar o próprio recurso da aplicação de função.One will automatically be created or selected on a per-region basis when you create the function app resource itself.

O plano de consumo é um tipo especial de recurso "serverfarm".The Consumption plan is a special type of "serverfarm" resource. Para o Windows, pode especiá-lo utilizando o Dynamic valor para as computeMode sku propriedades:For Windows, you can specify it by using the Dynamic value for the computeMode and sku properties:

{  
   "type":"Microsoft.Web/serverfarms",
   "apiVersion":"2016-09-01",
   "name":"[variables('hostingPlanName')]",
   "location":"[resourceGroup().location]",
   "properties":{  
      "name":"[variables('hostingPlanName')]",
      "computeMode":"Dynamic"
   },
   "sku":{  
      "name":"Y1",
      "tier":"Dynamic",
      "size":"Y1",
      "family":"Y",
      "capacity":0
   }
}

Nota

O plano de consumo não pode ser explicitamente definido para o Linux.The Consumption plan cannot be explicitly defined for Linux. Será criado automaticamente.It will be created automatically.

Se definir explicitamente o seu plano de Consumo, terá de definir o serverFarmId imóvel na aplicação para que este aponte para o ID de recursos do plano.If you do explicitly define your Consumption plan, you will need to set the serverFarmId property on the app so that it points to the resource ID of the plan. Deve certificar-se de que a aplicação de função também tem uma dependsOn definição para o plano.You should ensure that the function app has a dependsOn setting for the plan as well.

Criar uma aplicação de funçõesCreate a function app

WindowsWindows

No Windows, um plano de consumo requer duas definições adicionais na configuração do site: WEBSITE_CONTENTAZUREFILECONNECTIONSTRING e WEBSITE_CONTENTSHARE .On Windows, a Consumption plan requires two additional settings in the site configuration: WEBSITE_CONTENTAZUREFILECONNECTIONSTRING and WEBSITE_CONTENTSHARE. Estas propriedades configuram a conta de armazenamento e o caminho do ficheiro onde o código e configuração da aplicação de função são armazenados.These properties configure the storage account and file path where the function app code and configuration are stored.

{
    "apiVersion": "2016-03-01",
    "type": "Microsoft.Web/sites",
    "name": "[variables('functionAppName')]",
    "location": "[resourceGroup().location]",
    "kind": "functionapp",
    "dependsOn": [
        "[resourceId('Microsoft.Storage/storageAccounts', variables('storageAccountName'))]"
    ],
    "properties": {
        "siteConfig": {
            "appSettings": [
                {
                    "name": "AzureWebJobsStorage",
                    "value": "[concat('DefaultEndpointsProtocol=https;AccountName=', variables('storageAccountName'), ';AccountKey=', listKeys(variables('storageAccountid'),'2015-05-01-preview').key1)]"
                },
                {
                    "name": "WEBSITE_CONTENTAZUREFILECONNECTIONSTRING",
                    "value": "[concat('DefaultEndpointsProtocol=https;AccountName=', variables('storageAccountName'), ';AccountKey=', listKeys(variables('storageAccountid'),'2015-05-01-preview').key1)]"
                },
                {
                    "name": "WEBSITE_CONTENTSHARE",
                    "value": "[toLower(variables('functionAppName'))]"
                },
                {
                    "name": "FUNCTIONS_WORKER_RUNTIME",
                    "value": "node"
                },
                {
                    "name": "WEBSITE_NODE_DEFAULT_VERSION",
                    "value": "10.14.1"
                },
                {
                    "name": "FUNCTIONS_EXTENSION_VERSION",
                    "value": "~2"
                }
            ]
        }
    }
}

LinuxLinux

No Linux, a aplicação de função deve ter o seu kind conjunto para , e deve ter a propriedade definida functionapp,linux reserved true para:On Linux, the function app must have its kind set to functionapp,linux, and it must have the reserved property set to true:

{
    "apiVersion": "2016-03-01",
    "type": "Microsoft.Web/sites",
    "name": "[variables('functionAppName')]",
    "location": "[resourceGroup().location]",
    "kind": "functionapp,linux",
    "dependsOn": [
        "[resourceId('Microsoft.Storage/storageAccounts', variables('storageAccountName'))]"
    ],
    "properties": {
        "siteConfig": {
            "appSettings": [
                {
                    "name": "AzureWebJobsStorage",
                    "value": "[concat('DefaultEndpointsProtocol=https;AccountName=', variables('storageAccountName'), ';AccountKey=', listKeys(variables('storageAccountName'),'2015-05-01-preview').key1)]"
                },
                {
                    "name": "FUNCTIONS_WORKER_RUNTIME",
                    "value": "node"
                },
                {
                    "name": "WEBSITE_NODE_DEFAULT_VERSION",
                    "value": "10.14.1"
                },
                {
                    "name": "FUNCTIONS_EXTENSION_VERSION",
                    "value": "~2"
                }
            ]
        },
        "reserved": true
    }
}

Implementar no plano PremiumDeploy on Premium plan

O plano Premium oferece a mesma escala que o plano de Consumo, mas inclui recursos dedicados e capacidades adicionais.The Premium plan offers the same scaling as the Consumption plan but includes dedicated resources and additional capabilities. Para saber mais, consulte o Plano Premium Azure Functions.To learn more, see Azure Functions Premium Plan.

Criar um plano PremiumCreate a Premium plan

Um plano Premium é um tipo especial de recurso "serverfarm".A Premium plan is a special type of "serverfarm" resource. Pode especiá-lo utilizando qualquer EP1 um, EP2 ou para o valor da propriedade no objeto de EP3 Name sku descrição.You can specify it by using either EP1, EP2, or EP3 for the Name property value in the sku description object.

{
    "type": "Microsoft.Web/serverfarms",
    "apiVersion": "2018-02-01",
    "name": "[parameters('hostingPlanName')]",
    "location": "[resourceGroup().location]",
    "properties": {
        "name": "[parameters('hostingPlanName')]",
        "workerSize": "[parameters('workerSize')]",
        "workerSizeId": "[parameters('workerSizeId')]",
        "numberOfWorkers": "[parameters('numberOfWorkers')]",
        "hostingEnvironment": "[parameters('hostingEnvironment')]",
        "maximumElasticWorkerCount": "20"
    },
    "sku": {
        "Tier": "ElasticPremium",
        "Name": "EP1"
    }
}

Criar uma aplicação de funçõesCreate a function app

Uma aplicação de função num plano Premium deve ter a serverFarmId propriedade definida para o ID de recursos do plano criado anteriormente.A function app on a Premium plan must have the serverFarmId property set to the resource ID of the plan created earlier. Além disso, um plano Premium requer duas definições adicionais na configuração do site: WEBSITE_CONTENTAZUREFILECONNECTIONSTRING e WEBSITE_CONTENTSHARE .In addition, a Premium plan requires two additional settings in the site configuration: WEBSITE_CONTENTAZUREFILECONNECTIONSTRING and WEBSITE_CONTENTSHARE. Estas propriedades configuram a conta de armazenamento e o caminho do ficheiro onde o código e configuração da aplicação de função são armazenados.These properties configure the storage account and file path where the function app code and configuration are stored.

{
    "apiVersion": "2016-03-01",
    "type": "Microsoft.Web/sites",
    "name": "[variables('functionAppName')]",
    "location": "[resourceGroup().location]",
    "kind": "functionapp",            
    "dependsOn": [
        "[resourceId('Microsoft.Web/serverfarms', variables('hostingPlanName'))]",
        "[resourceId('Microsoft.Storage/storageAccounts', variables('storageAccountName'))]"
    ],
    "properties": {
        "serverFarmId": "[resourceId('Microsoft.Web/serverfarms', variables('hostingPlanName'))]",
        "siteConfig": {
            "appSettings": [
                {
                    "name": "AzureWebJobsStorage",
                    "value": "[concat('DefaultEndpointsProtocol=https;AccountName=', variables('storageAccountName'), ';AccountKey=', listKeys(variables('storageAccountid'),'2015-05-01-preview').key1)]"
                },
                {
                    "name": "WEBSITE_CONTENTAZUREFILECONNECTIONSTRING",
                    "value": "[concat('DefaultEndpointsProtocol=https;AccountName=', variables('storageAccountName'), ';AccountKey=', listKeys(variables('storageAccountid'),'2015-05-01-preview').key1)]"
                },
                {
                    "name": "WEBSITE_CONTENTSHARE",
                    "value": "[toLower(variables('functionAppName'))]"
                },
                {
                    "name": "FUNCTIONS_WORKER_RUNTIME",
                    "value": "node"
                },
                {
                    "name": "WEBSITE_NODE_DEFAULT_VERSION",
                    "value": "10.14.1"
                },
                {
                    "name": "FUNCTIONS_EXTENSION_VERSION",
                    "value": "~2"
                }
            ]
        }
    }
}

Implementar no plano de Serviço de AplicaçõesDeploy on App Service plan

No plano de Serviço de Aplicações, a sua aplicação de função funciona em VMs dedicados em SKUs básicos, padrão e premium, semelhantes às aplicações web.In the App Service plan, your function app runs on dedicated VMs on Basic, Standard, and Premium SKUs, similar to web apps. Para mais detalhes sobre o funcionamento do plano do Serviço de Aplicações, consulte os planos do Azure App Service em visão geral aprofundada.For details about how the App Service plan works, see the Azure App Service plans in-depth overview.

Para obter uma amostra do modelo do Gestor de Recursos Azure, consulte [a aplicação Function no plano do Serviço de Aplicações Azure].For a sample Azure Resource Manager template, see Function app on Azure App Service plan.

Crie um plano do Serviço de AplicaçõesCreate an App Service plan

Um plano de Serviço de Aplicações é definido por um recurso "serverfarm".An App Service plan is defined by a "serverfarm" resource.

{
    "type": "Microsoft.Web/serverfarms",
    "apiVersion": "2018-02-01",
    "name": "[variables('hostingPlanName')]",
    "location": "[resourceGroup().location]",
    "sku": {
        "name": "S1",
        "tier": "Standard",
        "size": "S1",
        "family": "S",
        "capacity": 1
    }
}

Para executar a sua aplicação no Linux, também deve definir kind o Linux seguinte:To run your app on Linux, you must also set the kind to Linux:

{
    "type": "Microsoft.Web/serverfarms",
    "apiVersion": "2018-02-01",
    "name": "[variables('hostingPlanName')]",
    "location": "[resourceGroup().location]",
    "kind": "Linux",
    "sku": {
        "name": "S1",
        "tier": "Standard",
        "size": "S1",
        "family": "S",
        "capacity": 1
    }
}

Criar uma aplicação de funçõesCreate a function app

Uma aplicação de função num plano de Serviço de Aplicações deve ter a serverFarmId propriedade definida para o ID de recursos do plano criado anteriormente.A function app on an App Service plan must have the serverFarmId property set to the resource ID of the plan created earlier.

{
    "apiVersion": "2016-03-01",
    "type": "Microsoft.Web/sites",
    "name": "[variables('functionAppName')]",
    "location": "[resourceGroup().location]",
    "kind": "functionapp",
    "dependsOn": [
        "[resourceId('Microsoft.Web/serverfarms', variables('hostingPlanName'))]",
        "[resourceId('Microsoft.Storage/storageAccounts', variables('storageAccountName'))]"
    ],
    "properties": {
        "serverFarmId": "[resourceId('Microsoft.Web/serverfarms', variables('hostingPlanName'))]",
        "siteConfig": {
            "appSettings": [
                {
                    "name": "AzureWebJobsStorage",
                    "value": "[concat('DefaultEndpointsProtocol=https;AccountName=', variables('storageAccountName'), ';AccountKey=', listKeys(variables('storageAccountid'),'2015-05-01-preview').key1)]"
                },
                {
                    "name": "FUNCTIONS_WORKER_RUNTIME",
                    "value": "node"
                },
                {
                    "name": "WEBSITE_NODE_DEFAULT_VERSION",
                    "value": "10.14.1"
                },
                {
                    "name": "FUNCTIONS_EXTENSION_VERSION",
                    "value": "~2"
                }
            ]
        }
    }
}

As aplicações Linux também devem incluir uma linuxFxVersion propriedade em siteConfig .Linux apps should also include a linuxFxVersion property under siteConfig. Se estiver apenas a implementar código, o valor para tal é determinado pela sua pilha de tempo de execução desejada:If you are just deploying code, the value for this is determined by your desired runtime stack:

PilhaStack Valor de exemploExample value
PythonPython DOCKER|microsoft/azure-functions-python3.6:2.0
JavaScriptJavaScript DOCKER|microsoft/azure-functions-node8:2.0
.NET.NET DOCKER|microsoft/azure-functions-dotnet-core2.0:2.0
{
    "apiVersion": "2016-03-01",
    "type": "Microsoft.Web/sites",
    "name": "[variables('functionAppName')]",
    "location": "[resourceGroup().location]",
    "kind": "functionapp",
    "dependsOn": [
        "[resourceId('Microsoft.Web/serverfarms', variables('hostingPlanName'))]",
        "[resourceId('Microsoft.Storage/storageAccounts', variables('storageAccountName'))]"
    ],
    "properties": {
        "serverFarmId": "[resourceId('Microsoft.Web/serverfarms', variables('hostingPlanName'))]",
        "siteConfig": {
            "appSettings": [
                {
                    "name": "AzureWebJobsStorage",
                    "value": "[concat('DefaultEndpointsProtocol=https;AccountName=', variables('storageAccountName'), ';AccountKey=', listKeys(variables('storageAccountid'),'2015-05-01-preview').key1)]"
                },
                {
                    "name": "FUNCTIONS_WORKER_RUNTIME",
                    "value": "node"
                },
                {
                    "name": "WEBSITE_NODE_DEFAULT_VERSION",
                    "value": "10.14.1"
                },
                {
                    "name": "FUNCTIONS_EXTENSION_VERSION",
                    "value": "~2"
                }
            ],
            "linuxFxVersion": "DOCKER|microsoft/azure-functions-node8:2.0"
        }
    }
}

Se estiver a implementar uma imagem personalizada do recipiente,tem de especirá-la e incluir uma linuxFxVersion configuração que permita puxar a sua imagem, como na Web App para Contentores.If you are deploying a custom container image, you must specify it with linuxFxVersion and include configuration that allows your image to be pulled, as in Web App for Containers. Além disso, definido WEBSITES_ENABLE_APP_SERVICE_STORAGE para , uma vez que o seu conteúdo da false aplicação é fornecido no próprio recipiente:Also, set WEBSITES_ENABLE_APP_SERVICE_STORAGE to false, since your app content is provided in the container itself:

{
    "apiVersion": "2016-03-01",
    "type": "Microsoft.Web/sites",
    "name": "[variables('functionAppName')]",
    "location": "[resourceGroup().location]",
    "kind": "functionapp",
    "dependsOn": [
        "[resourceId('Microsoft.Web/serverfarms', variables('hostingPlanName'))]",
        "[resourceId('Microsoft.Storage/storageAccounts', variables('storageAccountName'))]"
    ],
    "properties": {
        "serverFarmId": "[resourceId('Microsoft.Web/serverfarms', variables('hostingPlanName'))]",
        "siteConfig": {
            "appSettings": [
                {
                    "name": "AzureWebJobsStorage",
                    "value": "[concat('DefaultEndpointsProtocol=https;AccountName=', variables('storageAccountName'), ';AccountKey=', listKeys(variables('storageAccountid'),'2015-05-01-preview').key1)]"
                },
                {
                    "name": "FUNCTIONS_WORKER_RUNTIME",
                    "value": "node"
                },
                {
                    "name": "WEBSITE_NODE_DEFAULT_VERSION",
                    "value": "10.14.1"
                },
                {
                    "name": "FUNCTIONS_EXTENSION_VERSION",
                    "value": "~2"
                },
                {
                    "name": "DOCKER_REGISTRY_SERVER_URL",
                    "value": "[parameters('dockerRegistryUrl')]"
                },
                {
                    "name": "DOCKER_REGISTRY_SERVER_USERNAME",
                    "value": "[parameters('dockerRegistryUsername')]"
                },
                {
                    "name": "DOCKER_REGISTRY_SERVER_PASSWORD",
                    "value": "[parameters('dockerRegistryPassword')]"
                },
                {
                    "name": "WEBSITES_ENABLE_APP_SERVICE_STORAGE",
                    "value": "false"
                }
            ],
            "linuxFxVersion": "DOCKER|myacr.azurecr.io/myimage:mytag"
        }
    }
}

Personalizar uma implantaçãoCustomizing a deployment

Uma aplicação de função tem muitos recursos para crianças que pode usar na sua implementação, incluindo definições de aplicações e opções de controlo de fontes.A function app has many child resources that you can use in your deployment, including app settings and source control options. Também pode optar por remover o recurso para crianças controle de origem e utilizar uma opção de implementação diferente.You also might choose to remove the sourcecontrols child resource, and use a different deployment option instead.

Importante

Para implementar com sucesso a sua aplicação utilizando o Azure Resource Manager, é importante entender como os recursos são implantados no Azure.To successfully deploy your application by using Azure Resource Manager, it's important to understand how resources are deployed in Azure. No exemplo seguinte, as configurações de nível superior são aplicadas através da utilização do siteConfig.In the following example, top-level configurations are applied by using siteConfig. É importante definir estas configurações num nível superior, porque transmitem informações ao tempo de funcionamento e ao motor de implantação das Funções.It's important to set these configurations at a top level, because they convey information to the Functions runtime and deployment engine. As informações de nível superior são necessárias antes da aplicação dos controlos de origem/recurso web da criança.Top-level information is required before the child sourcecontrols/web resource is applied. Embora seja possível configurar estas definições no recurso configuração/appSettings ao nível da criança, em alguns casos a sua aplicação de função deve ser implementada antes de configurar/appSettings.Although it's possible to configure these settings in the child-level config/appSettings resource, in some cases your function app must be deployed before config/appSettings is applied. Por exemplo, quando está a utilizar funções com Aplicações Lógicas,as suas funções são uma dependência de outro recurso.For example, when you are using functions with Logic Apps, your functions are a dependency of another resource.

{
  "apiVersion": "2015-08-01",
  "name": "[parameters('appName')]",
  "type": "Microsoft.Web/sites",
  "kind": "functionapp",
  "location": "[parameters('location')]",
  "dependsOn": [
    "[resourceId('Microsoft.Storage/storageAccounts', variables('storageAccountName'))]",
    "[resourceId('Microsoft.Web/serverfarms', parameters('appName'))]"
  ],
  "properties": {
     "serverFarmId": "[variables('appServicePlanName')]",
     "siteConfig": {
        "alwaysOn": true,
        "appSettings": [
            {
                "name": "FUNCTIONS_EXTENSION_VERSION",
                "value": "~2"
            },
            {
                "name": "Project",
                "value": "src"
            }
        ]
     }
  },
  "resources": [
     {
        "apiVersion": "2015-08-01",
        "name": "appsettings",
        "type": "config",
        "dependsOn": [
          "[resourceId('Microsoft.Web/Sites', parameters('appName'))]",
          "[resourceId('Microsoft.Web/Sites/sourcecontrols', parameters('appName'), 'web')]",
          "[resourceId('Microsoft.Storage/storageAccounts', variables('storageAccountName'))]"
        ],
        "properties": {
          "AzureWebJobsStorage": "[concat('DefaultEndpointsProtocol=https;AccountName=', variables('storageAccountName'), ';AccountKey=', listKeys(variables('storageAccountid'),'2015-05-01-preview').key1)]",
          "AzureWebJobsDashboard": "[concat('DefaultEndpointsProtocol=https;AccountName=', variables('storageAccountName'), ';AccountKey=', listKeys(variables('storageAccountid'),'2015-05-01-preview').key1)]",
          "FUNCTIONS_EXTENSION_VERSION": "~2",
          "FUNCTIONS_WORKER_RUNTIME": "dotnet",
          "Project": "src"
        }
     },
     {
          "apiVersion": "2015-08-01",
          "name": "web",
          "type": "sourcecontrols",
          "dependsOn": [
            "[resourceId('Microsoft.Web/sites/', parameters('appName'))]"
          ],
          "properties": {
            "RepoUrl": "[parameters('sourceCodeRepositoryURL')]",
            "branch": "[parameters('sourceCodeBranch')]",
            "IsManualIntegration": "[parameters('sourceCodeManualIntegration')]"
          }
     }
  ]
}

Dica

Este modelo utiliza o valor de definições de aplicações do Projeto, que define o diretório base no qual o motor de implantação de Funções (Kudu) procura código implantável.This template uses the Project app settings value, which sets the base directory in which the Functions deployment engine (Kudu) looks for deployable code. No nosso repositório, as nossas funções estão numa sub-dobra da pasta src.In our repository, our functions are in a subfolder of the src folder. Assim, no exemplo anterior, definimos o valor das definições da aplicação para src .So, in the preceding example, we set the app settings value to src. Se as suas funções estiverem na raiz do seu repositório, ou se não estiver a implementar a partir do controlo de origem, pode remover o valor das definições desta aplicação.If your functions are in the root of your repository, or if you are not deploying from source control, you can remove this app settings value.

Implementar o seu modeloDeploy your template

Pode utilizar qualquer uma das seguintes formas de implantar o seu modelo:You can use any of the following ways to deploy your template:

Implementar para o botão AzureDeploy to Azure button

Substitua <url-encoded-path-to-azuredeploy-json> por uma versão codificada por URL do caminho bruto do seu ficheiro no azuredeploy.json GitHub.Replace <url-encoded-path-to-azuredeploy-json> with a URL-encoded version of the raw path of your azuredeploy.json file in GitHub.

Aqui está um exemplo que usa o markdown:Here is an example that uses markdown:

[![Deploy to Azure](https://azuredeploy.net/deploybutton.png)](https://portal.azure.com/#create/Microsoft.Template/uri/<url-encoded-path-to-azuredeploy-json>)

Aqui está um exemplo que usa HTML:Here is an example that uses HTML:

<a href="https://portal.azure.com/#create/Microsoft.Template/uri/<url-encoded-path-to-azuredeploy-json>" target="_blank"><img src="https://azuredeploy.net/deploybutton.png"></a>

Implementar com o PowerShellDeploy using PowerShell

Os seguintes comandos PowerShell criam um grupo de recursos e implementam um modelo que cria uma aplicação de função com os seus recursos necessários.The following PowerShell commands create a resource group and deploy a template that create a function app with its required resources. Para funcionar localmente, tem de ter a Azure PowerShell instalada.To run locally, you must have Azure PowerShell installed. Corra Connect-AzAccount para se inscrever.Run Connect-AzAccount to sign in.

# Register Resource Providers if they're not already registered
Register-AzResourceProvider -ProviderNamespace "microsoft.web"
Register-AzResourceProvider -ProviderNamespace "microsoft.storage"

# Create a resource group for the function app
New-AzResourceGroup -Name "MyResourceGroup" -Location 'West Europe'

# Create the parameters for the file, which for this template is the function app name.
$TemplateParams = @{"appName" = "<function-app-name>"}

# Deploy the template
New-AzResourceGroupDeployment -ResourceGroupName "MyResourceGroup" -TemplateFile template.json -TemplateParameterObject $TemplateParams -Verbose

Para testar esta implementação, pode utilizar um modelo como este que cria uma aplicação de função no Windows num plano de Consumo.To test out this deployment, you can use a template like this one that creates a function app on Windows in a Consumption plan. <function-app-name>Substitua-o por um nome único para a sua aplicação de função.Replace <function-app-name> with a unique name for your function app.

Próximos passosNext steps

Saiba mais sobre como desenvolver e configurar funções Azure.Learn more about how to develop and configure Azure Functions.