Testa un servizio Cloud Run in locale

Durante lo sviluppo, puoi eseguire e testare l'immagine container in locale prima del deployment. Puoi utilizzare Cloud Code o Docker installato in locale per l'esecuzione e i test locali, inclusa l'esecuzione in 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 Container Registry supportato che stai utilizzando.

Per informazioni su come ottenere l'accesso, consulta la documentazione supportata di Container Registry. Puoi configurare Docker per ottenere l'accesso ad Artifact Registry utilizzando l'helper delle credenziali dell'interfaccia a riga di comando gcloud.

gcloud auth configure-docker LOCATION-docker.pkg.dev
.

Esegui test in locale

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

Docker

Per testare l'immagine container in locale con 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à creato. L'URL ha la forma LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG.

    La variabile di ambiente PORT specifica la porta utilizzata dall'applicazione per ascoltare le richieste HTTP o HTTPS. Questo è un requisito del contratto di runtime di Container. In questo esempio viene utilizzata la porta 8080.

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

Se non hai mai utilizzato i container, ti consigliamo di consultare la guida introduttiva di Docker. Per scoprire di più sui comandi Docker, consulta la documentazione di Docker.

Docker con accesso a Google Cloud

Se utilizzi librerie client di 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 container locale per l'autenticazione con i servizi Google Cloud utilizzando le credenziali predefinite dell'applicazione.

Per l'esecuzione in locale:

  1. Consulta la Guida introduttiva all'autenticazione per istruzioni su come generare, recuperare e configurare le credenziali dell'account di servizio.

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

    1. Usa il flag --volume (-v) per inserire il file delle credenziali nel container (supponendo che tu abbia già impostato la variabile di ambiente GOOGLE_APPLICATION_CREDENTIALS sulla 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. Facoltativamente, 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 riportato sopra è una posizione ragionevole per posizionare le credenziali all'interno del container.

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

    Inoltre, con alcuni servizi Google Cloud potrebbe essere opportuno 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 gli IDE VS Code e JetBrains consente di eseguire in locale ed eseguire il debug dell'immagine container in un emulatore Cloud Run all'interno dell'IDE. L'emulatore consente di configurare un ambiente rappresentativo del 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 localmente all'interno del tuo IDE.
  3. Codice VS: sviluppo e debug a livello locale
  4. IntelliJ: sviluppo e debug a livello locale

Interfaccia a riga di comando gcloud

Google Cloud CLI contiene un ambiente di sviluppo locale per l'emulazione di Cloud Run che può creare un container dall'origine, eseguire il container sulla macchina locale e ricreare automaticamente il container in base alle modifiche al codice sorgente.

Per avviare l'ambiente di sviluppo locale:

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

  2. Richiama il comando:

    gcloud beta code dev

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

Per verificare che il tuo servizio sia in esecuzione, visita la pagina http://localhost:8080/ nel tuo browser. Se hai specificato una porta personalizzata con l'opzione --local-port, ricordati di aprire il browser per quella porta.

Per arrestare il server locale:

  • Mac OS e Linux: Ctrl-C
  • Windows: Ctrl-Interruzione

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 eseguire 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 tutti i file che terminano con *.service.dev.yaml nella directory corrente. 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 del 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

Esegui test utilizzando credenziali

Per autorizzare il container a utilizzare i servizi Google Cloud, devi concedere al container una credenziale di accesso.

  • Per concedere al container l'accesso a una credenziale utilizzando il tuo account, accedi con 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 assegnare 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

    Il flag --service-account causa il download di una chiave dell'account di servizio e la memorizzazione nella cache locale. L'utente ha la responsabilità di proteggere la chiave e di eliminarla quando non è più necessaria.

Verifica che il codice sia in esecuzione in locale

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

Docker

Per verificare che l'esecuzione del codice venga eseguita 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 confermare 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 confermare che sia in esecuzione localmente.

emulatore Cloud Code

Per confermare che esegui il codice in locale su Cloud Code, puoi eseguire una query sulla variabile di ambiente K_REVISION e cercare il valore local per confermare che sia in esecuzione in locale.

Interfaccia a riga di comando gcloud

Per verificare che il codice venga eseguito localmente su Google Cloud CLI, puoi eseguire una query sulla variabile di ambiente K_REVISION e cercare un valore che inizi con dev- per confermare che sia in esecuzione localmente.

Passaggi successivi