Guida rapida: deployment di un servizio Python su Cloud Run

Esegui il deployment di un servizio Python in Cloud Run

Scopri come creare una semplice applicazione Hello World, pacchettizzarla in un'immagine container, caricare l'immagine container in Artifact Registry, quindi eseguire il deployment dell'immagine container su Cloud Run. Puoi utilizzare altre lingue oltre a quelle mostrate.


Per seguire le istruzioni dettagliate per questa attività direttamente nell'editor di Cloud Shell, fai clic su Procedura guidata:

Procedura guidata


Prima di iniziare

  1. Accedi al tuo account Google Cloud. Se non conosci Google Cloud, crea un account per valutare le prestazioni dei nostri prodotti in scenari reali. I nuovi clienti ricevono anche 300 $di crediti gratuiti per l'esecuzione, il test e il deployment dei carichi di lavoro.
  2. Nella console di Google Cloud Console, nella pagina del selettore dei progetti, seleziona o crea un progetto Google Cloud.

    Vai al selettore progetti

  3. Verifica che la fatturazione sia attivata per il tuo progetto Google Cloud. Scopri come verificare se la fatturazione è abilitata per un progetto.

  4. Installa Google Cloud CLI.
  5. Per inizializzare l'interfaccia a riga di comando gcloud, esegui il comando seguente:

    gcloud init
  6. Nella console di Google Cloud Console, nella pagina del selettore dei progetti, seleziona o crea un progetto Google Cloud.

    Vai al selettore progetti

  7. Verifica che la fatturazione sia attivata per il tuo progetto Google Cloud. Scopri come verificare se la fatturazione è abilitata per un progetto.

  8. Installa Google Cloud CLI.
  9. Per inizializzare l'interfaccia a riga di comando gcloud, esegui il comando seguente:

    gcloud init
  10. Per impostare il progetto predefinito per il servizio Cloud Run:
     gcloud config set project PROJECT_ID
    Sostituisci PROJECT_ID con il nome del progetto che hai creato per questa guida rapida.
  11. Se ti trovi in un criterio dell'organizzazione relativo a restrizioni del dominio che limita le chiamate non autenticate per il tuo progetto, dovrai accedere al servizio di cui hai eseguito il deployment come descritto nella sezione Testare i servizi privati.

scrivi l'applicazione di esempio

Per scrivere un'applicazione in Python:

  1. Crea una nuova directory denominata helloworld e modificala al suo interno:

    mkdir helloworld
    cd helloworld
    
  2. Crea un file denominato main.py e incolla al suo interno il seguente codice:

    import os
    
    from flask import Flask
    
    app = Flask(__name__)
    
    @app.route("/")
    def hello_world():
        """Example Hello World route."""
        name = os.environ.get("NAME", "World")
        return f"Hello {name}!"
    
    if __name__ == "__main__":
        app.run(debug=True, host="0.0.0.0", port=int(os.environ.get("PORT", 8080)))

    Questo codice risponde alle richieste con il nostro saluto "Hello World". La gestione HTTP viene eseguita da un server web Gunicorn nel container. Quando viene richiamato direttamente per l'utilizzo in locale, questo codice crea un server web di base che ascolta la porta definita dalla variabile di ambiente PORT.

  3. Crea un file denominato requirements.txt e incolla al suo interno il seguente codice:

    Flask==2.1.0
    gunicorn==20.1.0
    

    Questo aggiunge i pacchetti richiesti dall'esempio.

  4. Aggiungi un Dockerfile con i contenuti seguenti:

    
    # Use the official lightweight Python image.
    # https://hub.docker.com/_/python
    FROM python:3.11-slim
    
    # Allow statements and log messages to immediately appear in the logs
    ENV PYTHONUNBUFFERED True
    
    # Copy local code to the container image.
    ENV APP_HOME /app
    WORKDIR $APP_HOME
    COPY . ./
    
    # Install production dependencies.
    RUN pip install --no-cache-dir -r requirements.txt
    
    # Run the web service on container startup. Here we use the gunicorn
    # webserver, with one worker process and 8 threads.
    # For environments with multiple CPU cores, increase the number of workers
    # to be equal to the cores available.
    # Timeout is set to 0 to disable the timeouts of the workers to allow Cloud Run to handle instance scaling.
    CMD exec gunicorn --bind :$PORT --workers 1 --threads 8 --timeout 0 main:app
    

    Viene avviato un server web Gunicorn che rimane in ascolto tramite la porta definita dalla variabile di ambiente PORT.

  5. Aggiungi un file .dockerignore per escludere i file dall'immagine container.

    Dockerfile
    README.md
    *.pyc
    *.pyo
    *.pyd
    __pycache__
    .pytest_cache
    

L'app è stata completata e il deployment è pronto.

Esegui il deployment in Cloud Run dall'origine

Importante: questa guida rapida presuppone che tu abbia i ruoli di proprietario o editor nel progetto che utilizzi per la guida rapida. In caso contrario, fai riferimento alle autorizzazioni di deployment di Cloud Run, alle autorizzazioni di Cloud Build e alle autorizzazioni di Artifact Registry per le autorizzazioni richieste.

Il deployment dall'origine crea automaticamente un'immagine container dal codice sorgente e ne esegue il deployment.

Per eseguire il deployment dall'origine:

  1. Nella directory del codice sorgente, esegui il deployment dall'origine utilizzando il seguente comando:

    gcloud run deploy

    Se viene richiesto di abilitare l'API, rispondi y per attivare.

    1. Quando ti viene chiesto il percorso del codice sorgente, premi Invio per eseguire il deployment della cartella corrente.

    2. Quando ti viene chiesto il nome del servizio, premi Invio per accettare il nome predefinito, ad esempio helloworld.

    3. Se ti viene richiesto di abilitare l'API Artifact Registry o di consentire la creazione del repository Artifact Registry, rispondi premendo y.

    4. Quando viene richiesta la regione: seleziona l'area geografica di tua scelta, ad esempio us-central1.

    5. Ti verrà chiesto di consentire le chiamate non autenticate: rispondi y .

    quindi attendi qualche istante fino al completamento del deployment. Se l'operazione riesce, la riga di comando visualizza l'URL del servizio.

  2. Visita il servizio di cui hai eseguito il deployment aprendo l'URL del servizio in un browser web.

Località di Cloud Run

Cloud Run è a livello di regione, il che significa che l'infrastruttura che esegue i tuoi servizi Cloud Run si trova in una regione specifica ed è gestita da Google in modo che sia disponibile in modo ridondante in tutte le zone all'interno di quella regione.

Soddisfare i requisiti di latenza, disponibilità o durabilità sono i fattori principali per selezionare la regione in cui vengono eseguiti i servizi Cloud Run. In genere, puoi selezionare l'area geografica più vicina ai tuoi utenti, ma dovresti prendere in considerazione la località degli altri prodotti Google Cloud utilizzati dal servizio Cloud Run. L'utilizzo combinato dei prodotti Google Cloud in più località può influire sulla latenza e sul costo del servizio.

Cloud Run è disponibile nelle seguenti regioni:

Soggetto ai prezzi di Livello 1

  • asia-east1 (Taiwan)
  • asia-northeast1 (Tokyo)
  • asia-northeast2 (Osaka)
  • europe-north1 (Finlandia) icona Fogliolina Bassi livelli di CO2
  • europe-southwest1 (Madrid) icona foglia CO basso2
  • europe-west1 (Belgio) icona foglia CO basso2
  • europe-west4 (Paesi Bassi)
  • europe-west8 (Milano)
  • europe-west9 (Parigi) icona foglia CO basso2
  • me-west1 (Tel Aviv)
  • us-central1 (Iowa) icona foglia CO basso2
  • us-east1 (Carolina del Sud)
  • us-east4 (Virginia del Nord)
  • us-east5 (Columbus)
  • us-south1 (Dallas)
  • us-west1 (Oregon) icona foglia Bassi livelli di CO2

Soggetto ai prezzi di Livello 2

  • asia-east2 (Hong Kong)
  • asia-northeast3 (Seul, Corea del Sud)
  • asia-southeast1 (Singapore)
  • asia-southeast2 (Giacarta)
  • asia-south1 (Mumbai, India)
  • asia-south2 (Delhi, India)
  • australia-southeast1 (Sydney)
  • australia-southeast2 (Melbourne)
  • europe-central2 (Varsavia, Polonia)
  • europe-west12 (Torino)
  • europe-west2 (Londra, Regno Unito)
  • europe-west3 (Francoforte, Germania)
  • europe-west6 (Zurigo, Svizzera) icona foglia CO basso2
  • me-central1 (Doha)
  • northamerica-northeast1 (Montreal) icona foglia CO basso2
  • northamerica-northeast2 (Toronto) icona foglia CO basso2
  • southamerica-east1 (San Paolo, Brasile) icona foglia CO bassa2
  • southamerica-west1 (Santiago, Cile)
  • us-west2 (Los Angeles)
  • us-west3 (Salina, città del lago)
  • us-west4 (Las Vegas)

Se hai già creato un servizio Cloud Run, puoi visualizzare la regione nella dashboard di Cloud Run nella console Google Cloud.

Complimenti! Hai appena eseguito il deployment di un'immagine container dal codice sorgente a Cloud Run. Cloud Run esegue automaticamente lo scale out dell'immagine container per gestire le richieste ricevute e lo scale in quando la domanda diminuisce. Paghi solo per la CPU, la memoria e le risorse di rete utilizzate durante la gestione delle richieste.

Esegui la pulizia

Rimuovi il progetto di test

Anche se Cloud Run non addebita costi quando il servizio non è in uso, è possibile che ti venga addebitato l'archiviazione dell'immagine container in Artifact Registry. Per evitare addebiti, puoi eliminare l'immagine container o eliminare il tuo progetto Google Cloud. L'eliminazione del tuo progetto Google Cloud interrompe la fatturazione per tutte le risorse utilizzate all'interno del progetto.

  1. Nella console Google Cloud, vai alla pagina Gestisci risorse.

    Vai a Gestisci risorse

  2. Nell'elenco dei progetti, seleziona il progetto che vuoi eliminare, quindi fai clic su Elimina.
  3. Nella finestra di dialogo, digita l'ID del progetto e fai clic su Chiudi per eliminare il progetto.

Passaggi successivi

Per ulteriori informazioni sulla creazione di un container da un codice sorgente e sul push a un repository, consulta: