它是什么
开始使用 Google Cloud 时,先别急着找「服务器 IP」。简单说,Google Cloud(谷歌云平台,日常简称 GCP)不是单独一台机器,而是一个「数字乐高超市」:计算、存储、网络、数据库等全拆成了现成服务,按量取用,不用自己买硬件、拉网线。新手一进来就问「我的主机在哪」,容易在页面里转晕,就是把它当成了一台电脑。
超市里的积木按「项目 → 区域 → 可用区」三层收纳:「项目」是你的隔离账本,「区域」是「亚洲东部 1(台湾)」这类地理范围,「可用区」是区域里一栋具体机房。放错项目、或区域选太远,后面常踩「机器开了却连不上」「访问忽快忽慢」的坑。管理入口认准这三个就行:
- 网页控制台:点鼠标看全貌,最直观;
- Cloud Shell:控制台右上角
>_点开即用,免装环境,小白首选; - gcloud:本机命令行,以后写脚本、批量操作靠它。
现在就点开 Cloud Shell,粘一条只「看」不「建」的命令回车,不建资源、不扣费,先混个脸熟:
gcloud projects list
它会列出你账号下能看见的项目。为什么第一步只查不建? 小白最容易照着教程一通创建,用完忘了关,月底看见账单才反应过来。接着再补一条,确认「当前默认挂在哪」:
gcloud config list
这能避开另一个经典坑:命令明明跑成功了,资源却长在别的项目里,回头怎么翻都找不到。
正式动手前,花两分钟认全五件事:账号(用哪个 Gmail 登录)、项目(资源挂哪)、计费(有没有绑卡、免费额度剩多少)、IAM 权限(你能点哪些按钮)、配额(默认最多几台机器、几个 IP)。看着像填表,其实决定了八成报错的长相:看到 Permission denied 多半是 IAM 没加角色,看到 Quota exceeded 也不是代码写错,只是额度满了。先把这张地图装进脑子,开始使用 Google Cloud 的后续排障,真的会少走一大截弯路。
解决什么问题
开始使用 Google Cloud 解决的第一件事,是让新手不用先采购物理机、装系统、拉网线。先在控制台顶部切到练习项目,再打开右上角 Cloud Shell;这里自带 gcloud,不用在自己电脑装软件。几分钟后,你就能创建 VM、网站测试环境或数据存储空间:VM 可放测试网页,存储桶可放图片、日志和数据文件。先别急着创建,粘贴下面几行,确认账号、项目、结算、权限和日志,避免把练习资源建到公司生产项目里。
gcloud auth list
gcloud config list
gcloud projects list
gcloud billing accounts list
gcloud projects get-iam-policy "$(gcloud config get-value project)" --format=table
gcloud logging read "resource.type=gce_instance" --limit=5 --format=table
为什么先查?配置里的 project 决定资源记到谁账上;IAM 策略说明谁能改什么;日志能回答“谁在什么时候动过机器”。常见坑是没开通结算、选错项目、把 Owner 或 Editor 随手发给所有人、把输出贴到群里。权限、日志、监控、网络防火墙、快照和备份都能放进同一套体系,在同一个项目里统一命名和查看,便于小团队规范上线,不再靠聊天记录猜配置。
确认是练习项目、已开通结算后,再运行下面这组命令:启用计算和存储服务,创建最小 VM,建带时间戳的数据存储空间;最后打印的 BUCKET_NAME 要记好,清理时会用。
PROJECT_ID="$(gcloud config get-value project)"
BUCKET_NAME="${PROJECT_ID}-demo-$(date +%s)"
gcloud services enable compute.googleapis.com storage.googleapis.com
gcloud compute instances create demo-vm --zone=asia-east1-b --machine-type=e2-micro --image-family=debian-12 --image-project=debian-cloud
gsutil mb -l ASIA-EAST1 "gs://${BUCKET_NAME}"
echo "BUCKET_NAME=${BUCKET_NAME}"
好处是波动流量、临时实验、数据任务和灾备演练都能按模板开起来,监控看到压力变大再考虑扩容,不用为几次高峰提前买一堆机器;用完也能关掉。但按量付费不等于免费,VM 不删、公网 IP、公开存储桶、开放 0.0.0.0/0 都可能带来账单或安全风险。
- 上线前先设计预算与权限边界,设预算提醒和配额;给成员最小权限:能看就别给改,能改测试 VM 就别给整个项目管理员。
- 备份要定期做恢复演练,别只复制一份;实验结束及时删除 VM,清空并删除存储桶。
怎么上手
开始使用 Google Cloud 时,先别急着开机器,先把“会不会扣钱”看住。第一次在控制台点一遍,再用 gcloud 把常用命令存进笔记:控制台看得见按钮,命令以后少点错。
-
打开控制台,注册或登录 Google 账号,按提示创建 GCP 账号;到「结算」创建结算账号、填付款资料。右上角打开 Cloud Shell,整段复制:生成唯一项目名、建项目、绑定第一个可用结算账号。
# 创建项目并绑定结算账号 PROJECT_ID="gcp-start-$RANDOM-$RANDOM" gcloud projects create "$PROJECT_ID" --name="我的第一个 GCP 项目" gcloud config set project "$PROJECT_ID" BILLING_ACCOUNT_ID="$(gcloud beta billing accounts list --filter='open=true' --format='value(name)' | head -n 1 | sed 's#billingAccounts/##')" gcloud beta billing projects link "$PROJECT_ID" --billing-account="$BILLING_ACCOUNT_ID" gcloud beta billing projects describe "$PROJECT_ID"为什么先绑结算?很多接口没结算不干活。坑:免费试用不等于随便用;绑定报错多半是结算账号没建好或没权限;有多个结算账号时,先确认第一个不是公司账号。
-
回到控制台「结算 → 预算和提醒 → 创建预算」,范围选刚建的项目,金额填 50 元,阈值设 50%、90%、100%,通知勾邮件。预算只提醒,不会自动停机,别把它当保险丝。
-
现在才启用接口并建测试机。粘贴前看 Cloud Shell 顶部项目是不是 gcp-start 开头,别建到旧项目。区域选离自己近的可用区,示例用 asia-east1-b(台湾),华南可试新加坡;建完再搬很麻烦。机型用 e2-micro 够练 SSH。下面不给公网 IP,只让 IAP 中转进 22 端口;没做网站就别开 80/443。
# 启用接口,建最小 VM,只开 SSH PROJECT_ID="$(gcloud config get-value project)" USER_EMAIL="$(gcloud config get-value account)" gcloud services enable compute.googleapis.com iap.googleapis.com gcloud projects add-iam-policy-binding "$PROJECT_ID" --member="user:$USER_EMAIL" --role="roles/iap.tunnelResourceAccessor" gcloud compute networks create start-net --subnet-mode=custom gcloud compute networks subnets create start-subnet --network=start-net --region=asia-east1 --range=10.0.0.0/24 gcloud compute firewall-rules create start-allow-iap-ssh --network=start-net --allow=tcp:22 --source-ranges=35.235.240.0/20 --target-tags=ssh-ok gcloud compute instances create start-vm --zone=asia-east1-b --machine-type=e2-micro --network=start-net --subnet=start-subnet --tags=ssh-ok --image-family=debian-12 --image-project=debian-cloud --no-address gcloud compute ssh start-vm --zone=asia-east1-b --tunnel-through-iap为什么不用默认网络、也不配公网 IP?默认规则常把 22 端口开放给全网,最容易被扫。坑:项目 Owner 也不一定自带 IAP 隧道权限,所以命令先补角色;若登录失败,先查接口是否启用,别把来源改成全网开放。看到虚拟机命令行,就说明验证成功。
-
测试完先停机,再决定是否彻底删除。只关机就复制第一行;想避免持续计费,整段复制删除练习项目。停机不收 CPU 运行费,但磁盘仍计费;删前确认当前项目名是 gcp-start 开头,别误删别的项目。
# 先停机;要彻底清理就整段复制 gcloud compute instances stop start-vm --zone=asia-east1-b PROJECT_ID="$(gcloud config get-value project)" if [[ "$PROJECT_ID" == gcp-start-* ]]; then gcloud projects delete "$PROJECT_ID" --quiet else echo "当前项目不是本教程项目,未删除:$PROJECT_ID" fi最后到结算页看一眼。坑:项目删除有延迟,结算账号不会自动注销;资源还在就可能继续计费。
与替代方案对比
开始使用 Google Cloud 前,先别急着开机器。选方案只看一句话:想少操哪些心,又愿意多学哪些规则。云不是越贵越好,更适合会变化、要扩展、要接数据的业务。
- 和自建物理机比:买服务器要等采购、找机房、装系统、接电源带宽,硬盘坏了也得有人跑现场。GCP 省掉采购和机房维护,几分钟能开虚拟机、数据库、存储;但要懂云上权限(谁能改什么)、网络(谁能访问哪台机器)和计费规则。小白常以为「关机就不花钱」,其实磁盘、公网 IP、负载均衡、日志可能继续计费;也别给所有人管理员权限。
- 和传统虚拟主机比:虚拟主机便宜、面板简单,小博客够用;但资源多绑套餐,高峰容易卡,监控、扩缩容、数据集成要另拼工具。Google Cloud 更弹性、服务更完整,也更容易做监控、扩缩容和数据集成:可按需加机器、自动扩缩容,用监控看 CPU、报错、流量,把日志和业务数据接到分析或存储服务。坑是服务太多,别一次全开;先最小权限、设预算提醒,用完删测试资源。
在 GCP 控制台点右上角 Cloud Shell,复制下面两行。它们不创建收费资源,只确认当前项目和已启用服务:
gcloud config get-value project
gcloud services list --enabled
为什么这么做?项目是权限、网络和账单的边界,很多「账单看不懂」「改了没生效」都是选错项目。若提示权限不足,别乱加最高权限,找管理员;服务列表不等于免费,后面开的实例、磁盘、IP 才可能计费。
如果只是个人简历、活动页、文档站等静态小站,或预算极低,先用静态托管更省心,上传 HTML 和图片就能访问。已有成熟平台且运行稳定,也不必为了「上云」盲目迁移。先列需求:要不要登录、数据库、定时任务、峰值扩容、数据分析;没有这些,就用简单方案,等真的卡住再上 Google Cloud,更省钱。
最佳实践
开始使用 Google Cloud 时,先在控制台建三个项目:xxx-dev、xxx-test、xxx-prod。开发随便试,测试放预发布,生产只放正式业务;误删、配额打满、账单异常就不会连累线上。IAM 别给 Owner/Editor,应用用单独服务账号,只加当前需要的角色;标签统一写 env、owner、cost-center,账单导出后按团队和环境分摊成本。常见坑:用个人账号跑程序、密钥传代码库、标签 dev/development 混写。
gcloud config list --format="table(core.account,core.project)"
PROJECT_ID=$(gcloud config get-value project 2>/dev/null)
if [ "$PROJECT_ID" = "(unset)" ] || [ -z "$PROJECT_ID" ]; then echo "请先在控制台切换项目"; fi
REGION=$(gcloud config get-value compute/region 2>/dev/null)
if [ "$REGION" = "(unset)" ] || [ -z "$REGION" ]; then REGION=asia-east1; fi
SA="app-runner@${PROJECT_ID}.iam.gserviceaccount.com"
gcloud services enable compute.googleapis.com iam.googleapis.com logging.googleapis.com monitoring.googleapis.com cloudresourcemanager.googleapis.com billingbudgets.googleapis.com --project="$PROJECT_ID"
gcloud iam service-accounts create app-runner --project="$PROJECT_ID"
gcloud projects add-iam-policy-binding "$PROJECT_ID" --member="serviceAccount:${SA}" --role="roles/logging.logWriter" >/dev/null
gcloud projects update "$PROJECT_ID" --update-labels=env=dev,owner=beginner,cost-center=cc01
MY_IP=$(curl -4 -s https://api.ipify.org)
gcloud compute firewall-rules create allow-ssh-from-my-ip --project="$PROJECT_ID" --network=default --allow=tcp:22 --source-ranges="${MY_IP}/32" --target-tags=ssh-allow
gcloud compute resource-policies create snapshot-schedule daily-vm-snapshot --project="$PROJECT_ID" --region="$REGION" --daily-schedule --start-time=03:00 --max-retention-days=7 --on-source-disk-delete=keep-auto-snapshots
在 Cloud Shell 复制前,确认 core.project 有值;没有就先在控制台切换项目。上面命令会启用常用 API、建只写日志的服务账号、打标签,并创建只允许本机公网 IP 连 22 端口的防火墙和每日快照计划。提示已存在可忽略,没权限找管理员。规则只对带 ssh-allow 标签的 VM 生效,千万别写 0.0.0.0/0,SSH 全网开放等于把门牌贴给扫描器。
VM 还要做系统更新、日志、监控告警、快照备份。Debian/Ubuntu 在 VM 的 SSH 窗口复制下面命令;其他系统换对应包管理器。
curl -sSO https://dl.google.com/cloudagents/add-google-cloud-ops-agent-repo.sh
sudo bash add-google-cloud-ops-agent-repo.sh --also-install
sudo apt-get update
sudo apt-get -y install unattended-upgrades
sudo systemctl enable --now unattended-upgrades google-cloud-ops-agent
它会装自动安全更新和 Ops Agent,让日志进 Cloud Logging。再到“监控→告警”建 CPU 超过 80%、磁盘超过 85%、主机不可达告警,通知先填邮箱;快照计划要在控制台挂到系统盘,并演练恢复。坑是只在生产机直接升级、备份从不恢复测试,真出事才发现补丁或快照不可用。
最后把操作写成清单,别靠记忆:
- 创建命令:项目 ID、区域、镜像、机器类型、复制过的命令。
- 端口:22 限本机 IP,80/443 给负载均衡,改动记时间。
- 账号:服务账号、角色、审批人、密钥轮换日期。
- 回滚:停新版本,恢复旧镜像或快照、旧防火墙,验证日志告警。
PROJECT_ID=$(gcloud config get-value project 2>/dev/null)
if [ "$PROJECT_ID" = "(unset)" ] || [ -z "$PROJECT_ID" ]; then echo "请先在控制台切换项目"; fi
gcloud compute project-info describe --project="$PROJECT_ID" --format="table(quotas.metric,quotas.limit,quotas.usage)"
gcloud compute instances list --filter="status=TERMINATED" --project="$PROJECT_ID" --format="table(name,zone,status)"
gcloud compute disks list --project="$PROJECT_ID" --format="table(name,zone,sizeGb,users)"
gcloud compute addresses list --filter="status=RESERVED" --project="$PROJECT_ID" --format="table(name,region,address,status)"
BILLING_ACCOUNT=$(gcloud beta billing accounts list --format="value(name)" --limit=1)
if [ -n "$BILLING_ACCOUNT" ]; then gcloud beta billing budgets list --billing-account="$BILLING_ACCOUNT" --format="table(displayName)"; fi
每月或上线后跑一遍:看配额、预算提醒、长期 TERMINATED 的 VM、users 为空的磁盘和 RESERVED 地址。坑是只看 VM 关机,忘了磁盘和预留公网 IP 仍会计费。
常见问题(FAQ)
开始使用 Google Cloud 一定要绑定信用卡吗?
通常需要验证结算方式,新账号可能有试用额度;务必设置预算告警。
小白先学控制台还是 gcloud?
先用控制台理解资源关系,再学 gcloud 记录命令和批量操作。
创建 VM 后最容易忽略什么?
最容易忽略防火墙、闲置计费、快照备份和日志告警,上线前要逐项检查。
GCP 和 Google Cloud 是同一个意思吗?
日常可近似理解;严格说 Google Cloud 是云平台,GCP 常指其产品集合。
不想自己折腾 GCP?我们提供云平台代维护、上云迁移与账单代付服务,一对一技术支持。
