Che cos'è Cloud Run

Cloud Run è una piattaforma di computing gestita che consente di eseguire container direttamente sull'infrastruttura scalabile di Google.

Puoi eseguire il deployment di codice scritto in qualsiasi linguaggio di programmazione in Cloud Run, a patto che tu sia in grado di creare un'immagine container. Di fatto, la creazione di immagini container è facoltativa. Se usi Go, Node.js, Python, Java, .NET Core o Ruby, puoi usare l'opzione di deployment basato sul codice sorgente, che crea il container per te, seguendo le best practice per il linguaggio che stai utilizzando.

Google ha creato Cloud Run in modo che funzioni in sinergia con altri servizi su Google Cloud, per consentirti di creare applicazioni complete.

In breve, Cloud Run consente agli sviluppatori di dedicare il proprio tempo alla scrittura del codice e a pochissimo tempo a operare, configurare e scalare il servizio Cloud Run. Non è necessario creare un cluster o gestire l'infrastruttura per mantenere la produttività con Cloud Run.

Servizi e job: due modi per eseguire il codice

In Cloud Run, il codice può essere eseguito continuamente come servizio o come job. Entrambi i servizi e i job vengono eseguiti nello stesso ambiente e possono utilizzare le stesse integrazioni con altri servizi su Google Cloud.

  • Servizi Cloud Run. Utilizzato per eseguire codice che risponda a richieste web o eventi.
  • Job Cloud Run. Utilizzato per eseguire codice che esegue un lavoro (un job) e viene chiuso quando il lavoro è terminato.

Servizi Cloud Run

Un servizio Cloud Run esegue container per gestire richieste web ed eventi

Un servizio Cloud Run fornisce l'infrastruttura necessaria per eseguire un endpoint HTTPS affidabile. La tua responsabilità è assicurarti che il codice sia in ascolto su una porta TCP e gestisca le richieste HTTP.

Le funzionalità standard dei servizi includono:

Endpoint HTTPS univoco per ogni servizio
Ogni servizio Cloud Run è fornito con un endpoint HTTPS su un sottodominio univoco del dominio *.run.app; puoi anche configurare domini personalizzati. Cloud Run gestisce TLS per te e include il supporto per WebSocket, HTTP/2 (end-to-end) e gRPC (end-to-end).
Scalabilità automatica rapida basata su richiesta
Cloud Run è progettato per fare lo scale out rapidamente per gestire tutte le richieste in entrata o per gestire un aumento dell'utilizzo della CPU all'esterno delle richieste se l'allocazione della CPU è impostata su always on. Un servizio può fare rapidamente lo scale out fino a mille istanze, o anche di più se richiedi un aumento della quota. Se la domanda diminuisce, Cloud Run rimuove i container inattivi. Se ti preoccupano i costi o il sovraccarico dei sistemi downstream, puoi limitare il numero massimo di istanze.
Gestione integrata del traffico
Ogni deployment crea una nuova revisione immutabile. Puoi instradare il traffico in entrata all'ultima revisione, eseguire il rollback a una revisione precedente o suddividere il traffico a più revisioni contemporaneamente, per eseguire un'implementazione graduale. Questa funzionalità è utile se vuoi ridurre il rischio di eseguire il deployment di una nuova revisione. Puoi iniziare con l'invio dell'1% delle richieste a una nuova revisione e aumentare questa percentuale durante il monitoraggio della telemetria.
Servizi privati e pubblici
Un servizio Cloud Run può essere raggiungibile da internet oppure puoi limitare l'accesso in tre modi:

Puoi gestire un servizio Cloud Run con una rete CDN (Content Delivery Network) per pubblicare gli asset memorizzabili nella cache da una posizione perimetrale più vicina ai client. Sia Firebase Hosting che Cloud CDN offrono questa funzionalità.

Scalabilità fino a zero e numero minimo di istanze

Cloud Run aggiunge e rimuove automaticamente le istanze per gestire tutte le richieste in entrata o per gestire l'aumento dell'utilizzo della CPU all'esterno se l'allocazione della CPU è impostata su always on. Se non ci sono richieste in entrata per il tuo servizio, verrà rimossa anche l'ultima istanza rimanente. Questo comportamento è comunemente definito scala a zero.

Se non ci sono istanze attive, ne viene creata una nuova on demand non appena arriva una richiesta. Questo influisce negativamente sui tempi di risposta per queste prime richieste, a seconda della velocità con cui il container diventa pronto a gestire le richieste.

Per assicurarti che il tuo servizio non sia scalabile fino a zero istanze, puoi configurare Cloud Run per mantenere una quantità minima di istanze attive.

Prezzi a consumo per i servizi

La scalabilità fino a zero è interessante per motivi economici poiché ti vengono addebitati i costi di CPU e memoria allocati a un'istanza con una granularità di 100 ms. Se non configuri il numero minimo di istanze, non ti viene addebitato alcun costo se non viene utilizzato il servizio.

Puoi attivare due modelli di determinazione dei prezzi:

Basata su richiesta
Se un'istanza non elabora le richieste, la CPU non viene allocata e non ti viene addebitato alcun costo. Inoltre, paghi una tariffa a richiesta.
Basato su istanze
Ti viene addebitato l'intero ciclo di vita di un'istanza e la CPU è sempre allocata. Non sono previste commissioni a richiesta.

C'è un livello gratuito generoso. Per saperne di più, consulta i pricing e l'allocazione della CPU per scoprire come abilitare i prezzi basati su richiesta o istanze per il tuo servizio.

Un file system di container usa e getta

Le istanze su Cloud Run sono eliminabili. Ogni container ha un overlay di file system in memoria e scrivibile che non viene mantenuto se il container viene arrestato. Cloud Run decide in modo indipendente quando interrompere l'invio delle richieste a un'istanza e arrestarla, ad esempio durante lo scale in.

Per ricevere un avviso quando Cloud Run sta per arrestare un'istanza, l'applicazione può intraprendere il segnale SIGTERM. Ciò consente al codice di eliminare i buffer locali e mantenere i dati locali in un datastore esterno.

Per mantenere i file in modo permanente, puoi integrarli con Cloud Storage o montare un file system di rete (NFS).

Quando utilizzare i servizi Cloud Run

I servizi Cloud Run sono ottimi per il codice che gestisce le richieste o gli eventi. Ecco alcuni casi d'uso di esempio:

Siti web e applicazioni web
Crea la tua app web utilizzando il tuo stack preferito, accedi al tuo database SQL ed esegui il rendering di pagine HTML dinamiche.
API e microservizi
Puoi creare un'API REST, un'API GraphQL o microservizi privati che comunicano tramite HTTP o gRPC.
Elaborazione dei flussi di dati
I servizi Cloud Run possono ricevere messaggi dalle sottoscrizioni push di Pub/Sub ed eventi da Eventarc.

Job Cloud Run

Se il tuo codice funziona e poi si interrompe (uno script è un buon esempio), puoi utilizzare un job Cloud Run per eseguire il codice. Puoi eseguire un job dalla riga di comando utilizzando gcloud CLI, pianificare un job ricorrente o eseguirlo come parte di un flusso di lavoro.

I job di array sono un modo più rapido per eseguire i job

Un job può avviare un'istanza per eseguire il codice, un modo comune per eseguire uno script o uno strumento. Tuttavia, puoi anche avviare molte istanze identiche e indipendenti in parallelo, ovvero un job di array.

I job di array sono un modo più rapido per elaborare i job che possono essere suddivisi in più attività indipendenti, come mostrato qui:

I job di array sono un modo più rapido per eseguire job caricabili in contemporanea

Ad esempio, se ridimensiona e ritaglia 1000 immagini da Cloud Storage, l'elaborazione consecutiva è più lenta rispetto all'elaborazione in parallelo con molte istanze, che Cloud Run gestisce con la scalabilità automatica.

Quando utilizzare i job Cloud Run

I job Cloud Run sono particolarmente adatti per eseguire codice che esegue un lavoro (un job) e si chiude quando il lavoro è terminato. Ecco alcuni esempi:

Script o strumento
Esegui uno script per eseguire migrazioni dei database o altre attività operative.
Job array
Esegui un'elaborazione altamente parallelizzata di tutti i file in un bucket Cloud Storage.
Job pianificato
Crea e invia fatture a intervalli regolari o salva i risultati di una query di database in formato XML e carica il file a intervalli di alcune ore.

Integrazioni di Cloud Run

Cloud Run si integra con il più ampio ecosistema di Google Cloud, permettendoti di creare applicazioni complete.

Le integrazioni essenziali includono:

Archiviazione dei dati
Cloud Run si integra con Cloud SQL (MySQL, PostgreSQL e SQL Server gestiti), Memorystore (Redis e Memcached gestiti), Firestore, Spanner, Cloud Storage e altro ancora. Per un elenco completo, consulta Archiviazione dei dati.
Logging e segnalazione degli errori
I log dei container vengono importati automaticamente da Cloud Logging. Se sono presenti eccezioni nei log, Error Reporting le aggrega e ti avvisa. Sono supportati i seguenti linguaggi: Go, Java, Node.js, PHP, Python, Ruby e .NET.
Identità di servizio
Ogni revisione di Cloud Run è collegata a un account di servizio e le librerie client di Google Cloud utilizzano in modo trasparente questo account di servizio per l'autenticazione con le API Google Cloud.
Distribuzione continua
Se archivi il codice sorgente in GitHub, Bitbucket o Cloud Source Repositories, puoi configurare Cloud Run per il deployment automatico dei nuovi commit.
Networking privato
Le istanze Cloud Run possono raggiungere le risorse nella rete Virtual Private Cloud (VPC) tramite il connettore di accesso VPC serverless. In questo modo il tuo servizio può connettersi a macchine virtuali o prodotti di Compute Engine in base a Compute Engine, come Google Kubernetes Engine o Memorystore.
API di Google Cloud
Il codice del tuo servizio viene autenticato in modo trasparente con le API Google Cloud. Alcuni esempi sono le API AI e Machine Learning, come l'API Cloud Vision, l'API Speech-to-Text, l'API AutoML Natural Language, l'API Cloud Translation e molte altre.
Attività in background
Se vuoi pianificare l'esecuzione del codice in un secondo momento o immediatamente dopo aver restituito una richiesta web, Cloud Run funziona bene insieme a Cloud Tasks per fornire un'esecuzione asincrona scalabile e affidabile.

Consulta Connessione ai servizi Google Cloud per un elenco di tutti i servizi Google Cloud che funzionano bene con Cloud Run.

I servizi o i job devono essere pacchettizzati in un'immagine container

Affinché il servizio o il job sia di cui è possibile eseguire il deployment in Cloud Run, devi pacchettizzarlo in un'immagine container. Se non hai familiarità con i container, ecco una breve introduzione concettuale.

Creazione di un'immagine container

Un'immagine container è un pacchetto con tutto ciò che serve per eseguire il tuo servizio. tra cui artefatti della build, asset, pacchetti di sistema e, facoltativamente, un runtime. Questo rende un'applicazione containerizzata intrinsecamente portabile, che viene eseguita ovunque sia possibile eseguire un container. Esempi di artefatti di compilazione includono file binari compilati o file di script, mentre esempi di runtime sono il runtime JavaScript Node.js o una Java Virtual Machine (JVM).

I professionisti avanzati apprezzano il fatto che Cloud Run non imponi ulteriori oneri sull'esecuzione del loro codice: è possibile eseguire qualsiasi programma binario su Cloud Run. Per gli utenti, inclusi gli esperti, che cercano maggiore praticità o vogliono delegare la containerizzazione della loro applicazione a Google, Cloud Run si integra con Google Cloud Buildpacks open source per offrire un deployment basato sul codice sorgente.

Passaggi successivi