Testare un servizio Cloud Run localmente

Durante lo sviluppo, puoi eseguire e testare l'immagine container in locale, prima al 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 un'esecuzione in locale, potresti non avere 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 il Assistente per le credenziali dell'interfaccia a riga di comando gcloud

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

Esegui test in locale

Puoi eseguire il test in locale utilizzando Docker, Docker con accesso a Google Cloud, 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, per 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 ha la forma LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG di Google.

    La variabile di ambiente PORT specifica la porta che verrà utilizzata dall'applicazione per ascoltare le richieste HTTP o HTTPS. Questo è un requisito del contratto relativo al runtime del contenitore. Nella in questo esempio usiamo la porta 8080.

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

Se non hai mai utilizzato i container, ti consigliamo di esaminare le Guida introduttiva di Docker. Per apprendere per saperne di più sui comandi Docker, consulta Documentazione Docker.

Docker con accesso a Google Cloud

Se utilizzi le 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 contenitore locale in modo che si autentichi con i servizi Google Cloud utilizzando le credenziali predefinite dell'applicazione.

Per eseguire l'app localmente:

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

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

    1. Utilizza 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 sul tuo computer):
      -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. Se vuoi, utilizza questo comando run Docker 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

    Nota che il percorso

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

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

    Inoltre, con alcuni servizi Google Cloud potresti voler utilizzare un'istanza per isolare la risoluzione dei problemi locali dalle prestazioni di produzione e dati.

Emulatore Cloud Code

Il plug-in Cloud Code per VS Code e gli IDE JetBrains consente di eseguire ed eseguire il debug dell'immagine del contenitore in locale 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 le variabili di ambiente e impostare Cloud SQL e connessioni ai database.

  1. Installa Cloud Code per VS Code o un IDE JetBrains.
  2. Segui le istruzioni per lo sviluppo e il debug locale all'interno dell'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 in Cloud Run in grado di creare un container dall'origine, esegue il container sulla macchina locale e ricrea automaticamente il container all'origine modifiche al codice.

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 un Dockerfile è presente nella directory locale, viene utilizzato per creare nel container. Se non è presente alcun Dockerfile, il container viene compilato 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 su 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 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 un sottoinsieme delle impostazioni del servizio Cloud Run. gcloud beta code dev cerca e utilizza tutti i file che terminano con *.service.dev.yaml in la 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 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

Eseguire test utilizzando le credenziali

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

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

    Il flag --service-account causa il download di una chiave dell'account di servizio e memorizzati localmente nella cache. L'utente è responsabile di mantenere la chiave al sicuro ed eliminarla quando non è più necessaria.

Verificare che il codice sia in esecuzione localmente

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

Docker

Per verificare di eseguire il codice 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 esegui il codice localmente su Google Cloud CLI, puoi eseguire query K_REVISION e cerca il valore dev-00001 da per confermare che sia eseguito localmente.

Emulatore Cloud Code

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

Interfaccia a riga di comando gcloud

Per confermare che esegui il codice in locale su Google Cloud CLI puoi: esegui una query sulla variabile di ambiente K_REVISION e cerca un valore che inizia con dev- per confermare che sia in esecuzione in locale.

Passaggi successivi