Cloud Run è una piattaforma di computing gestita che consente di eseguire i 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. Infatti, la creazione di immagini container è facoltativa. Se utilizzi Go, Node.js, Python, Java, .NET Core o Ruby, puoi ricorrere all'opzione deployment basato su codice sorgente che crea il contenitore per te, seguendo le best practice per il linguaggio che stai utilizzando.
Google ha creato Cloud Run per integrarsi bene con gli altri servizi su Google Cloud, per permetterti di creare applicazioni complete.
In breve, Cloud Run consente agli sviluppatori di dedicare il proprio tempo a scrivere il codice e a dedicare pochissimo tempo a gestire, configurare e scalare il servizio Cloud Run. Non è necessario creare un cluster o gestire l'infrastruttura per essere produttivi con Cloud Run.
Servizi e job: due modi per eseguire il codice
In Cloud Run, il tuo 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. Utilizzato per eseguire codice che risponde a richieste web o eventi.
- Job di Cloud Run. Utilizzato per eseguire il codice che esegue il lavoro (un job) e che si chiude quando viene completato.
Servizi Cloud Run
Un servizio Cloud Run ti offre 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.
Le funzionalità standard del servizio includono:
- Endpoint HTTPS univoco per ogni servizio
- Ogni servizio Cloud Run viene fornito con un endpoint HTTPS su un sottodominio univoco del dominio
*.run.app
e puoi anche configurare domini personalizzati. Cloud Run gestisce automaticamente il protocollo TLS e include il supporto di WebSocket, HTTP/2 (end-to-end) e gRPC (end-to-end). - Scalabilità automatica basata su richiesta rapida
- Cloud Run è stato progettato per scalare rapidamente lo scale out per gestire tutte le richieste in arrivo. Un servizio può scalare rapidamente fino a mille istanze di container 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 instradare il traffico in entrata alla revisione più recente, eseguire il rollback a una revisione precedente o suddividere il traffico verso più revisioni contemporaneamente, per eseguire un'implementazione graduale. Questo è utile se vuoi ridurre il rischio di eseguire il deployment di una nuova revisione. Puoi iniziare inviando l'1% delle richieste a una nuova revisione e aumentare questa percentuale monitorando le telemetrie.
- Servizi privati e pubblici
- Un servizio Cloud Run è raggiungibile da Internet oppure puoi limitare l'accesso in tre modi:
- Specifica un criterio di accesso utilizzando Cloud IAM.
- Usa le impostazioni di traffico in entrata per limitare l'accesso alla rete. Questo è utile se vuoi consentire solo il traffico interno dal VPC e dai servizi interni.
- Consenti solo utenti autenticati con Cloud Identity Aware Proxy (IAP).
Puoi offrire un servizio Cloud Run a una rete CDN (Content Delivery Network) per gestire gli asset memorizzabili nella cache da una località periferica più vicina ai client. Firebase Hosting e Cloud CDN forniscono questa funzionalità.
Scalabilità fino a zero e numero minimo di istanze
Cloud Run aggiunge e rimuove automaticamente le istanze di container per gestire tutte le richieste in entrata. Se non ci sono richieste in entrata per il servizio, verrà rimossa anche l'ultima istanza di container rimanente. Questo comportamento è comunemente chiamato scala a zero.
In assenza di istanze di container attive, viene creata una nuova istanza di container on demand non appena arriva una richiesta. Ciò 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 scala a zero istanze, puoi configurare Cloud Run in modo che il numero minimo di istanze di container sia attivo.
Prezzi in base al consumo per i servizi
La scalabilità a zero è interessante per motivi economici poiché la CPU e la memoria assegnate a un'istanza di container con granularità pari a 100 ms ti vengono addebitate. Se non configuri un numero minimo di istanze, non ti verrà addebitato alcun costo se il servizio non viene utilizzato.
Puoi attivare due modelli di prezzi:
- Basata su richiesta
- Se un'istanza di container non elabora le richieste, la CPU non viene allocata e non ti verrà addebitato alcun costo. Inoltre, pagherai una tariffa per richiesta.
- Basato su istanze
- Ti verrà addebitato l'intero ciclo di vita di un'istanza di container e la CPU viene sempre allocata. Non ci sono commissioni per richiesta.
C'è un generoso livello libero. Per ulteriori informazioni, consulta l'articolo sui prezzi e, per informazioni su come attivare i prezzi basati su richiesta o basati su istanza per il tuo servizio, consulta l'articolo relativo all'allocazione della CPU.
Un file system container monouso
Le istanze di container su Cloud Run sono monouso. Ogni container ha un overlay del file system in memoria, scrivibile, che non viene mantenuto se il container si arresta. Cloud Run decide autonomamente quando interrompere l'invio di richieste a un'istanza e interromperla, ad esempio durante lo scale in.
Per ricevere un avviso quando Cloud Run sta per arrestare un'istanza di container, la tua applicazione può intrappolare il segnale SIGTERM. In questo modo il codice può svuotare i buffer locali e conservare i dati locali in un datastore esterno.
Per conservare 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 ideali per il codice che gestisce le richieste o gli eventi. 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 di pagine HTML dinamiche.
- API e microservizi
- Puoi creare un'API REST o 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 abbonamenti push Pub/Sub ed eventi da Eventarc.
Job Cloud Run
Se il codice esegue un'operazione e 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 l'interfaccia a riga di comando gcloud, pianificare un job ricorrente o eseguirlo come parte di un flusso di lavoro.
I job array sono un modo più veloce per eseguire i job
Un job può avviare un'istanza di container per eseguire il codice. Questo è un modo comune per eseguire uno script o uno strumento. Tuttavia, puoi anche avviare molte istanze di container indipendenti e identiche in parallelo, 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 qui:
Ad esempio, se stai leggendo 1000 immagini da Cloud Storage per ridimensionarle e ritagliarle, l'elaborazione consecutiva sarà più lenta rispetto all'elaborazione contemporanea con molte istanze di container.
Quando utilizzare i job Cloud Run
I job Cloud Run sono adatti per eseguire il codice che esegue il lavoro (un job) e si arresta quando il lavoro è completato. Ecco alcuni esempi:
- Script o strumento
- Esegui uno script per eseguire migrazioni di database o altre attività operative.
- Job array
- Esegui un'elaborazione altamente parallelizzata di tutti i file in un bucket Cloud Storage.
- Job programmato
- 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, che ti consente di creare applicazioni complete.
Le integrazioni essenziali includono:
- Archiviazione dei dati
- Cloud Run si integra con Cloud SQL (gestito, MySQL, PostgreSQL e SQL Server), Memorystore (gestito Redis e Memcached), Firestore, Cloud Spanner, Cloud Storage e altro ancora. Per un elenco completo, consulta l'articolo Archiviazione dei dati.
- Logging e segnalazione errori
- I log dei container vengono importati automaticamente da Cloud Logging. Se nei log sono presenti delle eccezioni, Error Reporting le aggrega, dopodiché invia una notifica. Sono supportati i seguenti linguaggi: Go, Java, Node.js, PHP, Python, Ruby e .NET.
- Identità del 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 di nuovi commit.
- Networking privato
- Le istanze del container Cloud Run possono raggiungere le risorse nella rete Virtual Private Cloud (VPC) tramite il connettore di accesso VPC serverless. In questo modo, il servizio può connettersi a macchine virtuali o prodotti Compute Engine basati su Compute Engine, come Google Kubernetes Engine o Memorystore.
- API Google Cloud
- Il codice del servizio viene autenticato in modo trasparente con le API Google Cloud. Alcuni esempi includono l'AI e le API 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 l'articolo 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 tuo servizio o job possa essere sottoposto a deployment in Cloud Run, devi pacchettizzarlo in un'immagine container. Nel caso tu non abbia familiarità con i container, ecco una breve introduzione concettuale.
Un'immagine container è un pacchetto con tutto ciò che serve per eseguire il servizio. Sono inclusi artefatti della build, asset, pacchetti di sistema e, facoltativamente, un runtime. In questo modo, l'applicazione containerizzata è intrinsecamente portatile e viene eseguita ovunque venga eseguito un container. Tra gli esempi di artefatti della build figurano file binari o programmi binari compilati e 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 comporti oneri aggiuntivi sull'esecuzione del proprio codice: è possibile eseguire qualsiasi programma binario su Cloud Run. Per gli utenti, inclusi gli esperti, che vogliono la massima comodità o vogliono delegare la containerizzazione delle loro applicazioni a Google, Cloud Run si integra con Google Cloud Buildpacks open source per offrire un deployment basato su origine.
Passaggi successivi
- Esegui il deployment di un servizio Cloud Run
- Crea ed esegui un job Cloud Run
- Scopri come eseguire job in base a una pianificazione
- Esplora il modello di risorse
- Scopri di più sul contratto di runtime dei container