1. Prima di iniziare
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ù: creare app eccezionali. È basato su Knative, per consentirti di scegliere di 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 in Cloud Run.
Prerequisiti
N/D
2. Configurazione e requisiti
Configurazione dell'ambiente da seguire in modo autonomo
- Accedi alla console Cloud e crea un nuovo progetto o riutilizzane uno esistente. Se non hai ancora un account Gmail o G Suite, devi crearne uno.
Ricorda l'ID progetto, un nome univoco in tutti i progetti Google Cloud (il nome precedente è già stato utilizzato e non funzionerà correttamente). Verrà indicato più avanti in questo codelab come PROJECT_ID
.
- Successivamente, dovrai abilitare la fatturazione in Cloud Console per utilizzare le risorse Google Cloud.
Eseguire questo codelab non dovrebbe costare molto. Assicurati di seguire le istruzioni nella sezione "Pulizia" in cui viene spiegato come arrestare le risorse in modo da non incorrere in fatturazione oltre questo tutorial. I nuovi utenti di Google Cloud sono idonei al programma di prova senza costi di 300$.
Cloud Shell
Google Cloud può essere gestito da remoto dal tuo laptop, ma 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 necessari. Offre una home directory permanente da 5 GB e viene eseguita in Google Cloud, migliorando notevolmente le prestazioni di rete e l'autenticazione. Ciò significa che per questo codelab sarà sufficiente un browser (sì, funziona su Chromebook).
- Per attivare Cloud Shell dalla console Cloud, fai clic su Attiva Cloud Shell (il provisioning e la connessione all'ambiente dovrebbero richiedere solo pochi minuti).
Una volta stabilita la connessione a Cloud Shell, dovresti vedere che hai già eseguito l'autenticazione e che il progetto è già impostato su PROJECT_ID
.
gcloud auth list
Output comando
Credentialed accounts: - <myaccount>@<mydomain>.com (active)
gcloud config list project
Output comando
[core] project = <PROJECT_ID>
Se, per qualche motivo, il progetto non è impostato, invia semplicemente il seguente comando:
gcloud config set project <PROJECT_ID>
Stai cercando il tuo PROJECT_ID
? Controlla l'ID utilizzato nei passaggi di configurazione o cercalo nella dashboard della console Cloud:
Cloud Shell imposta anche alcune variabili di ambiente per impostazione predefinita, cosa che può essere utile quando eseguirai comandi futuri.
echo $GOOGLE_CLOUD_PROJECT
Output comando
<PROJECT_ID>
- Infine, imposta la zona e la configurazione del progetto predefinite.
gcloud config set compute/zone us-central1-f
Puoi scegliere zone diverse. Per ulteriori informazioni, consulta Regioni e 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.
3. Scrivi l'app di esempio
Creerai una semplice app Node.js basata su express rispondendo alle richieste HTTP.
Per creare la tua app, usa Cloud Shell per creare una nuova directory denominata helloworld-nodejs
e spostarla nella 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"
}
}
Soprattutto, il file riportato sopra contiene un comando start script e una dipendenza dal framework dell'app web Express.
Quindi, nella stessa directory, crea un file index.js
e copia al suo interno i seguenti contenuti:
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.
4. Containerizza la tua app e caricala su 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 i contenuti seguenti:
# 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 questo comando dalla directory contenente il Dockerfile:
gcloud builds submit --tag gcr.io/$GOOGLE_CLOUD_PROJECT/helloworld
$GOOGLE_CLOUD_PROJECT
è una variabile di ambiente contenente l'ID progetto Google Cloud quando viene eseguita in Cloud Shell. Puoi anche ottenerlo eseguendo gcloud config get-value project
.
Una volta eseguito il push nel 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 utilizzare questo comando per elencare tutte le immagini container associate al tuo progetto attuale:
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
.
5. Esegui il deployment in Cloud Run
Il deployment dell'app containerizzata su Cloud Run viene eseguito utilizzando il comando seguente (assicurati di modificarlo con il nome corretto dell'immagine per l'app che hai creato o di utilizzare 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 di --allow-unauthenticated
ti consente di raggiungere l'app senza autenticazione. L'opzione di deployment di --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 fa automaticamente e orizzontalmente lo scale up dell'immagine container per gestire le richieste ricevute, quindi fa lo scale down quando la domanda diminuisce. Paghi solo per la CPU, la memoria e il networking utilizzati durante la gestione delle richieste.
6. Esegui la pulizia
Sebbene Cloud Run non effettui addebiti quando il servizio non è in uso, potrebbe comunque esserti addebitato un costo per l'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 l'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
7. Complimenti
Complimenti! Hai eseguito il deployment in Cloud Run di un'app pacchettizzata in un'immagine container.
Scopri di più
Un buon passaggio successivo sarebbe la Guida rapida: deployment in Cloud Run for Anthos su 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 risorse seguenti:
Per scoprire di più su Knative, il progetto open source sottostante, consulta Knative.