Automatizzare la distribuzione di risorse per l'app per le funzioni in Funzioni di AzureAutomate resource deployment for your function app in Azure Functions

È possibile usare un modello di Azure Resource Manager per distribuire un'app per le funzioni.You can use an Azure Resource Manager template to deploy a function app. Questo articolo descrive le risorse e i parametri necessari per questa operazione.This article outlines the required resources and parameters for doing so. A seconda dei trigger e dei binding potrebbe essere necessario distribuire risorse aggiuntive nell'app per le funzioni.You might need to deploy additional resources, depending on the triggers and bindings in your function app.

Per altre informazioni sulla creazione dei modelli, vedere Creazione di modelli di Azure Resource Manager.For more information about creating templates, see Authoring Azure Resource Manager templates.

Per i modelli di esempio, vedere:For sample templates, see:

Risorse necessarieRequired resources

Una distribuzione di funzioni di Azure è in genere costituita da queste risorse:An Azure Functions deployment typically consists of these resources:

GruppiResource RequisitoRequirement Guida di riferimento a sintassi e proprietàSyntax and properties reference
Un'app per le funzioniA function app ObbligatorioRequired Microsoft.Web/sitesMicrosoft.Web/sites
Un account di archiviazione di AzureAn Azure Storage account ObbligatorioRequired Microsoft.Storage/storageAccountsMicrosoft.Storage/storageAccounts
Componente Application InsightsAn Application Insights component FacoltativoOptional Microsoft. Insights/ComponentsMicrosoft.Insights/components
Piano di hostingA hosting plan Facoltativo1Optional1 Microsoft.Web/serverfarmsMicrosoft.Web/serverfarms

1 Un piano di hosting è necessario solo quando si sceglie di eseguire l'app per le funzioni in un piano Premium (in anteprima) o in un piano di servizio app.1A hosting plan is only required when you choose to run your function app on a Premium plan (in preview) or on an App Service plan.

Suggerimento

Sebbene non sia obbligatorio, è consigliabile configurare Application Insights per l'app.While not required, it is strongly recommended that you configure Application Insights for your app.

Account di archiviazioneStorage account

Per un'app per le funzioni è necessario l'account di archiviazione di Azure.An Azure storage account is required for a function app. È necessario un account per utilizzo generico che supporti BLOB, tabelle, code e i file.You need a general purpose account that supports blobs, tables, queues, and files. Per altre informazioni, vedere i requisiti dell'account di archiviazione per Funzioni di Azure.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')]"
    }
}

È anche necessario specificare la proprietà AzureWebJobsStorage come impostazione dell'app nella configurazione del sito.In addition, the property AzureWebJobsStorage must be specified as an app setting in the site configuration. Se l'app per le funzioni non usa Application Insights per il monitoraggio, è necessario specificare anche AzureWebJobsDashboard come impostazione dell'app.If the function app doesn't use Application Insights for monitoring, it should also specify AzureWebJobsDashboard as an app setting.

Il runtime di Funzioni di Azure usa la stringa di connessione AzureWebJobsStorage per creare code interne.The Azure Functions runtime uses the AzureWebJobsStorage connection string to create internal queues. Quando Application Insights non è abilitato, il runtime usa la stringa di connessione AzureWebJobsDashboard per accedere all'archivio tabelle di Azure e fornire dati per la scheda Monitoraggio nel portale.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.

Queste proprietà sono specificate nella raccolta appSettings dell'oggetto siteConfig: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

Application Insights è consigliato per il monitoraggio delle app per le funzioni.Application Insights is recommended for monitoring your function apps. La risorsa Application Insights viene definita con il tipo Microsoft. Insights/Components e il 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('functionAppName')]"
            }
        },

Inoltre, la chiave di strumentazione deve essere fornita all'app per le funzioni usando l'impostazione dell'applicazione APPINSIGHTS_INSTRUMENTATIONKEY.In addition, the instrumentation key needs to be provided to the function app using the APPINSIGHTS_INSTRUMENTATIONKEY application setting. Questa proprietà viene specificata nella raccolta appSettings nell'oggetto siteConfig: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]"
    }
]

Piano di hostingHosting plan

La definizione del piano di hosting varia e può essere una delle seguenti:The definition of the hosting plan varies, and can be one of the following:

App per le funzioniFunction app

La risorsa dell'app per le funzioni viene definita usando una risorsa di tipo Microsoft. Web/sites e Kind functionapp: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 si definisce in modo esplicito un piano di hosting, è necessario un elemento aggiuntivo nella matrice dependsOn: "[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'))]"

Un'app per le funzioni deve includere le impostazioni dell'applicazione seguenti:A function app must include these application settings:

Nome impostazioneSetting name DescrizioneDescription Valori di esempioExample values
AzureWebJobsStorageAzureWebJobsStorage Una stringa di connessione a un account di archiviazione che il runtime di funzioni per l'accodamento internoA connection string to a storage account that the Functions runtime for internal queueing Vedere l' account di archiviazioneSee Storage account
FUNCTIONS_EXTENSION_VERSIONFUNCTIONS_EXTENSION_VERSION Versione del runtime di funzioni di AzureThe version of the Azure Functions runtime ~2
FUNCTIONS_WORKER_RUNTIMEFUNCTIONS_WORKER_RUNTIME Lo stack del linguaggio da usare per le funzioni in questa appThe language stack to be used for functions in this app dotnet, node, java o pythondotnet, node, java, or python
WEBSITE_NODE_DEFAULT_VERSIONWEBSITE_NODE_DEFAULT_VERSION Necessaria solo se si usa lo stack del linguaggio node, specifica la versione da usareOnly needed if using the node language stack, specifies the version to use 10.14.1

Queste proprietà vengono specificate nella raccolta appSettings nella proprietà siteConfig: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"
            }
        ]
    }
}

Distribuisci nel piano a consumoDeploy on Consumption plan

Il piano a consumo alloca automaticamente funzionalità di calcolo durante l'esecuzione del codice, aumenta il numero di istanze in base alla necessità per gestire il carico e quindi riduce le prestazioni quando il codice non è in esecuzione.The Consumption plan automatically allocates compute power when your code is running, scales out as necessary to handle load, and then scales down when code is not running. Non è necessario pagare per le macchine virtuali inattive e non è necessario riservare in anticipo la capacità.You don't have to pay for idle VMs, and you don't have to reserve capacity in advance. Per altre informazioni, vedere Ridimensionamento e hosting di Funzioni di Azure.To learn more, see Azure Functions scale and hosting.

Per un modello di Azure Resource Manager di esempio, vedere App per le funzioni in un piano a consumo.For a sample Azure Resource Manager template, see Function app on Consumption plan.

Creare un piano a consumoCreate a Consumption plan

Non è necessario definire un piano a consumo.A Consumption plan does not need to be defined. Una verrà creata o selezionata automaticamente in base all'area quando si crea la risorsa dell'app per le funzioni.One will automatically be created or selected on a per-region basis when you create the function app resource itself.

Il piano a consumo è un tipo speciale di risorsa "server farm".The Consumption plan is a special type of "serverfarm" resource. Per Windows, è possibile specificarla usando il valore Dynamic per le proprietà computeMode e sku: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

Non è possibile definire in modo esplicito il piano a consumo per Linux.The Consumption plan cannot be explicitly defined for Linux. Verrà creata automaticamente.It will be created automatically.

Se si definisce in modo esplicito il piano a consumo, sarà necessario impostare la proprietà serverFarmId nell'app in modo che punti all'ID risorsa del piano.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. È necessario assicurarsi che l'app per le funzioni disponga di un'impostazione dependsOn anche per il piano.You should ensure that the function app has a dependsOn setting for the plan as well.

Creare un'app per le funzioniCreate a function app

WindowsWindows

In Windows un piano a consumo richiede due impostazioni aggiuntive nella configurazione del sito: WEBSITE_CONTENTAZUREFILECONNECTIONSTRING e WEBSITE_CONTENTSHARE.On Windows, a Consumption plan requires two additional settings in the site configuration: WEBSITE_CONTENTAZUREFILECONNECTIONSTRING and WEBSITE_CONTENTSHARE. Queste proprietà consentono di configurare l'account di archiviazione e il percorso in cui vengono archiviati il codice dell'app per le funzioni e la configurazione.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

In Linux l'app per le funzioni deve avere la proprietà kind impostata su functionapp,linux ed è necessario impostare la proprietà reserved su true: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
    }
}

Distribuisci nel piano PremiumDeploy on Premium plan

Il piano Premium offre la stessa scalabilità del piano a consumo, ma include risorse dedicate e funzionalità aggiuntive.The Premium plan offers the same scaling as the consumption plan but includes dedicated resources and additional capabilities. Per altre informazioni, vedere piano Premium di funzioni di Azure.To learn more, see Azure Functions Premium Plan.

Creare un piano PremiumCreate a Premium plan

Un piano Premium è un tipo speciale di risorsa "server farm".A Premium plan is a special type of "serverfarm" resource. È possibile specificarlo utilizzando EP1, EP2 o EP3 per il valore della proprietà sku.You can specify it by using either EP1, EP2, or EP3 for the sku property value.

{
    "type": "Microsoft.Web/serverfarms",
    "apiVersion": "2015-04-01",
    "name": "[variables('hostingPlanName')]",
    "location": "[resourceGroup().location]",
    "properties": {
        "name": "[variables('hostingPlanName')]",
        "sku": "EP1"
    }
}

Creare un'app per le funzioniCreate a function app

Un'app per le funzioni in un piano Premium deve avere la proprietà serverFarmId impostata sull'ID risorsa del piano creato in precedenza.A function app on a Premium plan must have the serverFarmId property set to the resource ID of the plan created earlier. Inoltre, un piano Premium richiede due impostazioni aggiuntive nella configurazione del sito: WEBSITE_CONTENTAZUREFILECONNECTIONSTRING e WEBSITE_CONTENTSHARE.In addition, a Premium plan requires two additional settings in the site configuration: WEBSITE_CONTENTAZUREFILECONNECTIONSTRING and WEBSITE_CONTENTSHARE. Queste proprietà consentono di configurare l'account di archiviazione e il percorso in cui vengono archiviati il codice dell'app per le funzioni e la configurazione.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"
                }
            ]
        }
    }
}

Distribuisci nel piano di servizio appDeploy on App Service plan

Nel piano di servizio app, le app per le funzioni vengono eseguite in macchine virtuali dedicate in SKU Basic, Standard e Premium, analogamente alle app Web.In the App Service plan, your function app runs on dedicated VMs on Basic, Standard, and Premium SKUs, similar to web apps. Per informazioni dettagliate sul funzionamento del piano di servizio app, vedere Panoramica approfondita dei piani di servizio app di Azure.For details about how the App Service plan works, see the Azure App Service plans in-depth overview.

Per un modello di Azure Resource Manager di esempio, vedere App per le funzioni in un piano di servizio app di Azure.For a sample Azure Resource Manager template, see Function app on Azure App Service plan.

Creare un piano di servizio appCreate an App Service plan

Un piano di servizio app è definito da una risorsa "server farm".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
    }
}

Per eseguire l'app in Linux, è necessario impostare anche il kind su Linux: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
    }
}

Creare un'app per le funzioniCreate a function app

Un'app per le funzioni in un piano di servizio app deve avere la proprietà serverFarmId impostata sull'ID risorsa del piano creato in precedenza.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"
                }
            ]
        }
    }
}

Le app Linux devono includere anche una proprietà linuxFxVersion in siteConfig.Linux apps should also include a linuxFxVersion property under siteConfig. Se si distribuisce semplicemente il codice, il valore per questo è determinato dallo stack di runtime desiderato:If you are just deploying code, the value for this is determined by your desired runtime stack:

StackStack Valore di esempioExample 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 si distribuisce un'immagine del contenitore personalizzata, è necessario specificarla con linuxFxVersion e includere la configurazione che consente il pull dell'immagine, come nel app Web per contenitori.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. Impostare anche WEBSITES_ENABLE_APP_SERVICE_STORAGE su false, poiché il contenuto dell'app viene fornito nel contenitore stesso: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"
        }
    }
}

Personalizzazione di una distribuzioneCustomizing a deployment

Un'app per le funzioni contiene numerose risorse figlio che possono essere usate nella distribuzione, incluse le impostazioni dell'app e le opzioni di controllo del codice sorgente.A function app has many child resources that you can use in your deployment, including app settings and source control options. È anche possibile scegliere di rimuovere la risorsa figlio sourcecontrols e usare un'altra opzione di distribuzione.You also might choose to remove the sourcecontrols child resource, and use a different deployment option instead.

Importante

Per poter distribuire l'applicazione usando Azure Resource Manager, è importante comprendere come vengono distribuite le risorse in Azure.To successfully deploy your application by using Azure Resource Manager, it's important to understand how resources are deployed in Azure. Nell'esempio seguente, le configurazioni di livello superiore vengono applicate usando siteConfig.In the following example, top-level configurations are applied by using siteConfig. È importante impostare le configurazioni a un livello superiore perché forniscono informazioni al motore di runtime e di distribuzione di Funzioni di Azure.It's important to set these configurations at a top level, because they convey information to the Functions runtime and deployment engine. Le informazioni di livello superiore sono necessarie prima di applicare la risorsa figlia sourcecontrols/web.Top-level information is required before the child sourcecontrols/web resource is applied. Anche se è possibile configurare queste impostazioni nella risorsa config/appSettings del livello figlio, in alcuni casi l'app per le funzioni deve essere distribuita prima di applicare config/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. Quando ad esempio si usano le funzioni con app per la logica, le funzioni sono una dipendenza di un'altra risorsa.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')]"
          }
     }
  ]
}

Suggerimento

Questo modello usa il valore dell'impostazione app Project, che imposta la directory di base in cui il motore di distribuzione di Funzioni di Azure (Kudu) cercherà il codice distribuibile.This template uses the Project app settings value, which sets the base directory in which the Functions deployment engine (Kudu) looks for deployable code. Nel repository le funzioni sono in una sottocartella della cartella src.In our repository, our functions are in a subfolder of the src folder. Pertanto, nell'esempio precedente abbiamo impostato il valore di impostazione dell'app su src.So, in the preceding example, we set the app settings value to src. Se le funzioni sono nella radice del repository o se non si sta distribuendo dal controllo del codice sorgente, è possibile rimuovere questo valore di impostazione dell'app.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.

Distribuire il modelloDeploy your template

Il modello può essere distribuito in uno dei modi seguenti:You can use any of the following ways to deploy your template:

Pulsante Deploy to Azure per la distribuzione in AzureDeploy to Azure button

Sostituire <url-encoded-path-to-azuredeploy-json> con una versione con codifica URL del percorso non elaborato del file azuredeploy.json in GitHub.Replace <url-encoded-path-to-azuredeploy-json> with a URL-encoded version of the raw path of your azuredeploy.json file in GitHub.

Di seguito è riportato un esempio che usa la sintassi 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>)

Di seguito è riportato un esempio che 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>

Distribuire tramite PowerShellDeploy using PowerShell

I comandi di PowerShell seguenti creano un gruppo di risorse e distribuiscono un modello che crea un'app per le funzioni con le risorse necessarie.The following PowerShell commands create a resource group and deploy a template that create a function app with its required resources. Per eseguire localmente, è necessario aver installato Azure PowerShell .To run locally, you must have Azure PowerShell installed. Eseguire Connect-AzAccount per accedere.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

Per testare questa distribuzione, è possibile usare un modello come questo che crea un'app per le funzioni in Windows in un piano a 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. Sostituire <function-app-name> con un nome univoco per l'app per le funzioni.Replace <function-app-name> with a unique name for your function app.

Passaggi successiviNext steps

Altre informazioni su come sviluppare e configurare le Funzioni di Azure.Learn more about how to develop and configure Azure Functions.