Blog - Jorge Rodriguez Flores
← Volver al blog

Guía Completa de gcloud CLI: Domina Google Cloud desde la Terminal

gcloud google cloud gcp cli infraestructura devops
Compartir: X / Twitter LinkedIn
Guía Completa de gcloud CLI: Domina Google Cloud desde la Terminal

El gcloud CLI (Command Line Interface) es la herramienta oficial de Google para interactuar con Google Cloud Platform directamente desde la terminal. Con más de 500 comandos disponibles, gcloud permite gestionar virtualmente cualquier recurso de GCP: desde instancias de Compute Engine hasta clústeres de Kubernetes, pasando por Cloud Storage, IAM, redes y mucho más. Dominar gcloud es una habilidad esencial para cualquier ingeniero de infraestructura, DevOps o SRE que trabaje en el ecosistema de Google Cloud.

Instalación y Configuración Inicial

El SDK de Google Cloud incluye gcloud, gsutil (para Cloud Storage) y bq (para BigQuery). La instalación varía según el sistema operativo:

Instalación en Linux / macOS

# Descargar e instalar el SDK de Google Cloud
curl https://sdk.cloud.google.com | bash

# Reiniciar el shell o recargar el perfil
exec -l $SHELL

# Verificar instalación
gcloud version
# Google Cloud SDK 480.0.0
# bq 2.1.7
# core 2024.10.01
# gsutil 5.30

Instalación en Ubuntu/Debian (repositorio apt)

# Añadir el repositorio de Google Cloud
echo "deb [signed-by=/usr/share/keyrings/cloud.google.gpg] https://packages.cloud.google.com/apt cloud-sdk main" \
  | sudo tee -a /etc/apt/sources.list.d/google-cloud-sdk.list

# Importar la clave pública de Google
curl https://packages.cloud.google.com/apt/doc/apt-key.gpg \
  | sudo apt-key --keyring /usr/share/keyrings/cloud.google.gpg add -

# Instalar
sudo apt-get update && sudo apt-get install google-cloud-cli

# Instalar componentes adicionales (kubectl, emuladores, etc.)
sudo apt-get install google-cloud-cli-gke-gcloud-auth-plugin

Inicialización y autenticación

# Inicializar el SDK (autenticación + selección de proyecto)
gcloud init

# Autenticación manual (abre el navegador)
gcloud auth login

# Autenticación para Application Default Credentials (ADC)
# Usadas por SDKs y librerías cliente
gcloud auth application-default login

# Autenticación con cuenta de servicio (para pipelines CI/CD)
gcloud auth activate-service-account \
  --key-file=/ruta/a/service-account-key.json

# Ver cuenta activa
gcloud auth list
gcloud config get-value account

Gestión de Proyectos y Configuraciones

En GCP todo recurso pertenece a un proyecto. gcloud permite cambiar entre proyectos fácilmente y guardar múltiples configuraciones mediante named configurations:

# Listar proyectos disponibles
gcloud projects list

# Establecer el proyecto activo
gcloud config set project mi-proyecto-produccion

# Ver configuración actual
gcloud config list
# [core]
# account = usuario@empresa.com
# project = mi-proyecto-produccion
# [compute]
# region = us-central1
# zone = us-central1-a

# Crear una configuración nombrada (para múltiples entornos)
gcloud config configurations create dev
gcloud config configurations create prod

# Cambiar entre configuraciones
gcloud config configurations activate dev
gcloud config configurations activate prod

# Listar todas las configuraciones
gcloud config configurations list

# Configurar región y zona por defecto
gcloud config set compute/region us-central1
gcloud config set compute/zone us-central1-a

Compute Engine: Gestión de Máquinas Virtuales

Compute Engine es el servicio de VMs de GCP. gcloud simplifica enormemente la creación y gestión de instancias:

# Crear una instancia básica
gcloud compute instances create mi-servidor \
  --machine-type=e2-medium \
  --image-family=debian-12 \
  --image-project=debian-cloud \
  --zone=us-central1-a

# Crear instancia con opciones avanzadas
gcloud compute instances create web-server \
  --machine-type=n2-standard-4 \
  --image-family=ubuntu-2204-lts \
  --image-project=ubuntu-os-cloud \
  --boot-disk-size=50GB \
  --boot-disk-type=pd-ssd \
  --network-interface=network=mi-vpc,subnet=mi-subnet \
  --tags=http-server,https-server \
  --service-account=mi-sa@proyecto.iam.gserviceaccount.com \
  --scopes=cloud-platform \
  --metadata-from-file=startup-script=startup.sh

# Listar instancias
gcloud compute instances list
gcloud compute instances list --filter="zone:us-central1-a AND status:RUNNING"

# Conectarse por SSH (configura automáticamente claves)
gcloud compute ssh mi-servidor --zone=us-central1-a

# Copiar archivos (similar a scp)
gcloud compute scp archivo.txt mi-servidor:~/destino/ --zone=us-central1-a

# Iniciar / detener / eliminar instancias
gcloud compute instances start mi-servidor --zone=us-central1-a
gcloud compute instances stop mi-servidor --zone=us-central1-a
gcloud compute instances delete mi-servidor --zone=us-central1-a

# Ver detalles de una instancia
gcloud compute instances describe mi-servidor --zone=us-central1-a

# Ejecutar comando remoto sin SSH interactivo
gcloud compute ssh mi-servidor --zone=us-central1-a \
  --command="sudo apt-get update && sudo apt-get upgrade -y"

Gestión de discos e instantáneas

# Crear disco adicional
gcloud compute disks create mi-disco \
  --size=100GB \
  --type=pd-ssd \
  --zone=us-central1-a

# Adjuntar disco a instancia
gcloud compute instances attach-disk mi-servidor \
  --disk=mi-disco \
  --zone=us-central1-a

# Crear snapshot de disco
gcloud compute snapshots create snapshot-$(date +%Y%m%d) \
  --source-disk=mi-disco \
  --source-disk-zone=us-central1-a

# Listar snapshots
gcloud compute snapshots list

Google Kubernetes Engine (GKE)

GKE es uno de los servicios más utilizados de GCP. gcloud integra la gestión de clústeres de Kubernetes con kubectl:

# Crear un clúster GKE estándar
gcloud container clusters create mi-cluster \
  --num-nodes=3 \
  --machine-type=e2-standard-4 \
  --region=us-central1

# Crear clúster Autopilot (gestión automática de nodos)
gcloud container clusters create-auto mi-cluster-auto \
  --region=us-central1

# Obtener credenciales para kubectl
gcloud container clusters get-credentials mi-cluster \
  --region=us-central1

# Verificar conexión
kubectl get nodes
kubectl get pods --all-namespaces

# Listar clústeres
gcloud container clusters list

# Actualizar versión de Kubernetes
gcloud container clusters upgrade mi-cluster \
  --master \
  --cluster-version=1.30

# Escalar el pool de nodos
gcloud container clusters resize mi-cluster \
  --node-pool=default-pool \
  --num-nodes=5 \
  --region=us-central1

# Eliminar clúster
gcloud container clusters delete mi-cluster --region=us-central1

IAM: Gestión de Identidades y Accesos

La gestión correcta de IAM (Identity and Access Management) es fundamental para la seguridad en GCP. gcloud facilita la administración granular de permisos:

# Listar roles disponibles
gcloud iam roles list --project=mi-proyecto

# Ver permisos de un rol predefinido
gcloud iam roles describe roles/compute.admin

# Crear cuenta de servicio
gcloud iam service-accounts create mi-sa \
  --display-name="Mi Service Account" \
  --description="SA para el servicio de procesamiento"

# Listar cuentas de servicio
gcloud iam service-accounts list

# Asignar rol a cuenta de servicio en un proyecto
gcloud projects add-iam-policy-binding mi-proyecto \
  --member="serviceAccount:mi-sa@mi-proyecto.iam.gserviceaccount.com" \
  --role="roles/storage.objectViewer"

# Asignar rol a usuario
gcloud projects add-iam-policy-binding mi-proyecto \
  --member="user:jorge@empresa.com" \
  --role="roles/compute.viewer"

# Ver política IAM del proyecto
gcloud projects get-iam-policy mi-proyecto

# Generar clave para cuenta de servicio (evitar en lo posible — usar Workload Identity)
gcloud iam service-accounts keys create clave.json \
  --iam-account=mi-sa@mi-proyecto.iam.gserviceaccount.com

# Crear rol personalizado
gcloud iam roles create miRolPersonalizado \
  --project=mi-proyecto \
  --title="Mi Rol Personalizado" \
  --permissions=compute.instances.get,compute.instances.list

Cloud Storage con gsutil y gcloud Storage

Google Cloud Storage es el servicio de almacenamiento de objetos de GCP. Desde 2022, gcloud incluye el comando gcloud storage como sustituto moderno de gsutil:

# Crear bucket
gcloud storage buckets create gs://mi-bucket-unico \
  --location=US-CENTRAL1 \
  --uniform-bucket-level-access

# Listar buckets
gcloud storage buckets list

# Copiar archivos al bucket
gcloud storage cp archivo.txt gs://mi-bucket/ruta/
gcloud storage cp -r carpeta/ gs://mi-bucket/carpeta/

# Sincronizar directorio (solo cambios)
gcloud storage rsync -r ./local/ gs://mi-bucket/remote/

# Listar objetos
gcloud storage ls gs://mi-bucket/
gcloud storage ls -l gs://mi-bucket/  # con tamaño y fecha

# Descargar archivos
gcloud storage cp gs://mi-bucket/archivo.txt ./local/

# Hacer objeto público
gcloud storage objects update gs://mi-bucket/archivo.txt \
  --add-acl-grant=entity=allUsers,role=READER

# Eliminar objetos
gcloud storage rm gs://mi-bucket/archivo.txt
gcloud storage rm -r gs://mi-bucket/carpeta/

# Ver uso de almacenamiento
gcloud storage du gs://mi-bucket/ --summarize

Automatización y Scripting con gcloud

Una de las mayores fortalezas de gcloud es su integración en scripts de automatización. El flag --format y los filtros permiten extraer datos con precisión quirúrgica:

# Formato de salida: json, yaml, csv, table, value
gcloud compute instances list --format=json
gcloud compute instances list --format="csv(name,status,machineType)"
gcloud compute instances list --format="value(name)"

# Filtros avanzados
gcloud compute instances list \
  --filter="status=RUNNING AND labels.env=production" \
  --format="table(name,zone,machineType,status)"

# Usar la salida en scripts bash
INSTANCIAS=$(gcloud compute instances list --format="value(name)")
for instancia in $INSTANCIAS; do
  echo "Procesando: $instancia"
  gcloud compute instances describe "$instancia" --format="value(status)"
done

# Script para crear snapshot de todas las instancias
gcloud compute instances list --format="value(name,zone)" | \
while IFS=$'\t' read -r nombre zona; do
  echo "Snapshot de $nombre en $zona"
  gcloud compute disks snapshot \
    $(gcloud compute instances describe "$nombre" \
      --zone="$zona" \
      --format="value(disks[0].source.basename())") \
    --zone="$zona" \
    --snapshot-names="auto-$(date +%Y%m%d)-${nombre}"
done

# Suprimir confirmaciones interactivas (para scripts)
gcloud compute instances delete mi-instancia \
  --zone=us-central1-a \
  --quiet

Configuración para entornos CI/CD

# En pipelines de CI/CD usar Workload Identity Federation (recomendado)
# O bien, autenticar con service account key:
export GOOGLE_APPLICATION_CREDENTIALS="/ruta/service-account.json"
gcloud auth activate-service-account --key-file="$GOOGLE_APPLICATION_CREDENTIALS"
gcloud config set project $PROJECT_ID

# Ejemplo: pipeline de deploy a Cloud Run
gcloud run deploy mi-servicio \
  --image=gcr.io/$PROJECT_ID/mi-imagen:$TAG \
  --platform=managed \
  --region=us-central1 \
  --allow-unauthenticated \
  --memory=512Mi \
  --concurrency=100 \
  --quiet

# Verificar el deploy
gcloud run services describe mi-servicio \
  --region=us-central1 \
  --format="value(status.url)"

Comandos Esenciales del Día a Día

Estos son los comandos que usarás con mayor frecuencia en el trabajo diario con GCP:

# Ver logs en tiempo real (Cloud Logging)
gcloud logging read "resource.type=gce_instance AND severity>=ERROR" \
  --limit=50 \
  --format=json | jq '.[] | {timestamp, message: .textPayload}'

# Seguir logs en tiempo real
gcloud alpha logging tail "resource.type=cloud_run_revision"

# Gestión de Cloud SQL
gcloud sql instances list
gcloud sql connect mi-instancia-sql --user=root
gcloud sql databases list --instance=mi-instancia-sql

# Crear reglas de firewall
gcloud compute firewall-rules create allow-http \
  --allow=tcp:80 \
  --source-ranges=0.0.0.0/0 \
  --target-tags=http-server

# Ver IPs externas de instancias
gcloud compute instances list \
  --format="table(name,networkInterfaces[0].accessConfigs[0].natIP)"

# Gestión de Cloud Functions
gcloud functions deploy mi-funcion \
  --runtime=python311 \
  --trigger-http \
  --allow-unauthenticated \
  --source=./funcion/ \
  --entry-point=main

gcloud functions list
gcloud functions logs read mi-funcion --limit=50

# Habilitar APIs de servicios
gcloud services enable container.googleapis.com
gcloud services enable cloudbuild.googleapis.com
gcloud services enable run.googleapis.com

# Ver APIs habilitadas en el proyecto
gcloud services list --enabled

# Información de billing
gcloud billing accounts list
gcloud billing projects describe mi-proyecto

Mejores Prácticas y Consejos Avanzados

Aliases útiles para productividad

# Añadir al ~/.bashrc o ~/.zshrc
alias gc='gcloud'
alias gci='gcloud compute instances'
alias gcf='gcloud config'
alias gcs='gcloud storage'
alias gck='gcloud container clusters'

# Función para cambiar rápido de proyecto
gcp() {
  gcloud config set project "$1"
  echo "Proyecto activo: $(gcloud config get-value project)"
}

# Función para ver IPs de instancias rápidamente
gcloud-ips() {
  gcloud compute instances list \
    --format='table(name,networkInterfaces[0].accessConfigs[0].natIP:label=IP_EXTERNA,networkInterfaces[0].networkIP:label=IP_INTERNA)'
}

Autocompletado en la terminal

# Habilitar autocompletado en bash
gcloud components install beta
source "$(gcloud info --format='value(installation.sdk_root)')/completion.bash.inc"

# O añadir al .bashrc permanentemente
echo 'source "$(gcloud info --format="value(installation.sdk_root)")/completion.bash.inc"' >> ~/.bashrc

# Para zsh, usar el plugin de oh-my-zsh o gcloud components:
# Añadir 'gcloud' a los plugins en ~/.zshrc

Seguridad: principio de mínimo privilegio

  • Nunca uses la cuenta de propietario del proyecto para operaciones rutinarias — crea cuentas de servicio con los roles mínimos necesarios
  • Prefiere Workload Identity Federation sobre claves JSON de service accounts para autenticación desde CI/CD y otras nubes
  • Rota las claves de service accounts regularmente: gcloud iam service-accounts keys list
  • Activa el VPC Service Controls para aislar recursos sensibles del acceso externo
  • Usa gcloud audit-logs para verificar que el logging de auditoría esté activo en todos los servicios críticos

Conclusión

gcloud CLI es mucho más que un simple wrapper de la API de GCP — es una herramienta de automatización completa que, combinada con bash scripting y herramientas como jq, permite gestionar infraestructura de nube a escala con precisión y reproducibilidad. Desde la autenticación inicial hasta la gestión de clústeres de Kubernetes o el despliegue automatizado en Cloud Run, dominar gcloud marca la diferencia entre un administrador que trabaja manualmente y uno que opera su infraestructura como código.

El siguiente paso natural es explorar Terraform para gestión declarativa de infraestructura en GCP, o profundizar en Cloud Build para pipelines de CI/CD nativos. Cualquiera de los dos caminos se construye sobre la base sólida que proporciona conocer gcloud a fondo.

Artículos relacionados