Che cos'è Cloud Run

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

Su Cloud Run puoi eseguire il deployment di codice scritto in qualsiasi linguaggio di programmazione se puoi creare un'immagine container. Di fatto, la creazione di immagini container facoltativo. Se usi Go, Node.js, Python, Java, .NET Core, Ruby o un è supportato, puoi utilizzare un'opzione di deployment basato sull'origine che crea il contenitore al posto tuo, seguendo le best practice per la lingua che stai utilizzando.

Google ha creato Cloud Run per farlo funzionare bene con altri servizi su Google Cloud, in modo da poter creare applicazioni complete.

In breve, Cloud Run consente agli sviluppatori di dedicare il proprio tempo alla scrittura del codice e pochissimo tempo al funzionamento, alla configurazione e alla scalabilità del servizio Cloud Run. Per essere produttivo con Cloud Run, non devi creare un cluster o gestire l'infrastruttura.

Servizi e job: due modi per eseguire il codice

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

  • Servizi Cloud Run. Viene utilizzato per eseguire codice che risponde a richieste, eventi o funzioni web.
  • Job Cloud Run. Viene utilizzato per eseguire codice che esegue un'operazione (un job) e si arresta al termine dell'operazione.

Servizi Cloud Run

Un servizio Cloud Run esegue i container per gestire le richieste web e gli eventi

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

Un servizio standard include le seguenti funzionalità:

Endpoint HTTPS univoco per ogni servizio
A ogni servizio Cloud Run viene fornito un endpoint HTTPS su un sottodominio univoco del dominio *.run.app e 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 in base alle richieste
Cloud Run è progettato per eseguire la scalabilità in orizzontale in modo rapido per gestire tutte le richieste in entrata o per gestire un utilizzo della CPU aumentato al di fuori 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 del traffico integrata
Ogni deployment crea una nuova revisione immutabile. Puoi indirizzare il traffico in entrata all'ultima revisione, eseguire il rollback a una revisione precedente o suddividere il traffico in più revisioni contemporaneamente per eseguire un'implementazione graduale. Questa opzione è utile se vuoi ridurre il rischio di implementare una nuova revisione. Puoi iniziare con l'invio dell'1% delle richieste a una nuova revisione e aumentarla durante il monitoraggio della telemetria.
Servizi pubblici e privati
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 asset memorizzabili nella cache da una località perimetrale più vicina ai client. Sia Firebase Hosting che Cloud CDN offrono questa funzionalità.

Scalabilità fino a zero e istanze minime

Cloud Run aggiunge e rimuove automaticamente le istanze per gestire tutte le richieste in entrata o per gestire un utilizzo della CPU aumentato al di fuori delle richieste se l'allocazione della CPU è impostata su always on. Se non ci sono richieste in entrata al tuo servizio, verrà rimossa anche l'ultima istanza rimanente. Questo comportamento è comunemente noto come scala a zero.

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

Per assicurarti che il servizio non venga scalato a zero istanze, puoi configurare Cloud Run in modo da mantenere attive un numero minimo di istanze.

Prezzi a consumo per i servizi

Lo scale to zero è interessante per motivi economici, poiché ti vengono addebitati la CPU e la memoria allocate a un'istanza con una granularità di 100 ms. Se non configuri il numero minimo di istanze, non ti viene addebitato alcun costo se il servizio non viene utilizzato.

Puoi attivare due modelli di determinazione del prezzo:

Basata sulle richieste
Se un'istanza non elabora le richieste, la CPU non viene allocata e non ti viene addebitato alcun costo. Inoltre, paghi una commissione per richiesta.
Basato su istanza
Ti viene addebitato l'importo per l'intera durata di un'istanza e la CPU viene sempre allocata. Non è prevista alcuna tariffa per richiesta.

C'è un generoso livello gratuito. Per ulteriori informazioni, consulta la pagina dei prezzi e la pagina sull'allocazione della CPU per scoprire come attivare i prezzi basati su richieste o istanze per il tuo servizio.

Un file system del contenitore usa e getta

Le istanze su Cloud Run sono monouso. Ogni contenitore ha un overlay del file system scrivibile in memoria, che non viene mantenuto se il contenitore viene arrestato. Cloud Run decide in modo indipendente quando interrompere l'invio di richieste a un'istanza e arrestarla, ad esempio durante la scalabilità.

Per ricevere un avviso quando Cloud Run sta per arrestare un'istanza, l'applicazione può intercettare il segnale SIGTERM. In questo modo, il codice può svuotare i buffer locali e mantenere i dati locali in un data store esterno.

Per rendere persistenti i file in modo permanente, puoi eseguire l'integrazione 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 richieste, eventi o funzioni. Esempi di casi d'uso includono:

Siti web e applicazioni web
Crea la tua app web utilizzando il tuo stack preferito, accedi al tuo database SQL ed esegui il rendering delle 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 da sottoscrizioni push di Pub/Sub ed eventi da Eventarc.
Carichi di lavoro asincroni
Le
funzioni Cloud Run possono rispondere a eventi asincroni, come un messaggio in un argomento Pub/Sub, una modifica in un bucket Cloud Storage o un evento Firebase.
Inferenza AI
I servizi Cloud Run con o senza GPU configurata possono ospitare carichi di lavoro AI come modelli di inferenza e addestramento di modelli.

Job Cloud Run

Se il codice funziona e poi si arresta (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 all'interno di un flusso di lavoro.

I job 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 in parallelo molte istanze identiche e indipendenti, ovvero un job 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 parallelizzabili

Ad esempio, se redimensioni e ritaglie 1000 immagini da Cloud Storage, l'elaborazione consecutiva è più lenta rispetto all'elaborazione in parallelo con molte istanze, gestita da Cloud Run con il ridimensionamento automatico.

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 al termine del lavoro. Ecco alcuni esempi:

Script o strumento
Esegui uno script per eseguire migrazioni di database o altre attività operative.
Job array
Esegui l'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 l'ecosistema più ampio di Google Cloud, il che ti consente 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 altri ancora. Per un elenco completo, consulta Archiviazione dei dati.
Logging e Error Reporting
I log dei container vengono importati automaticamente da Cloud Logging. Se sono presenti eccezioni nei log, Error Reporting le aggrega e ti invia una notifica. 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 memorizzi il codice sorgente in GitHub, Bitbucket o Cloud Source Repositories, puoi configurare Cloud Run per eseguire 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 alle macchine virtuali Compute Engine o ai prodotti basati su Compute Engine, come Google Kubernetes Engine o Memorystore.
API di Google Cloud
Il codice del servizio si autentica in modo trasparente con le API Google Cloud. Alcuni esempi sono le API di 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 subito dopo la restituzione di una richiesta web, Cloud Run funziona bene insieme a Cloud Tasks per fornire un'esecuzione asincrona scalabile e affidabile.

Consulta la sezione 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 contenitore

Per poter eseguire il deployment del servizio o del job in Cloud Run, devi pacchettizzarlo in un'immagine container. Se non hai familiarità con i contenitori, ecco una breve introduzione concettuale.

Creazione di un'immagine container

Un'immagine del contenitore è un pacchetto con tutto ciò di cui il servizio ha bisogno per funzionare. Sono inclusi gli elementi di build, gli asset, i pacchetti di sistema e (facoltativamente) un runtime. Ciò rende un'applicazione containerizzata intrinsecamente portabile: viene eseguita ovunque sia possibile eseguire un container. Esempi di artefatti di build includono binari compilati o file di script, mentre esempi di runtime sono il runtime JavaScript Node.js o una macchina virtuale Java (JVM).

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

Passaggi successivi