Avvio rapido: Creare una funzione Python in Azure dalla riga di comando

In questo articolo vengono usati gli strumenti da riga di comando per creare una funzione Python che risponde alle richieste HTTP. Dopo aver testato il codice in locale, verrà distribuito nell'ambiente serverless di Funzioni di Azure.

Questo articolo illustra entrambi i modelli di programmazione Python supportati da Funzioni di Azure. Usare il selettore nella parte superiore per scegliere il modello di programmazione.

Nota

Il modello di programmazione Python v2 per Funzioni di Azure offre un approccio basato su decorator per la creazione di funzioni. Per altre informazioni sul modello di programmazione Python v2, vedere la Guida di riferimento per gli sviluppatori.

Le procedure illustrate in questa guida di avvio rapido comportano l'addebito di qualche centesimo (USD) o meno nell'account Azure.

È disponibile anche una versione basata su Visual Studio Code di questo articolo.

Configurare l'ambiente locale

Prima di iniziare, è necessario disporre dei requisiti seguenti:

  • Emulatore di archiviazione Di Azurite. Anche se è possibile usare un account Archiviazione di Azure effettivo, l'articolo presuppone che si stia usando questo emulatore.

Installare gli strumenti di base per Funzioni di Azure

Il modo consigliato per installare Core Tools dipende dal sistema operativo del computer di sviluppo locale.

La procedura seguente usa un programma di installazione di Windows per installare Core Tools v4.x. Per altre informazioni su altri programmi di installazione basati su pacchetti, vedere il file leggimi Core Tools.

Scaricare ed eseguire il programma di installazione di Core Tools, in base alla versione di Windows:

Se in precedenza hai usato Windows Installer (MSI) per installare Core Tools in Windows, devi disinstallare la versione precedente da Installazione applicazioni prima di installare la versione più recente.

Creare e attivare un ambiente virtuale

In una cartella appropriata eseguire i comandi seguenti per creare e attivare un ambiente virtuale denominato .venv. Assicurarsi di usare una versione di Python supportata da Funzioni di Azure.

python -m venv .venv
source .venv/bin/activate

Se Python non ha installato il pacchetto venv nella distribuzione Linux, eseguire il comando seguente:

sudo apt-get install python3-venv

È possibile eseguire tutti i comandi successivi in questo ambiente virtuale attivato.

Creare una funzione locale

In Funzioni di Azure un progetto di funzione è un contenitore per una o più funzioni singole che rispondono ognuna a un trigger specifico. Tutte le funzioni di un progetto condividono le stesse configurazioni locali e di hosting.

In questa sezione viene creato un progetto di funzione che contiene una singola funzione.

  1. Eseguire il func init comando come indicato di seguito per creare un progetto di funzioni Python nell'ambiente virtuale.

    func init --python --model V1
    

    L'ambiente contiene ora vari file per il progetto, inclusi i file di configurazione denominati local.settings.json e host.json. Poiché local.settings.json può contenere segreti scaricati da Azure, per impostazione predefinita il file viene escluso dal controllo del codice sorgente nel file con estensione gitignore.

  2. Aggiungere una funzione al progetto usando il comando seguente, in cui l'argomento --name è il nome univoco della funzione (HttpExample) e l'argomento --template specifica il trigger della funzione (HTTP).

    func new --name HttpExample --template "HTTP trigger" --authlevel "anonymous"
    

    func new crea una sottocartella corrispondente al nome della funzione che contiene un file di codice appropriato per il linguaggio scelto del progetto e un file di configurazione denominato function.json.

  3. Eseguire questo comando per assicurarsi che la libreria di Funzioni di Azure sia installata nell'ambiente.

    .venv/bin/python -m pip install -r requirements.txt
    

In questa sezione viene creato un progetto di funzione e viene aggiunta una funzione attivata tramite HTTP.

  1. Eseguire il func init comando come indicato di seguito per creare un progetto di funzioni Python v2 nell'ambiente virtuale.

    func init --python
    

    L'ambiente contiene ora vari file per il progetto, inclusi i file di configurazione denominati local.settings.json e host.json. Poiché local.settings.json può contenere segreti scaricati da Azure, per impostazione predefinita il file viene escluso dal controllo del codice sorgente nel file con estensione gitignore.

  2. Aggiungere una funzione al progetto usando il comando seguente, in cui l'argomento --name è il nome univoco della funzione (HttpExample) e l'argomento --template specifica il trigger della funzione (HTTP).

    func new --name HttpExample --template "HTTP trigger" --authlevel "anonymous"
    

    Se richiesto, scegliere l'opzione ANONYMOUS . func new aggiunge un endpoint trigger HTTP denominato HttpExample al function_app.py file, accessibile senza autenticazione.

  3. Aprire il file di progetto local.settings.json e verificare che l'impostazione AzureWebJobsFeatureFlags abbia il valore EnableWorkerIndexing. Questa operazione è necessaria per consentire a Funzioni di interpretare correttamente il progetto come modello Python v2. Questa stessa impostazione verrà aggiunta alle impostazioni dell'applicazione dopo la pubblicazione del progetto in Azure.

  4. Nel file local.settings.json aggiornare l'impostazione AzureWebJobsStorage come nell'esempio seguente:

    "AzureWebJobsStorage": "UseDevelopmentStorage=true",
    

    Questo indica all'host di Funzioni locali di usare l'emulatore di archiviazione per la connessione di archiviazione attualmente richiesta dal modello Python v2. Quando si pubblica il progetto in Azure, sarà invece necessario usare l'account di archiviazione predefinito. Se invece si usa un account Archiviazione di Azure, impostare l'account di archiviazione stringa di connessione qui.

  5. Eseguire questo comando per assicurarsi che la libreria di Funzioni di Azure sia installata nell'ambiente.

    .venv/bin/python -m pip install -r requirements.txt
    

Avviare l'emulatore di archiviazione

Per impostazione predefinita, lo sviluppo locale usa l'emulatore di archiviazione Azurite. Questo emulatore viene usato quando l'impostazione AzureWebJobsStorage nel file di progetto local.settings.json è impostata su UseDevelopmentStorage=true. Quando si usa l'emulatore, è necessario avviare l'emulatore di archiviazione Azurite locale prima di eseguire la funzione.

È possibile ignorare questo passaggio se l'impostazione AzureWebJobsStorage in local.settings.json è impostata sul stringa di connessione per un account Archiviazione di Azure anziché UseDevelopmentStorage=truesu .

Usare il comando seguente per avviare l'emulatore di archiviazione Azurite in un processo separato:

start azurite

Per altre informazioni, vedere Run Azurite

Eseguire la funzione in locale

  1. Eseguire la funzione avviando l'host di runtime Funzioni di Azure locale dalla cartella LocalFunctionProj.

    func start
    

    Verso la fine dell'output, devono essere visualizzate le righe seguenti:

    Screenshot of terminal window output when running function locally.

    Nota

    Se HttpExample non viene visualizzato come illustrato sopra, è probabile che l'host non sia stato avviato dalla cartella radice del progetto. In tal caso, usare CTRL+C per arrestare l'host, passare alla cartella radice del progetto ed eseguire di nuovo il comando precedente.

  2. Copiare l'URL della funzione HTTP da questo output in un browser e aggiungere la stringa ?name=<YOUR_NAME>di query , rendendo l'URL completo, ad esempio http://localhost:7071/api/HttpExample?name=Functions. Il browser dovrebbe visualizzare un messaggio di risposta che restituisce il valore della stringa di query. Il terminale in cui è stato avviato il progetto mostra anche l'output del log quando si effettuano le richieste.

  3. Al termine, premere CTRL+C e digitare y per arrestare l'host delle funzioni.

Creare le risorse di Azure di supporto per la funzione

Prima di distribuire il codice della funzione in Azure, è necessario creare tre risorse:

  • Un gruppo di risorse, ovvero un contenitore logico di risorse correlate.
  • Un account di archiviazione, 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 si collega al progetto di funzione locale e consente di raggruppare le funzioni come un'unità logica per semplificare la gestione, la distribuzione e la condivisione di risorse.

Usare i comandi seguenti per creare questi elementi. Sono supportati sia l'interfaccia della riga di comando di Azure che PowerShell.

  1. Se non è già stato fatto, accedere ad Azure.

    az login
    

    Il az login comando accede all'account Azure.

  2. Creare un gruppo di risorse denominato AzureFunctionsQuickstart-rg nell'area scelta.

    az group create --name AzureFunctionsQuickstart-rg --location <REGION>
    

    Il comando az group create crea un gruppo di risorse. Nel comando precedente sostituire <REGION> con un'area vicina usando un codice di area disponibile restituito dal comando az account list-locations .

    Nota

    Non è possibile ospitare app Windows e Linux nello stesso gruppo di risorse. Se si dispone d un gruppo di risorse esistente denominato AzureFunctionsQuickstart-rg con un'app per le funzioni Windows o un'app Web, sarà necessario usare un gruppo di risorse diverso.

  3. Creare un account di archiviazione per utilizzo generico nel gruppo di risorse e nell'area.

    az storage account create --name <STORAGE_NAME> --location <REGION> --resource-group AzureFunctionsQuickstart-rg --sku Standard_LRS
    

    Il comando az storage account create crea l'account di archiviazione.

    Nell'esempio precedente sostituire <STORAGE_NAME> con un nome appropriato per l'utente e univoco in Archiviazione di Azure. I nomi devono contenere solo da 3 a 24 caratteri e lettere minuscole. Standard_LRS specifica un account per utilizzo generico supportato da Funzioni.

    Per questo argomento di avvio rapido, il costo dell'account di archiviazione è solo di pochi centesimi di dollaro USA.

  4. Creare l'app per le funzioni in Azure.

    az functionapp create --resource-group AzureFunctionsQuickstart-rg --consumption-plan-location westeurope --runtime python --runtime-version 3.9 --functions-version 4 --name <APP_NAME> --os-type linux --storage-account <STORAGE_NAME>
    

    Il comando az functionapp create crea l'app per le funzioni in Azure. Se si usa Python 3.9, 3.8 o 3.7, passare --runtime-version rispettivamente a 3.9, 3.8o .3.7 È necessario specificare --os-type linux perché le funzioni Python non possono essere eseguite in Windows, ovvero l'impostazione predefinita.

    Nell'esempio precedente sostituire <APP_NAME> con un nome univoco globale appropriato. <APP_NAME> è anche il dominio DNS predefinito per l'app per le funzioni.

    Questo comando crea un'app per le funzioni che esegue il runtime del linguaggio specificato nel Piano a consumo di Funzioni di Azure, che è gratuito per la quantità di utilizzo prevista in questo argomento. Il comando crea anche un'istanza di app Azure lication Insights associata nello stesso gruppo di risorse, con cui è possibile monitorare l'app per le funzioni e visualizzare i log. Per altre informazioni, vedere Monitorare Funzioni di Azure. L'istanza non comporta costi finché non viene attivata.

Distribuire il progetto di funzione in Azure

Dopo aver creato l'app per le funzioni in Azure, è ora possibile distribuire il progetto di funzioni locale usando il comando func azure functionapp publish.

Nell'esempio seguente sostituire <APP_NAME> con il nome dell'app.

func azure functionapp publish <APP_NAME>

Il comando publish mostra risultati simili a quelli riportati nell'output seguente (troncato per semplicità):

...

Getting site publishing info...
Creating archive for current directory...
Performing remote build for functions project.

...

Deployment successful.
Remote build succeeded!
Syncing triggers...
Functions in msdocs-azurefunctions-qs:
    HttpExample - [httpTrigger]
        Invoke url: https://msdocs-azurefunctions-qs.azurewebsites.net/api/httpexample

Aggiornare le impostazioni dell'app

Per usare il modello Python v2 nell'app per le funzioni, è necessario aggiungere una nuova impostazione dell'applicazione in Azure denominata AzureWebJobsFeatureFlags con il valore EnableWorkerIndexing. Questa impostazione è già presente nel file local.settings.json.

Eseguire il comando seguente per aggiungere questa impostazione alla nuova app per le funzioni in Azure.

az functionapp config appsettings set --name <FUNCTION_APP_NAME> --resource-group <RESOURCE_GROUP_NAME> --settings AzureWebJobsFeatureFlags=EnableWorkerIndexing

Nell'esempio precedente sostituire <FUNCTION_APP_NAME> e <RESOURCE_GROUP_NAME> con il nome rispettivamente dell'app per le funzioni e del gruppo di risorse. Questa impostazione è già presente nel file local.settings.json.

Eseguire la verifica in Azure

Eseguire il comando seguente per visualizzare i log di streaming quasi in tempo reale in Application Insights nel portale di Azure.

func azure functionapp logstream <APP_NAME> --browser

In una finestra del terminale separata o nel browser chiamare di nuovo la funzione remota. Nel terminale viene visualizzato un log dettagliato dell'esecuzione della funzione in Azure.

Pulire le risorse

Se si continua con il passaggio successivo e si aggiunge un binding di output della coda di Archiviazione di Azure, mantenere tutte le risorse esistenti per poterle riutilizzare.

In caso contrario, usare il comando seguente per eliminare il gruppo di risorse e tutte le relative risorse contenute per evitare di incorrere in costi aggiuntivi.

az group delete --name AzureFunctionsQuickstart-rg

Passaggi successivi

Problemi con questo articolo?