Testare un servizio Cloud Run localmente

Durante lo sviluppo, puoi eseguire e testare la tua immagine container localmente, prima del deployment. Puoi utilizzare Cloud Code o Docker installato localmente per eseguire e testare localmente, inclusa l'esecuzione locale con accesso ai servizi Google Cloud .

Prima di iniziare

Se è la prima volta che provi a eseguire l'esecuzione in locale, potresti non disporre di tutte le autorizzazioni necessarie per accedere all'immagine dal registro dei container supportato che stai utilizzando.

Consulta la documentazione del registro dei container supportato per scoprire come ottenere l'accesso. Puoi configurare Docker per accedere ad Artifact Registry utilizzando l'assistente per le credenziali gcloud CLI:

gcloud auth configure-docker LOCATION-docker.pkg.dev
Sostituisci LOCATION con il nome della regione del repository del contenitore, ad esempio us-west2.

Testare localmente

Puoi eseguire test in locale utilizzando Docker, Docker con Google Cloud Access, l'emulatore Cloud Code o Google Cloud CLI. Seleziona la scheda appropriata per le istruzioni.

Docker

Per testare l'immagine container localmente utilizzando Docker:

  1. Utilizza il comando Docker:

    PORT=8080 && docker run -p 9090:${PORT} -e PORT=${PORT} IMAGE_URL

    Sostituisci IMAGE_URL con un riferimento all'immagine container, ad esempio us-docker.pkg.dev/cloudrun/container/hello:latest. Se utilizzi Artifact Registry, il repository REPO_NAME deve essere già stato creato. L'URL segue il formato LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG .

    La variabile di ambiente PORT specifica la porta che la tua applicazione utilizzerà per ascoltare le richieste HTTP o HTTPS. Questo è un requisito del contratto runtime container. In questo esempio, utilizziamo la porta 8080.

  2. Apri http://localhost:9090 nel browser.

Se non hai mai lavorato con i container, ti consigliamo di consultare la guida Guida introduttiva a Docker. Per saperne di più sui comandi Docker, consulta la documentazione di Docker.

Docker con accesso a Google Cloud

Se utilizzi le librerie client Google Cloud per integrare la tua applicazione con i servizi Google Cloud e non hai ancora protetto questi servizi per controllare l'accesso esterno, puoi configurare il tuo container locale per l'autenticazione con i servizi Google Cloud utilizzando le credenziali predefinite dell'applicazione.

Per eseguire localmente:

  1. Consulta le istruzioni per configurare una chiave dell'account di servizio.

  2. I seguenti flag di esecuzione di Docker inseriscono le credenziali e la configurazione dal sistema locale nel container locale:

    1. Utilizza il flag --volume (-v) per inserire il file delle credenziali nel container (presuppone che tu abbia già impostato la variabile di ambiente GOOGLE_APPLICATION_CREDENTIALS sulla tua macchina):
      -v $GOOGLE_APPLICATION_CREDENTIALS:/tmp/keys/FILE_NAME.json:ro
    2. Utilizza il flag --environment (-e) per impostare la variabile GOOGLE_APPLICATION_CREDENTIALS all'interno del container:
      -e GOOGLE_APPLICATION_CREDENTIALS=/tmp/keys/FILE_NAME.json
  3. (Facoltativo) Utilizza questo comando Docker run completamente configurato:

    PORT=8080 && docker run \
    -p 9090:${PORT} \
    -e PORT=${PORT} \
    -e K_SERVICE=dev \
    -e K_CONFIGURATION=dev \
    -e K_REVISION=dev-00001 \
    -e GOOGLE_APPLICATION_CREDENTIALS=/tmp/keys/FILE_NAME.json \
    -v $GOOGLE_APPLICATION_CREDENTIALS:/tmp/keys/FILE_NAME.json:ro \
    IMAGE_URL

    Tieni presente che il percorso

    /tmp/keys/FILE_NAME.json
    mostrato nell'esempio precedente è una posizione ragionevole in cui inserire le credenziali all'interno del container.

    Tuttavia, funzioneranno anche altre posizioni di directory. Il requisito fondamentale è che la variabile di ambiente GOOGLE_APPLICATION_CREDENTIALS deve corrispondere alla posizione di montaggio bind all'interno del container.

    Tieni presente inoltre che con alcuni Google Cloud servizi potresti voler utilizzare una configurazione alternativa per isolare la risoluzione dei problemi locali dalle prestazioni e dai dati di produzione.

Emulatore Cloud Code

Il plug-in Cloud Code per VS Code e gli IDE JetBrains ti consente di eseguire ed eseguire il debug localmente dell'immagine container in un emulatore Cloud Run all'interno dell'IDE. L'emulatore ti consente di configurare un ambiente rappresentativo del tuo servizio in esecuzione su Cloud Run.

Puoi configurare proprietà come l'allocazione di CPU e memoria, specificare variabili di ambiente e impostare connessioni al database Cloud SQL.

  1. Installa Cloud Code per VS Code o un IDE JetBrains.
  2. Segui le istruzioni per lo sviluppo e il debug locali all'interno dell'IDE.
  3. VS Code: sviluppo e debug locali
  4. IntelliJ: sviluppo e debug locali

Interfaccia a riga di comando gcloud

Google Cloud CLI contiene un ambiente di sviluppo locale per emulare Cloud Run in grado di creare un container dall'origine, eseguire il container sulla macchina locale e ricompilare automaticamente il container in caso di modifiche al codice sorgente.

Per avviare l'ambiente di sviluppo locale:

  1. Passa alla directory contenente il codice sorgente del servizio.

  2. Richiama il comando:

    gcloud beta code dev
    Se nella directory locale è presente un Dockerfile, questo viene utilizzato per creare il container. Se non è presente alcun Dockerfile, il container viene creato con i buildpack di Google Cloud.

Per vedere il servizio in esecuzione, visita http://localhost:8080/ nel browser. Se hai specificato una porta personalizzata con l'opzione --local-port, ricordati di aprire il browser su quella porta.

Per arrestare il server locale:

  • Mac OS e Linux: Control-C
  • Windows: Control-Break

Personalizzare la configurazione del servizio

Puoi personalizzare la configurazione di Cloud Run del servizio in esecuzione localmente utilizzando un file YAML. Il formato YAML è lo stesso che può essere utilizzato per il deployment di un servizio Cloud Run, ma supporta solo un sottoinsieme delle impostazioni del servizio Cloud Run. gcloud beta code dev cerca e utilizza qualsiasi file che termina con *.service.dev.yaml nella directory attuale. Se non ne viene trovato nessuno, verrà utilizzato qualsiasi file che termina con *.service.yaml.

Puoi configurare le seguenti impostazioni per lo sviluppo locale:

Il campo container image non è obbligatorio per lo sviluppo locale, perché l'immagine viene creata e fornita al servizio quando viene eseguito il comando.

Puoi utilizzare il seguente file service.dev.yaml di esempio per lo sviluppo locale:

  apiVersion: serving.knative.dev/v1
  kind: Service
  metadata:
    name: my-service-name
  spec:
    template:
      spec:
        containers:
        - env:
          - name: FOO
            value: bar

Testare utilizzando le credenziali

Per concedere l'autorizzazione al contenitore di utilizzare i servizi Google Cloud , devi fornire al contenitore una credenziale di accesso.

  • Per concedere al container l'accesso a una credenziale utilizzando il tuo account, accedi utilizzando gcloud e usa il flag --application-default-credential:

    gcloud auth application-default login
    gcloud beta code dev --dockerfile=PATH_TO_DOCKERFILE --application-default-credential

  • Per fornire le credenziali dell'applicazione come account di servizio, utilizza il flag --service-account:

    gcloud beta code dev --dockerfile=PATH_TO_DOCKERFILE --service-account=SERVICE_ACCOUNT_EMAIL

Conferma che il codice sia in esecuzione localmente

Quando esegui test localmente su Cloud Run, puoi verificare nel codice che il container è in esecuzione localmente controllando la variabile di ambiente K_REVISION, che Cloud Run rende disponibile a tutti i container.

Docker

Per verificare che il codice venga eseguito localmente su Google Cloud CLI, puoi tentare di eseguire una query sulla variabile di ambiente K_REVISION, ma poiché non è stata impostata, non sarà presente alcun valore.

Docker con accesso a Google Cloud

Se hai utilizzato i valori esatti della sezione precedente nel passaggio 3 per verificare di eseguire il codice localmente su Google Cloud CLI, puoi eseguire una query sulla variabile di ambiente K_REVISION e cercare il valore dev-00001 per verificare che sia in esecuzione localmente.

Emulatore Cloud Code

Per verificare che il codice venga eseguito localmente su Cloud Code, puoi interrogare la variabile di ambiente K_REVISION e cercare un valore di local per confermare che viene eseguito localmente.

Interfaccia a riga di comando gcloud

Per verificare che il codice venga eseguito localmente su Google Cloud CLI, puoi interrogare la variabile di ambiente K_REVISION e cercare un valore che inizi con dev- per verificare che venga eseguito localmente.

Passaggi successivi