Creare la prima funzione durevole in PythonCreate your first durable function in Python

Durable Functions è un'estensione di Funzioni di Azure che consente di scrivere funzioni con stato in un ambiente senza server.Durable Functions is an extension of Azure Functions that lets you write stateful functions in a serverless environment. L'estensione gestisce automaticamente lo stato, i checkpoint e i riavvii.The extension manages state, checkpoints, and restarts for you.

Questo articolo spiega come l'estensione di Funzioni di Azure in Visual Studio Code per creare e testare una funzione durevole "hello world" in locale.In this article, you learn how to use the Visual Studio Code Azure Functions extension to locally create and test a "hello world" durable function. Questa funzione orchestrerà e concatenerà le chiamate ad altre funzioni.This function will orchestrate and chain together calls to other functions. Il codice della funzione verrà quindi pubblicato in Azure.You then publish the function code to Azure.

Esecuzione di una funzione durevole in Azure

PrerequisitiPrerequisites

Per completare questa esercitazione:To complete this tutorial:

Se non si ha una sottoscrizione di Azure, creare un account gratuito prima di iniziare.If you don't have an Azure subscription, create a free account before you begin.

Creare il progetto localeCreate your local project

In questa sezione si userà Visual Studio Code per creare un progetto di Funzioni di Azure locale.In this section, you use Visual Studio Code to create a local Azure Functions project.

  1. In Visual Studio Code premere F1 (o CTRL/CMD+MAIUSC+P) per aprire il riquadro comandi.In Visual Studio Code, press F1 (or Ctrl/Cmd+Shift+P) to open the command palette. Nel riquadro comandi cercare e selezionare Azure Functions: Create New Project....In the command palette, search for and select Azure Functions: Create New Project....

    Creare una funzione

  2. Scegliere una cartella vuota come posizione del progetto e quindi Seleziona.Choose an empty folder location for your project and choose Select.

  3. Seguire le istruzioni e specificare le informazioni seguenti:Following the prompts, provide the following information:

    PromptPrompt valoreValue DescrizioneDescription
    Selezionare un linguaggio per il progetto di app per le funzioniSelect a language for your function app project PythonPython Creare un progetto Funzioni Python in locale.Create a local Python Functions project.
    Selezionare una versioneSelect a version Azure Functions v3 (Funzioni di Azure v3)Azure Functions v3 Questa opzione viene visualizzata solo quando gli strumenti Core Tools non sono già installati.You only see this option when the Core Tools aren't already installed. In questo caso, gli strumenti Core Tools vengono installati la prima volta che si esegue l'app.In this case, Core Tools are installed the first time you run the app.
    Versione PythonPython version Python 3.6, 3.7 o 3.8Python 3.6, 3.7, or 3.8 VS Code creerà un ambiente virtuale con la versione selezionata.VS Code will create a virtual environment with the version you select.
    Selezionare un modello per la prima funzione del progettoSelect a template for your project's first function Skip for now (Ignora per ora)Skip for now
    Specificare come aprire il progettoSelect how you would like to open your project Open in current window (Apri nella finestra corrente)Open in current window Riapre VS Code nella cartella selezionata.Reopens VS Code in the folder you selected.

Se necessario, Visual Studio Code installa Azure Functions Core Tools.Visual Studio Code installs the Azure Functions Core Tools, if needed. Crea inoltre un progetto di app per le funzioni in una cartella.It also creates a function app project in a folder. Questo progetto contiene i file di configurazione host.json e local.settings.json.This project contains the host.json and local.settings.json configuration files.

Nella cartella radice viene creato anche un file requirements.txt,A requirements.txt file is also created in the root folder. in cui sono specificati i pacchetti Python necessari per eseguire l'app per le funzioni.It specifies the Python packages needed to run your function app.

Aggiornare la versione dei bundle di estensioni di Funzioni di AzureUpdate Azure Functions extension bundles version

Funzioni di Azure per Python richiede la versione 2.x dei bundle di estensioni di Funzioni di Azure.Python Azure Functions require version 2.x of Azure Functions extension bundles. I bundle di estensioni sono configurati in host.json.Extension bundles are configured in host.json.

  1. Aprire host.json nel progetto.Open host.json in the project. Aggiornare la version del bundle di estensioni a [2.*, 3.0.0).Update the extension bundle version to [2.*, 3.0.0). Questo valore specifica un intervallo di versioni maggiore o uguale a 2.0 e minore di 3.0.This specifies a version range that is greater than or equal to 2.0, and less than 3.0.

    "extensionBundle": {
        "id": "Microsoft.Azure.Functions.ExtensionBundle",
        "version": "[2.*, 3.0.0)"
    }
    
  2. Per applicare l'aggiornamento della versione dei bundle di estensioni è necessario ricaricare VS Code.VS Code must be reloaded before the updated extension bundle version is reflected. Nel riquadro comandi cercare il comando Sviluppatore: Ricarica finestra ed eseguirlo.In the command palette, run search for the Developer: Reload Window command and run it.

Installare azure-functions-durable da PyPIInstall azure-functions-durable from PyPI

Quando è stato creato il progetto, l'estensione VS Code per Funzioni di Azure ha creato automaticamente un ambiente virtuale con la versione di Python selezionata.When you created the project, the Azure Functions VS Code extension automatically created a virtual environment with your selected Python version. A questo punto si attiverà l'ambiente virtuale in un terminale e si installeranno alcune dipendenze richieste da Funzioni di Azure e Durable Functions.You will activate the virtual environment in a terminal and install some dependencies required by Azure Functions and Durable Functions.

  1. Aprire requirements.txt nell'editor e modificarne il contenuto come segue:Open requirements.txt in the editor and change its content to the following:

    azure-functions
    azure-functions-durable>=1.0.0b12
    
  2. Aprire il terminale integrato dell'editor nella cartella corrente (CTRL+MAIUSC+`).Open the editor's integrated terminal in the current folder (Ctrl+Shift+`).

  3. Nel terminale integrato attivare l'ambiente virtuale nella cartella corrente:In the integrated terminal, activate the virtual environment in the current folder:

    Linux o macOSLinux or macOS

    source .venv/bin/activate
    

    WindowsWindows

    .venv\scripts\activate
    

    Attivare l'ambiente virtuale

  4. Nel terminale integrato in cui è attivato l'ambiente virtuale, usare pip per installare i pacchetti appena definiti:In the integrated terminal where the virtual environment is activated, use pip to install the packages you just defined:

    python -m pip install -r requirements.txt
    

Creare le funzioniCreate your functions

Un'app Durable Functions di base contiene tre funzioni:A basic Durable Functions app contains three functions:

  • Funzione dell'agente di orchestrazione: descrive un flusso di lavoro che orchestra le altre funzioni.Orchestrator function - describes a workflow that orchestrates other functions.
  • Funzione dell'attività: chiamata dalla funzione dell'agente di orchestrazione, esegue le operazioni e restituisce facoltativamente un valore.Activity function - called by the orchestrator function, performs work, and optionally returns a value.
  • Funzione client: normale funzione di Azure che avvia una funzione dell'agente di orchestrazione.Client function - a regular Azure Function that starts an orchestrator function. Questo esempio usa una funzione attivata tramite HTTP.This example uses an HTTP triggered function.

Funzione dell'agente di orchestrazioneOrchestrator function

Per creare il codice della funzione durevole nel progetto si usa un modello.You use a template to create the durable function code in your project.

  1. Nel riquadro comandi cercare e selezionare Azure Functions: Create Function....In the command palette, search for and select Azure Functions: Create Function....

  2. Seguire le istruzioni e specificare le informazioni seguenti:Following the prompts, provide the following information:

    PromptPrompt ValoreValue DescrizioneDescription
    Select a template for your function (Selezionare un modello per la funzione)Select a template for your function Durable Functions OrchestratorDurable Functions orchestrator Creare un'orchestrazione Durable FunctionsCreate a Durable Functions orchestration
    Specificare un nome di funzioneProvide a function name HelloOrchestratorHelloOrchestrator Nome della funzione durevoleName of your durable function

È stato aggiunto un agente di orchestrazione per coordinare le funzioni dell'attività.You've added an orchestrator to coordinate activity functions. Aprire HelloOrchestrator/__init__.py per visualizzare la funzione dell'agente di orchestrazione.Open HelloOrchestrator/__init__.py to see the orchestrator function. Ogni chiamata a context.call_activity richiama una funzione dell'attività denominata Hello.Each call to context.call_activity invokes an activity function named Hello.

Si aggiungerà ora la funzione dell'attività Hello cui viene fatto riferimento.Next, you'll add the referenced Hello activity function.

Funzione dell'attivitàActivity function

  1. Nel riquadro comandi cercare e selezionare Azure Functions: Create Function....In the command palette, search for and select Azure Functions: Create Function....

  2. Seguire le istruzioni e specificare le informazioni seguenti:Following the prompts, provide the following information:

    PromptPrompt ValoreValue DescrizioneDescription
    Select a template for your function (Selezionare un modello per la funzione)Select a template for your function Durable Functions ActivityDurable Functions activity Creare una funzione dell'attivitàCreate an activity function
    Specificare un nome di funzioneProvide a function name CiaoHello Nome della funzione dell'attivitàName of your activity function

È stata aggiunta la funzione dell'attività Hello richiamata dall'agente di orchestrazione.You've added the Hello activity function that is invoked by the orchestrator. Aprire Hello/__init__.py per verificare che accetti un nome come input e restituisca un messaggio di saluto.Open Hello/__init__.py to see that it takes a name as input and returns a greeting. In una funzione dell'attività si eseguiranno azioni come una chiamata al database o un calcolo.An activity function is where you'll perform actions such as making a database call or performing a computation.

Si aggiungerà infine una funzione attivata tramite HTTP che avvia l'orchestrazione.Finally, you'll add an HTTP triggered function that starts the orchestration.

Funzione client (Http Starter)Client function (HTTP starter)

  1. Nel riquadro comandi cercare e selezionare Azure Functions: Create Function....In the command palette, search for and select Azure Functions: Create Function....

  2. Seguire le istruzioni e specificare le informazioni seguenti:Following the prompts, provide the following information:

    PromptPrompt ValoreValue DescrizioneDescription
    Select a template for your function (Selezionare un modello per la funzione)Select a template for your function Durable Functions Http StarterDurable Functions HTTP starter Creare una funzione Http StarterCreate an HTTP starter function
    Specificare un nome di funzioneProvide a function name DurableFunctionsHttpStartDurableFunctionsHttpStart Nome della funzione dell'attivitàName of your activity function
    Livello di autorizzazioneAuthorization level AnonimaAnonymous A scopo dimostrativo, consentire la chiamata della funzione senza autenticazioneFor demo purposes, allow the function to be called without authentication

È stata aggiunta una funzione attivata tramite HTTP che avvia un'orchestrazione.You've added an HTTP triggered function that starts an orchestration. Aprire DurableFunctionsHttpStart/__init__.py per verificare che usi client.start_new per avviare una nuova orchestrazione.Open DurableFunctionsHttpStart/__init__.py to see that it uses client.start_new to start a new orchestration. Userà quindi client.create_check_status_response per restituire una risposta HTTP contenente gli URL che possono essere usati per monitorare e gestire la nuova orchestrazione.Then it uses client.create_check_status_response to return an HTTP response containing URLs that can be used to monitor and manage the new orchestration.

È ora disponibile un'app Durable Functions eseguibile in locale e distribuibile in Azure.You now have a Durable Functions app that can be run locally and deployed to Azure.

Testare la funzione in localeTest the function locally

Azure Functions Core Tools consente di eseguire un progetto Funzioni di Azure nel computer di sviluppo locale.Azure Functions Core Tools lets you run an Azure Functions project on your local development computer. Se non è già stato fatto, viene richiesto di installare questi strumenti al primo avvio di una funzione da Visual Studio Code.If you don't have it installed, you're prompted to install these tools the first time you start a function from Visual Studio Code.

  1. Per testare la funzione, impostare un punto di interruzione nel codice della funzione dell'attività Hello (Hello/__init__.py).To test your function, set a breakpoint in the Hello activity function code (Hello/__init__.py). Premere F5 o selezionare Debug: Start Debugging nel riquadro comandi per avviare il progetto di app per le funzioni.Press F5 or select Debug: Start Debugging from the command palette to start the function app project. L'output dagli strumenti di base viene visualizzato nel pannello Terminale.Output from Core Tools is displayed in the Terminal panel.

    Nota

    Per altre informazioni sul debug, vedere Diagnostica in Durable Functions.Refer to the Durable Functions Diagnostics for more information on debugging.

  2. Per l'esecuzione di Durable Functions è necessario un account di archiviazione di Azure.Durable Functions requires an Azure Storage account to run. Quando VS Code richiede di selezionare un account di archiviazione, scegliere Select storage account (Seleziona account di archiviazione).When VS Code prompts you to select a storage account, choose Select storage account.

    Crea account di archiviazione

  3. Seguire le istruzioni e specificare le informazioni seguenti per creare un nuovo account di archiviazione in Azure.Following the prompts, provide the following information to create a new storage account in Azure.

    PromptPrompt ValoreValue DescrizioneDescription
    Seleziona sottoscrizioneSelect subscription nome della sottoscrizionename of your subscription Selezionare la sottoscrizione ad AzureSelect your Azure subscription
    Select a storage account (Selezionare un account di archiviazione)Select a storage account Creare un nuovo account di archiviazione.Create a new storage account
    Enter the name of the new storage account (Immettere il nome del nuovo account di archiviazione)Enter the name of the new storage account nome univocounique name Nome dell'account di archiviazione da creareName of the storage account to create
    Selezionare un gruppo di risorseSelect a resource group nome univocounique name Nome del gruppo di risorse da creareName of the resource group to create
    Selezionare una localitàSelect a location regionregion Selezionare un'area nelle vicinanzeSelect a region close to you
  4. Nel pannello Terminale copiare l'endpoint dell'URL della funzione attivata da HTTP.In the Terminal panel, copy the URL endpoint of your HTTP-triggered function.

    Output locale di Azure

  5. Usare il browser o uno strumento come Postman o cURL per inviare una richiesta HTTP all'endpoint URL.Using your browser, or a tool like Postman or cURL, send an HTTP request to the URL endpoint. Sostituire l'ultimo segmento con il nome della funzione dell'agente di orchestrazione (HelloOrchestrator).Replace the last segment with the name of the orchestrator function (HelloOrchestrator). L'URL sarà simile a http://localhost:7071/api/orchestrators/HelloOrchestrator.The URL should be similar to http://localhost:7071/api/orchestrators/HelloOrchestrator.

    La risposta è il risultato iniziale della funzione HTTP che informa che l'orchestrazione durevole è stata avviata correttamente.The response is the initial result from the HTTP function letting you know the durable orchestration has started successfully. Non è ancora il risultato finale dell'orchestrazione.It is not yet the end result of the orchestration. La risposta include alcuni URL utili.The response includes a few useful URLs. Per il momento si eseguirà una query relativa allo stato dell'orchestrazione.For now, let's query the status of the orchestration.

  6. Copiare il valore dell'URL per statusQueryGetUri, incollarlo nella barra degli indirizzi del browser ed eseguire la richiesta.Copy the URL value for statusQueryGetUri and paste it in the browser's address bar and execute the request. In alternativa è possibile continuare a usare Postman per inviare la richiesta GET.Alternatively you can also continue to use Postman to issue the GET request.

    La richiesta eseguirà una query per determinare lo stato dell'istanza di orchestrazione.The request will query the orchestration instance for the status. Si otterrà una risposta conclusiva in cui si specifica che l'istanza è stata completata e contiene l'output o i risultati della funzione durevole.You should get an eventual response, which shows the instance has completed, and includes the outputs or results of the durable function. L'aspetto sarà simile al seguente:It looks like:

    {
        "name": "HelloOrchestrator",
        "instanceId": "9a528a9e926f4b46b7d3deaa134b7e8a",
        "runtimeStatus": "Completed",
        "input": null,
        "customStatus": null,
        "output": [
            "Hello Tokyo!",
            "Hello Seattle!",
            "Hello London!"
        ],
        "createdTime": "2020-03-18T21:54:49Z",
        "lastUpdatedTime": "2020-03-18T21:54:54Z"
    }
    
  7. Per arrestare il debug, premere MAIUSC+F5 in VS Code.To stop debugging, press Shift+F5 in VS Code.

Dopo aver verificato la corretta esecuzione della funzione nel computer locale, è possibile pubblicare il progetto in Azure.After you've verified that the function runs correctly on your local computer, it's time to publish the project to Azure.

Accedere ad AzureSign in to Azure

Prima di potere pubblicare l'app, è necessario accedere ad Azure.Before you can publish your app, you must sign in to Azure.

  1. Se non si è ancora effettuato l'accesso, selezionare l'icona di Azure nella barra attività, quindi nell'area Azure: Funzioni scegliere Accedi ad Azure. Se non si ha già un account, è possibile creare un account Azure gratuito .If you aren't already signed in, choose the Azure icon in the Activity bar, then in the Azure: Functions area, choose Sign in to Azure.... If you don't already have one, you can Create a free Azure account. Gli studenti possono creare un account Azure for Students gratuito .Students can create a free Azure account for Students.

    Accedere ad Azure in VS Code

    Se è già stato effettuato l'accesso, passare alla sezione successiva.If you're already signed in, go to the next section.

  2. Quando viene visualizzata la richiesta nel browser, scegliere l'account Azure e accedere con le credenziali corrispondenti.When prompted in the browser, choose your Azure account and sign in using your Azure account credentials.

  3. Dopo avere eseguito l'accesso, è possibile chiudere la nuova finestra del browser.After you've successfully signed in, you can close the new browser window. Le sottoscrizioni che appartengono all'account Azure vengono visualizzate nella barra laterale.The subscriptions that belong to your Azure account are displayed in the Side bar.

Pubblicare il progetto in AzurePublish the project to Azure

In questa sezione verrà creata un'app per le funzioni con le risorse correlate nella sottoscrizione di Azure e quindi verrà distribuito il codice.In this section, you create a function app and related resources in your Azure subscription and then deploy your code.

Importante

La pubblicazione in un'app per le funzioni esistente sovrascrive il contenuto di tale app in Azure.Publishing to an existing function app overwrites the content of that app in Azure.

  1. Selezionare l'icona di Azure nella barra attività, quindi nell'area Azure: Funzioni scegliere il pulsante Deploy to function app... (Distribuisci nell'app per le funzioni...).Choose the Azure icon in the Activity bar, then in the Azure: Functions area, choose the Deploy to function app... button.

    Pubblicare il progetto in Azure

  2. Quando richiesto, immettere le informazioni seguenti:Provide the following information at the prompts:

    • Selezionare la cartella: scegliere una cartella dall'area di lavoro o selezionarne una che contenga l'app per le funzioni.Select folder: Choose a folder from your workspace or browse to one that contains your function app. Questa opzione non verrà visualizzata se è già stata aperta un'app per le funzioni valida.You won't see this if you already have a valid function app opened.

    • Selezionare la sottoscrizione: scegliere la sottoscrizione da usare.Select subscription: Choose the subscription to use. Questa opzione non è visibile se è disponibile una sola sottoscrizione.You won't see this if you only have one subscription.

    • Selezionare l'app per le funzioni in Azure: Scegliere - Create new Function App.Select Function App in Azure: Choose - Create new Function App. Non scegliere l'opzione Advanced, che non è illustrata in questo articolo.(Don't choose the Advanced option, which isn't covered in this article.)

    • Immettere un nome univoco a livello globale per l'app per le funzioni: digitare un nome valido in un percorso URL.Enter a globally unique name for the function app: Type a name that is valid in a URL path. Il nome digitato viene convalidato per assicurarsi che sia univoco in Funzioni di Azure.The name you type is validated to make sure that it's unique in Azure Functions.

    • Selezionare una località per le nuove risorse: per prestazioni ottimali, scegliere un'area vicina.Select a location for new resources: For better performance, choose a region near you.

    L'estensione Mostra lo stato delle singole risorse man mano che vengono create in Azure nell'area di notifica.The extension shows the status of individual resources as they are being created in Azure in the notification area.

    Notifica della creazione di risorse di Azure

  3. Al termine, nella sottoscrizione vengono create le risorse di Azure seguenti con i nomi basati sul nome dell'app per le funzioni:When completed, the following Azure resources are created in your subscription, using names based on your function app name:

    • Un gruppo di risorse, che è un contenitore logico per le risorse correlate.A resource group, which is a logical container for related resources.
    • Un account di archiviazione di Azurestandard, che mantiene lo stato e altre informazioni sui progetti.A standard Azure Storage account, which maintains state and other information about your projects.
    • Un piano a consumo, che definisce l'host sottostante per l'app per le funzioni serverless.A consumption plan, which defines the underlying host for your serverless function app.
    • Un'app per le funzioni, che fornisce l'ambiente per l'esecuzione del codice della funzione.A function app, which provides the environment for executing your function code. Un'app per le funzioni consente di raggruppare le funzioni come un'unità logica per semplificare la gestione, la distribuzione e la condivisione delle risorse all'interno dello stesso piano di hosting.A function app lets you group functions as a logical unit for easier management, deployment, and sharing of resources within the same hosting plan.
    • Un'istanza di Application Insights connessa all'app per le funzioni, che tiene traccia dell'utilizzo della funzione serverless.An Application Insights instance connected to the function app, which tracks usage of your serverless function.

    Dopo la creazione dell'app per le funzioni e dopo l'applicazione del pacchetto di distribuzione viene visualizzata una notifica.A notification is displayed after your function app is created and the deployment package is applied.

    Suggerimento

    Per impostazione predefinita, le risorse di Azure richieste dall'app per le funzioni vengono create in base al nome dell'app per le funzioni fornito.By default, the Azure resources required by your function app are created based on the function app name you provide. Per impostazione predefinita, vengono creati anche nello stesso nuovo gruppo di risorse con l'app per le funzioni.By default, they are also created in the same new resource group with the function app. Se si desidera personalizzare i nomi di queste risorse o riutilizzare le risorse esistenti, è necessario pubblicare il progetto con le opzioni di creazione avanzate.If you want to either customize the names of these resources or reuse existing resources, you need to instead publish the project with advanced create options.

  4. Selezionare Visualizza output nelle notifiche per visualizzare i risultati della creazione e della distribuzione, incluse le risorse di Azure create.Select View Output in this notification to view the creation and deployment results, including the Azure resources that you created. Se non si riesce a visualizzare la notifica, selezionare l'icona della campana nell'angolo in basso a destra per visualizzarla di nuovo.If you miss the notification, select the bell icon in the lower right corner to see it again.

    Notifica di creazione completata

Testare la funzione in AzureTest your function in Azure

  1. Copiare l'URL del trigger HTTP dal pannello Output.Copy the URL of the HTTP trigger from the Output panel. L'URL che chiama la funzione attivata tramite HTTP deve essere nel formato http://<functionappname>.azurewebsites.net/orchestrators/HelloOrchestratorThe URL that calls your HTTP-triggered function should be in this format: http://<functionappname>.azurewebsites.net/orchestrators/HelloOrchestrator

  2. Incollare questo nuovo URL per la richiesta HTTP nella barra degli indirizzi del browser.Paste this new URL for the HTTP request into your browser's address bar. Quando si usa l'app pubblicata si dovrebbe ottenere la stessa risposta di stato restituita in precedenza.You should get the same status response as before when using the published app.

Passaggi successiviNext steps

Si è usato Visual Studio Code per creare e pubblicare un'app per le funzioni durevoli in Python.You have used Visual Studio Code to create and publish a Python durable function app.