Distribuire un gateway self-hosted di Azure Gestione API in App Azure Container
SI APPLICA A: Sviluppatore | Premium
Questo articolo illustra la procedura per distribuire il componente gateway self-hosted di Azure Gestione API in App Contenitore di Azure.
Distribuire un gateway self-hosted in un'app contenitore per accedere alle API ospitate nello stesso ambiente di App Contenitore di Azure.
Prerequisiti
Completare la guida introduttiva seguente: Creare un'istanza di Gestione API di Azure.
Per l'interfaccia della riga di comando di Azure:
Usare l'ambiente Bash in Azure Cloud Shell. Per altre informazioni, vedere la Avvio rapido di Bash in Azure Cloud Shell.
Se si preferisce eseguire i comandi di riferimento dell'interfaccia della riga di comando in locale, installare l'interfaccia della riga di comando di Azure. Per l'esecuzione in Windows o macOS, è consigliabile eseguire l'interfaccia della riga di comando di Azure in un contenitore Docker. Per altre informazioni, vedere Come eseguire l'interfaccia della riga di comando di Azure in un contenitore Docker.
Se si usa un'installazione locale, accedere all'interfaccia della riga di comando di Azure con il comando az login. Per completare il processo di autenticazione, seguire la procedura visualizzata nel terminale. Per altre opzioni di accesso, vedere Accedere tramite l'interfaccia della riga di comando di Azure.
Quando richiesto, al primo utilizzo installare l'estensione dell'interfaccia della riga di comando di Azure. Per altre informazioni sulle estensioni, vedere Usare le estensioni con l'interfaccia della riga di comando di Azure.
Eseguire az version per trovare la versione e le librerie dipendenti installate. Per eseguire l'aggiornamento alla versione più recente, eseguire az upgrade.
Nota
Gli esempi di comandi dell'interfaccia della riga di comando di Azure in questo articolo richiedono l'estensione dell'interfaccia della
containerapp
riga di comando di Azure. Se non sono stati usatiaz containerapp
comandi, l'estensione viene installata in modo dinamico quando si esegue il primoaz containerapp
comando. Altre informazioni sulle estensioni dell'interfaccia della riga di comando di Azure.
Effettuare il provisioning del gateway nell'istanza di Gestione API
Prima di distribuire un gateway self-hosted, effettuare il provisioning di una risorsa gateway nell'istanza di Azure Gestione API. Per la procedura, vedere Effettuare il provisioning di un gateway self-hosted. Negli esempi di questo articolo il gateway è denominato my-gateway
.
Ottenere le impostazioni di distribuzione del gateway da Gestione API
Per distribuire il gateway, sono necessari i valori dell'endpoint token e configurazione del gateway. È possibile trovarli nel portale di Azure:
- Accedere al portale di Azure e passare all'istanza di Gestione API.
- Nel menu a sinistra, in Distribuzione e infrastruttura, selezionare Gateway.
- Selezionare la risorsa gateway di cui è stato effettuato il provisioning e selezionare Distribuzione.
- Copiare i valori dell'endpoint token e della configurazione.
Distribuire il gateway self-hosted in un'app contenitore
È possibile distribuire l'immagine del contenitore del gateway self-hosted in un'app contenitore usando il portale di Azure, l'interfaccia della riga di comando di Azure o altri strumenti. Questo articolo illustra i passaggi con l'interfaccia della riga di comando di Azure.
Creare un ambiente di app contenitore
Creare prima di tutto un ambiente di app contenitore usando il comando az containerapp env create :
#!/bin/bash
az containerapp env create --name my-environment --resource-group myResourceGroup \
--location centralus
Questo comando crea:
- Un ambiente dell'app contenitore denominato
my-environment
usato per raggruppare le app contenitore. - Un'area di lavoro Log Analytics
Creare un'app contenitore per il gateway self-hosted
Per distribuire il gateway self-hosted in un'app contenitore nell'ambiente, eseguire il comando az containerapp create .
Impostare prima le variabili per i valori dell'endpoint token e della configurazione dalla risorsa gateway Gestione API.
#!/bin/bash
endpoint="<API Management configuration endpoint>"
token="<API Management gateway token>"
Creare l'app contenitore usando il az containerapp create
comando :
#!/bin/bash
az containerapp create --name my-gateway \
--resource-group myResourceGroup --environment 'my-environment' \
--image "mcr.microsoft.com/azure-api-management/gateway:2.5.0" \
--target-port 8080 --ingress external \
--min-replicas 1 --max-replicas 3 \
--env-vars "config.service.endpoint"="$endpoint" "config.service.auth"="$token" "net.server.http.forwarded.proto.enabled"="true"
Questo comando crea:
Un'app contenitore denominata
my-gateway
nelmyResourceGroup
gruppo di risorse. In questo esempio l'app contenitore viene creata usando l'immaginemcr.microsoft.com/azure-api-management/gateway:2.5.0
. Altre informazioni sulle immagini del contenitore del gateway self-hosted.Supporto per l'ingresso esterno all'app contenitore sulla porta 8080.
Almeno 1 e un massimo di 3 repliche dell'app contenitore.
Connessione dal gateway self-hosted all'istanza di Gestione API usando i valori di configurazione passati nelle variabili di ambiente. Per informazioni dettagliate, vedere le impostazioni di configurazione del contenitore del gateway self-hosted.
Nota
Le app contenitore di Azure in ingresso inoltrano le richieste HTTPS all'app contenitore gateway self-hosted come HTTP. In questo caso, la
net.server.http.forwarded.proto.enabled
variabile di ambiente è impostata sutrue
in modo che il gateway self-hosted usi l'intestazioneX-Forwarded-Proto
per determinare il protocollo originale della richiesta.
Verificare che l'app contenitore sia in esecuzione
Accedere al portale di Azure e passare all'app contenitore.
Nella pagina Panoramica dell'app contenitore verificare che lo stato sia in esecuzione.
Inviare una richiesta di test all'endpoint di stato in
/status-012345678990abcdef
. Ad esempio, usare uncurl
comando simile al seguente.curl -i https://my-gateway.happyvalley-abcd1234.centralus.azurecontainerapps.io/status-012345678990abcdef
Una richiesta con esito positivo restituisce una
200 OK
risposta.
Suggerimento
Usando l'interfaccia della riga di comando, è anche possibile eseguire il comando az containerapp show per controllare lo stato dell'app contenitore.
Verificare che il gateway sia integro
Accedere al portale di Azure e passare all'istanza di Gestione API.
Nel menu a sinistra, in Distribuzione e infrastruttura, selezionare Gateway.
Nella pagina Panoramica controllare lo stato del gateway. Se il gateway è integro, segnala i normali heartbeat del gateway.
Scenario di esempio
L'esempio seguente illustra come usare il gateway self-hosted per accedere a un'API ospitata in un'app contenitore nello stesso ambiente. Come illustrato nel diagramma seguente, è possibile accedere al gateway self-hosted da Internet, mentre l'API è accessibile solo all'interno dell'ambiente delle app contenitore.
- Distribuire un'app contenitore che ospita un'API nello stesso ambiente del gateway self-hosted
- Aggiungere l'API all'istanza di Gestione API
- Chiamare l'API tramite il gateway self-hosted
Distribuire un'app contenitore che ospita un'API nello stesso ambiente del gateway self-hosted
Ad esempio, distribuire un'API dell'album musicale di esempio in un'app contenitore. Per un accesso successivo all'API usando il gateway self-hosted, distribuire l'API nello stesso ambiente del gateway self-hosted. Per istruzioni dettagliate e informazioni sulle risorse usate in questo esempio, vedere Avvio rapido: Compilare e distribuire dal codice sorgente locale ad App Contenitore di Azure. I passaggi abbreviati seguono:
Scaricare il codice sorgente Python nel computer locale. Se si preferisce, scaricare il codice sorgente in un'altra lingua preferita.
Estrarre il codice sorgente in una cartella locale e passare alla cartella containerapps-albumapi-python-main/src .
Eseguire il comando az containerapp up seguente per distribuire l'API in un'app contenitore nello stesso ambiente del gateway self-hosted. Prendere nota di
.
alla fine del comando, che specifica la cartella corrente come origine per l'app contenitore.#!/bin/bash az containerapp up --name albums-api \ --resource-group myResourceGroup --location centralus \ --environment my-environment --source .
Verificare che l'app contenitore sia in esecuzione e accessibile esternamente nel nome di dominio completo restituito nell'output del comando. Per impostazione predefinita, l'API è accessibile all'endpoint
/albums
. Esempio:https://albums-api.happyvalley-abcd1234.centralus.azurecontainerapps.io/albums/albums
.
Configurare l'API per l'ingresso interno
Aggiornare ora l'app contenitore che ospita l'API di esempio per abilitare l'ingresso solo nell'ambiente contenitore. Questa impostazione limita l'accesso all'API solo dal gateway self-hosted distribuito.
- Accedere al portale di Azure e passare all'app contenitore.
- Nel menu a sinistra selezionare Ingresso.
- Impostare Ingresso su Abilitato.
- In Traffico in ingresso selezionare Limitato all'ambiente app contenitore.
- Esaminare le impostazioni rimanenti e selezionare Salva.
Aggiungere l'API all'istanza di Gestione API
Di seguito sono riportati alcuni passaggi di esempio per aggiungere un'API all'istanza di Gestione API e configurare un back-end dell'API. Per altre informazioni, vedere Aggiungere un'API ad Azure Gestione API.
Aggiungere l'API all'istanza di Gestione API
- Nel portale passare all'istanza di Gestione API in cui è stato configurato il gateway self-hosted.
- Nel menu a sinistra selezionare API >+ Aggiungi API.
- Selezionare HTTP e selezionare Completo. Immettere le impostazioni seguenti:
- Nome visualizzato: immettere un nome descrittivo. Esempio: API Album.
- URL del servizio Web: immettere il nome di dominio completo interno dell'app contenitore che ospita l'API. Esempio:
http://albums-api.internal.happyvalley-abcd1234.centralus.azurecontainerapps.io
. - Schema URL: selezionare HTTP(S).
- Suffisso URL API: immettere un suffisso di propria scelta. Esempio: albumapi.
- Gateway: selezionare il gateway self-hosted di cui è stato effettuato il provisioning. Esempio: my-gateway.
- Configurare altre impostazioni API in base allo scenario. Seleziona Crea.
Aggiungere un'operazione API
- Nel menu a sinistra selezionare API>Api album.
- Selezionare + Aggiungi operazione.
- Immettere le impostazioni dell'operazione:
- Nome visualizzato: immettere un nome descrittivo per l'operazione. Esempio: Ottenere gli album.
- URL: selezionare Recupera e immettere
/albums
per l'endpoint. - Seleziona Salva.
Chiamare l'API tramite il gateway self-hosted
Chiamare l'API usando il nome di dominio completo del gateway self-hosted in esecuzione nell'app contenitore. Trovare il nome di dominio completo nella pagina Panoramica dell'app contenitore nella portale di Azure oppure eseguire il comando seguenteaz containerapp show
.
#!/bin/bash
az containerapp show --name my-gateway --resource-group myResourceGroup \
--query "properties.configuration.ingress.fqdn" --output tsv
Ad esempio, eseguire il comando seguente curl
per chiamare l'API nell'endpoint /albumapi/albums
. Se l'API richiede una chiave di sottoscrizione, passare una chiave di sottoscrizione valida per l'istanza di Gestione API come intestazione nella richiesta:
curl -i https://my-gateway.happyvalley-abcd1234.centralus.azurecontainerapps.io/albumapi/albums -H "Ocp-Apim-Subscription-Key: <subscription-key>"
Quando il test ha esito positivo, il back-end risponde con un codice di risposta HTTP corretto e alcuni dati.
HTTP/1.1 200 OK
content-length: 751
content-type: application/json
date: Wed, 28 Feb 2024 22:45:09 GMT
[...]
[{"id":1,"title":"You, Me and an App Id","artist":"Daprize","price":10.99,"image_url":"https://aka.ms/albums-daprlogo"},{"id":2,"title":"Seven Revision Army","artist":"The Blue-Green Stripes","price":13.99,"image_url":"https://aka.ms/albums-containerappslogo"},{"id":3,"title":"Scale It Up","artist":"KEDA Club","price":13.99,"image_url":"https://aka.ms/albums-kedalogo"},{"id":4,"title":"Lost in Translation","artist":"MegaDNS","price":12.99,"image_url":"https://aka.ms/albums-envoylogo"},{"id":5,"title":"Lock Down Your Love","artist":"V is for VNET","price":12.99,"image_url":"https://aka.ms/albums-vnetlogo"},{"id":6,"title":"Sweet Container O' Mine","artist":"Guns N Probeses","price":14.99,"image_url":"https://aka.ms/albums-containerappslogo"}]
Suggerimento
Se è stata abilitata la registrazione dell'API in Application Insights, è possibile eseguire query sui log per visualizzare le richieste e le risposte.