Share via


Creare le prime funzioni in contenitori in App Azure Container

Questo articolo illustra come creare un'app per le funzioni in esecuzione in un contenitore Linux e distribuirla in un ambiente app contenitore di Azure da un registro contenitori. Distribuendo in App contenitore, è possibile integrare le app per le funzioni in microservizi nativi del cloud. Per altre informazioni, vedere Hosting di app azure Container di Funzioni di Azure.

Questo articolo illustra come creare funzioni in esecuzione in un contenitore Linux e distribuire il contenitore in un ambiente App contenitore.

Il completamento di questa guida introduttiva comporta un costo ridotto di pochi centesimi di USD o inferiore nell'account Azure, che è possibile ridurre al minimo pulendo le risorse al termine.

Importante

Il supporto per l'hosting di app per le funzioni in App Azure Container è attualmente in anteprima.

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 ambiente di App Azure Container con un'area di lavoro Log Analytics.

Usare i comandi seguenti per creare questi elementi.

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

    Il az login comando accede all'account Azure. Usare az account set quando si dispone di più sottoscrizioni associate all'account.

  2. Eseguire il comando seguente per aggiornare l'interfaccia della riga di comando di Azure alla versione più recente:

    az upgrade
    

    Se la versione dell'interfaccia della riga di comando di Azure non è la versione più recente, viene avviata un'installazione. Il modo di aggiornamento dipende dal sistema operativo. È possibile procedere al termine dell'aggiornamento.

  3. Eseguire i comandi seguenti per aggiornare l'estensione App Azure Container e registrare gli spazi dei nomi richiesti dalle app contenitore:

    az extension add --name containerapp --upgrade -y
    az provider register --namespace Microsoft.Web 
    az provider register --namespace Microsoft.App 
    az provider register --namespace Microsoft.OperationalInsights 
    
  4. Creare un gruppo di risorse denominato AzureFunctionsContainers-rg.

    az group create --name AzureFunctionsContainers-rg --location eastus
    

    Questo az group create comando crea un gruppo di risorse nell'area Stati Uniti orientali. Se invece si vuole usare un'area vicina, usando un codice di area disponibile restituito dal comando az account list-locations . È necessario modificare i comandi successivi per usare l'area personalizzata anziché eastus. È possibile usare solo le aree attualmente supportate nell'anteprima.

  5. Creare l'ambiente dell'app Azure Container con i profili di carico di lavoro abilitati.

    az containerapp env create --name MyContainerappEnvironment --enable-workload-profiles --resource-group AzureFunctionsContainers-rg --location eastus
    

    Il completamento di questo comando può richiedere fino a 10 minuti.

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

    az storage account create --name <STORAGE_NAME> --location eastus --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.

  7. Prima di procedere, usare questo comando per verificare che l'ambiente sia pronto.

    az containerapp env show -n MyContainerappEnvironment -g AzureFunctionsContainers-rg
    

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 nell'ambiente app Azure Container. 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 in un ambiente App contenitore. È anche possibile configurare il nuovo ambiente con un stringa di connessione per l'account di Archiviazione di Azure necessario.

Usare il az functionapp create comando per creare un'app per le funzioni nel nuovo ambiente gestito supportato da App Azure Container:

az functionapp create --name <APP_NAME> --storage-account <STORAGE_NAME> --environment MyContainerappEnvironment --workload-profile-name "Consumption" --resource-group AzureFunctionsContainers-rg --functions-version 4 --runtime dotnet-isolated --image <LOGIN_SERVER>/azurefunctionsimage:v1.0.0 --registry-server <LOGIN_SERVER> --registry-username <REGISTRY_NAME> --registry-password <ADMIN_PASSWORD> 
az functionapp create --name <APP_NAME> --storage-account <STORAGE_NAME> --environment MyContainerappEnvironment --workload-profile-name "Consumption" --resource-group AzureFunctionsContainers-rg --functions-version 4 --runtime node --image <LOGIN_SERVER>/azurefunctionsimage:v1.0.0 --registry-server <LOGIN_SERVER> --registry-username <REGISTRY_NAME> --registry-password <ADMIN_PASSWORD> 
az functionapp create --name <APP_NAME> --storage-account <STORAGE_NAME> --environment MyContainerappEnvironment --workload-profile-name "Consumption" --resource-group AzureFunctionsContainers-rg --functions-version 4 --runtime java --image <LOGIN_SERVER>/azurefunctionsimage:v1.0.0 --registry-server <LOGIN_SERVER> --registry-username <REGISTRY_NAME> --registry-password <ADMIN_PASSWORD> 
az functionapp create --name <APP_NAME> --storage-account <STORAGE_NAME> --environment MyContainerappEnvironment --workload-profile-name "Consumption" --resource-group AzureFunctionsContainers-rg --functions-version 4 --runtime powershell --image <LOGIN_SERVER>/azurefunctionsimage:v1.0.0 --registry-server <LOGIN_SERVER> --registry-username <REGISTRY_NAME> --registry-password <ADMIN_PASSWORD> 
az functionapp create --name <APP_NAME> --storage-account <STORAGE_NAME> --environment MyContainerappEnvironment --workload-profile-name "Consumption" --resource-group AzureFunctionsContainers-rg --functions-version 4 --runtime python --image <LOGIN_SERVER>/azurefunctionsimage:v1.0.0 --registry-server <LOGIN_SERVER> --registry-username <REGISTRY_NAME> --registry-password <ADMIN_PASSWORD> 
az functionapp create --name <APP_NAME> --storage-account <STORAGE_NAME> --environment MyContainerappEnvironment --workload-profile-name "Consumption" --resource-group AzureFunctionsContainers-rg --functions-version 4 --runtime node --image <LOGIN_SERVER>/azurefunctionsimage:v1.0.0 --registry-server <LOGIN_SERVER> --registry-username <REGISTRY_NAME> --registry-password <ADMIN_PASSWORD> 

az functionapp create Nel comando il --environment parametro specifica l'ambiente App contenitore e il --image parametro specifica l'immagine da usare per l'app per le funzioni. 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, <LOGIN_SERVER> con il server Registro Container completo, <REGISTRY_NAME> con il nome del registro per l'account e <ADMIN_PASSWORD> con la password per l'account amministratore.

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.

--workload-profile-name "Consumption" Se si specifica, l'app viene creata in un ambiente usando il profilo di carico di lavoro predefinitoConsumption, che costa lo stesso come in esecuzione in un piano a consumo di app contenitore. Quando si crea l'app per le funzioni per la prima volta, l'immagine iniziale viene estratta dal registro.

A questo punto, le funzioni vengono eseguite in un ambiente App contenitore, con le impostazioni dell'applicazione necessarie già aggiunte. Quando necessario, è possibile aggiungere altre impostazioni nell'app per le funzioni nel modo standard per Funzioni. Per altre informazioni, vedere Usare le impostazioni dell'applicazione.

Suggerimento

Quando si apportano modifiche successive al codice della funzione, è necessario ricompilare il contenitore, ripubblicare l'immagine nel Registro di sistema e aggiornare l'app per le funzioni con la nuova versione dell'immagine. Per altre informazioni, vedere Aggiornare un'immagine nel Registro di sistema

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.

L'URL della richiesta dovrebbe essere simile al seguente:

https://myacafunctionapp.kindtree-796af82b.eastus.azurecontainerapps.io/api/httpexample?name=functions

https://myacafunctionapp.kindtree-796af82b.eastus.azurecontainerapps.io/api/httpexample

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.

Al termine dell'uso di questa distribuzione dell'app per le funzioni, eliminare il AzureFunctionsContainers-rg gruppo di risorse per pulire tutte le risorse in tale gruppo:

az group delete --name AzureFunctionsContainers-rg

Passaggi successivi