Creare un'app per le funzioni in un contenitore Linux locale

Questo articolo illustra come usare gli strumenti di base Funzioni di Azure per creare la prima funzione in un contenitore Linux nel computer locale, verificare la funzione localmente e quindi pubblicare la funzione in contenitori in un registro contenitori. Da un registro contenitori è possibile distribuire facilmente le funzioni in contenitori in Azure.

Per un esempio completo della distribuzione di funzioni in contenitori in Azure, che includono i passaggi descritti in questo articolo, vedere uno degli articoli seguenti:

È anche possibile creare un'app per le funzioni nel portale di Azure usando un'app per le funzioni in contenitori esistente da un registro contenitori. Per altre informazioni, vedere portale di Azure creare usando i contenitori.

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.

Passaggi successivi