Fins ara hem treballat sobretot amb conceptes i amb la consola web. En aquesta lliçó canviem de marxa: aprendrem l'eina amb què s'administra Google Cloud de debò en el dia a dia, la CLI de gcloud, i l'entorn que la fa accessible des de qualsevol navegador sense instal·lar res, Cloud Shell.
Dominar gcloud no consisteix a memoritzar comandes, sinó a entendre'n l'estructura, saber demanar-li ajuda i saber extreure exactament la dada que necessites. Amb això, qualsevol operació de qualsevol servei es torna deduïble. Veurem què és Cloud Shell i quins límits té, com instal·lar el CLI en local, l'anatomia d'una comanda i el sistema d'ajuda, els formats de sortida i els filtres, l'autenticació i els seus dos modes, les configuracions anomenades per alternar entre alpinashop-dev i alpinashop-prod, la resta d'eines del SDK, i el scripting bàsic que encadena comandes.
I tancarem el mòdul amb el primer desplegament real del curs: Dani publicarà a internet una pàgina de «pròximament» d'AlpinaShop, d'extrem a extrem, sense sortir del navegador.
Contingut
- Què és Cloud Shell
- Instal·lació local del Google Cloud CLI
- Cloud Shell davant de CLI local
- Anatomia d'una comanda
gcloudi sistema d'ajuda - Formats de sortida:
--format - Filtres:
--filter - Autenticació:
gcloud init,auth loginiapplication-default - Configuracions anomenades
- Altres eines del SDK
- Scripting bàsic amb
gcloud - Primer desplegament real: la pàgina de «pròximament» d'AlpinaShop
- Què és Cloud Shell
Cloud Shell és una màquina virtual Linux gratuïta que s'obre dins del navegador des de la icona >_ de la consola. Està pensada perquè puguis administrar Google Cloud sense instal·lar res i sense configurar credencials.
Què porta ja instal·lat i configurat:
| Categoria | Contingut |
|---|---|
| Google Cloud CLI | gcloud, gsutil, bq, kubectl |
| Llenguatges | Python, Java, Go, Node.js, .NET, Ruby, PHP |
| Eines | git, docker, terraform, make, vim, nano, jq, curl |
| Autenticació | Ja autenticada amb el teu usuari de la consola |
| Editor | Cloud Shell Editor, basat en la tecnologia de VS Code |
Característiques i límits que cal conèixer abans de confiar-hi:
| Aspecte | Detall |
|---|---|
| Cost | Gratuït |
| Màquina | Instància petita (de l'ordre d'1-2 vCPU i uns pocs GB de RAM) |
| Disc persistent | 5 GB muntats al teu $HOME, que sí que persisteixen entre sessions |
Fora de $HOME |
Tot es perd: paquets instal·lats amb apt, canvis a /etc, etc. |
| Inactivitat | La sessió es tanca després d'aproximadament una hora sense ús |
| Sessió màxima | Al voltant de 12 hores seguides |
| Esborrat per inactivitat | Si no fas servir Cloud Shell durant diversos mesos, el disc es pot eliminar (amb avís previ) |
| Quota d'ús | Existeix un límit d'hores setmanals |
La conseqüència pràctica del punt de la persistència és important: si instal·les alguna cosa amb apt install, desapareixerà a la sessió següent. Perquè sobrevisqui, o bé ho instal·les al teu $HOME, o bé ho automatitzes al fitxer ~/.customize_environment, que Cloud Shell executa en arrencar la màquina.
Dues funcions addicionals que farem servir:
- Cloud Shell Editor: s'obre amb el botó «Obrir editor» i dona un IDE al navegador, amb explorador de fitxers, terminal integrada i ressaltat de sintaxi. Molt còmode per escriure scripts o editar un
Dockerfilesense sortir de la consola. - Vista prèvia web: la icona amb forma d'ull permet obrir al navegador un servei que estiguis executant a Cloud Shell (per defecte al port 8080) mitjançant una URL temporal i autenticada. És el que permet provar l'aplicació Flask d'AlpinaShop sense desplegar-la.
# Comprovar la màquina en la qual estàs treballant
cat /etc/os-release | head -n2
nproc # nombre de CPUs disponibles
free -h # memòria
df -h $HOME # espai del disc persistent
- Instal·lació local del Google Cloud CLI
Cloud Shell és excel·lent per aprendre i per a tasques puntuals, però per treballar-hi diàriament voldràs el CLI a la teva pròpia màquina, amb el teu editor, els teus fitxers i els teus scripts.
Linux (Debian/Ubuntu), mitjançant el repositori oficial:
# 1. Dependències i clau del repositori de Google
sudo apt-get update
sudo apt-get install -y apt-transport-https ca-certificates gnupg curl
# 2. Afegir la clau de signatura del repositori
curl https://packages.cloud.google.com/apt/doc/apt-key.gpg \
| sudo gpg --dearmor -o /usr/share/keyrings/cloud.google.gpg
# 3. Afegir el repositori a les fonts d'apt
echo "deb [signed-by=/usr/share/keyrings/cloud.google.gpg] \
https://packages.cloud.google.com/apt cloud-sdk main" \
| sudo tee /etc/apt/sources.list.d/google-cloud-sdk.list
# 4. Instal·lar
sudo apt-get update && sudo apt-get install -y google-cloud-climacOS, amb Homebrew:
Windows: descarrega l'instal·lador GoogleCloudSDKInstaller.exe des de la documentació oficial i executa'l. En finalitzar ofereix llançar gcloud init. També funciona perfectament instal·lant la versió Linux dins de WSL2, que és l'opció preferida per molts desenvolupadors.
Gestió de components addicionals:
# Instal·lar components que no vénen per defecte
gcloud components install kubectl
gcloud components install beta alphaUn avís: si vas instal·lar el CLI mitjançant apt o Homebrew, gcloud components update pot estar deshabilitat, perquè el gestor de paquets s'encarrega de les actualitzacions. En aquest cas, actualitza amb apt upgrade o brew upgrade. A Cloud Shell, el CLI s'actualitza sol.
- Cloud Shell davant de CLI local
| Criteri | Cloud Shell | CLI local |
|---|---|---|
| Instal·lació | Cap | Requereix instal·lar i actualitzar |
| Autenticació | Automàtica amb el teu usuari | Requereix gcloud init / auth login |
| Cost | Gratuït | Gratuït (però consumeix la teva màquina) |
| Persistència | Només 5 GB a $HOME |
Tot el teu disc |
| Potència | Màquina petita | La del teu equip |
| Eines preinstal·lades | Moltes i actualitzades | Les que instal·lis |
| Accés a fitxers locals | Requereix pujar-los | Directe |
| Integració amb el teu editor/IDE | Limitada a l'editor web | Completa |
| Sessions llargues o processos pesants | Limitat (timeout, quota) | Sense límit |
| Ús des de qualsevol dispositiu | Sí, només cal navegador | No |
| Recomanat per a | Aprendre, tasques puntuals, emergències, demos | Feina diària, desenvolupament, scripts |
La recomanació per a aquest curs: fes servir Cloud Shell. Elimina tota la fricció d'instal·lació i garanteix que treballes amb la mateixa versió que es descriu aquí. Instal·la el CLI local quan comencis a desenvolupar de debò.
- Anatomia d'una comanda
gcloud i sistema d'ajuda
gcloud i sistema d'ajudaTotes les comandes de gcloud segueixen la mateixa estructura, i entendre-la és el que converteix la CLI en una cosa deduïble en lloc de memoritzable:
| Part | Què és | Exemples |
|---|---|---|
| Grup | El servei o àrea | compute, storage, projects, iam, sql, run, billing |
| Subgrup | El tipus de recurs dins del servei | instances, disks, firewall-rules, buckets |
| Acció | El verb | list, describe, create, delete, update, add-iam-policy-binding |
| Arguments | El nom del recurs | alpinashop-dev, web-1 |
| Flags | Opcions | --zone=europe-west1-b, --format=json |
Exemples llegits segons aquesta estructura:
# grup=compute, subgrup=instances, accio=list
gcloud compute instances list
# grup=projects, accio=describe, argument=alpinashop-dev
gcloud projects describe alpinashop-dev
# grup=compute, subgrup=firewall-rules, accio=create, argument=permitir-http
gcloud compute firewall-rules create permitir-http --allow=tcp:80Els verbs són consistents entre serveis, i aquesta consistència és el que permet deduir comandes que no has vist mai:
| Verb | Què fa |
|---|---|
list |
Llista recursos del tipus indicat |
describe |
Mostra el detall complet d'UN recurs |
create |
Crea un recurs |
delete |
L'elimina |
update |
Modifica atributs |
add-iam-policy-binding |
Concedeix un rol |
get-iam-policy |
Mostra la política de permisos |
Si saps que existeix gcloud compute instances list, pots deduir que existirà gcloud sql instances list i gcloud run services list. I encertes.
Demanar ajuda
# Ajuda d'un grup: quins subgrups i accions ofereix
gcloud compute --help
gcloud compute instances --help# Ajuda detallada d'una comanda concreta, amb TOTS els seus flags i exemples
gcloud compute instances create --help# Buscar comandes per paraula clau quan no saps on viu una cosa
gcloud search-help "budget"
gcloud search-help "service account key"gcloud search-help és una eina infravalorada: cerca a tota l'ajuda del CLI i retorna les comandes rellevants ordenades per pertinença. Quan no sàpigues quina comanda fer servir, comença per aquí.
Versions alpha i beta
Algunes comandes només estan disponibles en fases preliminars i requereixen un prefix:
Regla pràctica: si una comanda «no existeix», prova amb beta i amb alpha abans de donar-la per impossible. I no facis servir comandes alpha a producció: la seva interfície pot canviar sense avís previ.
- Formats de sortida:
--format
--formatPer defecte, gcloud retorna una taula pensada per a humans. El flag --format permet canviar completament aquesta sortida, i és la clau per fer servir gcloud dins d'scripts.
| Format | Per a què serveix |
|---|---|
--format=table(...) |
Taula llegible amb les columnes que triïs |
--format=json |
JSON complet, ideal per processar amb jq |
--format=yaml |
YAML, còmode de llegir per a objectes complexos |
--format=value(...) |
Només els valors, sense capçaleres: el format per a scripts |
--format=csv(...) |
CSV, per a fulls de càlcul |
--format=flattened |
Tots els camps com a parells clau-valor, un per línia |
Exemples aplicats:
# Taula a mida: només els camps que interessen
gcloud projects list \
--format="table(projectId, name, projectNumber, lifecycleState)"# JSON complet d'un recurs: útil per descobrir quins camps existeixen
gcloud projects describe alpinashop-dev --format=json# Nomes un valor, sense capçalera ni adorns: perfecte per desar en una variable
PROJECT_NUMBER=$(gcloud projects describe alpinashop-dev \
--format="value(projectNumber)")
echo "Numero de projecte: $PROJECT_NUMBER"# Diversos valors en una linia, separats per tabuladors
gcloud projects list --format="value(projectId, projectNumber)"Funcions útils dins de --format, que estalvien molt postprocessament:
# basename() extreu l'ultim segment d'una URL de recurs.
# Sense ella, la zona apareix com una URL llarga de l'API.
gcloud compute instances list \
--format="table(name, zone.basename(), status, machineType.basename())"# Canviar el nom de les columnes i ordenar la sortida
gcloud projects list \
--format="table[box](projectId:label=ID, name:label=NOM)" \
--sort-by=projectIdLa regla que convé gravar: table perquè ho llegeixis tu, value perquè ho llegeixi un script, json per processar-ho amb jq.
- Filtres:
--filter
--filter--filter redueix el conjunt de resultats al costat del servidor o del client segons la comanda, evitant haver de filtrar amb grep, que és fràgil.
Operadors disponibles:
| Operador | Significat | Exemple |
|---|---|---|
= |
Igual | --filter="status=RUNNING" |
!= |
Diferent | --filter="status!=TERMINATED" |
>, <, >=, <= |
Comparació numèrica o de dates | --filter="creationTimestamp>2026-01-01" |
: |
Conté / té la clau | --filter="labels.entorno:*" |
~ |
Coincideix amb expressió regular | --filter="name~^web-" |
!~ |
No coincideix amb la regex | --filter="name!~^test-" |
AND, OR, NOT |
Combinació lògica | --filter="status=RUNNING AND zone:europe-west1" |
( ) |
Agrupació | --filter="(a=1 OR b=2) AND c=3" |
Exemples aplicats a AlpinaShop:
# Instàncies en execució en qualsevol zona d'europe-west1
gcloud compute instances list \
--filter="status=RUNNING AND zone:europe-west1" \
--format="table(name, zone.basename(), status)"# Projectes etiquetats com a entorno=desarrollo
gcloud projects list \
--filter="labels.entorno=desarrollo" \
--format="table(projectId, name)"# Totes les APIs actives relacionades amb emmagatzematge o base de dades
gcloud services list --enabled \
--filter="config.name~storage OR config.name~sql" \
--format="value(config.name)"Com descobrir per quins camps es pot filtrar: mira primer la sortida en JSON. Els noms de camp del JSON són exactament els que accepta --filter.
# Pas 1: veure l'estructura completa de l'objecte
gcloud compute instances describe web-1 --zone=europe-west1-b --format=json
# Pas 2: filtrar fent servir els noms de camp que has vist
gcloud compute instances list --filter="machineType~e2-micro"
- Autenticació:
gcloud init, auth login i application-default
gcloud init, auth login i application-defaultAquest apartat resol una de les confusions més habituals entre qui comença.
gcloud init
És l'assistent de configuració inicial. Fa tres coses en una: t'autentica, et deixa triar projecte per defecte i et deixa triar regió i zona per defecte.
Fes-lo servir la primera vegada que configures el CLI en una màquina, o quan vulguis crear una configuració nova des de zero.
gcloud auth login davant de gcloud auth application-default login
Són dues credencials diferents, per a dos consumidors diferents:
gcloud auth login |
gcloud auth application-default login |
|
|---|---|---|
| Per a qui | Per a la comanda gcloud i altres eines del SDK |
Per al teu codi: biblioteques client de Python, Java, Go... |
| Què desa | Credencials d'usuari del SDK | Un fitxer d'Application Default Credentials (ADC) |
| On | Configuració interna de gcloud |
~/.config/gcloud/application_default_credentials.json |
| Qui ho fa servir | gcloud, gsutil, bq |
El codi que fa servir google-cloud-* al teu equip |
| Quan el necessites | Sempre, per administrar | Només si desenvolupes localment contra APIs de Google Cloud |
L'escenari clàssic que confon tothom: Dani executa gcloud storage ls i funciona, però el seu script de Python falla amb un error de credencials. La causa és que va fer gcloud auth login però no gcloud auth application-default login: la biblioteca client busca les ADC, no les credencials del CLI.
Comptes de servei
Per a processos automatitzats (un pipeline de CI/CD, una tasca programada) no es fan servir credencials d'usuari, sinó comptes de servei. I dins de Google Cloud, el correcte és no descarregar claus: una VM, un servei de Cloud Run o un pod de GKE obtenen credencials automàticament del compte de servei que tinguin associat.
# Autenticar-se amb un compte de servei a partir d'un fitxer de clau.
# Evita-ho sempre que puguis: les claus descarregades son un risc de seguretat.
gcloud auth activate-service-account \
--key-file=/ruta/clave.jsonEls comptes de servei, els seus rols i les alternatives segures a les claus descarregades (Workload Identity Federation) s'estudien a la lliçó 03-04.
- Configuracions anomenades
Una configuració de gcloud és un conjunt de propietats: compte actiu, projecte, regió i zona per defecte. En pots tenir diverses amb nom i saltar entre elles amb una comanda, cosa que resol elegantment el problema d'alternar entre alpinashop-dev i alpinashop-prod.
# Crear la configuració de desenvolupament
gcloud config configurations create alpinashop-dev
gcloud config set account [email protected]
gcloud config set project alpinashop-dev
gcloud config set compute/region europe-west1
gcloud config set compute/zone europe-west1-b# Crear la configuració de producció
gcloud config configurations create alpinashop-prod
gcloud config set account [email protected]
gcloud config set project alpinashop-prod
gcloud config set compute/region europe-west1
gcloud config set compute/zone europe-west1-bDues tècniques complementàries molt recomanables:
# Executar UNA comanda amb una altra configuració sense canviar l'activa
gcloud compute instances list --configuration=alpinashop-prod# Sobreescriure el projecte només per a una comanda
gcloud compute instances list --project=alpinashop-prodI un consell que evita accidents seriosos: afegeix el projecte actiu al teu prompt de bash. Veure a cada línia sobre quin projecte estàs treballant és la millor prevenció contra executar a producció una cosa pensada per a desenvolupament.
# Afegir a ~/.bashrc: mostra el projecte actiu al prompt
export PS1='[$(gcloud config get-value project 2>/dev/null)] \w\$ '
- Altres eines del SDK
El Google Cloud CLI inclou diverses eines a més de gcloud:
| Eina | Per a què | Estat |
|---|---|---|
gcloud |
Administració general de Google Cloud | La principal |
gcloud storage |
Operacions amb Cloud Storage | Recomanada actualment: més ràpida que gsutil |
gsutil |
Eina clàssica de Cloud Storage | Encara funciona; s'està substituint per gcloud storage |
bq |
Consultes i administració de BigQuery | Estàndard per a BigQuery |
kubectl |
Administració de Kubernetes / GKE | Estàndard de Kubernetes, no específic de Google |
# GKE: obtenir credencials d'un clúster per poder fer servir kubectl
gcloud container clusters get-credentials alpinashop-cluster \
--region=europe-west1
kubectl get nodesAquestes eines es faran servir a fons als seus mòduls corresponents: Cloud Storage a 02-02, GKE a 02-05 i BigQuery a 04-01. Aquí només deixem constància que existeixen i que s'instal·len juntes.
- Scripting bàsic amb
gcloud
gcloudLa combinació de --format=value(...) amb bash converteix gcloud en una eina d'automatització potent. El patró fonamental és sempre el mateix: llistar amb un filtre, extreure un valor net, iterar.
# Desar un valor en una variable
PROJECT_ID=$(gcloud config get-value project)
PROJECT_NUMBER=$(gcloud projects describe "$PROJECT_ID" \
--format="value(projectNumber)")
echo "Projecte: $PROJECT_ID (numero $PROJECT_NUMBER)"# Iterar sobre els resultats d'un llistat.
# Aquest bucle recorre totes les instancies aturades i mostra el seu nom i zona.
gcloud compute instances list \
--filter="status=TERMINATED" \
--format="value(name, zone.basename())" |
while read -r NOM ZONA; do
echo "Instancia aturada: $NOM a $ZONA"
# Aqui podries executar, per exemple:
# gcloud compute instances delete "$NOM" --zone="$ZONA" --quiet
done# El flag --quiet respon "si" a totes les confirmacions.
# Imprescindible en scripts desatesos, PERILLOS en teclejar a ma.
gcloud compute instances delete web-pruebas --zone=europe-west1-b --quiet# Combinar gcloud amb jq per a consultes mes complexes sobre el JSON
gcloud projects list --format=json |
jq -r '.[] | select(.labels.entorno == "desarrollo") | .projectId'Bones pràctiques per a scripts de gcloud:
- Comença sempre amb
set -eperquè l'script s'aturi tan bon punt una comanda falli, en lloc de continuar sobre un estat inconsistent. - Indica el projecte explícitament amb
--projecten scripts importants, en lloc de dependre de la configuració activa. Un script que esborra recursos i confia en la configuració activa és un accident esperant a passar. - Prova primer sense
--quiet, per veure què et preguntarà i sobre quins recursos actuaria. - Moltes comandes accepten
--dry-runo tenen equivalents de només lectura: fes-los servir abans d'executar operacions destructives.
- Primer desplegament real: la pàgina de «pròximament» d'AlpinaShop
Arriba el moment de posar alguna cosa a internet. Dani publicarà una pàgina estàtica de «pròximament» mentre l'equip prepara la migració, fent servir Cloud Storage per allotjar-la. És un avançament deliberat del servei que s'estudia a fons a la lliçó 02-02: aquí el fem servir com a exercici integrador de tot l'après al mòdul, sense entrar en classes d'emmagatzematge, cicles de vida ni versionat.
Pas 1. Preparar l'entorn. Obre Cloud Shell i confirma on ets:
gcloud config set project alpinashop-dev
gcloud config set compute/region europe-west1
gcloud config listPas 2. Crear la pàgina. Fes servir l'editor o directament el terminal:
mkdir -p ~/alpinashop-proximamente && cd ~/alpinashop-proximamente
cat > index.html <<'HTML'
<h1>AlpinaShop</h1>
<p>Material de muntanya. Estem preparant la nostra nova botiga en linia.</p>
<p>Molt aviat, aqui.</p>
HTML
cat > 404.html <<'HTML'
<h1>Pagina no trobada</h1>
<p>Torna a la <a href="/">portada d'AlpinaShop</a>.</p>
HTMLEl bloc cat > fitxer <<'HTML' ... HTML és un here-document: escriu al fitxer tot el que hi ha entre les dues marques. Posar la marca entre cometes simples evita que bash intenti interpretar $ o cometes dins del contingut.
Pas 3. Crear el bucket. Els noms de bucket són únics a tot Google Cloud, igual que els projectId, així que hi afegim un sufix per evitar col·lisions:
# Genera un nom unic afegint un sufix aleatori
export BUCKET="alpinashop-proximamente-$RANDOM"
echo "Bucket: $BUCKET"
gcloud storage buckets create "gs://$BUCKET" \
--location=europe-west1 \
--uniform-bucket-level-accessDesglossament de la comanda:
gs://és l'esquema d'URI de Cloud Storage.--location=europe-west1fixa la regió. Recorda de la lliçó 01-05: la ubicació d'un bucket és immutable.--uniform-bucket-level-accessdesactiva les llistes de control d'accés per objecte i fa que tots els permisos es gestionin només amb IAM. És l'opció recomanada perquè simplifica enormement el raonament sobre qui pot veure què.
Pas 4. Pujar els fitxers:
Pas 5. Fer públic el contingut. Aquest pas concedeix lectura a qualsevol a internet. És exactament el que volem per a una pàgina pública, i exactament el que mai has de fer amb un bucket que contingui dades internes:
gcloud storage buckets add-iam-policy-binding "gs://$BUCKET" \
--member=allUsers \
--role=roles/storage.objectViewerallUsers és un identificador especial d'IAM que significa «qualsevol, autenticat o no». El rol roles/storage.objectViewer concedeix només lectura d'objectes: no permet llistar la configuració del bucket ni escriure res.
Pas 6. Configurar el bucket com a lloc web i comprovar el resultat:
gcloud storage buckets update "gs://$BUCKET" \
--web-main-page-index=index.html \
--web-error-page=404.html# Comprovar des del propi terminal que la pagina se serveix
curl -s "https://storage.googleapis.com/$BUCKET/index.html"Si curl retorna l'HTML que vas escriure, acabes de publicar el teu primer contingut a Google Cloud: has creat un recurs a la regió correcta, n'has configurat els permisos i ho has verificat, tot des del navegador i sense instal·lar res.
Pas 7. Netejar. Fonamental: no deixis recursos encesos que no faràs servir.
El que no hem fet aquí, i es veurà més endavant: servir la pàgina sota el domini alpinashop.example amb certificat TLS (requereix un balancejador de càrrega, lliçó 03-07), accelerar-la amb Cloud CDN (03-03), triar classe d'emmagatzematge i regles de cicle de vida (02-02) i automatitzar el desplegament amb Cloud Build (06-01).
Errors Habituals i Consells
- Confondre
gcloud auth loginambgcloud auth application-default login. El primer autentica el CLI; el segon, el teu codi. Si el teu script de Python falla amb error de credencials igcloudfunciona, és això. - Instal·lar paquets a Cloud Shell i perdre'ls. Només
$HOMEpersisteix. Fes servir~/.customize_environmentper al que necessitis a cada arrencada. - Executar una comanda al projecte equivocat. Fes servir configuracions anomenades, posa el projecte al prompt i afegeix
--projectexplícit als scripts perillosos. - Filtrar amb
grepen lloc de--filter.grepdepèn del format de sortida, que pot canviar;--filteropera sobre els camps reals de l'objecte. - Fer servir
--quieten teclejar a mà. Està pensat per a scripts desatesos. Interactivament, aquestes confirmacions són la teva última línia de defensa. - Suposar que una comanda no existeix. Prova
gcloud search-help, i prova els prefixosbetaialpha. - Treballar amb un CLI desactualitzat. Molts errors estranys es resolen amb
gcloud components update. - Consell: aprèn
--format=jsonper explorar. És la manera de descobrir quins camps té un recurs i, per tant, per quins camps pots filtrar i què pots extreure. - Consell: desa les teves comandes en scripts des del principi. El que avui teclejes a mà, demà ho repetiràs; i al mòdul 6 ho convertiràs en un pipeline.
- Consell: fes servir l'enllaç «Línia de comandes equivalent» de la consola. Continua sent la manera més ràpida d'aprendre comandes noves.
Exercicis
Exercici 1: dominar --format i --filter
Escriu les comandes gcloud que resolguin el següent. Executa-les al teu projecte per comprovar-les:
- Mostrar tots els teus projectes en una taula amb només l'ID i el número de projecte.
- Desar en una variable de bash anomenada
NUMel número del projectealpinashop-dev, sense capçaleres ni text addicional. - Llistar les APIs habilitades el nom de les quals contingui
storageosql, mostrant únicament el nom. - Llistar les zones de la regió
europe-west1mostrant nom i estat en format de taula. - Esbrinar, sense sortir del terminal, quina comanda de
gcloudserveix per gestionar pressupostos de facturació.
Exercici 2: configuracions i autenticació
Marta necessita treballar sobre dos projectes i vol evitar accidents.
- Crea dues configuracions anomenades,
alpinashop-devialpinashop-prod, cadascuna amb el seu projecte, la regióeurope-west1i la zonaeurope-west1-b. - Escriu la comanda per llistar les instàncies de producció sense canviar la configuració activa (dues maneres diferents d'aconseguir-ho).
- Dani executa correctament
gcloud storage lsperò el seu script de Python falla ambDefaultCredentialsError. Explica'n la causa i dona la comanda que ho soluciona. - Proposa una mesura addicional que redueixi el risc d'executar per error una comanda destructiva a producció.
Exercici 3: desplegament complet i neteja
Reprodueix el desplegament de l'apartat 11 amb una variant: en lloc d'una pàgina fixa, la portada ha de mostrar la data en què es va generar i la regió on està allotjat el bucket.
- Genera l'
index.htmlincloent-hi la data actual i el nom de la regió. - Crea el bucket amb un nom únic, puja-hi el fitxer, fes-lo públic i configura'l com a lloc web.
- Verifica amb
curlque el contingut servit inclou la data. - Escriu un petit script que comprovi que el bucket existeix i mostri quants objectes conté.
- Elimina tots els recursos creats.
Solucions
Solució 1
# 1
gcloud projects list --format="table(projectId, projectNumber)"
# 2
NUM=$(gcloud projects describe alpinashop-dev --format="value(projectNumber)")
echo "$NUM"
# 3
gcloud services list --enabled \
--filter="config.name~storage OR config.name~sql" \
--format="value(config.name)"
# 4
gcloud compute zones list \
--filter="region:europe-west1" \
--format="table(name, status)"
# 5
gcloud search-help "budget"El punt 5 retornarà, entre altres resultats, gcloud billing budgets, amb les seves accions create, list, describe, update i delete. És la manera correcta de descobrir comandes sense sortir del terminal.
Solució 2
# 1. Configuracio de desenvolupament
gcloud config configurations create alpinashop-dev
gcloud config set project alpinashop-dev
gcloud config set compute/region europe-west1
gcloud config set compute/zone europe-west1-b
# Configuracio de produccio
gcloud config configurations create alpinashop-prod
gcloud config set project alpinashop-prod
gcloud config set compute/region europe-west1
gcloud config set compute/zone europe-west1-b
# Tornar a desenvolupament com a configuracio activa
gcloud config configurations activate alpinashop-dev# 2. Dues maneres de consultar produccio sense canviar la configuracio activa
gcloud compute instances list --configuration=alpinashop-prod
gcloud compute instances list --project=alpinashop-prodLa primera fa servir la configuració completa de producció (compte, projecte, regió); la segona només sobreescriu el projecte i conserva la resta de la configuració activa. Per a operacions de només lectura totes dues serveixen; si les configuracions fessin servir comptes diferents, la primera seria la correcta.
- La causa és que
gcloud auth loginautentica el CLI, però les biblioteques client de Python busquen les Application Default Credentials, que són un fitxer diferent. La solució:
- Diverses mesures vàlides, i l'ideal és combinar-les: mostrar el projecte actiu al prompt de bash (
export PS1='[$(gcloud config get-value project)] \w\$ '); fer servir sempre--projectexplícit als scripts que esborren o modifiquen recursos; no concedir al compte de treball diari permisos d'esborrat a producció, aplicant el principi de mínim privilegi (lliçó 03-04); i fer servir navegadors o perfils diferents per a consola de desenvolupament i de producció.
Solució 3
#!/bin/bash
set -e
REGION="europe-west1"
BUCKET="alpinashop-proximamente-$RANDOM"
# 1. Generar la pagina amb data i regio
mkdir -p ~/alpinashop-proximamente && cd ~/alpinashop-proximamente
cat > index.html <<HTML
<h1>AlpinaShop</h1>
<p>Material de muntanya. Nova botiga en linia en cami.</p>
<p>Generat el $(date '+%d/%m/%Y %H:%M') | Allotjat a la regio $REGION</p>
HTMLFixa't en una diferència respecte a l'exemple de l'apartat 11: aquí la marca del here-document no va entre cometes simples (<<HTML en lloc de <<'HTML'), precisament perquè volem que bash substitueixi $(date ...) i $REGION abans d'escriure el fitxer.
# 2. Crear el bucket, pujar, publicar i configurar com a lloc web
gcloud storage buckets create "gs://$BUCKET" \
--location="$REGION" \
--uniform-bucket-level-access
gcloud storage cp index.html "gs://$BUCKET/"
gcloud storage buckets add-iam-policy-binding "gs://$BUCKET" \
--member=allUsers \
--role=roles/storage.objectViewer
gcloud storage buckets update "gs://$BUCKET" \
--web-main-page-index=index.html# 3. Verificar el contingut servit
curl -s "https://storage.googleapis.com/$BUCKET/index.html" | grep "Generat el"# 4. Comprovar existencia i comptar objectes
if gcloud storage buckets describe "gs://$BUCKET" \
--format="value(name)" > /dev/null 2>&1; then
OBJECTES=$(gcloud storage ls "gs://$BUCKET/**" | wc -l)
echo "El bucket $BUCKET existeix i conte $OBJECTES objecte(s)."
else
echo "El bucket $BUCKET no existeix."
exit 1
fiLa comprovació fa servir describe redirigint la sortida a /dev/null i avaluant només el seu codi de sortida: si el bucket no existeix, la comanda falla i entra a la branca else. El patró gs://$BUCKET/** llista tots els objectes de manera recursiva, i wc -l els compta.
Conclusió
Amb aquesta lliçó tanquem el mòdul 1, i ho fem amb alguna cosa funcionant a internet. Hem après què és Cloud Shell, què porta preinstal·lat i quins són els seus límits reals —especialment que només persisteixen els 5 GB del teu $HOME—, a més del seu editor web i la vista prèvia. Hem vist com instal·lar el CLI a Linux, macOS i Windows, i quan compensa cada opció. Hem desmuntat l'anatomia d'una comanda gcloud en grup, subgrup, acció i flags, cosa que converteix la CLI en una cosa deduïble, i hem après a demanar-li ajuda amb --help i gcloud search-help. Hem dominat --format (amb table per llegir, value per a scripts i json per explorar) i --filter amb tots els seus operadors. Hem aclarit la diferència entre gcloud auth login i gcloud auth application-default login, i hem muntat configuracions anomenades per alternar amb seguretat entre alpinashop-dev i alpinashop-prod. Hem conegut gcloud storage, bq i kubectl, que ens acompanyaran en mòduls posteriors, i hem escrit els nostres primers scripts encadenant gcloud amb bash. I, sobretot, Dani ha publicat la pàgina de «pròximament» d'AlpinaShop des del navegador, ha comprovat que se serveix i ha netejat els recursos després.
Repassant el mòdul sencer: vam entendre què és el núvol i per què AlpinaShop el necessita, vam obrir el compte amb pressupostos de seguretat des del primer dia, vam aprendre a moure'ns per la consola, vam dissenyar la jerarquia de projectes i la facturació, vam triar europe-west1 com a regió i vam comprendre quina part de la seguretat és nostra, i ara sabem manejar les eines. Tenim el terreny preparat i sabem fer servir la maquinària.
Al mòdul 2, Serveis principals de GCP, comencem a construir de debò: crearem màquines virtuals amb Compute Engine, mourem els 60 GB d'imatges de producte al bucket alpinashop-catalogo de Cloud Storage, migrarem la base de dades tienda a la instància Cloud SQL alpinashop-pedidos, coneixerem App Engine i el clúster alpinashop-cluster a Google Kubernetes Engine, explorarem les bases de dades NoSQL i acabarem amb el criteri per triar el servei de còmput adequat en cada cas. La migració d'AlpinaShop deixa de ser un pla i comença a ser codi.
Curs de Google Cloud Platform (GCP)
Mòdul 1: Introducció a Google Cloud Platform
- Què és Google Cloud Platform?
- Configuració del teu compte de GCP
- Descripció general de la consola de GCP
- Projectes, jerarquia de recursos i facturació
- Regions, zones i model de responsabilitat compartida
- Cloud Shell i la CLI de gcloud
Mòdul 2: Serveis principals de GCP
- Compute Engine: màquines virtuals a Google Cloud
- Cloud Storage: emmagatzematge d'objectes
- Cloud SQL: bases de dades relacionals gestionades
- App Engine: plataforma com a servei
- Google Kubernetes Engine (GKE)
- Bases de dades NoSQL: Firestore, Bigtable i Spanner
- Com triar el servei de còmput adequat
Mòdul 3: Xarxes i seguretat
- Xarxes VPC
- Balanceig de càrrega al núvol
- Cloud CDN
- Gestió d'identitat i accés (IAM)
- Cloud Armor
- Secrets i xifratge: Secret Manager i Cloud KMS
- Cloud DNS, certificats TLS i publicació segura de serveis
Mòdul 4: Dades i anàlisi
- BigQuery: el magatzem de dades analític
- Cloud Dataflow: processament de dades per lots i en temps real
- Cloud Dataproc: Spark i Hadoop gestionats
- Cloud Pub/Sub: missatgeria asíncrona
- Cloud Data Fusion: integració de dades sense codi
- Orquestració de pipelines amb Cloud Composer i Workflows
- Govern de les dades i taulers amb Dataplex i Looker Studio
Mòdul 5: Aprenentatge automàtic i IA
- Vertex AI: la plataforma d'aprenentatge automàtic de GCP
- AutoML: models a mida sense escriure codi
- TensorFlow a GCP: entrenament i servei de models
- API de llenguatge natural
- API de visió
- IA generativa a Vertex AI: models Gemini i incrustacions
- MLOps: del model al producte amb Vertex AI Pipelines
Mòdul 6: DevOps i monitoratge
- Cloud Build: integració contínua a GCP
- Cloud Source Repositories i gestió del codi font
- Cloud Functions: funcions sense servidor
- Cloud Monitoring (abans Stackdriver): mètriques, taulers i alertes
- Cloud Deployment Manager i infraestructura com a codi nativa
- Cloud Logging i Cloud Trace: registres, traces i diagnòstic
- Terraform a GCP: infraestructura com a codi a la pràctica
Mòdul 7: Temes avançats de GCP
- Híbrid i multinúvol amb Anthos
- Computació sense servidor amb Cloud Run
- Xarxes avançades: VPC compartida, aparellament i connectivitat híbrida
- Bones pràctiques de seguretat
- Gestió i optimització de costos
- Fiabilitat: SLO, alta disponibilitat i recuperació de desastres
- Govern a escala: organització, polítiques i auditoria
