| name | gcloud |
| description | Guide for implementing Google Cloud SDK (gcloud CLI) - a command-line tool for managing Google Cloud resources. Use when installing/configuring gcloud, authenticating with Google Cloud, managing projects/configurations, deploying applications, working with Compute Engine/GKE/App Engine/Cloud Storage, scripting gcloud operations, implementing CI/CD pipelines, or troubleshooting Google Cloud deployments. |
Google Cloud SDK (gcloud) Skill
Comprehensive guide for working with the Google Cloud SDK (gcloud CLI) - the primary command-line interface for interacting with Google Cloud Platform services, managing resources, and automating cloud operations.
When to Use This Skill
Use this skill when you need to:
- Install and configure the Google Cloud SDK
- Authenticate with Google Cloud (user accounts, service accounts, ADC)
- Initialize gcloud and set up projects/configurations
- Manage multiple Google Cloud projects and environments
- Deploy applications to GCP (Compute Engine, GKE, App Engine, Cloud Run)
- Work with Cloud Storage, databases, and other GCP services
- Script gcloud commands for automation and CI/CD pipelines
- Troubleshoot authentication, authorization, or deployment issues
- Optimize gcloud command performance and output formatting
- Implement security best practices for cloud operations
Core Concepts
The gcloud CLI
Architecture:
- Command Structure:
gcloud + [release-level] + component + entity + operation + [args] + [flags]
- Release Levels: alpha, beta, GA (general availability)
- Components: compute, container, app, sql, iam, config, auth, storage, etc.
- Global Flags:
--project, --format, --filter, --quiet, --verbosity
Key Features:
- Unified CLI for 100+ Google Cloud services
- Consistent command patterns across all services
- Rich output formatting (JSON, YAML, CSV, table)
- Built-in filtering and server-side query optimization
- Interactive and non-interactive modes for automation
Authentication vs Authorization
Authentication (Who you are):
- User accounts (developers, admins)
- Service accounts (applications, automation)
- Application Default Credentials (ADC)
- OAuth 2.0, API keys, workload/workforce identity federation
Authorization (What you can do):
- IAM roles and permissions
- Service account impersonation
- Resource-level access control
Configuration Management
Named Configurations:
- Multiple configuration profiles for different environments
- Each configuration stores: account, project, region, zone, and other properties
- Switch between configurations instantly
Properties:
- 50+ configurable properties across 7 categories
- Precedence: CLI flags > env vars > config files > defaults
I. INSTALLATION & SETUP
A. Installation Methods
Linux (Archive Installation)
curl -O https://dl.google.com/dl/cloudsdk/channels/rapid/downloads/google-cloud-cli-linux-x86_64.tar.gz
tar -xf google-cloud-cli-linux-x86_64.tar.gz
./google-cloud-sdk/install.sh
./google-cloud-sdk/bin/gcloud init
Debian/Ubuntu (Package Manager)
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
curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key --keyring /usr/share/keyrings/cloud.google.gpg add -
sudo apt-get update && sudo apt-get install google-cloud-cli
macOS
curl -O https://dl.google.com/dl/cloudsdk/channels/rapid/downloads/google-cloud-cli-darwin-arm.tar.gz
tar -xf google-cloud-cli-darwin-arm.tar.gz
./google-cloud-sdk/install.sh
Windows
# Download installer from https://cloud.google.com/sdk/docs/install
# Run GoogleCloudSDKInstaller.exe
# Follow installation wizard
B. Initialization
gcloud init
gcloud auth activate-service-account --key-file=key.json
gcloud config set project PROJECT_ID
gcloud config set compute/region us-central1
gcloud config set compute/zone us-central1-a
C. Components
gcloud components list
gcloud components install kubectl
gcloud components install app-engine-python
gcloud components install cloud-sql-proxy
gcloud components install pubsub-emulator
gcloud components update
gcloud components remove COMPONENT_ID
Core Components (installed by default):
gcloud - Main CLI
gsutil - Cloud Storage utility
bq - BigQuery CLI
core - Core libraries
II. AUTHENTICATION & AUTHORIZATION
A. Authentication Methods
1. User Account (OAuth 2.0)
gcloud auth login
gcloud auth login --no-browser
gcloud auth login user@example.com
gcloud auth list
gcloud config set account user@example.com
gcloud auth revoke user@example.com
2. Service Account
gcloud auth activate-service-account SA_EMAIL --key-file=path/to/key.json
gcloud iam service-accounts create SA_NAME \
--display-name="Service Account Display Name"
gcloud iam service-accounts keys create key.json \
--iam-account=SA_EMAIL
gcloud projects add-iam-policy-binding PROJECT_ID \
--member="serviceAccount:SA_EMAIL" \
--role="roles/compute.admin"
3. Application Default Credentials (ADC)
gcloud auth application-default login
gcloud auth application-default login \
--impersonate-service-account=SA_EMAIL
gcloud auth application-default revoke
4. Service Account Impersonation (Recommended for Production)
gcloud compute instances list \
--impersonate-service-account=SA_EMAIL
gcloud config set auth/impersonate_service_account SA_EMAIL
gcloud config get-value auth/impersonate_service_account
gcloud config unset auth/impersonate_service_account
Why Impersonation?
- Short-lived temporary credentials (no persistent key risk)
- No need to distribute service account keys
- Centralized permission management
- Easy to audit and rotate
B. Configuration Profiles
Create and Manage Configurations
gcloud config configurations create dev
gcloud config configurations list
gcloud config configurations activate dev
gcloud compute instances list --configuration=prod
gcloud config set project my-project-dev
gcloud config set compute/region us-central1
gcloud config set compute/zone us-central1-a
gcloud config list
gcloud config unset compute/zone
gcloud config configurations delete dev
Multi-Environment Pattern
gcloud config configurations create dev
gcloud config set project my-project-dev
gcloud config set account dev@example.com
gcloud config set compute/region us-central1
gcloud config configurations create staging
gcloud config set project my-project-staging
gcloud config set auth/impersonate_service_account staging-sa@project.iam.gserviceaccount.com
gcloud config configurations create prod
gcloud config set project my-project-prod
gcloud config set auth/impersonate_service_account prod-sa@project.iam.gserviceaccount.com
gcloud config configurations activate dev
gcloud config configurations activate prod
III. COMMON WORKFLOWS
A. Project Management
gcloud projects list
gcloud projects create PROJECT_ID --name="Project Name"
gcloud config set project PROJECT_ID
gcloud config get-value project
gcloud services enable compute.googleapis.com
gcloud services enable container.googleapis.com
gcloud services list
gcloud projects describe PROJECT_ID
B. Compute Engine
gcloud compute instances list
gcloud compute instances create my-instance \
--zone=us-central1-a \
--machine-type=e2-medium \
--image-family=debian-11 \
--image-project=debian-cloud \
--boot-disk-size=10GB
gcloud compute ssh my-instance --zone=us-central1-a
gcloud compute scp local-file.txt my-instance:~/remote-file.txt \
--zone=us-central1-a
gcloud compute instances stop my-instance --zone=us-central1-a
gcloud compute instances delete my-instance --zone=us-central1-a
C. Google Kubernetes Engine (GKE)
gcloud container clusters create my-cluster \
--zone=us-central1-a \
--num-nodes=3 \
--machine-type=e2-medium
gcloud container clusters get-credentials my-cluster --zone=us-central1-a
gcloud container clusters list
gcloud container clusters resize my-cluster \
--num-nodes=5 \
--zone=us-central1-a
gcloud container clusters delete my-cluster --zone=us-central1-a
D. Cloud Storage
gsutil mb gs://my-bucket-name
gsutil cp local-file.txt gs://my-bucket-name/
gsutil cp gs://my-bucket-name/file.txt ./
gsutil ls gs://my-bucket-name/
gsutil rsync -r ./local-dir gs://my-bucket-name/remote-dir
gsutil iam ch user:user@example.com:objectViewer gs://my-bucket-name
gsutil rm -r gs://my-bucket-name
E. App Engine
gcloud app deploy app.yaml
gcloud app browse
gcloud app logs tail
gcloud app versions list
gcloud app versions delete VERSION_ID
gcloud app services set-traffic SERVICE \
--splits v1=0.5,v2=0.5
F. Cloud Run
gcloud run deploy my-service \
--image=gcr.io/PROJECT_ID/my-image:tag \
--platform=managed \
--region=us-central1 \
--allow-unauthenticated
gcloud run services list
gcloud run services describe my-service --region=us-central1
gcloud run services delete my-service --region=us-central1
IV. SCRIPTING & AUTOMATION
A. Output Formats
gcloud compute instances list --format=json
gcloud compute instances list --format=yaml
gcloud compute instances list --format="csv(name,zone,status)"
gcloud compute instances list --format=table
gcloud config get-value project --format="value()"
gcloud compute instances list \
--format="table(name,zone,machineType,status)"
B. Filtering
gcloud compute instances list --filter="zone:us-central1-a"
gcloud compute instances list --filter="status=RUNNING"
gcloud compute instances list --filter="name~^web-.*"
gcloud compute instances list \
--filter="zone:us-central1 AND status=RUNNING"
gcloud compute instances list --filter="NOT status=TERMINATED"
gcloud compute instances list \
--filter="(status=RUNNING OR status=STOPPING) AND zone:us-central1"
C. Error Handling
#!/bin/bash
if ! gcloud compute instances create my-instance; then
echo "Failed to create instance"
exit 1
fi
gcloud compute instances describe my-instance
EXIT_CODE=$?
if [ $EXIT_CODE -ne 0 ]; then
echo "Instance not found or error occurred"
exit $EXIT_CODE
fi
ERROR_OUTPUT=$(gcloud compute instances create my-instance 2>&1)
if [ $? -ne 0 ]; then
echo "Error: $ERROR_OUTPUT"
exit 1
fi
if ! gcloud compute instances describe my-instance &>/dev/null; then
gcloud compute instances create my-instance
else
echo "Instance already exists, skipping creation"
fi
D. Retry Logic
#!/bin/bash
MAX_RETRIES=5
RETRY_DELAY=5
for i in $(seq 1 $MAX_RETRIES); do
if gcloud compute instances create my-instance; then
echo "Instance created successfully"
exit 0
else
echo "Attempt $i failed, retrying in ${RETRY_DELAY}s..."
sleep $RETRY_DELAY
RETRY_DELAY=$((RETRY_DELAY * 2))
fi
done
echo "Failed after $MAX_RETRIES attempts"
exit 1
E. Batch Operations
#!/bin/bash
INSTANCES=("web-1" "web-2" "web-3")
for instance in "${INSTANCES[@]}"; do
gcloud compute instances create "$instance" \
--zone=us-central1-a \
--machine-type=e2-medium \
--async
done
gcloud compute operations list --filter="status=RUNNING" \
--format="value(name)" | while read op; do
gcloud compute operations wait "$op" --zone=us-central1-a
done
echo "All instances created"
F. CI/CD Integration
GitHub Actions
name: Deploy to GCP
on:
push:
branches: [main]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- id: auth
uses: google-github-actions/auth@v1
with:
credentials_json: ${{ secrets.GCP_SA_KEY }}
- name: Set up Cloud SDK
uses: google-github-actions/setup-gcloud@v1
- name: Deploy to Cloud Run
run: |
gcloud run deploy my-service \
--image=gcr.io/${{ secrets.GCP_PROJECT_ID }}/my-image:${{ github.sha }} \
--region=us-central1 \
--platform=managed
GitLab CI
deploy:
image: google/cloud-sdk:alpine
script:
- echo $GCP_SA_KEY | base64 -d > key.json
- gcloud auth activate-service-account --key-file=key.json
- gcloud config set project $GCP_PROJECT_ID
- gcloud app deploy
only:
- main
V. BEST PRACTICES
A. Security
1. Never Commit Credentials
echo "key.json" >> .gitignore
echo ".config/gcloud/" >> .gitignore
echo "application_default_credentials.json" >> .gitignore
2. Use Service Account Impersonation
gcloud config set auth/impersonate_service_account SA_EMAIL
3. Principle of Least Privilege
gcloud projects add-iam-policy-binding PROJECT_ID \
--member="serviceAccount:SA_EMAIL" \
--role="roles/compute.instanceAdmin.v1"
4. Rotate Keys Regularly
gcloud iam service-accounts keys create new-key.json \
--iam-account=SA_EMAIL
gcloud iam service-accounts keys delete KEY_ID \
--iam-account=SA_EMAIL
B. Performance
1. Use Server-Side Filtering
gcloud compute instances list --filter="zone:us-central1"
gcloud compute instances list | grep us-central1
2. Limit Output
gcloud compute instances list --limit=10
gcloud compute instances list --format="value(name,zone)"
3. Batch Operations
gcloud compute instances create instance-1 --async
gcloud compute instances create instance-2 --async
gcloud compute instances create instance-3 --async
C. Maintainability
1. Use Named Configurations
gcloud config configurations create dev
gcloud config configurations create prod
2. Document Commands
#!/bin/bash
ENV=${1:-staging}
gcloud config configurations activate "$ENV"
gcloud run deploy my-service --image=gcr.io/project/image:latest
3. Use Environment Variables
PROJECT_ID=${GCP_PROJECT_ID:-default-project}
REGION=${GCP_REGION:-us-central1}
gcloud config set project "$PROJECT_ID"
gcloud config set compute/region "$REGION"
D. Monitoring & Logging
gcloud logging read "resource.type=gce_instance" \
--limit=10 \
--format=json
gcloud info --show-log
gcloud compute instances create my-instance --verbosity=debug
VI. TROUBLESHOOTING
Common Issues
1. Authentication Failures
gcloud auth list
gcloud auth application-default print-access-token
gcloud auth login
gcloud auth application-default login
2. Permission Denied
gcloud projects get-iam-policy PROJECT_ID \
--flatten="bindings[].members" \
--filter="bindings.members:user@example.com"
gcloud iam service-accounts get-iam-policy SA_EMAIL
3. Quota Exceeded
gcloud compute project-info describe --project=PROJECT_ID
4. Network Issues
gcloud info
gcloud config set proxy/type http
gcloud config set proxy/address PROXY_HOST
gcloud config set proxy/port PROXY_PORT
5. Configuration Issues
gcloud config list
gcloud config configurations delete default
gcloud init
VII. QUICK REFERENCE
Essential Commands
| Task | Command |
|---|
| Initialize gcloud | gcloud init |
| Login | gcloud auth login |
| Set project | gcloud config set project PROJECT_ID |
| List resources | gcloud [SERVICE] list |
| Describe resource | gcloud [SERVICE] describe RESOURCE |
| Create resource | gcloud [SERVICE] create RESOURCE |
| Delete resource | gcloud [SERVICE] delete RESOURCE |
| Get help | gcloud [SERVICE] --help |
| View configurations | gcloud config configurations list |
| Switch configuration | gcloud config configurations activate CONFIG |
Global Flags
| Flag | Purpose | Example |
|---|
--project | Override project | --project=my-project |
--format | Output format | --format=json |
--filter | Server-side filter | --filter="status=RUNNING" |
--limit | Limit results | --limit=10 |
--quiet | Suppress prompts | --quiet |
--verbosity | Log level | --verbosity=debug |
--async | Don't wait | --async |
Common Properties
gcloud config set project PROJECT_ID
gcloud config set account EMAIL
gcloud config set disable_usage_reporting true
gcloud config set compute/region us-central1
gcloud config set compute/zone us-central1-a
gcloud config set container/cluster CLUSTER_NAME
gcloud config set app/cloud_build_timeout 1200
VIII. RESOURCES
Official Documentation
Tools
Best Practices Summary
- Authentication: Use service account impersonation instead of key files
- Configuration: Use named configurations for multiple environments
- Security: Grant minimal IAM permissions, rotate keys regularly
- Performance: Use server-side filtering, batch operations with --async
- Scripting: Output JSON format, implement error handling and retries
- Automation: Use environment variables, validate before operations
- Monitoring: Enable Cloud Audit Logs, track command history
- Maintenance: Keep SDK updated, document scripts thoroughly
Common Use Cases
Multi-Environment Deployment
- Separate configurations for dev/staging/prod
- Service account impersonation for each environment
- Automated deployments via CI/CD
Infrastructure as Code
- Create resources with gcloud in shell scripts
- Export configurations as YAML/JSON
- Version control infrastructure commands
Data Pipeline Automation
- Scheduled BigQuery jobs
- Cloud Storage file transfers
- Pub/Sub message processing
Security Compliance
- Audit logging for all operations
- Encrypted data at rest and in transit
- Regular key rotation and access reviews
This skill provides comprehensive gcloud CLI knowledge for implementing Google Cloud solutions, from basic authentication to advanced automation workflows. Always refer to official documentation for the latest features and service-specific details.