{"skill":{"slug":"gcloud","displayName":"Google Cloud Platform","summary":"Manage Google Cloud Platform resources via gcloud CLI. Use for Compute Engine VMs, Cloud Run services, Firebase Hosting, Cloud Storage, and project management. Covers deployment, monitoring, logs, and SSH access.","description":"---\nname: gcloud\ndescription: Manage Google Cloud Platform resources via gcloud CLI. Use for Compute Engine VMs, Cloud Run services, Firebase Hosting, Cloud Storage, and project management. Covers deployment, monitoring, logs, and SSH access.\n---\n\n# Google Cloud Platform Skill\n\nManage GCP resources using `gcloud`, `gsutil`, and `firebase` CLIs.\n\n## Installation\n\n### gcloud CLI (one-time setup)\n\n```bash\n# Download and extract\ncd ~ && curl -O https://dl.google.com/dl/cloudsdk/channels/rapid/downloads/google-cloud-cli-linux-x86_64.tar.gz\ntar -xzf google-cloud-cli-linux-x86_64.tar.gz\n\n# Install (adds to PATH via .bashrc)\n./google-cloud-sdk/install.sh --quiet --path-update true\n\n# Reload shell or source\nsource ~/.bashrc\n\n# Authenticate\ngcloud auth login\n```\n\n### Firebase CLI\n\n```bash\nnpm install -g firebase-tools\nfirebase login\n```\n\n## Quick Reference\n\n### Authentication & Config\n\n```bash\n# List authenticated accounts\ngcloud auth list\n\n# Switch active account\ngcloud config set account EMAIL\n\n# List projects\ngcloud projects list\n\n# Set default project\ngcloud config set project PROJECT_ID\n\n# View current config\ngcloud config list\n```\n\n---\n\n## Compute Engine (VMs)\n\n### List Instances\n\n```bash\n# All instances across projects\ngcloud compute instances list --project PROJECT_ID\n\n# With specific fields\ngcloud compute instances list --project PROJECT_ID \\\n  --format=\"table(name,zone,status,networkInterfaces[0].accessConfigs[0].natIP)\"\n```\n\n### Start/Stop/Restart\n\n```bash\ngcloud compute instances start INSTANCE_NAME --zone ZONE --project PROJECT_ID\ngcloud compute instances stop INSTANCE_NAME --zone ZONE --project PROJECT_ID\ngcloud compute instances reset INSTANCE_NAME --zone ZONE --project PROJECT_ID\n```\n\n### SSH Access\n\n```bash\n# Interactive SSH\ngcloud compute ssh INSTANCE_NAME --zone ZONE --project PROJECT_ID\n\n# Run command remotely\ngcloud compute ssh INSTANCE_NAME --zone ZONE --project PROJECT_ID --command \"uptime\"\n\n# With tunneling (e.g., for local port forwarding)\ngcloud compute ssh INSTANCE_NAME --zone ZONE --project PROJECT_ID -- -L 8080:localhost:8080\n```\n\n### View Logs\n\n```bash\n# Serial port output (boot logs)\ngcloud compute instances get-serial-port-output INSTANCE_NAME --zone ZONE --project PROJECT_ID\n\n# Tail logs via SSH\ngcloud compute ssh INSTANCE_NAME --zone ZONE --project PROJECT_ID --command \"journalctl -f\"\n```\n\n---\n\n## Cloud Run\n\n### List Services\n\n```bash\n# List all services in a region\ngcloud run services list --region REGION --project PROJECT_ID\n\n# All regions\ngcloud run services list --project PROJECT_ID\n```\n\n### Deploy\n\n```bash\n# Deploy from source (builds container automatically)\ngcloud run deploy SERVICE_NAME \\\n  --source . \\\n  --region REGION \\\n  --project PROJECT_ID \\\n  --allow-unauthenticated\n\n# Deploy existing container image\ngcloud run deploy SERVICE_NAME \\\n  --image gcr.io/PROJECT_ID/IMAGE:TAG \\\n  --region REGION \\\n  --project PROJECT_ID\n```\n\n### View Service Details\n\n```bash\ngcloud run services describe SERVICE_NAME --region REGION --project PROJECT_ID\n```\n\n### View Logs\n\n```bash\n# Stream logs\ngcloud run services logs read SERVICE_NAME --region REGION --project PROJECT_ID --limit 50\n\n# Or use Cloud Logging\ngcloud logging read \"resource.type=cloud_run_revision AND resource.labels.service_name=SERVICE_NAME\" \\\n  --project PROJECT_ID --limit 20 --format=\"table(timestamp,textPayload)\"\n```\n\n### Update Environment Variables\n\n```bash\ngcloud run services update SERVICE_NAME \\\n  --region REGION \\\n  --project PROJECT_ID \\\n  --set-env-vars \"KEY1=value1,KEY2=value2\"\n```\n\n### Traffic Management\n\n```bash\n# Route 100% traffic to latest\ngcloud run services update-traffic SERVICE_NAME --to-latest --region REGION --project PROJECT_ID\n\n# Split traffic (canary)\ngcloud run services update-traffic SERVICE_NAME \\\n  --to-revisions=REVISION1=90,REVISION2=10 \\\n  --region REGION --project PROJECT_ID\n```\n\n---\n\n## Firebase Hosting\n\n### List Projects\n\n```bash\nfirebase projects:list\n```\n\n### Deploy\n\n```bash\n# Deploy everything (hosting + functions + rules)\nfirebase deploy --project PROJECT_ID\n\n# Hosting only\nfirebase deploy --only hosting --project PROJECT_ID\n\n# Specific site (multi-site setup)\nfirebase deploy --only hosting:SITE_NAME --project PROJECT_ID\n```\n\n### Preview Channels\n\n```bash\n# Create preview channel\nfirebase hosting:channel:deploy CHANNEL_NAME --project PROJECT_ID\n\n# List channels\nfirebase hosting:channel:list --project PROJECT_ID\n\n# Delete channel\nfirebase hosting:channel:delete CHANNEL_NAME --project PROJECT_ID\n```\n\n### Rollback\n\n```bash\n# List recent deploys\nfirebase hosting:releases:list --project PROJECT_ID\n\n# Rollback to specific version\nfirebase hosting:rollback --project PROJECT_ID\n```\n\n---\n\n## Cloud Storage (gsutil)\n\n```bash\n# List buckets\ngsutil ls\n\n# List contents\ngsutil ls gs://BUCKET_NAME/\n\n# Copy file\ngsutil cp LOCAL_FILE gs://BUCKET_NAME/path/\ngsutil cp gs://BUCKET_NAME/path/file LOCAL_PATH\n\n# Sync directory\ngsutil -m rsync -r LOCAL_DIR gs://BUCKET_NAME/path/\n\n# Make public\ngsutil iam ch allUsers:objectViewer gs://BUCKET_NAME\n```\n\n---\n\n## Logs & Monitoring\n\n### Cloud Logging\n\n```bash\n# Read recent logs\ngcloud logging read \"resource.type=gce_instance\" --project PROJECT_ID --limit 20\n\n# Filter by severity\ngcloud logging read \"severity>=ERROR\" --project PROJECT_ID --limit 20\n\n# Specific resource\ngcloud logging read \"resource.type=cloud_run_revision AND resource.labels.service_name=my-service\" \\\n  --project PROJECT_ID --limit 20\n```\n\n### Monitoring Metrics\n\n```bash\n# List available metrics\ngcloud monitoring metrics list --project PROJECT_ID | head -50\n\n# Describe metric\ngcloud monitoring metrics-scopes describe projects/PROJECT_ID\n```\n\n---\n\n## Billing & Cost Monitoring\n\n### View Current Costs\n\n```bash\n# List billing accounts\ngcloud billing accounts list\n\n# Get billing account linked to project\ngcloud billing projects describe PROJECT_ID\n\n# View cost breakdown (requires billing export to BigQuery or use console)\n# Quick estimate via APIs enabled:\ngcloud services list --enabled --project PROJECT_ID\n```\n\n### Set Budget Alerts\n\n```bash\n# Create budget (via gcloud beta)\ngcloud billing budgets create \\\n  --billing-account=BILLING_ACCOUNT_ID \\\n  --display-name=\"Monthly Budget\" \\\n  --budget-amount=50EUR \\\n  --threshold-rule=percent=50 \\\n  --threshold-rule=percent=90 \\\n  --threshold-rule=percent=100\n\n# List budgets\ngcloud billing budgets list --billing-account=BILLING_ACCOUNT_ID\n\n# Describe budget\ngcloud billing budgets describe BUDGET_ID --billing-account=BILLING_ACCOUNT_ID\n```\n\n### Cost-Saving Tips\n\n```bash\n# Stop unused VMs (saves $$$)\ngcloud compute instances stop INSTANCE_NAME --zone ZONE --project PROJECT_ID\n\n# Schedule auto-start/stop (use Cloud Scheduler + Cloud Functions or cron)\n\n# Check for idle resources\ngcloud recommender recommendations list \\\n  --project=PROJECT_ID \\\n  --location=global \\\n  --recommender=google.compute.instance.IdleResourceRecommender\n```\n\n---\n\n## Secret Manager\n\n### Create & Manage Secrets\n\n```bash\n# Enable API\ngcloud services enable secretmanager.googleapis.com --project PROJECT_ID\n\n# Create a secret\necho -n \"my-secret-value\" | gcloud secrets create SECRET_NAME \\\n  --data-file=- \\\n  --project PROJECT_ID\n\n# Or from file\ngcloud secrets create SECRET_NAME --data-file=./secret.txt --project PROJECT_ID\n```\n\n### Access Secrets\n\n```bash\n# Get latest version\ngcloud secrets versions access latest --secret=SECRET_NAME --project PROJECT_ID\n\n# Get specific version\ngcloud secrets versions access 1 --secret=SECRET_NAME --project PROJECT_ID\n\n# List all secrets\ngcloud secrets list --project PROJECT_ID\n\n# List versions of a secret\ngcloud secrets versions list SECRET_NAME --project PROJECT_ID\n```\n\n### Update Secrets\n\n```bash\n# Add new version\necho -n \"new-value\" | gcloud secrets versions add SECRET_NAME --data-file=- --project PROJECT_ID\n\n# Disable old version\ngcloud secrets versions disable VERSION_ID --secret=SECRET_NAME --project PROJECT_ID\n\n# Delete version (permanent!)\ngcloud secrets versions destroy VERSION_ID --secret=SECRET_NAME --project PROJECT_ID\n```\n\n### Use in Cloud Run\n\n```bash\n# Deploy with secret as env var\ngcloud run deploy SERVICE_NAME \\\n  --image IMAGE \\\n  --region REGION \\\n  --project PROJECT_ID \\\n  --set-secrets=\"ENV_VAR_NAME=SECRET_NAME:latest\"\n\n# Mount as file\ngcloud run deploy SERVICE_NAME \\\n  --image IMAGE \\\n  --region REGION \\\n  --project PROJECT_ID \\\n  --set-secrets=\"/path/to/secret=SECRET_NAME:latest\"\n```\n\n---\n\n## Artifact Registry (Container Images)\n\n### Setup\n\n```bash\n# Enable API\ngcloud services enable artifactregistry.googleapis.com --project PROJECT_ID\n\n# Create Docker repository\ngcloud artifacts repositories create REPO_NAME \\\n  --repository-format=docker \\\n  --location=REGION \\\n  --project PROJECT_ID \\\n  --description=\"Docker images\"\n```\n\n### Configure Docker Auth\n\n```bash\n# Configure Docker to use gcloud credentials\ngcloud auth configure-docker REGION-docker.pkg.dev\n```\n\n### Build & Push Images\n\n```bash\n# Build with Cloud Build (no local Docker needed)\ngcloud builds submit --tag REGION-docker.pkg.dev/PROJECT_ID/REPO_NAME/IMAGE:TAG\n\n# Or with local Docker\ndocker build -t REGION-docker.pkg.dev/PROJECT_ID/REPO_NAME/IMAGE:TAG .\ndocker push REGION-docker.pkg.dev/PROJECT_ID/REPO_NAME/IMAGE:TAG\n```\n\n### List & Manage Images\n\n```bash\n# List images\ngcloud artifacts docker images list REGION-docker.pkg.dev/PROJECT_ID/REPO_NAME\n\n# List tags for an image\ngcloud artifacts docker tags list REGION-docker.pkg.dev/PROJECT_ID/REPO_NAME/IMAGE\n\n# Delete image\ngcloud artifacts docker images delete REGION-docker.pkg.dev/PROJECT_ID/REPO_NAME/IMAGE:TAG\n```\n\n---\n\n## Cloud SQL (Databases)\n\n### Create Instance\n\n```bash\n# Enable API\ngcloud services enable sqladmin.googleapis.com --project PROJECT_ID\n\n# Create PostgreSQL instance\ngcloud sql instances create INSTANCE_NAME \\\n  --database-version=POSTGRES_15 \\\n  --tier=db-f1-micro \\\n  --region=REGION \\\n  --project PROJECT_ID\n\n# Create MySQL instance\ngcloud sql instances create INSTANCE_NAME \\\n  --database-version=MYSQL_8_0 \\\n  --tier=db-f1-micro \\\n  --region=REGION \\\n  --project PROJECT_ID\n```\n\n### Manage Databases & Users\n\n```bash\n# Create database\ngcloud sql databases create DB_NAME --instance=INSTANCE_NAME --project PROJECT_ID\n\n# List databases\ngcloud sql databases list --instance=INSTANCE_NAME --project PROJECT_ID\n\n# Create user\ngcloud sql users create USERNAME \\\n  --instance=INSTANCE_NAME \\\n  --password=PASSWORD \\\n  --project PROJECT_ID\n\n# List users\ngcloud sql users list --instance=INSTANCE_NAME --project PROJECT_ID\n```\n\n### Connect\n\n```bash\n# Connect via Cloud SQL Proxy (recommended)\n# First, download proxy: https://cloud.google.com/sql/docs/mysql/sql-proxy\n\n# Direct connection (requires public IP & authorized networks)\ngcloud sql connect INSTANCE_NAME --user=USERNAME --project PROJECT_ID\n\n# Get connection info\ngcloud sql instances describe INSTANCE_NAME --project PROJECT_ID \\\n  --format=\"value(connectionName)\"\n```\n\n### Backups\n\n```bash\n# Create on-demand backup\ngcloud sql backups create --instance=INSTANCE_NAME --project PROJECT_ID\n\n# List backups\ngcloud sql backups list --instance=INSTANCE_NAME --project PROJECT_ID\n\n# Restore from backup\ngcloud sql backups restore BACKUP_ID --restore-instance=INSTANCE_NAME --project PROJECT_ID\n```\n\n### Connect from Cloud Run\n\n```bash\n# Deploy with Cloud SQL connection\ngcloud run deploy SERVICE_NAME \\\n  --image IMAGE \\\n  --region REGION \\\n  --project PROJECT_ID \\\n  --add-cloudsql-instances=PROJECT_ID:REGION:INSTANCE_NAME \\\n  --set-env-vars=\"DB_HOST=/cloudsql/PROJECT_ID:REGION:INSTANCE_NAME\"\n```\n\n---\n\n## Troubleshooting\n\n### \"API not enabled\"\n```bash\n# Enable an API\ngcloud services enable run.googleapis.com --project PROJECT_ID\ngcloud services enable compute.googleapis.com --project PROJECT_ID\n```\n\n### \"Permission denied\"\n```bash\n# Check IAM roles\ngcloud projects get-iam-policy PROJECT_ID --flatten=\"bindings[].members\" \\\n  --format=\"table(bindings.role)\" --filter=\"bindings.members:EMAIL\"\n```\n\n### \"Not authenticated\"\n```bash\ngcloud auth login\ngcloud auth application-default login  # For ADC (used by libraries)\n```\n\n### Refresh credentials\n```bash\ngcloud auth login --force\n```\n","topics":["Deployment","Project Management"],"tags":{"latest":"1.0.1"},"stats":{"comments":0,"downloads":5339,"installsAllTime":201,"installsCurrent":25,"stars":2,"versions":2},"createdAt":1769716984230,"updatedAt":1778485868789},"latestVersion":{"version":"1.0.1","createdAt":1769723610350,"changelog":"Remove personal project examples","license":null},"metadata":null,"owner":{"handle":"jortega0033","userId":"s174qyyywyezmh7r1dnxgwckxx83zh3y","displayName":"Pipenzo","image":"https://avatars.githubusercontent.com/u/156420240?v=4"},"moderation":null}