Creare la prima Funzioni di Azure in contenitori

Questo articolo illustra come creare un'app per le funzioni in esecuzione in un contenitore Linux e distribuirla in Funzioni di Azure.

La distribuzione del codice della funzione in Funzioni di Azure in un contenitore richiede l'hosting del piano Premium o dedicato (servizio app). Il completamento di questo articolo comporta costi di alcuni dollari usa nell'account Azure, che è possibile ridurre al minimo eseguendo la pulizia delle risorse al termine.

Altre opzioni per la distribuzione del contenitore dell'app per le funzioni in Azure includono:

Scegliere il linguaggio di sviluppo

Prima di tutto, si usano gli strumenti di Funzioni di Azure per creare il codice del progetto come app per le funzioni in un contenitore Docker usando un'immagine di base Linux specifica del linguaggio. Assicurarsi di selezionare la lingua preferita nella parte superiore dell'articolo.

Core Tools genera automaticamente un Dockerfile per il progetto che usa la versione più aggiornata dell'immagine di base corretta per il linguaggio di funzioni. È consigliabile aggiornare regolarmente il contenitore dall'immagine di base più recente e ridistribuire dalla versione aggiornata del contenitore. Per altre informazioni, vedere Creazione di app per le funzioni in contenitori.

Prerequisiti

Prima di iniziare, è necessario disporre dei requisiti seguenti:

Se non si ha una sottoscrizione di Azure, creare un account Azure gratuito prima di iniziare.

Per pubblicare l'immagine dell'app per le funzioni in contenitori creata in un registro contenitori, è necessario un ID Docker e Docker in esecuzione nel computer locale. Se non si ha un ID Docker, è possibile creare un account Docker.

È anche necessario completare la sezione Creare un registro contenitori della guida introduttiva di Registro Container per creare un'istanza del Registro Azure Container. Prendere nota del nome completo del server di accesso.

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 delle versioni di Python supportate 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 e testare il progetto locale di funzioni

In un terminale o un prompt dei comandi eseguire il comando seguente per il linguaggio scelto per creare un progetto di app per le funzioni nella cartella corrente:

func init --worker-runtime dotnet-isolated --docker
func init --worker-runtime node --language javascript --docker
func init --worker-runtime powershell --docker
func init --worker-runtime python --docker
func init --worker-runtime node --language typescript --docker

In una cartella vuota eseguire il comando seguente per generare il progetto Functions da un archetipo Maven:

mvn archetype:generate -DarchetypeGroupId=com.microsoft.azure -DarchetypeArtifactId=azure-functions-archetype -DjavaVersion=8 -Ddocker

Il parametro -DjavaVersion indica al runtime di Funzioni la versione di Java da usare. Usare -DjavaVersion=11 per eseguire le funzioni in Java 11. Quando non si specifica -DjavaVersion, Maven usa per impostazione predefinita Java 8. Per altre informazioni, vedere Versioni di Java.

Importante

Per completare questo articolo, è necessario impostare la variabile di ambiente JAVA_HOME sul percorso di installazione della versione corretta di JDK.

Maven chiede i valori necessari per completare la generazione del progetto nella distribuzione. Seguire le istruzioni e fornire le informazioni seguenti:

Richiesta Valore Descrizione
groupId com.fabrikam Un valore che identifica in modo univoco il progetto tra tutti gli altri, seguendo le regole di denominazione dei pacchetti per Java.
artifactId fabrikam-functions Un valore che corrisponde al nome del jar, senza un numero di versione.
version 1.0-SNAPSHOT Selezionare il valore predefinito.
package com.fabrikam.functions Un valore che corrisponde al pacchetto Java per il codice della funzione generato. Usare quello predefinito.

Digitare Y o premere INVIO per confermare.

Maven crea i file di progetto in una nuova cartella denominata artifactId, che in questo esempio è fabrikam-functions.

L'opzione --docker genera un Dockerfile per il progetto, che definisce un contenitore adatto per l'uso con Funzioni di Azure e il runtime selezionato.

Passare alla cartella del progetto:

cd fabrikam-functions

Usare il comando seguente per aggiungere una funzione al progetto, in cui l'argomento --name è il nome univoco della funzione e l'argomento --template specifica il trigger della funzione. func new crea un file di codice C# nel progetto.

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

Usare il comando seguente per aggiungere una funzione al progetto, in cui l'argomento --name è il nome univoco della funzione e l'argomento --template specifica il trigger della funzione. func new crea una sottocartella corrispondente al nome della funzione che contiene un file di configurazione denominato function.json.

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

Per testare la funzione in locale, avviare l'host di runtime Funzioni di Azure locale nella radice della cartella del progetto.

func start  
func start  
npm install
npm start
mvn clean package  
mvn azure-functions:run

Dopo aver visualizzato l'endpoint HttpExample scritto nell'output, passare a tale endpoint. Nell'output della risposta dovrebbe essere visualizzato un messaggio di benvenuto.

Dopo aver visualizzato l'endpoint HttpExample scritto nell'output, passare a http://localhost:7071/api/HttpExample?name=Functions. Il browser deve visualizzare un messaggio "hello" che restituisce Functions, il valore fornito al name parametro di query.

Premere CTRL+C (comando+C in macOS) per arrestare l'host.

Compilare l'immagine del contenitore e verificare localmente

Facoltativo - Esaminare il Dockerfile nella radice della cartella del progetto. Il Dockerfile descrive l'ambiente necessario per eseguire l'app per le funzioni in Linux. L'elenco completo di immagini di base supportate per Funzioni di Azure è disponibile nella pagina delle immagini di base per Funzioni di Azure.

Nella cartella del progetto radice eseguire il comando docker build , specificare un nome come azurefunctionsimagee tag come v1.0.0. Sostituire <DOCKER_ID> con l'ID dell'account Docker Hub. Questo comando compila l'immagine Docker per il contenitore.

docker build --tag <DOCKER_ID>/azurefunctionsimage:v1.0.0 .

Al termine del comando, è possibile eseguire il nuovo contenitore in locale.

Per verificare la compilazione, eseguire l'immagine in un contenitore locale usando il comando docker run , sostituire <DOCKER_ID> di nuovo con l'ID account dell'hub Docker e aggiungere l'argomento porte come -p 8080:80:

docker run -p 8080:80 -it <DOCKER_ID>/azurefunctionsimage:v1.0.0

Dopo l'avvio dell'immagine nel contenitore locale, passare a http://localhost:8080/api/HttpExample, che deve visualizzare lo stesso messaggio di saluto di prima. Poiché la funzione attivata da HTTP creata usa l'autorizzazione anonima, è possibile chiamare la funzione in esecuzione nel contenitore senza dover ottenere una chiave di accesso. Per altre informazioni, vedere Chiavi di autorizzazione.

Dopo l'avvio dell'immagine nel contenitore locale, passare a http://localhost:8080/api/HttpExample?name=Functions, che deve visualizzare lo stesso messaggio "hello" di prima. Poiché la funzione attivata da HTTP creata usa l'autorizzazione anonima, è possibile chiamare la funzione in esecuzione nel contenitore senza dover ottenere una chiave di accesso. Per altre informazioni, vedere Chiavi di autorizzazione.

Dopo aver verificato l'app per le funzioni nel contenitore, premere CTRL+C (comando+C in macOS) per arrestare l'esecuzione.

Pubblicare l'immagine del contenitore in un registro

Per rendere disponibile l'immagine del contenitore per la distribuzione in un ambiente di hosting, è necessario eseguirne il push in un registro contenitori.

Registro Azure Container è un servizio registro privato per la creazione, l'archiviazione e la gestione delle immagini di contenitori e degli artefatti correlati. È consigliabile usare un servizio registro privato per pubblicare i contenitori nei servizi di Azure.

  1. Usare il comando seguente per accedere all'istanza del Registro di sistema:

    az acr login --name <REGISTRY_NAME>
    

    Nel comando precedente sostituire <REGISTRY_NAME> con il nome dell'istanza del Registro Container.

  2. Usare il comando seguente per contrassegnare l'immagine con il nome completo del server di accesso del Registro di sistema:

    docker tag <DOCKER_ID>/azurefunctionsimage:v1.0.0 <LOGIN_SERVER>/azurefunctionsimage:v1.0.0 
    

    Sostituire <LOGIN_SERVER> con il nome completo del server di accesso del Registro di sistema e <DOCKER_ID> con l'ID Docker.

  3. Usare il comando seguente per eseguire il push del contenitore nell'istanza del Registro di sistema:

    docker push <LOGIN_SERVER>/azurefunctionsimage:v1.0.0
    
  4. Usare il comando seguente per abilitare l'account amministratore predefinito in modo che Funzioni possa connettersi al Registro di sistema con un nome utente e una password:

    az acr update -n <REGISTRY_NAME> --admin-enabled true
    
  1. Usare il comando seguente per recuperare il nome utente e la password dell'amministratore, che Funzioni deve connettersi al Registro di sistema:

    az acr credential show -n <REGISTRY_NAME> --query "[username, passwords[0].value]" -o tsv
    

    Importante

    Il nome utente e la password dell'account amministratore sono credenziali importanti. Assicurarsi di archiviarli in modo sicuro e mai in una posizione accessibile come un repository pubblico.

Creare le risorse di Azure di supporto per la funzione

Prima di poter distribuire il contenitore in Azure, è necessario creare tre risorse:

  • Gruppo di risorse, che è un contenitore logico per le risorse correlate.
  • Un account Archiviazione, usato per mantenere lo stato e altre informazioni sulle funzioni.
  • 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. Per creare le risorse di Azure con Azure PowerShell, è necessario anche il modulo Az PowerShell versione 5.9.0 o successiva.

  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 AzureFunctionsContainers-rg nell'area scelta.

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

    Il az group create comando 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 .

  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 AzureFunctionsContainers-rg --sku Standard_LRS
    

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

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

  4. Usare il comando per creare un piano Premium per Funzioni di Azure denominato myPremiumPlan nel piano tariffario Elastic Premium 1 (--sku EP1), in <REGION>e in un contenitore Linux (--is-linux).

    az functionapp plan create --resource-group AzureFunctionsContainers-rg --name myPremiumPlan --location <REGION> --number-of-workers 1 --sku EP1 --is-linux
    

    In questo caso viene usato il piano Premium, che è scalabile secondo necessità. Per altre informazioni sull'hosting, vedere Funzioni di Azure confronto dei piani di hosting. Per altre informazioni su come calcolare i costi, vedere la pagina dei prezzi di Funzioni.

    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.

Creare e configurare un'app per le funzioni in Azure con l'immagine

Un'app per le funzioni in Azure gestisce l'esecuzione delle funzioni nel piano di hosting Funzioni di Azure. In questa sezione si usano le risorse di Azure della sezione precedente per creare un'app per le funzioni da un'immagine in un registro contenitori e configurarla con un stringa di connessione per Archiviazione di Azure.

  1. Creare un'app per le funzioni usando il comando seguente, a seconda del registro contenitori:

    az functionapp create --name <APP_NAME> --storage-account <STORAGE_NAME> --resource-group AzureFunctionsContainers-rg --plan myPremiumPlan --image <LOGIN_SERVER>/azurefunctionsimage:v1.0.0 --registry-username <USERNAME> --registry-password <SECURE_PASSWORD> 
    

    In questo esempio sostituire <STORAGE_NAME> con il nome usato nella sezione precedente per l'account di archiviazione. <APP_NAME> Sostituire anche con un nome univoco globale appropriato per l'utente e <DOCKER_ID> o <LOGIN_SERVER> con l'ID account dell'hub Docker o con il server Registro Container, rispettivamente. Quando si esegue la distribuzione da un registro contenitori personalizzato, il nome dell'immagine indica l'URL del Registro di sistema.

    Quando si crea l'app per le funzioni per la prima volta, l'immagine iniziale viene estratta dall'hub Docker. È anche possibile abilitare la distribuzione continua in Azure dal registro contenitori.

    Suggerimento

    È possibile usare l'impostazione DisableColor nel file host.json per impedire che i caratteri di controllo ANSI vengano scritti nei log del contenitore.

  2. Usare il comando seguente per ottenere il stringa di connessione per l'account di archiviazione creato:

    az storage account show-connection-string --resource-group AzureFunctionsContainers-rg --name <STORAGE_NAME> --query connectionString --output tsv
    

    Il stringa di connessione per l'account di archiviazione viene restituito usando il az storage account show-connection-string comando .

    Sostituire <STORAGE_NAME> con il nome dell'account di archiviazione creato in precedenza.

  3. Usare il comando seguente per aggiungere l'impostazione all'app per le funzioni:

    az functionapp config appsettings set --name <APP_NAME> --resource-group AzureFunctionsContainers-rg --settings AzureWebJobsStorage=<CONNECTION_STRING>
    

    Il az functionapp config appsettings set comando crea l'impostazione.

    In questo comando sostituire <APP_NAME> con il nome dell'app per le funzioni e <CONNECTION_STRING> con il stringa di connessione del passaggio precedente. La connessione deve essere una stringa con codifica lunga che inizia con DefaultEndpointProtocol=.

  4. La funzione può ora usare questa stringa di connessione per accedere all'account di archiviazione.

Verificare le funzioni in Azure

Con l'immagine distribuita nell'app per le funzioni in Azure, è ora possibile richiamare la funzione tramite richieste HTTP.

  1. Eseguire il comando seguente az functionapp function show per ottenere l'URL della nuova funzione:

    az functionapp function show --resource-group AzureFunctionsContainers-rg --name <APP_NAME> --function-name HttpExample --query invokeUrlTemplate 
    

    Sostituire <APP_NAME> con il nome dell'app per le funzioni.

  1. Usare l'URL appena ottenuto per chiamare l'endpoint della HttpExample funzione, aggiungendo la stringa ?name=Functionsdi query .
  1. Usare l'URL appena ottenuto per chiamare l'endpoint della HttpExample funzione.

Quando si passa a questo URL, il browser deve visualizzare un output simile a quello eseguito in locale.

Pulire le risorse

Se si vuole continuare a usare la funzione di Azure usando le risorse create in questo articolo, è possibile lasciare tutte le risorse disponibili. Poiché è stato creato un piano Premium per Funzioni di Azure, verranno addebitati uno o due dollari USA al giorno in costi ricorrenti.

Per evitare i costi ricorrenti, eliminare il gruppo di risorse AzureFunctionsContainers-rg per pulire tutte le risorse nel gruppo:

az group delete --name AzureFunctionsContainers-rg

Passaggi successivi