Creare la prima funzione durevole in Python
Durable Functions è un'estensione di Funzioni di Azure che consente di scrivere funzioni con stato in un ambiente serverless. L'estensione gestisce automaticamente lo stato, i checkpoint e i riavvii.
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. Questa funzione orchestra e concatena le chiamate ad altre funzioni. È quindi possibile pubblicare il codice della funzione in Azure.
Prerequisiti
Per completare questa esercitazione:
Installare Visual Studio Code.
Installare l'estensione Funzioni di Azure di Visual Studio Code.
Assicurarsi di avere la versione più recente di Funzioni di Azure Core Tools.
Durable Functions richiede un account di archiviazione di Azure. È necessaria una sottoscrizione di Azure.
Assicurarsi di avere installato la versione 3.7, 3.8, 3.9 o 3.10 di Python .
Se non si ha una sottoscrizione di Azure, creare un account Azure gratuito prima di iniziare.
Creare il progetto locale
In questa sezione si userà Visual Studio Code per creare un progetto di Funzioni di Azure locale.
In Visual Studio Code premere F1 (o CTRL/CMD+MAIUSC+P) per aprire il riquadro comandi. Nel riquadro comandi cercare e selezionare
Azure Functions: Create New Project...
.Scegliere una cartella vuota come posizione del progetto e quindi Seleziona.
Seguire le istruzioni e specificare le informazioni seguenti:
Richiesta Valore Descrizione Selezionare un linguaggio per il progetto di app per le funzioni Python Creare un progetto Funzioni Python in locale. Selezionare una versione Funzioni di Azure v4 Questa opzione viene visualizzata solo quando gli strumenti Core Tools non sono già installati. In questo caso, gli strumenti Core Tools vengono installati la prima volta che si esegue l'app. Versione di Python Python 3.7, 3.8, 3.9 o 3.10 Visual Studio Code creerà un ambiente virtuale con la versione selezionata. Selezionare un modello per la prima funzione del progetto Ignorare per ora Specificare come aprire il progetto Open in current window (Apri nella finestra corrente) Riapre Visual Studio Code nella cartella selezionata.
Seguire le istruzioni e specificare le informazioni seguenti:
Richiesta Valore Descrizione Selezionare una lingua Python (modello di programmazione V2) Creare un progetto Di Funzioni Python locale usando il modello di programmazione V2. Selezionare una versione Funzioni di Azure v4 Questa opzione viene visualizzata solo quando gli strumenti Core Tools non sono già installati. In questo caso, gli strumenti Core Tools vengono installati la prima volta che si esegue l'app. Versione di Python Python 3.7, 3.8, 3.9 o 3.10 Visual Studio Code creerà un ambiente virtuale con la versione selezionata. Specificare come aprire il progetto Open in current window (Apri nella finestra corrente) Riapre Visual Studio Code nella cartella selezionata.
Visual Studio Code installa Funzioni di Azure Core Tools, se necessario. Crea inoltre un progetto di app per le funzioni in una cartella. Questo progetto contiene i file di configurazione host.json e local.settings.json.
Viene creato anche un file requirements.txt nella cartella radice. Specifica i pacchetti Python necessari per eseguire l'app per le funzioni.
Installare azure-functions-durable da PyPI
Dopo aver creato il progetto, l'estensione Funzioni di Azure Visual Studio Code crea automaticamente un ambiente virtuale con la versione di Python selezionata. È quindi necessario attivare l'ambiente virtuale in un terminale e installare alcune dipendenze richieste da Funzioni di Azure e Durable Functions.
Aprire il requirements.txt nell'editor e modificarne il contenuto nel codice seguente:
azure-functions azure-functions-durable
Aprire il terminale integrato dell'editor nella cartella corrente (CTRL+MAIUSC+`).
Nel terminale integrato attivare l'ambiente virtuale nella cartella corrente, a seconda del sistema operativo:
Nel terminale integrato in cui è attivato l'ambiente virtuale, usare pip per installare i pacchetti definiti.
python -m pip install -r requirements.txt
Creare le funzioni
Un'app Durable Functions di base contiene tre funzioni:
- Funzione dell'agente di orchestrazione: descrive un flusso di lavoro che orchestra altre funzioni.
- Funzione activity: viene chiamata dalla funzione dell'agente di orchestrazione, esegue il lavoro e, facoltativamente, restituisce un valore.
- Funzione client: è una normale funzione di Azure che avvia una funzione dell'agente di orchestrazione. Questo esempio usa una funzione attivata tramite HTTP.
Funzione dell'agente di orchestrazione
Per creare il codice della funzione durevole nel progetto si usa un modello.
Nel riquadro comandi cercare e selezionare
Azure Functions: Create Function...
.Seguire le istruzioni e specificare le informazioni seguenti:
Richiesta Valore Descrizione Select a template for your function (Selezionare un modello per la funzione) Durable Functions Orchestrator Creare un'orchestrazione Durable Functions Specificare un nome di funzione HelloOrchestrator Nome della funzione durevole
È stato aggiunto un agente di orchestrazione per coordinare le funzioni dell'attività. Aprire HelloOrchestrator/__init__.py per visualizzare la funzione dell'agente di orchestrazione. Ogni chiamata a context.call_activity
richiama una funzione dell'attività denominata Hello
.
Si aggiungerà ora la funzione dell'attività Hello
cui viene fatto riferimento.
Funzione dell'attività
Nel riquadro comandi cercare e selezionare
Azure Functions: Create Function...
.Seguire le istruzioni e specificare le informazioni seguenti:
Richiesta Valore Descrizione Select a template for your function (Selezionare un modello per la funzione) Durable Functions Activity Creare una funzione dell'attività Specificare un nome di funzione Ciao Nome della funzione dell'attività
È stata aggiunta la funzione dell'attività Hello
richiamata dall'agente di orchestrazione. Aprire Hello/__init__.py per vedere che accetta un nome come input e restituisce un messaggio di saluto. In una funzione dell'attività si eseguiranno azioni come una chiamata al database o un calcolo.
Si aggiungerà infine una funzione attivata tramite HTTP che avvia l'orchestrazione.
Funzione client (Http Starter)
Nel riquadro comandi cercare e selezionare
Azure Functions: Create Function...
.Seguire le istruzioni e specificare le informazioni seguenti:
Richiesta Valore Descrizione Select a template for your function (Selezionare un modello per la funzione) Durable Functions Http Starter Creare una funzione Http Starter Specificare un nome di funzione DurableFunctionsHttpStart Nome della funzione client Livello di autorizzazione Anonimo A scopo dimostrativo, consentire la chiamata della funzione senza autenticazione
È stata aggiunta una funzione attivata tramite HTTP che avvia un'orchestrazione. Aprire DurableFunctionsHttpStart/__init__.py per vedere che usa client.start_new
per avviare una nuova orchestrazione. 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.
È ora disponibile un'app Durable Functions eseguibile in locale e distribuibile in Azure.
Requisiti
La versione 2 del modello di programmazione Python richiede le versioni minime seguenti:
- Funzioni di Azure Runtime v4.16+
- Funzioni di Azure Core Tools v4.0.5095+ (se in esecuzione in locale)
- azure-functions-durable v1.2.4+
Abilitare il modello di programmazione v2
Per eseguire il modello di programmazione v2 è necessaria l'impostazione dell'applicazione seguente:
- Nome:
AzureWebJobsFeatureFlags
- Valore:
EnableWorkerIndexing
Se si esegue localmente usando Funzioni di Azure Core Tools, è consigliabile aggiungere questa impostazione al local.settings.json
file. Se si esegue in Azure, seguire questa procedura con lo strumento preferito:
Sostituire <FUNCTION_APP_NAME>
e <RESOURCE_GROUP_NAME>
con il nome rispettivamente dell'app per le funzioni e del gruppo di risorse.
az functionapp config appsettings set --name <FUNCTION_APP_NAME> --resource-group <RESOURCE_GROUP_NAME> --settings AzureWebJobsFeatureFlags=EnableWorkerIndexing
Per creare un'app Durable Functions di base usando questi 3 tipi di funzione, sostituire il contenuto di function_app.py
con il codice Python seguente.
import azure.functions as func
import azure.durable_functions as df
myApp = df.DFApp(http_auth_level=func.AuthLevel.ANONYMOUS)
# An HTTP-Triggered Function with a Durable Functions Client binding
@myApp.route(route="orchestrators/{functionName}")
@myApp.durable_client_input(client_name="client")
async def http_start(req: func.HttpRequest, client):
function_name = req.route_params.get('functionName')
instance_id = await client.start_new(function_name)
response = client.create_check_status_response(req, instance_id)
return response
# Orchestrator
@myApp.orchestration_trigger(context_name="context")
def hello_orchestrator(context):
result1 = yield context.call_activity("hello", "Seattle")
result2 = yield context.call_activity("hello", "Tokyo")
result3 = yield context.call_activity("hello", "London")
return [result1, result2, result3]
# Activity
@myApp.activity_trigger(input_name="city")
def hello(city: str):
return f"Hello {city}"
Esaminare la tabella seguente per una spiegazione di ogni funzione e del relativo scopo nell'esempio.
metodo | Descrizione |
---|---|
hello_orchestrator |
Funzione dell'agente di orchestrazione, che descrive il flusso di lavoro. In questo caso, l'orchestrazione viene avviata, richiama tre funzioni in una sequenza e restituisce i risultati ordinati di tutte e tre le funzioni in un elenco. |
hello |
Funzione dell'attività, che esegue il lavoro orchestrato. La funzione restituisce un messaggio di saluto semplice alla città passato come argomento. |
http_start |
Un' funzione attivata da HTTP che avvia un'istanza dell'orchestrazione e restituisce una risposta di controllo stato. |
Nota
Durable Functions supporta anche i progetti Python V2. Per usarle, è necessario registrare le funzioni del progetto usando la azure-functions-durable
Blueprint
classe , come illustrato di seguito. Il progetto risultante può quindi essere registrato normalmente. Per un esempio, vedere l'esempio.
Testare la funzione in locale
Azure Functions Core Tools consente di eseguire un progetto Funzioni di Azure nel computer di sviluppo locale. Se non è già stato fatto, viene richiesto di installare questi strumenti al primo avvio di una funzione da Visual Studio Code.
- Per testare la funzione, impostare un punto di interruzione nel codice della funzione dell'attività
Hello
(Hello/__init__.py). Premere F5 o selezionareDebug: Start Debugging
dal riquadro comandi per avviare il progetto dell'app per le funzioni. L'output dagli strumenti di base viene visualizzato nel pannello Terminale.
- Per testare la funzione, impostare un punto di interruzione nel codice della funzione dell'attività
hello
. Premere F5 o selezionareDebug: Start Debugging
dal riquadro comandi per avviare il progetto dell'app per le funzioni. L'output dagli strumenti di base viene visualizzato nel pannello Terminale.
Nota
Per altre informazioni sul debug, vedere Durable Functions Diagnostics.For more information on debugging, see Durable Functions Diagnostics.
Durable Functions richiede l'esecuzione di un account di archiviazione di Azure. Quando Visual Studio Code richiede di selezionare un account di archiviazione, selezionare Seleziona account di archiviazione.
Seguire le istruzioni e fornire le informazioni seguenti per creare un nuovo account di archiviazione in Azure:
Richiesta Valore Descrizione Selezionare la sottoscrizione nome della sottoscrizione Selezionare la sottoscrizione di Azure Select a storage account (Selezionare un account di archiviazione) Creare un nuovo account di archiviazione Enter the name of the new storage account (Immettere il nome del nuovo account di archiviazione) nome univoco Nome dell'account di archiviazione da creare Selezionare un gruppo di risorse nome univoco Nome del gruppo di risorse da creare Selezionare una località region Selezionare un'area nelle vicinanze Nel pannello Terminale copiare l'endpoint dell'URL della funzione attivata da HTTP.
Usare il browser o uno strumento come Postman o cURL, inviare una richiesta HTTP all'endpoint URL. Sostituire l'ultimo segmento con il nome della funzione dell'agente di orchestrazione (
HelloOrchestrator
). L'URL deve essere simile ahttp://localhost:7071/api/orchestrators/HelloOrchestrator
.La risposta è il risultato iniziale della funzione HTTP che informa che l'orchestrazione durevole è stata avviata correttamente. Non è ancora il risultato finale dell'orchestrazione. La risposta include alcuni URL utili. Per il momento si eseguirà una query relativa allo stato dell'orchestrazione.
Usare il browser o uno strumento come Postman o cURL, inviare una richiesta HTTP all'endpoint URL. Sostituire l'ultimo segmento con il nome della funzione dell'agente di orchestrazione (
hello_orchestrator
). L'URL deve essere simile ahttp://localhost:7071/api/orchestrators/hello_orchestrator
.La risposta è il risultato iniziale della funzione HTTP che informa che l'orchestrazione durevole è stata avviata correttamente. Non è ancora il risultato finale dell'orchestrazione. La risposta include alcuni URL utili. Per il momento si eseguirà una query relativa allo stato dell'orchestrazione.
Copiare il valore dell'URL per
statusQueryGetUri
, incollarlo nella barra degli indirizzi del browser ed eseguire la richiesta. In alternativa, è anche possibile continuare a usare Postman per inviare la richiesta GET.La richiesta eseguirà una query per determinare lo stato dell'istanza di orchestrazione. È necessario ottenere una risposta finale, che mostra che l'istanza è stata completata e include gli output o i risultati della funzione durevole. L'aspetto sarà simile al seguente:
{
"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"
}
{
"name": "hello_orchestrator",
"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"
}
- Per arrestare il debug, premere MAIUSC+F5 in Visual Studio Code.
Dopo aver verificato la corretta esecuzione della funzione nel computer locale, è possibile pubblicare il progetto in Azure.
Accedere ad Azure
Prima di poter creare risorse di Azure o pubblicare l'app, è necessario accedere ad Azure.
Se non è già stato eseguito l'accesso, scegliere l'icona di Azure nella barra attività. Quindi nell'area Risorse scegliere Accedi ad Azure....
Se si è già connessi e si possono visualizzare le sottoscrizioni esistenti, passare alla sezione successiva. Se non si ha ancora un account Azure, scegliere Crea un account Azure. Gli studenti possono scegliere Crea un account Azure for Students...
Quando viene visualizzata la richiesta nel browser, scegliere l'account Azure e accedere con le credenziali corrispondenti. Se si crea un nuovo account, è possibile accedere dopo la creazione dell'account.
Dopo avere eseguito l'accesso, è possibile chiudere la nuova finestra del browser. Le sottoscrizioni che appartengono all'account Azure vengono visualizzate nella barra laterale.
Creare l'app per le funzioni in Azure
In questa sezione viene creata un'app per le funzioni e le risorse correlate nella sottoscrizione di Azure.
In Visual Studio Code premere F1 per aprire il riquadro comandi e cercare ed eseguire il comando
Azure Functions: Create Function App in Azure...
.Quando richiesto, immettere le informazioni seguenti:
Richiesta Selezione Selezionare la sottoscrizione scegliere la sottoscrizione da usare. Questa richiesta non verrà visualizzata quando è visibile una sola sottoscrizione in Risorse. Immettere un nome univoco globale per l'app per le funzioni digitare un nome valido in un percorso URL. Il nome digitato viene convalidato per assicurarsi che sia univoco in Funzioni di Azure. Selezionare uno stack di runtime Scegliere la versione della lingua in cui è stato eseguito localmente. Selezionare un percorso per le nuove risorse per prestazioni ottimali, scegliere un'area vicina. L'estensione mostra lo stato delle singole risorse durante la creazione in Azure nel pannello Azure: Log attività.
Al termine della creazione, nella sottoscrizione vengono create le risorse di Azure seguenti. Le risorse sono denominate in base al nome dell'app per le funzioni:
- Un gruppo di risorse, ovvero un contenitore logico di risorse correlate.
- Un account Archiviazione di Azure standard, che mantiene lo stato e altre informazioni sui progetti.
- Un'app per le funzioni, che fornisce l'ambiente per l'esecuzione del codice della funzione. 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.
- Un piano servizio app, che definisce l'host sottostante per l'app per le funzioni.
- Un'istanza di Application Insights connessa all'app per le funzioni, che tiene traccia dell'utilizzo delle funzioni nell'app.
Dopo la creazione dell'app per le funzioni e dopo l'applicazione del pacchetto di distribuzione viene visualizzata una notifica.
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 specificato. Per impostazione predefinita, vengono creati anche nello stesso nuovo gruppo di risorse con l'app per le funzioni. Se si desidera personalizzare i nomi di queste risorse o riutilizzare le risorse esistenti, è necessario pubblicare il progetto con opzioni di creazione avanzate.
Distribuire il progetto in Azure
Importante
La distribuzione in un'app per le funzioni esistente sovrascrive sempre il contenuto di tale app in Azure.
Nel riquadro comandi cercare ed eseguire il comando
Azure Functions: Deploy to Function App...
.Selezionare l'app per le funzioni appena creata. Quando viene richiesto di sovrascrivere le distribuzioni precedenti, selezionare Distribuisci per distribuire il codice della funzione nella nuova risorsa dell'app per le funzioni.
Al termine della distribuzione, selezionare Visualizza output per visualizzare i risultati della creazione e della distribuzione, incluse le risorse di Azure create. Se non si riesce a visualizzare la notifica, selezionare l'icona della campana nell'angolo in basso a destra per visualizzarla di nuovo.
Testare la funzione in Azure
- Copiare l'URL del trigger HTTP dal pannello Output. L'URL che chiama la funzione attivata tramite HTTP deve essere in questo formato:
https://<functionappname>.azurewebsites.net/api/orchestrators/HelloOrchestrator
- Copiare l'URL del trigger HTTP dal pannello Output. L'URL che chiama la funzione attivata tramite HTTP deve essere in questo formato:
https://<functionappname>.azurewebsites.net/api/orchestrators/hello_orchestrator
- Incollare questo nuovo URL per la richiesta HTTP nella barra degli indirizzi del browser. È necessario ottenere la stessa risposta di stato di prima quando si usa l'app pubblicata.
Passaggi successivi
Si è usato Visual Studio Code per creare e pubblicare un'app per le funzioni durevoli in Python.
Commenti e suggerimenti
https://aka.ms/ContentUserFeedback.
Presto disponibile: Nel corso del 2024 verranno gradualmente disattivati i problemi di GitHub come meccanismo di feedback per il contenuto e ciò verrà sostituito con un nuovo sistema di feedback. Per altre informazioni, vedereInvia e visualizza il feedback per