Cloud Run è una piattaforma di calcolo gestita che ti consente di eseguire container direttamente sull'infrastruttura scalabile di Google.
Puoi eseguire il deployment di codice scritto in qualsiasi linguaggio di programmazione su Cloud Run se puoi creare un'immagine container da esso. Infatti, la creazione delle immagini container è facoltativa. Se usi Go, Node.js, Python, Java, .NET Core, Ruby o un framework supportato, puoi utilizzare l'opzione di deployment basato sul codice sorgente che crea il container automaticamente, seguendo le best practice per il linguaggio che utilizzi.
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 del lavoro.
Servizi Cloud Run
Un servizio Cloud Run fornisce l'infrastruttura necessaria per eseguire un endpoint HTTPS affidabile. È tua responsabilità assicurarti che il codice rimanga 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 basata sulle 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ò scalare rapidamente 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 temi i costi o il sovraccarico dei sistemi a valle, 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 inviando l'1% delle richieste a una nuova revisione e aumentare questa percentuale 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:
- Specifica un criterio di accesso utilizzando Cloud IAM.
- Utilizza le impostazioni di ingresso per limitare l'accesso alla rete. Questa opzione è utile se vuoi consentire solo il traffico interno dal VPC e dai servizi interni.
- Consenti solo agli utenti autenticati con Cloud Identity-Aware Proxy (IAP).
Puoi posizionare un servizio Cloud Run davanti a una rete CDN (Content Delivery Network) per pubblicare asset memorizzabili nella cache da una posizione perimetrale più vicina ai client. Sia Firebase Hosting che Cloud CDN forniscono 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 arrivo 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. Ciò influisce negativamente sul tempo di risposta di queste prime richieste, a seconda della velocità con cui il contenitore è pronto a gestire le richieste.
Per assicurarti che il servizio non venga scalato a zero istanze, puoi configurare Cloud Run in modo da mantenere un numero minimo di istanze attive.
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 le istanze minime, non ti verrà addebitato alcun importo se il servizio non viene utilizzato.
Puoi attivare due modelli di prezzi:
- Basata sulle richieste
- Se un'istanza non elabora richieste, la CPU non viene allocata e non ti viene addebitato alcun importo. Inoltre, paghi una commissione per richiesta.
- Basata sulle istanze
- Ti vengono addebitati i costi per l'intero ciclo di vita di un'istanza e la CPU è sempre allocata. Non è prevista alcuna tariffa per richiesta.
È disponibile un generoso livello gratuito. Per ulteriori informazioni, consulta la pagina Prezzi e la pagina Allocazione 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 usa e getta. 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 lo scale in.
Per ricevere un avviso quando Cloud Run sta per arrestare un'istanza, la tua applicazione può intercettare l'indicatore SIGTERM. In questo modo, il codice può svuotare i buffer locali e mantenere i dati locali in un datastore esterno.
Per mantenere 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 ideali per il codice che gestisce richieste, eventi o funzioni. Ecco alcuni esempi di casi d'uso:
- 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 da sottoscrizioni push di Pub/Sub ed eventi da Eventarc.
- Workload 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.
- Interruzione dell'AI
- I servizi Cloud Run con o senza GPU configurata possono ospitare workload di AI come modelli di inferenza e addestramento dei modelli.
Job Cloud Run
Se il codice esegue un'operazione e poi si arresta (uno script è un buon esempio), puoi utilizzare un job Cloud Run per eseguirlo. 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 array sono un modo più rapido per elaborare job che possono essere suddivisi in più attività indipendenti, come mostrato di seguito:
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 adatti per eseguire codice che esegue un'operazione (un job) e si arresta al termine dell'operazione. 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 le fatture a intervalli regolari oppure salva i risultati di una query del database come XML e carica il file ogni poche 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 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 invia una notifica. Sono supportati i seguenti linguaggi: Go, Java, Node.js, PHP, Python, Ruby e .NET.
- Identità di servizio
- Ogni revisione 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 tuo 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 immediatamente dopo la restituzione di una richiesta web, Cloud Run funziona bene con 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
Affinché il servizio o il job possa essere dispiegato su Cloud Run, devi pacchettizzarlo in un'immagine container. Se non hai familiarità con i contenitori, ecco una breve introduzione concettuale.
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 portatile: viene eseguita ovunque possa essere eseguito un container. Alcuni esempi di elementi di compilazione sono file script o binari compilati, mentre esempi di runtime sono il runtime JavaScript di Node.js o una macchina virtuale Java (JVM).
Gli utenti esperti apprezzano il fatto che Cloud Run non imponga oneri aggiuntivi per l'esecuzione del 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
- Esegui il deployment di un servizio Cloud Run
- Creare ed eseguire un job Cloud Run
- Scopri come eseguire i job in base a una pianificazione
- Esplora il modello di risorsa
- Scopri di più sul contratto del runtime del contenitore