Configura OpenAPI di Cloud Endpoints per Cloud Run con ESPv2
Questa pagina mostra come configurare Cloud Endpoints per Cloud Run. Endpoints utilizza Extensible Service Proxy V2 (ESPv2) come gateway API. Per fornire la gestione delle API per Cloud Run, esegui il deployment del modello il container ESPv2 in Cloud Run. Poi proteggi i tuoi servizi utilizzando Cloud Run IAM in modo che ESPv2 possa invocarli.
Con questa configurazione, ESPv2 intercetta tutte le richieste ai tuoi servizi ed esegue controlli necessari (come l'autenticazione) prima di richiamare il servizio. Quando il servizio risponde, ESPv2 raccoglie e segnala la telemetria, come mostrato nella figura seguente. Puoi visualizzare le metriche per il tuo servizio nella sezione Endpoint > Pagina Servizi nella console Google Cloud.
Per una panoramica di Cloud Endpoints, consulta Informazioni sugli endpoint e l'architettura degli endpoint.
Migrazione a ESPv2
Le versioni precedenti di Cloud Endpoints supportavano l'utilizzo di Extensible Service Proxy (ESP) con Cloud Run. Se hai delle API esistenti di cui vuoi eseguire la migrazione a ESPv2, Per ulteriori informazioni, consulta Eseguire la migrazione a Extensible Service Proxy V2.
Elenco attività
Durante il tutorial, utilizza il seguente elenco di attività. Tutte per completare questo tutorial.
- Crea un progetto Google Cloud e, se non hai eseguito il deployment del tuo Cloud Run, esegui il deployment di un servizio di backend di esempio. Vedi Prima di iniziare.
- Prenota un nome host Cloud Run per il servizio ESPv2. Consulta Prenotare un nome host Cloud Run.
- Crea un Documento OpenAPI che descrive l'API e configurare le route in Cloud Run. Consulta Configurazione di Endpoints.
- Esegui il deployment del documento OpenAPI per creare un servizio gestito. Consulta Deployment della configurazione di Endpoints.
- crea una nuova immagine Docker ESPv2 con i tuoi endpoint la configurazione del servizio. Consulta Creazione di una nuova immagine ESPv2.
- Eseguire il deployment del container ESPv2 su Cloud Run. Quindi, concedi a ESPv2 l'autorizzazione IAM (Gestione di identità e accessi) per richiamare il servizio. Vedi Deployment del container ESPv2.
- Richiama un servizio. Consulta Invio di una richiesta all'API.
- Monitora l'attività relativa ai tuoi servizi. Consulta Monitoraggio dell'attività dell'API.
- 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 basata sull'utilizzo previsto,
utilizza il Calcolatore prezzi.
Una volta completate le attività descritte in questo documento, puoi evitare la fatturazione continua eliminando le risorse che hai creato. Per ulteriori informazioni, consulta la pagina Pulizia.
Prima di iniziare
Per eseguire la configurazione:
Nella console Google Cloud, vai alla pagina Gestisci risorse e crea un progetto.
Verifica che la fatturazione sia attivata per il tuo progetto.
Prendi nota dell'ID progetto perché sarà necessario in seguito. Per il resto questo ID progetto è noto come ESP_PROJECT_ID.
Prendi nota delle numero progetto perché è necessario più tardi. Nel resto della pagina, questo numero di progetto è denominata ESP_PROJECT_NUMBER.
Scarica e installa Google Cloud CLI.
Se non hai eseguito il deployment del tuo servizio di backend Cloud Run, segui la procedura descritta in Guida rapida: deployment di un container di esempio predefinito per selezionare o creare un progetto Google Cloud ed eseguire il deployment di di un backend cloud. Prendi nota della regione e dell'ID progetto in cui è eseguito il deployment del servizio. Nel resto della pagina, questo ID progetto è indicato come BACKEND_PROJECT_ID. Il nome del servizio di cui è stato eseguito il deployment è denominata BACKEND_SERVICE_NAME.
Prenotazione di un nome host Cloud Run
Devi prenotare un nome host Cloud Run per ESPv2 per poter configurare dalla configurazione del documento OpenAPI o del servizio gRPC. Per prenotare un nome host, dovrai eseguire il deployment di un container di esempio in Cloud Run. Successivamente, eseguirai il deployment del container ESPv2 sullo stesso servizio Cloud Run.
-
Assicurati che gcloud CLI sia autorizzato ad accedere ai tuoi dati
i servizi di machine learning.
- Accedi.
gcloud auth login
- Nella nuova scheda del browser che si apre, scegli un account con l'Editor. o Proprietario nel progetto Google Cloud per cui hai creato eseguendo il deployment di ESPv2 in Cloud Run.
- Accedi.
-
Imposta la regione.
gcloud config set run/region us-central1
-
Esegui il deployment dell'immagine di esempio
gcr.io/cloudrun/hello
in Cloud Run. Sostituisci CLOUD_RUN_SERVICE_NAME con il nome che vuoi usare per il servizio.gcloud run deploy CLOUD_RUN_SERVICE_NAME \ --image="gcr.io/cloudrun/hello" \ --allow-unauthenticated \ --platform managed \ --project=ESP_PROJECT_ID
Al completamento, il comando visualizza un messaggio simile al seguenti:
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
è l'elemento CLOUD_RUN_SERVICE_URL egateway-12345-uc.a.run.app
è CLOUD_RUN_HOSTNAME. - Prendi nota di CLOUD_RUN_SERVICE_NAME e CLOUD_RUN_HOSTNAME.
Successivamente, eseguirai il deployment di ESPv2 sul servizio Cloud Run CLOUD_RUN_SERVICE_NAME.
Specifica CLOUD_RUN_HOSTNAME nel campo
host
del documento OpenAPI.
Configurazione di Endpoints
Devi disporre di un documento OpenAPI basato su Specifica OpenAPI v2.0 che descrive superficie del tuo servizio di backend ed eventuali requisiti di autenticazione. Devi inoltre aggiungere specifico di Google che contiene l'URL di ciascun servizio, in modo che ESPv2 dispone delle informazioni necessarie per richiamare un servizio. Se non hanno mai utilizzato OpenAPI, consulta Panoramica di OpenAPI per ulteriori informazioni
-
Crea un file di testo denominato
openapi-run.yaml
. (Per questa pagina si riferisce al documento OpenAPI con quel nome file, ma puoi assegnare un altro nome, se preferisci. -
Il tuo servizio di backend Cloud Run è definito nella parte superiore della
openapi-run.yaml
file, in unx-google-backend
definizione di Kubernetes. Ad esempio: Il rientro è importante per il formato YAML. Ad esempio,swagger: '2.0' info: title: Cloud Endpoints + Cloud Run description: Sample API on Cloud Endpoints with a Cloud Run backend version: 1.0.0 host: CLOUD_RUN_HOSTNAME schemes: - https produces: - application/json x-google-backend: address: BACKEND_SERVICE_NAME protocol: h2 paths: /hello: get: summary: Greet a user operationId: hello responses: '200': description: A successful response schema: type: string
host
deve essere allo stesso livello diinfo
. Nel campo
address
nella sezionex-google-backend
sostituisci BACKEND_SERVICE_NAME con la sezione URL del tuo servizio Cloud Run di backend, creato nel passaggio 6 di Prima di iniziare.Questo esempio presuppone che tu stia utilizzando il backend
hello
creato in Guida rapida: Esegui il deployment di un container predefinito di esempio. Se utilizzi un servizio Cloud Run di backend diverso, sostituisci BACKEND_SERVICE_NAME con l'URL del tuo servizio Cloud Run.Nel campo
host
, specifica CLOUD_RUN_HOSTNAME, la parte del nome host dell'URL riservato sopra in Prenotare un nome host Cloud Run. Non includere l'identificatore di protocollo,https://
. Ad esempio:swagger: '2.0' info: title: Cloud Endpoints + Cloud Run description: Sample API on Cloud Endpoints with a Cloud Run backend version: 1.0.0 host: gateway-12345-uc.a.run.app
Prendi nota del valore della proprietà
title
nel fileopenapi-run.yaml
:title: Cloud Endpoints + Cloud Run
Il valore della proprietà
title
diventa il nome del servizio Endpoints dopo il deployment della configurazione.- Salva il documento OpenAPI.
Per informazioni sui campi nel documento OpenAPI che Per gli endpoint è necessario, consulta Configurazione di Endpoints.
esegui il deployment della configurazione di Endpoints
Per eseguire il deployment della configurazione di Endpoints, utilizza
gcloud endpoints services deploy
. Questo comando utilizza Service Management per creare un servizio gestito.
Per eseguire il deployment della configurazione di Endpoints:
- Assicurati di trovarti nella directory che contiene il documento OpenAPI.
Carica la configurazione e crea un servizio gestito.
gcloud endpoints services deploy openapi-run.yaml \ --project ESP_PROJECT_ID
Viene creato un nuovo servizio Endpoints con il nome che specificato nel campo
host
del fileopenapi-run.yaml
. Il servizio è configurato in base al tuo documento OpenAPI.Durante la creazione e la configurazione del servizio, Service Management visualizza informazioni sul terminale. Al termine del deployment, verrà visualizzato un messaggio simile a viene visualizzato quanto segue:
Service Configuration [CONFIG_ID] uploaded for service [CLOUD_RUN_HOSTNAME]
CONFIG_ID è la configurazione univoca del servizio Endpoints ID 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 una data seguito da un numero di revisione. Se esegui il deployment di
openapi-run.yaml
sempre nello stesso giorno, il numero di revisione viene incrementato nell'ID configurazione del servizio. Puoi visualizzare la configurazione del servizio cronologia deployment sugli Endpoint > Servizi nella console Google Cloud.Se ricevi un messaggio di errore, consulta Risoluzione dei problemi di deployment della configurazione di Endpoints.
Controllo dei servizi richiesti in corso...
Come minimo, Endpoints ed ESP richiedono l'attivazione dei seguenti servizi Google:Nome | Titolo |
---|---|
servicemanagement.googleapis.com |
API Service Management |
servicecontrol.googleapis.com |
API Service Control |
endpoints.googleapis.com |
Google Cloud Endpoints |
Nella maggior parte dei casi, il comando gcloud endpoints services deploy
abilita questi
servizi richiesti. Tuttavia, il comando gcloud
viene completato correttamente,
non abilita i servizi richiesti nelle seguenti circostanze:
Se hai utilizzato un'applicazione di terze parti, come Terraform, includono questi servizi.
Hai eseguito il deployment della configurazione di Endpoints in una Progetto Google Cloud in cui questi servizi sono stati disattivati esplicitamente.
Utilizza il comando seguente per confermare che i servizi richiesti siano abilitati:
gcloud services list
Se non vedi i servizi richiesti nell'elenco, attivali:
gcloud services enable servicemanagement.googleapis.comgcloud services enable servicecontrol.googleapis.com
gcloud services enable endpoints.googleapis.com
Abilita anche il servizio Endpoints:
gcloud services enable ENDPOINTS_SERVICE_NAME
Per determinare il 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 è visualizzato nella colonna Nome servizio.
Per OpenAPI, ENDPOINTS_SERVICE_NAME è quello che hai specificato nel campo
host
della specifica OpenAPI. Per gRPC, il valore ENDPOINTS_SERVICE_NAME è quello specificato nel camponame
della configurazione degli endpoint gRPC.
Per ulteriori informazioni sui comandi gcloud
, consulta
gcloud
servizi.
Creazione di una nuova immagine ESPv2
Crea la configurazione del servizio Endpoints in un nuovo ESPv2 Docker. Successivamente eseguirai il deployment di questa immagine dal servizio Cloud Run.
Per creare la configurazione del servizio in una nuova immagine Docker ESPv2:
Scarica questo script sulla tua macchina locale su cui è installata l'interfaccia a riga di comando gcloud.
Esegui lo script con questo 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 che hai prenotato sopra in Prenotare 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
-
Lo script utilizza il comando
gcloud
per scaricare la configurazione del servizio, creare in una nuova immagine ESPv2 e poi caricare la nuova immagine al Container Registry del tuo 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
Esegui il deployment del servizio Cloud Run ESPv2 con la nuova immagine creata sopra. Sostituisci CLOUD_RUN_SERVICE_NAME con lo stesso nome servizio Cloud Run utilizzato quando hai prenotato inizialmente il nome host riportato 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
Se vuoi configurare gli endpoint in modo da utilizzare Le opzioni di avvio di ESPv2, come 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
, tra cui l'elenco delle opzioni disponibili e informazioni su come specificare più opzioni, consulta i Flag di Extensible Service Proxy V2.Concedi a ESPv2 l'autorizzazione a chiamare Service Management e Service Control.
- Nella console Google Cloud, vai alla pagina Cloud Run.
- Puoi vedere l'istanza Cloud Run di cui hai eseguito il deployment e l'account di servizio associato.
- Concedi le autorizzazioni richieste all'account di servizio:
- Concedi a ESPv2 l'autorizzazione per richiamare i tuoi servizi Cloud Run. Corsa
il comando seguente per ogni servizio. Nel seguente comando:
- Sostituisci BACKEND_SERVICE_NAME con il nome del
È in corso il richiamo del servizio Cloud Run. Se utilizzi il servizio di backend creato nella
guida rapida Eseguire il deployment di un container di esempio predefinito,
utilizza
hello
come valore. - Sostituisci ESP_PROJECT_NUMBER con number del progetto per cui hai creato ESPv2. Per scoprirlo, puoi andare all' IAM nella console Google Cloud e trova Account di servizio Compute predefinito, ovvero l'account di servizio utilizzato in il flag "member".
gcloud run services add-iam-policy-binding BACKEND_SERVICE_NAME \ --member "serviceAccount:ESP_PROJECT_NUMBER-compute@developer.gserviceaccount.com" \ --role "roles/run.invoker" \ --platform managed \ --project BACKEND_PROJECT_ID
- Sostituisci BACKEND_SERVICE_NAME con il nome del
È in corso il richiamo del servizio Cloud Run. Se utilizzi il servizio di backend creato nella
guida rapida Eseguire il deployment di un container di esempio predefinito,
utilizza
gcloud projects add-iam-policy-binding PROJECT_NAME \ --member "serviceAccount:SERVICE_ACCOUNT" \ --role roles/servicemanagement.serviceController
Per ulteriori informazioni, vedi Gestione dell'accesso tramite IAM.
invia richieste all'API
Questa sezione mostra come inviare richieste all'API.
- Crea una variabile di ambiente per il servizio Endpoints
nome. 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 tramite l'ambiente ENDPOINTS_HOST
impostata nel passaggio precedente.
curl --request GET \ --header "content-type:application/json" \ "https://${ENDPOINTS_HOST}/hello"
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/hello").Content
Nell'esempio precedente, le prime due righe terminano con un accento grave. Quando incolli in PowerShell, assicuratevi che non ci sia uno spazio dopo i accenti arretrati. Per informazioni sulle opzioni utilizzate nella richiesta di esempio, vedi Invoke-WebRequest nel documentazione.
App di terze parti
Puoi utilizzare un'applicazione di terze parti come il browser Chrome estensione Postino richiesta.
- Seleziona
GET
come verbo HTTP. - Per l'intestazione, seleziona la chiave
content-type
e il valoreapplication/json
. Utilizza l'URL effettivo anziché la variabile di ambiente, ad esempio:
https://gateway-12345-uc.a.run.app/hello
Se non hai ricevuto una risposta positiva, consulta Risoluzione dei problemi relativi agli errori di risposta.
Hai eseguito il deployment e il test di un'API in Endpoints.
monitora l'attività dell'API
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.
Controlla i log delle richieste per l'API nella pagina Esplora log. Visualizza i log delle richieste di Endpoints
Creazione di un portale per gli sviluppatori per l'API
Puoi usare il portale Cloud Endpoints per creare un portale per 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 per le 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.