Configurare OpenAPI di Cloud Endpoints per l'ambiente standard con ESPv2

Questa pagina mostra come configurare Cloud Endpoints per App Engine. Endpoints utilizza Extensible Service Proxy V2 (ESPv2) come gateway API. Per fornire la gestione delle API per App Engine, esegui il deployment del contenitore ESPv2 predefinito in Cloud Run. Proteggi quindi la tua app utilizzando Identity Aware Proxy (IAP) in modo che solo ESPv2 possa richiamarla.

Con questa configurazione, ESPv2 intercetta tutte le richieste alla tua app ed esegue tutti i controlli necessari (ad esempio l'autenticazione) prima di invocare l'app. Quando l'app risponde, ESPv2 raccoglie e registra la telemetria, come mostrato nella figura seguente. Puoi visualizzare le metriche della tua app nella pagina Endpoints > Servizi nella console Google Cloud.

Architettura di Endpoints

Per una panoramica di Cloud Endpoints, consulta Informazioni su Endpoints e Architettura di Endpoints.

Migrazione a ESPv2

Le versioni precedenti di Cloud Endpoints supportavano l'utilizzo di Extensible Service Proxy (ESP) con Cloud Run. Se hai API esistenti di cui vuoi eseguire la migrazione a ESPv2, consulta Eseguire la migrazione a Extensible Service Proxy 2 per saperne di più.

Elenco attività

Utilizza il seguente elenco di attività man mano che svolgi il tutorial. Tutte le attività sono necessarie per consentire a Endpoints di gestire la tua app.

  1. Crea un progetto Google Cloud e, se non hai eseguito il deployment del tuo App Engine, esegui il deployment di un'app di backend di esempio. consulta Prima di iniziare.
  2. Configura IAP per proteggere la tua app. Consulta Configurare IAP.
  3. Riserva un nome host Cloud Run per il servizio ESPv2. Consulta Prenotare un nome host Cloud Run.
  4. Crea un documento OpenAPI che descriva la tua API e configura le route per App Engine. Consulta Configurare Endpoints.
  5. Esegui il deployment del documento OpenAPI per creare un servizio gestito. Consulta Eseguire il deployment della configurazione di Endpoints.
  6. Crea una nuova immagine Docker ESPv2 con la configurazione del servizio Endpoints. Consulta la sezione Creare una nuova immagine ESPv2.
  7. Esegui il deployment del container ESPv2 su Cloud Run. Quindi, concedi a ESPv2 l'autorizzazione IAM (Identity and Access Management) per richiamare il servizio. Consulta Eseguire il deployment del contenitore ESPv2.
  8. Richiama l'app. Consulta Invio di una richiesta all'API.
  9. Monitorare l'attività nelle tue app. Consulta Monitorare l'attività dell'API.
  10. Evita che al tuo account Google Cloud vengano addebitati costi. Consulta Pulizia.

Costi

In questo documento utilizzi i seguenti componenti fatturabili di Google Cloud:

Per generare una stima dei costi in base all'utilizzo previsto, utilizza il Calcolatore prezzi. I nuovi utenti di Google Cloud potrebbero essere idonei per una prova gratuita.

Al termine delle attività descritte in questo documento, puoi evitare la fatturazione continua eliminando le risorse che hai creato. Per ulteriori informazioni, consulta la sezione Pulizia.

Prima di iniziare

Per la configurazione:

  1. Nella console Google Cloud, vai alla pagina Gestisci risorse e crea un progetto.

    Vai alla pagina Gestisci risorse

  2. Verifica che la fatturazione sia attivata per il tuo progetto.

    Scopri come attivare la fatturazione

  3. Prendi nota dell'ID progetto, perché ti servirà in seguito. Nel resto di questa pagina, questo ID progetto è indicato come ESP_PROJECT_ID.

  4. Prendi nota del numero del progetto perché ti servirà in seguito. Nel resto di questa pagina, questo numero di progetto è indicato come ESP_PROJECT_NUMBER.

  5. Scarica e installa Google Cloud CLI.

    Scarica la gcloud CLI

  6. Se non hai eseguito il deployment del tuo backend App Engine, segui i passaggi descritti nella guida rapida di App Engine. Prendi nota della regione e dell'ID progetto in cui vengono eseguite le tue app. Nel resto di questa pagina, questo ID progetto è indicato come APP_PROJECT_ID.

Configurare gli acquisti in-app per proteggere l'app

Per proteggere la tua app App Engine, devi utilizzare Identity-Aware Proxy (IAP) per assicurarti che le richieste siano autenticate.

Segui i passaggi per abilitare gli acquisti in-app e assicurati di poter accedere alla tua applicazione.

Inoltre, quando configuri il client OAuth, prendi nota del valore client_id OAuth, denominato IAP_CLIENT_ID in questo tutorial.

Prenotazione di un nome host Cloud Run

Per configurare il documento OpenAPI o la configurazione del servizio gRPC, devi prenotare un nome host Cloud Run per il servizio ESPv2. Per prenotare un nome host, esegui il deployment di un container di esempio in Cloud Run. Successivamente, deploy del contenitore ESPv2 sullo stesso servizio Cloud Run.

  1. Assicurati che gcloud CLI sia autorizzata ad accedere ai tuoi dati e ai tuoi servizi.
    1. Accedi.
      gcloud auth login
    2. Nella nuova scheda del browser che si apre, scegli un account con il ruolo Editor o Proprietario nel progetto Google Cloud che hai creato per il deployment di ESPv2 in Cloud Run.
  2. Imposta la regione.
    gcloud config set run/region us-central1
  3. Esegui il deployment dell'immagine di esempio gcr.io/cloudrun/hello in Cloud Run. Sostituisci CLOUD_RUN_SERVICE_NAME con il nome che vuoi utilizzare per il servizio.
    gcloud run deploy CLOUD_RUN_SERVICE_NAME \
        --image="gcr.io/cloudrun/hello" \
        --allow-unauthenticated \
        --platform managed \
        --project=ESP_PROJECT_ID
    

    Al termine, il comando visualizza un messaggio simile al seguente:

    Service [CLOUD_RUN_SERVICE_NAME] revision [CLOUD_RUN_SERVICE_NAME-REVISION_NUM] has been deployed and is serving traffic at CLOUD_RUN_SERVICE_URL

    Ad esempio, se imposti CLOUD_RUN_SERVICE_NAME su gateway:

    Service [gateway] revision [gateway-00001] has been deployed and is serving traffic at https://gateway-12345-uc.a.run.app

    In questo esempio, https://gateway-12345-uc.a.run.app è il CLOUD_RUN_SERVICE_URL e gateway-12345-uc.a.run.app è il CLOUD_RUN_HOSTNAME.

  4. Prendi nota di CLOUD_RUN_SERVICE_NAME e CLOUD_RUN_HOSTNAME. Successivamente, esegui il deployment di ESPv2 nel servizio CLOUD_RUN_SERVICE_NAME Cloud Run. Specifica CLOUD_RUN_HOSTNAME nel campo host del documento OpenAPI.

Configurazione di Endpoints

Devi disporre di un documento OpenAPI basato sulla specifica OpenAPI 2.0 che descriva l'interfaccia delle tue app e gli eventuali requisiti di autenticazione. Devi anche aggiungere un campo specifico di Google contenente l'URL di ogni app in modo che ESPv2 disponga delle informazioni necessarie per richiamare un'app. Se non hai mai utilizzato OpenAPI, consulta la panoramica di OpenAPI per saperne di più

  1. Crea un file di testo denominato openapi-appengine.yaml. Per comodità, questa pagina fa riferimento al documento OpenAPI con questo nome file, ma se preferisci puoi assegnargli un altro nome.
  2. L'app di backend App Engine è definita nella parte superiore del file openapi-appengine.yaml, in una definizione x-google-backend. Ad esempio:
      swagger: '2.0'
      info:
        title: Cloud Endpoints + App Engine
        description: Sample API on Cloud Endpoints with an App Engine backend
        version: 1.0.0
      host: CLOUD_RUN_HOSTNAME
      schemes:
        - https
      produces:
        - application/json
      x-google-backend:
        address: https://APP_PROJECT_ID.REGION.r.appspot.com
        jwt_audience: IAP_CLIENT_ID
        protocol: h2
      paths:
        /:
          get:
            summary: Greet a user
            operationId: hello
            responses:
              '200':
                description: A successful response
                schema:
                  type: string
    L'indentazione è importante per il formato YAML. Ad esempio, il campo host deve trovarsi allo stesso livello di info.
  3. Nel campo address della sezione x-google-backend, sostituisci APP_PROJECT_ID con il tuo ID progetto Google Cloud, REGION con la regione Google Cloud in cui hai eseguito il deployment di App Engine e IAP_CLIENT_ID con l'ID client OAuth che hai creato durante la configurazione di IAP.
  4. Nel campo host, specifica CLOUD_RUN_HOSTNAME, la parte del nome host dell'URL che è stata prenotata sopra in Prenotazione di un nome host Cloud Run. Non includere l'identificatore di protocollo, https://. Ad esempio:

    swagger: '2.0'
      info:
        title: Cloud Endpoints + App Engine
        description: Sample API on Cloud Endpoints with an App Engine backend
        version: 1.0.0
      host: gateway-12345-uc.a.run.app
  5. Prendi nota del valore della proprietà title nel file openapi-appengine.yaml:

    title: Cloud Endpoints + App Engine

    Il valore della proprietà title diventa il nome del servizio Endpoints dopo il deployment della configurazione.

  6. Salva il documento OpenAPI.

Per informazioni sui campi nel documento OpenAPI richiesti da Endpoints, consulta Configurare Endpoints.

esegui il deployment della configurazione di Endpoints

Per eseguire il deployment della configurazione di Endpoints, utilizza il comando gcloud endpoints services deploy. Questo comando utilizza Service Management per creare un servizio gestito.

Per eseguire il deployment della configurazione di Endpoints:

  1. Assicurati di essere nella directory che contiene il documento OpenAPI.
  2. Carica la configurazione e crea un servizio gestito.

    gcloud endpoints services deploy openapi-appengine.yaml \
      --project ESP_PROJECT_ID

    Viene creato un nuovo servizio Endpoints con il nome specificato nel campo host del file openapi-appengine.yaml. Il servizio è configurato in base al documento OpenAPI.

    Durante la creazione e la configurazione del servizio, Service Management visualizza informazioni sul terminale. Al termine del deployment, viene visualizzato un messaggio simile al seguente:

    Service Configuration [CONFIG_ID] uploaded for service [CLOUD_RUN_HOSTNAME]

    CONFIG_ID è l'ID univoco della configurazione del servizio Endpoints creato dal deployment. Ad esempio:

    Service Configuration [2019-02-01r0] uploaded for service [gateway-12345-uc.a.run.app]

    L'ID configurazione del servizio è costituito da un timestamp seguito da un numero di revisione. Se esegui di nuovo il deployment di openapi-appengine.yaml nello stesso giorno, il numero di revisione viene incrementato nell'ID configurazione del servizio. Puoi visualizzare la configurazione del servizio e la cronologia di implementazione nella pagina Endpoints > Servizi della console Google Cloud.

    Se viene visualizzato un messaggio di errore, consulta Risoluzione dei problemi di deployment della configurazione di Endpoints.

Verifica dei servizi richiesti

Come minimo, Endpoints ed ESP richiedono l'abilitazione dei seguenti servizi Google:
Nome Titolo
servicemanagement.googleapis.com API Service Management
servicecontrol.googleapis.com API Service Control

Nella maggior parte dei casi, il comando gcloud endpoints services deploy attiva questi servizi obbligatori. Tuttavia, il comando gcloud viene completato correttamente, ma non attiva i servizi richiesti nelle seguenti circostanze:

  • Se hai utilizzato un'applicazione di terze parti come Terraform e non includi questi servizi.

  • Hai eseguito il deployment della configurazione di Endpoints in un progetto Google Cloud esistente in cui questi servizi sono stati disattivati esplicitamente.

Utilizza il seguente comando per verificare che i servizi richiesti siano abilitati:

gcloud services list

Se non vedi i servizi richiesti nell'elenco, attivali:

gcloud services enable servicemanagement.googleapis.com
gcloud services enable servicecontrol.googleapis.com

Abilita anche il servizio Endpoints:

gcloud services enable ENDPOINTS_SERVICE_NAME

Per determinare ENDPOINTS_SERVICE_NAME, puoi:

  • Dopo aver eseguito il deployment della configurazione di Endpoints, vai alla pagina Endpoints nella console Cloud. L'elenco dei possibili ENDPOINTS_SERVICE_NAME è riportato nella colonna Nome servizio.

  • Per OpenAPI, ENDPOINTS_SERVICE_NAME è il valore specificato nel campo host della specifica OpenAPI. Per gRPC, ENDPOINTS_SERVICE_NAME è il valore specificato nel campo name della configurazione degli endpoint gRPC.

Per ulteriori informazioni sui comandi gcloud, consulta Servizi gcloud.

Creazione di una nuova immagine ESPv2

Crea la configurazione del servizio Endpoints in una nuova immagine Docker ESPv2. In un secondo momento, eseguirai il deployment di questa immagine sul servizio Cloud Run riservato.

Per compilare la configurazione del servizio in una nuova immagine Docker ESPv2:

  1. Scarica questo script sulla tua macchina locale su cui è installata gcloud CLI.

  2. Esegui lo script con il seguente comando:

    chmod +x gcloud_build_image
    
    ./gcloud_build_image -s CLOUD_RUN_HOSTNAME \
        -c CONFIG_ID -p ESP_PROJECT_ID

    Per CLOUD_RUN_HOSTNAME, specifica il nome host dell'URL che hai riservato sopra in Prenotazione di un nome host Cloud Run. Non includere l'identificatore di protocollo, https://.

    Ad esempio:

    chmod +x gcloud_build_image
    
    ./gcloud_build_image -s gateway-12345-uc.a.run.app \
        -c 2019-02-01r0 -p your-project-id
  3. Lo script utilizza il comando gcloud per scaricare la configurazione del servizio, compilarla in una nuova immagine ESPv2 e caricarla nel registry dei container del progetto. Lo script utilizza automaticamente la versione più recente di ESPv2, indicata dal carattere ESP_VERSION nel nome dell'immagine di output. L'immagine di output viene caricata in:

    gcr.io/ESP_PROJECT_ID/endpoints-runtime-serverless:ESP_VERSION-CLOUD_RUN_HOSTNAME-CONFIG_ID

    Ad esempio:

    gcr.io/your-project-id/endpoints-runtime-serverless:2.14.0-gateway-12345-uc.a.run.app-2019-02-01r0"

Deployment del container ESPv2

  1. Esegui il deployment del servizio Cloud Run ESPv2 con la nuova immagine creata sopra. Sostituisci CLOUD_RUN_SERVICE_NAME con lo stesso nome del servizio Cloud Run che hai utilizzato quando hai prenotato inizialmente il nome host sopra in Prenotazione di un nome host Cloud Run:

    gcloud run deploy CLOUD_RUN_SERVICE_NAME \
      --image="gcr.io/ESP_PROJECT_ID/endpoints-runtime-serverless:ESP_VERSION-CLOUD_RUN_HOSTNAME-CONFIG_ID" \
      --allow-unauthenticated \
      --platform managed \
      --project=ESP_PROJECT_ID
  2. Se vuoi configurare Endpoints in modo da utilizzare opzioni di avvio di ESPv2 aggiuntive, ad esempio l'attivazione di CORS, puoi passare gli argomenti nella variabile di ambiente ESPv2_ARGS:

    gcloud run deploy CLOUD_RUN_SERVICE_NAME \
      --image="gcr.io/ESP_PROJECT_ID/endpoints-runtime-serverless:ESP_VERSION-CLOUD_RUN_HOSTNAME-CONFIG_ID" \
      --set-env-vars=ESPv2_ARGS=--cors_preset=basic \
      --allow-unauthenticated \
      --platform managed \
      --project ESP_PROJECT_ID

    Per ulteriori informazioni ed esempi sull'impostazione della variabile di ambiente ESPv2_ARGS, incluso l'elenco delle opzioni disponibili e informazioni su come specificare più opzioni, consulta Flag di Extensible Service Proxy 2.

  3. Concedi all'autorizzazione ESPv2 di richiamare la tua app protetta con acquisti in-app. Esegui il seguente comando per ogni servizio. Nel seguente comando:
    • Sostituisci APP_PROJECT_ID con il nome dell'ID progetto App Engine.
    • Sostituisci ESP_PROJECT_NUMBER con il numero del progetto che hai creato per ESPv2. Un modo per trovarlo è andare alla console IAM e trovare il service account predefinito di Compute Engine, ovvero il account di servizio utilizzato nel flag "member".
      gcloud projects add-iam-policy-binding APP_PROJECT_ID \
          --member "serviceAccount:ESP_PROJECT_NUMBER-compute@developer.gserviceaccount.com" \
          --role "roles/iap.httpsResourceAccessor"
        

Per ulteriori informazioni, consulta Gestire l'accesso utilizzando IAM.

invia richieste all'API

Questa sezione mostra come inviare richieste all'API.

  1. Crea una variabile di ambiente per il nome del servizio Endpoints. Si tratta del nome specificato nel campo host del tuo documento OpenAPI. Ad esempio:
    • Linux o macOS:

      export ENDPOINTS_HOST=gateway-12345-uc.a.run.app

    • Windows PowerShell:

      $Env: ENDPOINTS_HOST="gateway-12345-uc.a.run.app"

Linux o Mac OS

Utilizza curl per inviare una richiesta HTTP utilizzando la variabile di ambiente ENDPOINTS_HOST impostata nel passaggio precedente.

curl --request GET \
   --header "content-type:application/json" \
   "https://${ENDPOINTS_HOST}/"

PowerShell

Utilizza Invoke-WebRequest per inviare una richiesta HTTP utilizzando la variabile di ambiente ENDPOINTS_HOST impostata nel passaggio precedente.

(Invoke-WebRequest -Method GET `
    -Headers @{"content-type"="application/json"} `
    -URI "https://$Env:ENDPOINTS_HOST/").Content

Nell'esempio precedente, le prime due righe terminano con un backtick. Quando incolli l'esempio in PowerShell, assicurati che non ci sia uno spazio dopo i backtick. Per informazioni sulle opzioni utilizzate nella richiesta di esempio, consulta Invoke-WebRequest nella documentazione di Microsoft.

App di terze parti

Puoi utilizzare un'applicazione di terze parti, ad esempio l'estensione del browser Chrome Postman.

  • Seleziona GET come verbo HTTP.
  • Per l'intestazione, seleziona la chiave content-type e il valore application/json.
  • Utilizza l'URL effettivo anziché la variabile di ambiente, ad esempio:

    https://gateway-12345-uc.a.run.app/
    

Se non hai ricevuto una risposta positiva, consulta la sezione Risoluzione dei problemi relativi alle risposte.

Hai eseguito il deployment e il test di un'API in Endpoints.

monitora l'attività dell'API

  1. Visualizza i grafici delle attività della tua API nella pagina Endpoints > Servizio nella console Google Cloud.

    Visualizzare i grafici delle attività di Endpoints

    La visualizzazione dei dati relativi alla richiesta nei grafici può richiedere alcuni minuti.

  2. Esamina i log delle richieste per la tua API nella pagina Esplora log.

    Visualizzare i log delle richieste di Endpoints

Creazione di un portale per gli sviluppatori per l'API

Puoi utilizzare il portale Cloud Endpoints per creare un portale per gli sviluppatori, un sito web che puoi utilizzare per interagire con l'API di esempio. Per saperne di più, consulta la panoramica del portale Cloud Endpoints.

Esegui la pulizia

Per evitare che al tuo account Google Cloud vengano addebitati costi relativi alle risorse utilizzate in questa pagina, segui questi passaggi.

Consulta la sezione Eliminare un'API e le relative istanze per informazioni su come interrompere i servizi utilizzati da questo tutorial.

Passaggi successivi