Creazione di deployment multiregionali per API Gateway

Questo tutorial mostra come configurare un bilanciatore del carico HTTP(S) per abilitare i deployment multiregionali per API Gateway.

La creazione di un bilanciatore del carico HTTP(S) per supportare deployment in più regioni di API Gateway può migliorare la disponibilità e ridurre la latenza del servizio in quanto gestisce da più regioni. Puoi ridurre ulteriormente la latenza e massimizzare l'uptime con il routing tra regioni, che serve le richieste dalla regione disponibile più vicina al tuo utente.

Ai fini di questo tutorial, configurerai un unico schema URL non a livello di regione che funzioni in qualsiasi parte del mondo, ma che gestisca le richieste degli utenti dal deployment di API Gateway più vicino. Con questa configurazione, idealmente le richieste vengono instradate alla regione che fornisce una latenza minima all'utente. Nel caso in cui la regione più vicina non sia disponibile o superi la capacità, la richiesta viene instradata a un'altra regione per garantire la disponibilità.

Prima di iniziare

Prima di configurare il deployment per più regioni, segui la guida rapida di API Gateway per eseguire il deployment di un servizio Cloud Run e creare un gateway che punti a quel servizio.

Per questo tutorial, esegui il deployment del servizio in due regioni diverse. Ad esempio, puoi eseguire il deployment di due istanze API Gateway:

  • my-gateway-eu in una regione in Europa
  • my-gateway-us in una regione degli Stati Uniti

Configura le autorizzazioni

In questo tutorial, creerai un gruppo di endpoint di rete (NEG) serverless e un bilanciatore del carico HTTP(S) esterno in un progetto Cloud. Ciò richiede un ruolo di proprietario o editor del progetto oppure i seguenti ruoli IAM di Compute Engine:

Attività Ruolo richiesto
Crea il bilanciatore del carico e i componenti di networking Amministratore rete
Creare e modificare NEG Amministratore istanze Compute
Creare e modificare i certificati SSL Amministratore sicurezza

Creazione di una risorsa del certificato SSL

Per creare un bilanciatore del carico HTTPS, è necessario aggiungere una risorsa del certificato SSL al front-end del bilanciatore del carico. Crea una risorsa del certificato SSL utilizzando un certificato SSL gestito da Google o un certificato SSL autogestito.

  • Certificati gestiti da Google. È consigliabile utilizzare certificati gestiti da Google perché Google Cloud li ottiene, gestisce e rinnova automaticamente. Per creare un certificato gestito da Google, devi avere un dominio e i relativi record DNS per eseguire il provisioning del certificato. Se non hai ancora un dominio, puoi ottenerne uno da Google Domains. Inoltre, dovrai aggiornare il record A DNS del dominio in modo che punti all'indirizzo IP del bilanciatore del carico creato in un passaggio successivo. Per istruzioni dettagliate, consulta l'articolo sull'utilizzo dei certificati gestiti da Google.

  • Certificati autofirmati. Se al momento non vuoi configurare un dominio, puoi utilizzare un certificato SSL autofirmato per i test.

Questo tutorial presuppone che tu abbia già creato una risorsa del certificato SSL.

Se vuoi testare questo processo senza creare una risorsa del certificato SSL (o un dominio come richiesto dai certificati gestiti da Google), puoi comunque utilizzare le istruzioni in questa pagina per configurare un bilanciatore del carico HTTP.

Crea il bilanciatore del carico HTTP(S)

  1. Creare un NEG serverless per ogni istanza del gateway API.

    Un gruppo di endpoint di rete (NEG) specifica un gruppo di endpoint di backend per un bilanciatore del carico. Un NEG serverless è un backend che punta a un servizio come API Gateway, come mostrato nella figura seguente:

    diagramma del backend neg as serverless per i gateway multiregionali

    Per creare un NEG serverless per ogni istanza del gateway, esegui questo comando, dove:

    • SERVERLESS_NEG_NAME è il nome del NEG serverless da creare.
    • GATEWAY_ID specifica il nome del gateway.
    • REGION_ID è la regione di deployment per il NEG serverless (deve corrispondere alla regione del gateway).
    gcloud beta compute network-endpoint-groups create SERVERLESS_NEG_NAME \
      --region=REGION_ID \
      --network-endpoint-type=serverless \
      --serverless-deployment-platform=apigateway.googleapis.com \
      --serverless-deployment-resource=GATEWAY_ID

    Ad esempio:

    gcloud beta compute network-endpoint-groups create api-gateway-serverless-neg-eu \
      --region=europe-west1 \
      --network-endpoint-type=serverless \
      --serverless-deployment-platform=apigateway.googleapis.com \
      --serverless-deployment-resource=my-gateway-eu

    Ripeti questo comando per creare un NEG serverless per l'istanza del gateway successiva, utilizzando i valori appropriati per la seconda istanza del gateway, ad esempio api-gateway-serverless-neg-us per my-gateway-us nella regione us-central1.

  2. Crea un servizio di backend per definire in che modo Cloud Load Balancing distribuisce il traffico.

    La configurazione del servizio di backend contiene un insieme di valori, come il protocollo utilizzato per connettersi ai backend, varie impostazioni di distribuzione e sessioni, controlli di integrità e timeout, come mostrato nella figura seguente:

    diagramma del neg as backend serverless per un servizio di backend con più deployment

    Per creare un servizio di backend e aggiungere il NEG serverless come backend al servizio di backend, esegui questi comandi, dove:

    • BACKEND_SERVICE_NAME è il nome del tuo servizio di backend.
    • SERVERLESS_NEG_NAME è il nome del NEG serverless creato nel passaggio precedente.
    • REGION_ID è la regione di deployment per il NEG serverless (deve corrispondere alla regione del gateway).
    gcloud compute backend-services create BACKEND_SERVICE_NAME \
      --global \ 
    gcloud compute backend-services add-backend BACKEND_SERVICE_NAME \
      --global \
      --network-endpoint-group=SERVERLESS_NEG_NAME \
      --network-endpoint-group-region=REGION_ID

    Ad esempio:

    gcloud compute backend-services add-backend api-gateway-backend-service \
      --global \
      --network-endpoint-group=api-gateway-serverless-neg-eu \
      --network-endpoint-group-region=europe-west1

    Ripeti questo comando per aggiungere il secondo NEG serverless al servizio di backend, utilizzando i valori appropriati per il secondo NEG serverless, ad esempio api-gateway-serverless-neg-us per my-gateway-us nella regione us-central1.

  3. Crea una mappa URL per instradare le richieste in entrata al servizio di backend, come illustrato nella figura seguente:

    diagramma della mappa di URL al servizio di backend con più deployment

    Per creare la mappa URL, esegui questo comando, dove:

    • URL_MAP_NAME è il nome della mappa URL da creare.
    • BACKEND_SERVICE_NAME è il nome del tuo servizio di backend.
    gcloud compute url-maps create URL_MAP_NAME \
      --default-service BACKEND_SERVICE_NAME

    Ad esempio:

    gcloud compute url-maps create api-gateway-url-map \
      --default-service api-gateway-backend-service

    Questa mappa URL di esempio ha come target un solo servizio di backend che rappresenta un singolo gateway, quindi le regole host o i matcher percorso non sono obbligatori. Se hai più di un servizio di backend, puoi utilizzare le regole dell'host per indirizzare le richieste a servizi diversi in base al nome host. Utilizza i matcher percorso per indirizzare le richieste a servizi diversi in base al percorso della richiesta.

    Ad esempio:

    gcloud compute url-maps add-path-matcher api-gateway-url-map \
      --path-matcher-name=my-pm2  \
      --default-service=my-host-default-backend \
      --path-rules="/video=video-service,/video/*=video-service" \
      --new-hosts my-hosts.com
    gcloud compute url-maps add-host-rule api-gateway-url-map \
      --hosts=my-app-domain \
      --path-matcher-name=my-app-path-matcher

    Per saperne di più sulle regole host e sui matcher percorso, consulta la documentazione sulla mappa URL.

  4. Crea un certificato SSL per il proxy di destinazione, come mostrato nella figura seguente:

    diagramma del certificato SSL per il proxy di destinazione con più deployment

    Per creare un bilanciatore del carico HTTPS, è necessaria una risorsa del certificato SSL per il proxy di destinazione HTTPS. Puoi creare una risorsa del certificato SSL utilizzando un certificato SSL gestito da Google o un certificato SSL autogestito. È consigliabile utilizzare certificati gestiti da Google.

    Per creare un certificato gestito da Google, devi avere un dominio. Se non hai un dominio, puoi utilizzare un certificato SSL autofirmato per i test.

    Per creare una risorsa del certificato SSL gestita da Google:

    gcloud compute ssl-certificates create SSL_CERTIFICATE_NAME
      --domains DOMAIN

    Per creare una risorsa del certificato SSL autogestito:

    gcloud compute ssl-certificates create SSL_CERTIFICATE_NAME \
      --certificate CRT_FILE_PATH \
      --private-key KEY_FILE_PATH
  5. Crea un proxy HTTP(S) di destinazione per instradare le richieste alla tua mappa URL, come mostrato nella figura seguente:

    diagramma della mappa del proxy http all'URL

    Per creare il proxy di destinazione, utilizza il comando seguente, dove:

    • TARGET_HTTP_PROXY_NAME è il nome del proxy di destinazione da creare.
    • URL_MAP_NAME è il nome della mappa URL creata in un passaggio precedente.
    • Facoltativo: SSL_CERT_NAME è il nome del certificato SSL creato.
    gcloud compute target-http-proxies create TARGET_HTTP_PROXY_NAME \
      --ssl-certificates=SSL_CERT_NAME
      --url-map=URL_MAP_NAME

    Ad esempio:

    gcloud compute target-http-proxies create api-gateway-https-proxy \
      --ssl-certificates=hello-cert
      --url-map=api-gateway-url-map
  6. Crea una regola di forwarding per instradare le richieste in entrata al proxy, come mostrato nella figura seguente:

    diagramma della regola di forwarding per proxy http

    Utilizza il seguente comando per creare la regola di forwarding, in cui:

    • HTTPS_FORWARDING_RULE_NAME è il nome della regola da creare.
    • TARGET_HTTP_PROXY_NAME è il nome del proxy di destinazione da creare.
    gcloud compute forwarding-rules create HTTPS_FORWARDING_RULE_NAME \
      --target-https-proxy=TARGET_HTTPS_PROXY_NAME \
      --global \
      --ports=443

    Ad esempio:

    gcloud compute forwarding-rules create my-fw \
      --target-https-proxy=api-gateway-https-proxy \
      --global \
      --ports=443

Aggiorna i record DNS con l'indirizzo IP del bilanciatore del carico

Se hai un dominio personalizzato, questo passaggio è necessario per configurare le impostazioni DNS del dominio in modo che rimandino al nuovo indirizzo IP del servizio. Inoltre, è necessario se hai creato un bilanciatore del carico HTTP(S) con un certificato gestito da Google (che richiede un dominio). Si consiglia di allocare e utilizzare un indirizzo IP statico se utilizzato con il DNS. Le istruzioni specifiche per questo passaggio dipendono dal tuo provider DNS.

  1. Per inviare traffico al bilanciatore del carico, il record DNS del tuo dominio (in questo tutorial, my-app-domain) deve puntare agli indirizzi IP del bilanciatore del carico.

    Per trovare l'indirizzo IP della regola di forwarding globale, utilizza questo comando:

    gcloud compute forwarding-rules list
  2. Aggiorna il record DNS A o AAAA del tuo dominio in modo che punti all'indirizzo IP del bilanciatore del carico, in modo che il traffico inviato all'URL del dominio personalizzato esistente venga instradato tramite il bilanciatore del carico. La propagazione della modifica al server DNS può richiedere pochi secondi o diverse ore.

  3. Esegui una verifica per verificare che il gateway riceva traffico utilizzando curl o visitando l'URL nel browser. Ad esempio: https://my-app-domain

    Dopo il test, dovresti vedere la risposta generata dal servizio Cloud Run. Potrebbe trattarsi, ad esempio, di una pagina HTML "Hello World" o di un'altra risposta prevista generata direttamente dal servizio di backend. Questo significa che la richiesta passa attraverso il bilanciatore del carico e il servizio di backend sta indicando al bilanciatore del carico di inviarla al gateway.

Considerazioni

Prima di implementare un deployment in più regioni di API Gateway, considera quanto segue:

  1. API Gateway attualmente non supporta i controlli di integrità. Con la configurazione del routing tra regioni descritta sopra, se il gateway o il relativo servizio di backend restituisce errori in una regione, ma l'infrastruttura generale del gateway API nella regione è disponibile e ha capacità sufficiente, il bilanciatore del carico HTTP(S) non indirizzerà il traffico ad altre regioni.

  2. La combinazione di regioni diverse in un'unica regola di forwarding richiede i prezzi del livello Premium. Per ulteriori informazioni sul calcolo dei prezzi e dell'utilizzo, consulta la sezione Prezzi di Network Service Tiers.

best practice

Quando utilizzi la gestione di più regioni, ti consigliamo di utilizzare una soluzione di archiviazione dei dati gestita replicata a livello globale come Cloud Spanner per garantire che tutti i dati vengano gestiti a livello globale.