Uso di contenitori e Funzioni di Azure

Questo articolo illustra il supporto fornito da Funzioni di Azure per l'uso di app per le funzioni in contenitori in esecuzione in un ambiente app contenitore di Azure. Il supporto per l'hosting di contenitori di app per le funzioni in App contenitore è attualmente in anteprima. Per altre informazioni, vedere Hosting di app azure Container di Funzioni di Azure.

Questo articolo illustra il supporto fornito da Funzioni di Azure per l'uso delle app per le funzioni in esecuzione in contenitori Linux.

Scegliere l'ambiente di hosting per l'app per le funzioni in contenitori nella parte superiore dell'articolo.

Per iniziare subito, l'articolo seguente illustra come creare la prima funzione in esecuzione in un contenitore Linux e distribuire l'immagine da un registro contenitori a un servizio di hosting di Azure supportato:

Creazione di app per le funzioni in contenitori

Funzioni semplifica la distribuzione e l'esecuzione delle app per le funzioni come contenitori Linux, creati e gestiti. Funzioni gestisce un set di immagini di base specifiche del linguaggio che è possibile usare durante la creazione di app per le funzioni in contenitori.

Importante

Quando si creano contenitori personalizzati, è necessario mantenere aggiornata l'immagine di base del contenitore all'immagine di base supportata più recente. Le immagini di base supportate per Funzioni di Azure sono specifiche della lingua e sono disponibili nei repository dell'immagine di base Funzioni di Azure.

Il team di Funzioni si impegna a pubblicare aggiornamenti mensili per queste immagini di base. Gli aggiornamenti regolari includono gli aggiornamenti della versione secondaria più recenti e le correzioni di sicurezza sia per il runtime di Funzioni che per i linguaggi. È consigliabile aggiornare regolarmente il contenitore dall'immagine di base più recente e ridistribuire la versione aggiornata del contenitore.

Per un esempio completo di come creare l'app per le funzioni in contenitori locale dalla riga di comando e pubblicare l'immagine in un registro contenitori, vedere Creare un'app per le funzioni in un contenitore locale.

Generare il Dockerfile

Gli strumenti di Funzioni offrono un'opzione Docker che genera un Dockerfile con il progetto di codice delle funzioni. È possibile usare questo file con Docker per creare le funzioni in un contenitore che deriva dall'immagine di base corretta (lingua e versione).

Il modo in cui si crea un Dockerfile dipende dalla modalità di creazione del progetto.

  • Quando si crea un progetto di Funzioni usando Funzioni di Azure Core Tools, includere l'opzione --docker quando si esegue il func init comando, come nell'esempio seguente:

    func init --docker
    
  • È anche possibile aggiungere un Dockerfile a un progetto esistente usando l'opzione --docker-only quando si esegue il func init comando in una cartella di progetto esistente, come nell'esempio seguente:

    func init --docker-only
    

Per un esempio completo, vedere Creare un'app per le funzioni in un contenitore locale.

Creazione dell'app per le funzioni in un contenitore

Con un Dockerfile generato da Core Tools nel progetto di codice, è possibile usare Docker per creare l'app per le funzioni in contenitori nel computer locale. Il comando seguente docker build crea un'immagine delle funzioni in contenitori dal progetto nella directory locale:

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

Per un esempio di come creare il contenitore, vedere Creare l'immagine del contenitore e verificare localmente.

Aggiornare un'immagine nel Registro di sistema

Quando si apportano modifiche al progetto di codice delle funzioni o è necessario eseguire l'aggiornamento all'immagine di base più recente, è necessario ricompilare il contenitore in locale e ripubblicare l'immagine aggiornata nel registro contenitori scelto. Il comando seguente ricompila l'immagine dalla cartella radice con un numero di versione aggiornato e lo inserisce nel registro:

az acr build --registry <REGISTRY_NAME> --image <LOGIN_SERVER>/azurefunctionsimage:v1.0.1 .

Sostituire <REGISTRY_NAME> con l'istanza del Registro Container e <LOGIN_SERVER> con il nome del server di accesso.

A questo punto, è necessario aggiornare la distribuzione per usare la nuova immagine. L'esempio seguente aggiorna l'app per le funzioni per usare la nuova immagine:

az functionapp config container set --image <IMAGE_NAME> --registry-password <SECURE_PASSWORD>--registry-username <USER_NAME> --name <APP_NAME> --resource-group <RESOURCE_GROUP>

In questo esempio è <IMAGE_NAME> il nome completo della nuova immagine con versione. I registri privati richiedono di specificare un nome utente e una password. Archiviare queste credenziali in modo sicuro.

È anche consigliabile abilitare la distribuzione continua.

portale di Azure creare usando i contenitori

Quando si crea un'app per le funzioni nella portale di Azure, è possibile scegliere di distribuire l'app per le funzioni da un'immagine in un registro contenitori. Per informazioni su come creare un'app per le funzioni in contenitori in un registro contenitori, vedere Creazione dell'app per le funzioni in un contenitore.

La procedura seguente consente di creare e distribuire un'app per le funzioni in contenitori esistente da un registro contenitori.

  1. Nel menu del portale di Azure o dalla pagina Home selezionare Crea una risorsa.

  2. Nella pagina Nuovo, selezionare Calcolo>App per le funzioni.

  3. Nella pagina Informazioni di base usare le impostazioni dell'app per le funzioni specificate nella tabella seguente:

    Impostazione Valore suggerito Descrizione
    Abbonamento Sottoscrizione in uso Sottoscrizione in cui si crea l'app per le funzioni.
    Gruppo di risorse myResourceGroup Nome del nuovo gruppo di risorse in cui si crea l'app per le funzioni. È consigliabile creare un gruppo di risorse perché esistono limitazioni note durante la creazione di nuove app per le funzioni in un gruppo di risorse esistente.
    Nome dell'app per le funzioni Nome univoco* Nome che identifica la nuova app per le funzioni. I caratteri validi sono a-z (senza distinzione tra maiuscole e minuscole), 0-9 e -.
    Distribuire codice o immagine del contenitore? Immagine del contenitore Distribuire un'app per le funzioni in contenitori da un registro. Per creare un'app per le funzioni nel Registro di sistema, vedere Creare un'app per le funzioni in un contenitore locale.
    Area Area preferita Selezionare un'area vicina o vicina ad altri servizi a cui le funzioni possono accedere.

*Il nome dell'app deve essere univoco a livello globale tra tutte le app ospitate Funzioni di Azure.

  1. In Opzioni e piani di hosting scegliere Funzioni Premium.

    Screenshot of the Basics tab in the Azure portal when creating a function app for hosting a container in a Functions Premium plan.

    In questo modo viene creata un'app per le funzioni ospitata da Funzioni di Azure nel piano Premium, che supporta il ridimensionamento dinamico. È anche possibile scegliere di eseguire in un piano di servizio app, ma in questo tipo di piano dedicato è necessario gestire il ridimensionamento dell'app per le funzioni.

*Il nome dell'app deve essere univoco nell'ambiente app Azure Container. Non tutte le aree sono supportate nell'anteprima. Per altre informazioni, vedere Considerazioni sull'hosting di app contenitore.

  1. In Opzioni e piani di hosting scegliere Piano di ambiente app Azure Container.

    Portal create Basics tab for a containerized function app hosted in Azure Container Apps.

    In questo modo viene creata una nuova risorsa Ambiente app Azure Container per ospitare il contenitore dell'app per le funzioni. Per altre informazioni, vedere Hosting di app azure Container di Funzioni di Azure.

    Per impostazione predefinita, l'ambiente viene creato in un piano a consumo senza ridondanza della zona, per ridurre al minimo i costi. È anche possibile scegliere un ambiente app contenitore esistente. Per informazioni sugli ambienti, vedere Ambienti di App Azure Container.

  1. Accettare le opzioni predefinite per la creazione di un nuovo account di archiviazione nella scheda Archiviazione e una nuova istanza di Application Insight nella scheda Monitoraggio. È anche possibile scegliere di usare un account di archiviazione esistente o un'istanza di Application Insights.

  2. Selezionare la scheda Distribuzione e deselezionare Usa immagine di avvio rapido. In caso contrario, l'app per le funzioni viene distribuita dall'immagine di base per il linguaggio dell'app per le funzioni.

  3. Scegliere il tipo di immagine, pubblico o privato. Scegliere Privato se si usa Registro Azure Container o un altro registro privato. Specificare il nome dell'immagine , incluso il prefisso del Registro di sistema. Se si usa un registro privato, specificare le credenziali di autenticazione del Registro di sistema delle immagini.

  4. Selezionare Rivedi e crea per rivedere le selezioni effettuate per la configurazione dell'app.

  5. Nella pagina Rivedi e crea esaminare le impostazioni e quindi selezionare Crea per effettuare il provisioning dell'app per le funzioni e distribuire l'immagine del contenitore dal registro.

Usare immagini in Funzioni di Azure

Quando il contenitore dell'app per le funzioni viene distribuito da un registro, Funzioni mantiene informazioni sull'immagine di origine. Usare i comandi seguenti per ottenere dati sull'immagine o modificare l'immagine di distribuzione usata:

Impostazioni applicazione

Funzioni di Azure consente di usare le impostazioni dell'applicazione per le app per le funzioni in contenitori nel modo standard. Per altre informazioni, vedere Usare le impostazioni dell'applicazione.

Abilitare la distribuzione continua in Azure

Importante

La distribuzione basata su webhook non è attualmente supportata quando si esegue il contenitore in un piano Elastic Premium. Se è necessario usare il metodo di distribuzione continua descritto in questa sezione, distribuire invece il contenitore in un piano di servizio app. Quando si esegue in un piano Elastic Premium, è necessario riavviare manualmente l'app ogni volta che si apportano aggiornamenti al contenitore nel repository.

È possibile abilitare Funzioni di Azure per aggiornare automaticamente la distribuzione di un'immagine ogni volta che quest'ultima viene aggiornata nel registro.

  1. Usare il comando seguente per abilitare la distribuzione continua e ottenere l'URL del webhook:

    az functionapp deployment container config --enable-cd --query CI_CD_URL --output tsv --name <APP_NAME> --resource-group AzureFunctionsContainers-rg
    

    Il az functionapp deployment container config comando abilita la distribuzione continua e restituisce l'URL del webhook di distribuzione. È possibile recuperare questo URL in un secondo momento usando il az functionapp deployment container show-cd-url comando .

    Come in precedenza, sostituire <APP_NAME> con il nome dell'app per le funzioni.

  2. Copiare l'URL del webhook della distribuzione negli Appunti.

  3. Aprire Docker Hub, accedere e selezionare Repository sulla barra di spostamento. Individuare e selezionare l'immagine, selezionare la scheda Webhook, specificare un nome webhook, incollare l'URL nell'URL del webhook e quindi selezionare Crea.

    Screenshot showing how to add the webhook in your Docker Hub window.

  4. Con il webhook impostato, Funzioni di Azure ridistribuisce l'immagine ogni volta che viene aggiornata in Docker Hub.

Abilitare le connessioni SSH

SSH consente la comunicazione sicura tra un contenitore e un client. Con SSH abilitato è possibile connettersi al contenitore tramite Strumenti avanzati (Kudu) del Servizio app. Per facilitare la connessione al contenitore tramite SSH, Funzioni di Azure fornisce un'immagine di base con SSH già abilitata. È sufficiente modificare il Dockerfile, quindi ricompilare e ridistribuire l'immagine. È quindi possibile connettersi al contenitore tramite Strumenti avanzati (Kudu).

  1. Nel Dockerfile aggiungere la stringa -appservice all'immagine di base nell'istruzioneFROM, come nell'esempio seguente:

    FROM mcr.microsoft.com/azure-functions/node:4-node18-appservice
    

    Questo esempio usa la versione abilitata per SSH dell'immagine di base Node.js versione 18. Visitare i repository dell'immagine di base Funzioni di Azure per verificare di usare la versione più recente dell'immagine di base abilitata per SSH.

  2. Ricompilare l'immagine usando il docker build comando , sostituire con l'ID <DOCKER_ID> dell'account Docker Hub, come nell'esempio seguente.

    docker build --tag <DOCKER_ID>/azurefunctionsimage:v1.0.0 .
    
  3. Eseguire il push dell'immagine aggiornata nell'hub Docker, che dovrebbe richiedere molto meno tempo rispetto al primo push. Solo i segmenti aggiornati dell'immagine devono essere caricati ora.

    docker push <DOCKER_ID>/azurefunctionsimage:v1.0.0
    
  4. Funzioni di Azure ridistribuisce automaticamente l'immagine nell'app per le funzioni. Il processo viene completato in meno di un minuto.

  5. In un browser aprire https://<app_name>.scm.azurewebsites.net/ e sostituire <app_name> con il nome univoco. Questo URL è l'endpoint di Strumenti avanzati (Kudu) per il contenitore dell'app per le funzioni.

  6. Accedere all'account Azure e quindi selezionare SSH per stabilire una connessione con il contenitore. Connessione potrebbero essere necessari alcuni istanti se Azure sta ancora aggiornando l'immagine del contenitore.

  7. Dopo aver stabilito la connessione con il contenitore, eseguire il comando top per visualizzare i processi attualmente in esecuzione.

    Screenshot that shows Linux top command running in an SSH session.

Passaggi successivi

Gli articoli seguenti forniscono altre informazioni sulla distribuzione e la gestione dei contenitori: