
Cloud Run è una piattaforma gestita di computing che consente di eseguire container stateless richiamabili tramite richieste HTTP. Cloud Run è serverless: elimina la necessità di gestire l'infrastruttura, così puoi concentrarti su ciò che conta di più, ovvero creare app fantastiche. È basato su Knative per consentirti di scegliere se eseguire i container con Cloud Run (completamente gestito) o Cloud Run for Anthos. L'obiettivo di questo codelab è creare un'immagine container ed eseguirne il deployment su Cloud Run.
Prerequisiti
N/D
Configurazione dell'ambiente autonoma
Se non hai ancora un Account Google (Gmail o Google Apps), devi crearne uno. Accedi alla console di Google Cloud (console.cloud.google.com) e crea un nuovo progetto:
Ricorda l'ID progetto, un nome univoco per tutti i progetti Google Cloud (il nome riportato sopra è già stato utilizzato e non funzionerà per te, mi dispiace). In questo codelab verrà chiamato PROJECT_ID.
Successivamente, dovrai abilitare la fatturazione nella console Cloud per utilizzare le risorse Google Cloud.
L'esecuzione di questo codelab non dovrebbe costarti più di qualche dollaro, ma potrebbe essere più cara se decidi di utilizzare più risorse o se le lasci in esecuzione (vedi la sezione "Pulizia" alla fine di questo documento).
I nuovi utenti di Google Cloud Platform possono beneficiare di una prova senza costi di 300$.
Cloud Shell
Anche se Google Cloud può essere gestito da remoto dal tuo laptop, utilizzerai Cloud Shell, un ambiente a riga di comando in esecuzione in Google Cloud.
Questa macchina virtuale basata su Debian viene caricata con tutti gli strumenti di sviluppo di cui avrai bisogno. Offre una home directory permanente da 5 GB e viene eseguita su Google Cloud, migliorando notevolmente le prestazioni di rete e l'autenticazione. Ciò significa che per questo codelab ti servirà solo un browser (sì, funziona su Chromebook).
Per attivare Google Cloud Shell, fai clic sul pulsante in alto a destra della console per gli sviluppatori (il provisioning e la connessione all'ambiente richiedono solo pochi istanti):
Fai clic sul pulsante "Avvia Cloud Shell":
Una volta eseguita la connessione a Cloud Shell, dovresti vedere che il tuo account è già autenticato e il progetto è già impostato sul tuo PROJECT_ID :
gcloud auth list
Output comando
Credentialed accounts: - <myaccount>@<mydomain>.com (active)
gcloud config list project
Output comando
[core] project = <PROJECT_ID>
Cloud Shell imposta anche alcune variabili di ambiente per impostazione predefinita, che potrebbero essere utili quando esegui comandi futuri.
echo $GOOGLE_CLOUD_PROJECT
Output comando
<PROJECT_ID>
Se per qualche motivo il progetto non è impostato, esegui questo comando :
gcloud config set project <PROJECT_ID>
Stai cercando PROJECT_ID? Controlla l'ID che hai utilizzato nei passaggi di configurazione o cercalo nella dashboard della console:
IMPORTANTE: infine, imposta la zona e la configurazione del progetto predefinite:
gcloud config set compute/zone us-central1-f
Puoi scegliere tra una serie di zone diverse. Puoi trovare ulteriori informazioni nella documentazione relativa alle regioni e alle zone.
Abilita l'API Cloud Run
Da Cloud Shell, abilita l'API Cloud Run.
gcloud services enable run.googleapis.com
Dovrebbe essere visualizzato un messaggio di operazione riuscita simile a questo:
Operation "operations/acf.cc11852d-40af-47ad-9d59-477a12847c9e" finished successfully.
Creerai una semplice app Node.js basata su Express che risponde alle richieste HTTP.
Per creare l'app, utilizza Cloud Shell per creare una nuova directory denominata helloworld-nodejs e passa a questa directory.
mkdir helloworld-nodejs cd helloworld-nodejs
Crea un file package.json con i seguenti contenuti:
{
"name": "cloudrun-helloworld",
"version": "1.0.0",
"description": "Simple hello world sample in Node",
"main": "index.js",
"scripts": {
"start": "node index.js"
},
"author": "",
"license": "Apache-2.0",
"dependencies": {
"express": "^4.17.1"
}
}Molto importante: il file sopra contiene un comando di avvio di script e una dipendenza dal framework dell'app web Express.
Quindi, nella stessa directory, crea un file index.js e copia al suo interno il seguente contenuto:
const express = require('express');
const app = express();
app.get('/', (req, res) => {
console.log('Hello world received a request.');
const target = process.env.TARGET || 'World';
res.send(`Hello ${target}!`);
});
const port = process.env.PORT || 8080;
app.listen(port, () => {
console.log('Hello world listening on port', port);
});Questo codice crea un server web di base in ascolto sulla porta definita dalla variabile di ambiente PORT. La tua app è ora pronta per essere containerizzata, testata e caricata in Container Registry.
Per containerizzare l'app di esempio, crea un nuovo file denominato Dockerfile nella stessa directory dei file di origine e copia al suo interno il seguente contenuto:
# Use the official lightweight Node.js 12 image.
# https://hub.docker.com/_/node
FROM node:12-slim
# Create and change to the app directory.
WORKDIR /usr/src/app
# Copy application dependency manifests to the container image.
# A wildcard is used to ensure both package.json AND package-lock.json are copied.
# Copying this separately prevents re-running npm install on every code change.
COPY package*.json ./
# Install production dependencies.
RUN npm install --only=production
# Copy local code to the container image.
COPY . ./
# Run the web service on container startup.
CMD [ "npm", "start" ]Ora crea la tua immagine container utilizzando Cloud Build eseguendo il comando seguente dalla directory contenente il Dockerfile:
gcloud builds submit --tag gcr.io/$GOOGLE_CLOUD_PROJECT/helloworld
$GOOGLE_CLOUD_PROJECT è una variabile di ambiente che contiene l'ID progetto Google Cloud quando viene eseguita in Cloud Shell. Puoi ottenerlo anche eseguendo gcloud config get-value project.
Una volta eseguito il push in Container Registry, vedrai un messaggio SUCCESS contenente il nome dell'immagine (gcr.io/$GOOGLE_CLOUD_PROJECT/helloworld). L'immagine è archiviata in Container Registry e, se lo desideri, può essere riutilizzata.
Puoi elencare tutte le immagini container associate al tuo progetto corrente usando questo comando:
gcloud container images list
Se vuoi eseguire e testare l'app in locale da Cloud Shell, puoi avviarla utilizzando questo comando docker standard:
docker run -d -p 8080:8080 gcr.io/$GOOGLE_CLOUD_PROJECT/helloworld
In Cloud Shell, fai clic su Anteprima web
e seleziona Anteprima sulla porta 8080.

Si apre una finestra del browser con il messaggio Hello World!

Puoi anche utilizzare semplicemente curl localhost:8080.
Il deployment dell'app containerizzata su Cloud Run viene eseguito utilizzando il comando seguente (assicurati di modificarlo in base al nome corretto dell'immagine per l'app che hai creato o utilizza l'immagine predefinita gcr.io/cloudrun/hello):
gcloud run deploy helloworld \ --image gcr.io/$GOOGLE_CLOUD_PROJECT/helloworld \ --platform managed \ --region us-central1 \ --allow-unauthenticated
L'opzione di deployment --allow-unauthenticated ti consente di raggiungere l'app senza autenticazione. L'opzione di deployment --platform managed \ indica che stai richiedendo l'ambiente completamente gestito (non l'infrastruttura Kubernetes tramite Anthos).
Attendi qualche istante fino al completamento del deployment. Al termine, la riga di comando visualizza l'URL del servizio.
Service [helloworld] revision [helloworld-00001] has been deployed and is serving traffic at https://helloworld-wdl7fdwaaa-uc.a.run.app
Ora puoi visitare il container di cui hai eseguito il deployment aprendo l'URL del servizio in un browser web:

Cloud Run scala automaticamente e orizzontalmente l'immagine container per gestire le richieste ricevute, quindi fa lo scale down quando la domanda diminuisce. Paghi solo per la CPU, la memoria e le risorse di rete utilizzate durante la gestione delle richieste.
Sebbene Cloud Run non addebiti costi quando il servizio non è in uso, ti potrebbero comunque essere addebitati i costi di archiviazione dell'immagine container creata.
Puoi eliminare il tuo progetto Google Cloud per evitare addebiti, interrompendo così la fatturazione per tutte le risorse utilizzate per quel progetto, o semplicemente eliminare la tua immagine helloworld utilizzando questo comando:
gcloud container images delete gcr.io/$GOOGLE_CLOUD_PROJECT/helloworld
Per eliminare il servizio Cloud Run, utilizza questo comando:
gcloud run services delete helloworld \ --platform managed \ --region us-central1
Complimenti! Hai eseguito il deployment di un'app pacchettizzata in un'immagine container su Cloud Run.
Scopri di più
Un buon passo successivo è consultare la Guida rapida: deployment su Cloud Run for Anthos in Google Cloud.
Per saperne di più sulla creazione di un container HTTP stateless adatto per Cloud Run dall'origine del codice e su come eseguirne il push in Container Registry, consulta le seguenti risorse:
Per scoprire di più su Knative, il progetto open source sottostante, consulta Knative.