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

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:

  1. Accedere al portale di Azure e passare all'istanza di Gestione API.
  2. Nel menu a sinistra, in Distribuzione e infrastruttura, selezionare Gateway.
  3. Selezionare la risorsa gateway di cui è stato effettuato il provisioning e selezionare Distribuzione.
  4. 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 nel myResourceGroup gruppo di risorse. In questo esempio l'app contenitore viene creata usando l'immagine mcr.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 su true in modo che il gateway self-hosted usi l'intestazione X-Forwarded-Proto per determinare il protocollo originale della richiesta.

Verificare che l'app contenitore sia in esecuzione

  1. Accedere al portale di Azure e passare all'app contenitore.

  2. Nella pagina Panoramica dell'app contenitore verificare che lo stato sia in esecuzione.

  3. Inviare una richiesta di test all'endpoint di stato in /status-012345678990abcdef. Ad esempio, usare un curl 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

  1. Accedere al portale di Azure e passare all'istanza di Gestione API.

  2. Nel menu a sinistra, in Distribuzione e infrastruttura, selezionare Gateway.

  3. Nella pagina Panoramica controllare lo stato del gateway. Se il gateway è integro, segnala i normali heartbeat del gateway.

    Screenshot dello stato del gateway nel portale.

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.

Diagramma dello scenario di esempio con il gateway self-hosted.

  1. Distribuire un'app contenitore che ospita un'API nello stesso ambiente del gateway self-hosted
  2. Aggiungere l'API all'istanza di Gestione API
  3. 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:

  1. Scaricare il codice sorgente Python nel computer locale. Se si preferisce, scaricare il codice sorgente in un'altra lingua preferita.

  2. Estrarre il codice sorgente in una cartella locale e passare alla cartella containerapps-albumapi-python-main/src .

  3. 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 .
    
  4. 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.

  1. Accedere al portale di Azure e passare all'app contenitore.
  2. Nel menu a sinistra selezionare Ingresso.
  3. Impostare Ingresso su Abilitato.
  4. In Traffico in ingresso selezionare Limitato all'ambiente app contenitore.
  5. 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

  1. Nel portale passare all'istanza di Gestione API in cui è stato configurato il gateway self-hosted.
  2. Nel menu a sinistra selezionare API >+ Aggiungi API.
  3. Selezionare HTTP e selezionare Completo. Immettere le impostazioni seguenti:
    1. Nome visualizzato: immettere un nome descrittivo. Esempio: API Album.
    2. 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.
    3. Schema URL: selezionare HTTP(S).
    4. Suffisso URL API: immettere un suffisso di propria scelta. Esempio: albumapi.
    5. Gateway: selezionare il gateway self-hosted di cui è stato effettuato il provisioning. Esempio: my-gateway.
  4. Configurare altre impostazioni API in base allo scenario. Seleziona Crea.

Aggiungere un'operazione API

  1. Nel menu a sinistra selezionare API>Api album.
  2. Selezionare + Aggiungi operazione.
  3. Immettere le impostazioni dell'operazione:
    1. Nome visualizzato: immettere un nome descrittivo per l'operazione. Esempio: Ottenere gli album.
    2. URL: selezionare Recupera e immettere /albums per l'endpoint.
    3. 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.