名称: gcloud
描述: 通过 gcloud CLI 管理 Google Cloud Platform 资源。适用于 Compute Engine 虚拟机、Cloud Run 服务、Firebase Hosting、Cloud Storage 和项目管理。涵盖部署、监控、日志查看和 SSH 访问。
使用 gcloud、gsutil 和 firebase 命令行工具管理 GCP 资源。
# 下载并解压
cd ~ && curl -O https://dl.google.com/dl/cloudsdk/channels/rapid/downloads/google-cloud-cli-linux-x86_64.tar.gz
tar -xzf google-cloud-cli-linux-x86_64.tar.gz
# 安装(通过 .bashrc 添加到 PATH)
./google-cloud-sdk/install.sh --quiet --path-update true
# 重新加载 shell 或 source 配置文件
source ~/.bashrc
# 身份验证
gcloud auth login
npm install -g firebase-tools
firebase login
# 列出已认证的账户
gcloud auth list
# 切换活动账户
gcloud config set account EMAIL
# 列出项目
gcloud projects list
# 设置默认项目
gcloud config set project PROJECT_ID
# 查看当前配置
gcloud config list
# 跨项目的所有实例
gcloud compute instances list --project PROJECT_ID
# 指定字段显示
gcloud compute instances list --project PROJECT_ID \
--format="table(name,zone,status,networkInterfaces[0].accessConfigs[0].natIP)"
gcloud compute instances start INSTANCE_NAME --zone ZONE --project PROJECT_ID
gcloud compute instances stop INSTANCE_NAME --zone ZONE --project PROJECT_ID
gcloud compute instances reset INSTANCE_NAME --zone ZONE --project PROJECT_ID
# 交互式 SSH
gcloud compute ssh INSTANCE_NAME --zone ZONE --project PROJECT_ID
# 远程执行命令
gcloud compute ssh INSTANCE_NAME --zone ZONE --project PROJECT_ID --command "uptime"
# 端口转发(例如本地端口转发)
gcloud compute ssh INSTANCE_NAME --zone ZONE --project PROJECT_ID -- -L 8080:localhost:8080
# 串口输出(启动日志)
gcloud compute instances get-serial-port-output INSTANCE_NAME --zone ZONE --project PROJECT_ID
# 通过 SSH 实时查看日志
gcloud compute ssh INSTANCE_NAME --zone ZONE --project PROJECT_ID --command "journalctl -f"
# 列出指定区域的所有服务
gcloud run services list --region REGION --project PROJECT_ID
# 所有区域
gcloud run services list --project PROJECT_ID
# 从源代码部署(自动构建容器)
gcloud run deploy SERVICE_NAME \
--source . \
--region REGION \
--project PROJECT_ID \
--allow-unauthenticated
# 部署现有容器镜像
gcloud run deploy SERVICE_NAME \
--image gcr.io/PROJECT_ID/IMAGE:TAG \
--region REGION \
--project PROJECT_ID
gcloud run services describe SERVICE_NAME --region REGION --project PROJECT_ID
# 流式读取日志
gcloud run services logs read SERVICE_NAME --region REGION --project PROJECT_ID --limit 50
# 或使用 Cloud Logging
gcloud logging read "resource.type=cloud_run_revision AND resource.labels.service_name=SERVICE_NAME" \
--project PROJECT_ID --limit 20 --format="table(timestamp,textPayload)"
gcloud run services update SERVICE_NAME \
--region REGION \
--project PROJECT_ID \
--set-env-vars "KEY1=value1,KEY2=value2"
# 将 100% 流量路由到最新版本
gcloud run services update-traffic SERVICE_NAME --to-latest --region REGION --project PROJECT_ID
# 分流(金丝雀发布)
gcloud run services update-traffic SERVICE_NAME \
--to-revisions=REVISION1=90,REVISION2=10 \
--region REGION --project PROJECT_ID
firebase projects:list
# 部署所有内容(托管 + 函数 + 规则)
firebase deploy --project PROJECT_ID
# 仅托管
firebase deploy --only hosting --project PROJECT_ID
# 特定站点(多站点设置)
firebase deploy --only hosting:SITE_NAME --project PROJECT_ID
# 创建预览频道
firebase hosting:channel:deploy CHANNEL_NAME --project PROJECT_ID
# 列出频道
firebase hosting:channel:list --project PROJECT_ID
# 删除频道
firebase hosting:channel:delete CHANNEL_NAME --project PROJECT_ID
# 列出最近部署
firebase hosting:releases:list --project PROJECT_ID
# 回滚到特定版本
firebase hosting:rollback --project PROJECT_ID
# 列出存储桶
gsutil ls
# 列出内容
gsutil ls gs://BUCKET_NAME/
# 复制文件
gsutil cp LOCAL_FILE gs://BUCKET_NAME/path/
gsutil cp gs://BUCKET_NAME/path/file LOCAL_PATH
# 同步目录
gsutil -m rsync -r LOCAL_DIR gs://BUCKET_NAME/path/
# 设为公开
gsutil iam ch allUsers:objectViewer gs://BUCKET_NAME
# 读取最近日志
gcloud logging read "resource.type=gce_instance" --project PROJECT_ID --limit 20
# 按严重性过滤
gcloud logging read "severity>=ERROR" --project PROJECT_ID --limit 20
# 特定资源
gcloud logging read "resource.type=cloud_run_revision AND resource.labels.service_name=my-service" \
--project PROJECT_ID --limit 20
# 列出可用指标
gcloud monitoring metrics list --project PROJECT_ID | head -50
# 描述指标
gcloud monitoring metrics-scopes describe projects/PROJECT_ID
# 列出计费账户
gcloud billing accounts list
# 获取项目关联的计费账户
gcloud billing projects describe PROJECT_ID
# 查看成本明细(需要将账单导出到 BigQuery 或使用控制台)
# 通过已启用的 API 快速估算:
gcloud services list --enabled --project PROJECT_ID
# 创建预算(通过 gcloud beta)
gcloud billing budgets create \
--billing-account=BILLING_ACCOUNT_ID \
--display-name="月度预算" \
--budget-amount=50EUR \
--threshold-rule=percent=50 \
--threshold-rule=percent=90 \
--threshold-rule=percent=100
# 列出预算
gcloud billing budgets list --billing-account=BILLING_ACCOUNT_ID
# 描述预算
gcloud billing budgets describe BUDGET_ID --billing-account=BILLING_ACCOUNT_ID
# 停止未使用的虚拟机(节省费用)
gcloud compute instances stop INSTANCE_NAME --zone ZONE --project PROJECT_ID
# 安排自动启动/停止(使用 Cloud Scheduler + Cloud Functions 或 cron)
# 检查闲置资源
gcloud recommender recommendations list \
--project=PROJECT_ID \
--location=global \
--recommender=google.compute.instance.IdleResourceRecommender
# 启用 API
gcloud services enable secretmanager.googleapis.com --project PROJECT_ID
# 创建密钥
echo -n "my-secret-value" | gcloud secrets create SECRET_NAME \
--data-file=- \
--project PROJECT_ID
# 或从文件创建
gcloud secrets create SECRET_NAME --data-file=./secret.txt --project PROJECT_ID
# 获取最新版本
gcloud secrets versions access latest --secret=SECRET_NAME --project PROJECT_ID
# 获取特定版本
gcloud secrets versions access 1 --secret=SECRET_NAME --project PROJECT_ID
# 列出所有密钥
gcloud secrets list --project PROJECT_ID
# 列出密钥的所有版本
gcloud secrets versions list SECRET_NAME --project PROJECT_ID
# 添加新版本
echo -n "new-value" | gcloud secrets versions add SECRET_NAME --data-file=- --project PROJECT_ID
# 禁用旧版本
gcloud secrets versions disable VERSION_ID --secret=SECRET_NAME --project PROJECT_ID
# 删除版本(永久删除!)
gcloud secrets versions destroy VERSION_ID --secret=SECRET_NAME --project PROJECT_ID
# 将密钥作为环境变量部署
gcloud run deploy SERVICE_NAME \
--image IMAGE \
--region REGION \
--project PROJECT_ID \
--set-secrets="ENV_VAR_NAME=SECRET_NAME:latest"
# 挂载为文件
gcloud run deploy SERVICE_NAME \
--image IMAGE \
--region REGION \
--project PROJECT_ID \
--set-secrets="/path/to/secret=SECRET_NAME:latest"
# 启用 API
gcloud services enable artifactregistry.googleapis.com --project PROJECT_ID
# 创建 Docker 仓库
gcloud artifacts repositories create REPO_NAME \
--repository-format=docker \
--location=REGION \
--project PROJECT_ID \
--description="Docker 镜像"
# 配置 Docker 使用 gcloud 凭据
gcloud auth configure-docker REGION-docker.pkg.dev
# 使用 Cloud Build 构建(无需本地 Docker)
gcloud builds submit --tag REGION-docker.pkg.dev/PROJECT_ID/REPO_NAME/IMAGE:TAG
# 或使用本地 Docker
docker build -t REGION-docker.pkg.dev/PROJECT_ID/REPO_NAME/IMAGE:TAG .
docker push REGION-docker.pkg.dev/PROJECT_ID/REPO_NAME/IMAGE:TAG
# 列出镜像
gcloud artifacts docker images list REGION-docker.pkg.dev/PROJECT_ID/REPO_NAME
# 列出镜像的标签
gcloud artifacts docker tags list REGION-docker.pkg.dev/PROJECT_ID/REPO_NAME/IMAGE
# 删除镜像
gcloud artifacts docker images delete REGION-docker.pkg.dev/PROJECT_ID/REPO_NAME/IMAGE:TAG
# 启用 API
gcloud services enable sqladmin.googleapis.com --project PROJECT_ID
# 创建 PostgreSQL 实例
gcloud sql instances create INSTANCE_NAME \
--database-version=POSTGRES_15 \
--tier=db-f1-micro \
--region=REGION \
--project PROJECT_ID
# 创建 MySQL 实例
gcloud sql instances create INSTANCE_NAME \
--database-version=MYSQL_8_0 \
--tier=db-f1-micro \
--region=REGION \
--project PROJECT_ID
# 创建数据库
gcloud sql databases create DB_NAME --instance=INSTANCE_NAME --project PROJECT_ID
# 列出数据库
gcloud sql databases list --instance=INSTANCE_NAME --project PROJECT_ID
# 创建用户
gcloud sql users create USERNAME \
--instance=INSTANCE_NAME \
--password=PASSWORD \
--project PROJECT_ID
# 列出用户
gcloud sql users list --instance=INSTANCE_NAME --project PROJECT_ID
# 通过 Cloud SQL 代理连接(推荐)
# 首先,下载代理:https://cloud.google.com/sql/docs/mysql/sql-proxy
# 直接连接(需要公网 IP 和授权网络)
gcloud sql connect INSTANCE_NAME --user=USERNAME --project PROJECT_ID
# 获取连接信息
gcloud sql instances describe INSTANCE_NAME --project PROJECT_ID \
--format="value(connectionName)"
# 创建按需备份
gcloud sql backups create --instance=INSTANCE_NAME --project PROJECT_ID
# 列出备份
gcloud sql backups list --instance=INSTANCE_NAME --project PROJECT_ID
# 从备份恢复
gcloud sql backups restore BACKUP_ID --restore-instance=INSTANCE_NAME --project PROJECT_ID
# 部署时连接 Cloud SQL
gcloud run deploy SERVICE_NAME \
--image IMAGE \
--region REGION \
--project PROJECT_ID \
--add-cloudsql-instances=PROJECT_ID:REGION:INSTANCE_NAME \
--set-env-vars="DB_HOST=/cloudsql/PROJECT_ID:REGION:INSTANCE_NAME"
# 启用 API
gcloud services enable run.googleapis.com --project PROJECT_ID
gcloud services enable compute.googleapis.com --project PROJECT_ID
# 检查 IAM 角色
gcloud projects get-iam-policy PROJECT_ID --flatten="bindings[].members" \
--format="table(bindings.role)" --filter="bindings.members:EMAIL"
gcloud auth login
gcloud auth application-default login # 用于应用程序默认凭据(库使用)
gcloud auth login --force