Test di un servizio Cloud Run in locale

Mantieni tutto organizzato con le raccolte Salva e classifica i contenuti in base alle tue preferenze.

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

Emulatore di Cloud Code

Il plug-in Cloud Code per gli IDE VS Code e JetBrains ti consente di eseguire localmente 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 tuo servizio in esecuzione su Cloud Run.

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

  1. Installa Cloud Code per VS Code o un JetBrains IDE.
  2. Segui le istruzioni per lo sviluppo e il debug locali nel tuo IDE.
  3. VS Code: a livello locale di sviluppo e debug
  4. IntelliJ: a livello locale di sviluppo e debug

Interfaccia a riga di comando gcloud

L'interfaccia a riga di comando di Google Cloud contiene un ambiente di sviluppo locale per emulare Cloud Run in grado di creare un container da origine, eseguire il container sulla tua macchina locale, e ricreare automaticamente il container al cambio del codice sorgente.

Per avviare l'ambiente di sviluppo locale:

  1. Modifica la directory nella directory contenente il codice sorgente del servizio.

  2. Richiama la comunicazione:

    gcloud beta code dev

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

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

Per interrompere il server locale:

  • Mac OS e Linux: Ctrl + C
  • Windows: interruzione di controllo

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 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 corrente. Se non viene trovato alcun file, verrà utilizzato qualsiasi file che termina con *.service.yaml.

Puoi configurare le seguenti impostazioni per lo sviluppo locale:

Il campo image del container 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

Utilizzo delle credenziali

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

  • Per consentire al container di accedere a una credenziale utilizzando il tuo account, accedi utilizzando gcloud e utilizza 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 comporta il download e la memorizzazione nella cache locale di una chiave dell'account di servizio. L'utente è responsabile della sicurezza della chiave e della sua eliminazione quando non è più necessario.

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.

    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 di runtime del container. In questo esempio viene utilizzata la porta 8080.

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

Se non hai mai utilizzato i container, puoi consultare la Guida introduttiva di Docker. Per saperne di più sui comandi Docker, consulta la documentazione di Docker.

Docker con accesso a GCP

Se utilizzi le librerie client di Google Cloud per integrare l'applicazione con i servizi Google Cloud e non hai ancora protetto tali servizi per il controllo dell'accesso esterno, puoi configurare il container locale in modo che venga autenticato con i servizi Google Cloud utilizzando le credenziali predefinite dell'applicazione.

Per l'esecuzione 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 Docker inseriscono le credenziali e la configurazione dal tuo sistema locale nel container locale:

    1. Utilizza il flag --volume (-v) per inserire il file delle credenziali nel container (presupponendo 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 in cui posizionare le credenziali all'interno del container.

    Tuttavia, potranno essere utilizzate anche altre posizioni della directory. Il requisito cruciale è che la variabile di ambiente GOOGLE_APPLICATION_CREDENTIALS deve corrispondere alla posizione di montaggio vincolato all'interno del container.

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

Passaggi successivi