FEATURED · 精选文章

Google Cloud Platform 概览与 Terraform 基础设施初始化:data-engineering-zoomcamp 的 GCS 数据湖 + BigQuery 数据仓库搭建指南

发布时间 / 2026/9/12 1:14:51
来源 / 创域科博编辑部
栏目 / 资讯中心
Google Cloud Platform 概览与 Terraform 基础设施初始化:data-engineering-zoomcamp 的 GCS 数据湖 + BigQuery 数据仓库搭建指南 Google Cloud Platform 概览与 Terraform 基础设施初始化data-engineering-zoomcamp 的 GCS 数据湖 BigQuery 数据仓库搭建指南【免费下载链接】data-engineering-zoomcampData Engineering Zoomcamp is a free 9-week course on building production-ready data pipelines. Join the course here 项目地址: https://gitcode.com/GitHub_Trending/da/data-engineering-zoomcamp本篇指南聚焦>export GOOGLE_APPLICATION_CREDENTIALSpath/to/your/service-account-authkeys.json # 刷新 token/会话并验证认证 gcloud auth application-default logingcloud auth application-default login生成的是 Application Default CredentialsADC它会被 gcloud 客户端以及 Terraform 的 google provider 自动读取。这也解释了为什么仓库 terraform_basic/main.tf 的 provider 块中credentials一行被注释掉——只要环境变量已设置provider 就能自动完成身份识别provider google { # Credentials only needs to be set if you do not have the GOOGLE_APPLICATION_CREDENTIALS set # credentials project Your Project ID region us-central1 }访问权限设置Setup for AccessIAM 角色与 API 启用仅有Viewer角色无法创建存储桶和数据集还必须为服务账号追加管理类权限分三步完成1. 追加 IAM 角色进入 Console 的IAM Admin → IAM页面https://console.cloud.google.com/iam-admin/iam找到你的服务账号点击Edit principal编辑主体图标在已有的Viewer基础上追加以下三个角色角色用途Storage Admin管理 GCS 存储桶及其对象的创建、删除与权限Storage Object Admin管理桶内对象的读写与访问控制BigQuery Admin管理 BigQuery 数据集、表及查询作业这三个角色正好覆盖 Terraform 配置中要创建的两类资源google_storage_bucket与google_bigquery_dataset。若缺少对应权限terraform apply会以 403 错误失败详见下文常见错误排查。2. 启用项目相关 API在 Console 的 APIs Services 库中启用以下两个 API也可直接访问对应链接IAM APIhttps://console.cloud.google.com/apis/library/iam.googleapis.comIAM Service Account Credentials APIhttps://console.cloud.google.com/apis/library/iamcredentials.googleapis.com后者服务于服务账号令牌签发/模拟impersonation场景在无法直接下载密钥文件时会用到参见下文无密钥文件时的降级方案。3. 确认环境变量仍然生效每次打开新的终端会话都需要重新确认GOOGLE_APPLICATION_CREDENTIALS已设置export GOOGLE_APPLICATION_CREDENTIALSpath/to/your/service-account-authkeys.json用 Terraform 创建 GCP 基础设施从配置到执行认证与授权就绪后即可进入仓库的 Terraform 工作坊。本节结合仓库真实配置文件拆解每一步的含义。工作坊目录结构仓库terraform/terraform/下提供了三个渐进式示例terraform_basic/单文件最简部署main.tf所有值硬编码terraform_with_variables/引入变量文件抽离可配置项main.tf variables.tfterraform_with_variable_AWS/同一套数据湖语义的 AWS 实现S3 Glue供偏好 AWS 的学习者对照理解。核心资源块解析以terraform_basic/main.tf为例它声明了课程基础设施的两块基石1GCS 数据湖存储桶google_storage_bucketresource google_storage_bucket data-lake-bucket { name Your Unique Bucket Name location US # 推荐设置 storage_class STANDARD uniform_bucket_level_access true versioning { enabled true } lifecycle_rule { action { type Delete } condition { age 30 // days } } force_destroy true }各参数作用storage_class STANDARD标准存储类别适合课程数据集如不需要冷归档uniform_bucket_level_access true启用统一桶级访问控制Uniform Bucket Level Access以 IAM 取代细粒度 ACL安全性更好versioning { enabled true }开启对象版本管理便于回滚被覆盖/删除的对象lifecycle_rule设置对象生命周期规则——超过 30 天的对象自动删除避免免费额度内产生存储费用force_destroy true即使桶内还有对象terraform destroy也能强制删除桶避免清理基础设施时被非空桶卡住。2BigQuery 数据集google_bigquery_datasetresource google_bigquery_dataset dataset { dataset_id The Dataset Name You Want to Use project Your Project ID location US }注意dataset_id只是数据集的逻辑名后续 dbt 建模时引用而真正的表如yellow_taxi_trips通常在数据接入阶段由外部表或 dbt 模型创建。用变量抽离配置terraform_with_variables/示例将所有可配置项提升为变量。以 variables.tf 为例变量默认值即课程推荐取值credentials服务账号 JSON 密钥文件路径如./keys/my-creds.jsonproject你的 GCP 项目 IDregion默认us-central1location存储桶/数据集所在地域默认US多区域bq_dataset_nameBigQuery 数据集名默认demo_datasetgcs_bucket_name存储桶名默认terraform-demo-terra-bucket注意 GCS 桶名全局唯一撞名会导致创建失败gcs_storage_class默认STANDARD。对应的 main.tf 通过var.*引用这些值例如 provider 块中credentials file(var.credentials)、project var.project资源块中name var.gcs_bucket_name、dataset_id var.bq_dataset_name。这样做的好处是同一份.tf配置可以通过不同.tfvars或命令行-var参数复用到不同环境测试 / 生产。执行四步曲在 terraform 目录下按顺序执行命令来自 terraform/README.md# 1. 刷新服务账号的 auth-token本会话有效 gcloud auth application-default login # 2. 初始化下载 provider 插件、初始化后端与 .tfstate 状态文件 terraform init # 3. 计划对比本地配置与远端状态预览即将执行的变更 terraform plan -varprojectyour-gcp-project-id# 4. 应用确认计划后真正在 GCP 上创建资源 terraform apply -varprojectyour-gcp-project-id# 5. 清理实验结束后删除全部基础设施避免产生费用 terraform destroy补充说明terraform init会依据required_providers安装指定版本的 google provider——terraform_basic示例固定为4.51.0terraform_with_variables示例固定为5.6.0版本锁定可保证可复现性terraform plan与apply中用-var传入项目 ID覆盖 variables.tf 中的默认值terraform destroy在有force_destroy true的桶上能直接清理是避免免费额度超支的常规收尾动作若打算把 Terraform 配置发布到 GitHub务必先添加 Terraform 专用的.gitignore防止.tfstate状态文件内含敏感资源信息被误提交。常见错误与排查课程与仓库文档中记录了几类高频问题1. 403 Forbidden——服务账号缺少存储权限Error: googleapi: Error 403: terraformny-rides-alexey.iam.gserviceaccount.com does not have storage.buckets.create access to the Google Cloud project., forbidden原因服务账号尚未获得创建桶的权限。解决办法回到 IAM 页面按上文Setup for Access补齐Storage Admin/Storage Object Admin/BigQuery Admin角色后重试apply。2. quota exceeded / API not enabled 警告gcloud auth application-default login后若出现Cannot find a quota project to add to ADC. You might receive a quota exceeded or API not enabled error.说明 ADC 缺少配额项目绑定执行PROJECT_NAMEny-rides-alexey gcloud auth application-default set-quota-project ${PROJECT_NAME}将当前项目设为配额项目即可。3. 组织策略禁止下载服务账号密钥部分企业环境不允许生成/下载 service account key 文件。仓库提供降级方案见 terraform/README.md为本人账号授予目标服务账号的roles/iam.serviceAccountTokenCreator角色gcloud iam service-accounts add-iam-policy-binding \ SERVICE_ACCOUNT_EMAIL \ --memberuser:YOUR_EMAILgmail.com \ --roleroles/iam.serviceAccountTokenCreator在 Terraform 配置中通过google_service_account_access_token数据源获取临时令牌并用alias impersonated的第二个 provider 块承载实际操作该机制依赖前面启用的 IAM Service Account Credentials API。Windows 用户专项说明使用原生 Windows非 WSL的同学仓库提供了完整的替代流程 windows.md要点如下需要 Linux 风格环境推荐 GitBash / MinGW / Cygwin下载 SDK zip 包后运行install.sh若 PATH 未自动写入需手工把google-cloud-sdk\bin加入 PATH使用 Anaconda 时通过export CLOUDSDK_PYTHON~/Anaconda3/python指定 Python 解释器并用gcloud version验证安装服务账号密钥可存放于如~/.gc/ny-rides.json再export GOOGLE_APPLICATION_CREDENTIALS~/.gc/ny-rides.json认证方式二选一gcloud auth activate-service-account --key-file $GOOGLE_APPLICATION_CREDENTIALS服务账号直连或gcloud auth application-default loginOAuth 方式之后照常执行terraform init→terraform plan→terraform apply。扩展到其他云AWS 等价实现仓库还提供了与 GCP 版本语义等价的 AWS 实现 terraform_with_variable_AWS/README.md帮助学习者理解云无关的数据工程概念其服务映射为GCP 服务AWS 等价服务用途Google Cloud Storage (GCS)Amazon S3数据湖存储Uniform Bucket Level AccessS3 Public Access Block安全访问控制Object Lifecycle RulesS3 Lifecycle Configuration对象自动过期BigQuery DatasetAWS Glue Catalog Database元数据与查询层其 main.tf 中aws_s3_bucket、aws_s3_bucket_versioning、aws_s3_bucket_public_access_block、aws_s3_bucket_lifecycle_configuration与aws_glue_catalog_database五个资源正好一一对应 GCP 版存储桶与数据集的语义可配置项集中在 variables.tf区域默认eu-north-1、桶名默认全局唯一值、数据集名默认ny_taxi_database具体取值写入 terraform.tfvars。小结与下一步至此你已经完成GCP 账号与项目创建 → 服务账号与 IAM 角色授权 → SDK 与 ADC 认证 → 用 Terraform 创建 GCS 数据湖与 BigQuery 数据集。这套云侧前置准备是课程后续所有数据接入与建模工作的地基。下一步动作若对 Terraform 的声明式概念terraform块、provider、resource、variable与执行步骤还不熟悉请先阅读 1_terraform_overview.md进入 terraform 工作坊目录 按 README 实际执行一遍创建与销毁之后回到模块一的 Docker Postgres 部分用注入脚本把纽约出租车数据写入这套基础设施。【免费下载链接】data-engineering-zoomcampData Engineering Zoomcamp is a free 9-week course on building production-ready data pipelines. Join the course here 项目地址: https://gitcode.com/GitHub_Trending/da/data-engineering-zoomcamp创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED — 相关阅读

相关资讯

LATEST — 最新资讯

最新发布

TODAY — 本日精选

新闻

WEEKLY — 本周精选

新闻

MONTHLY — 本月精选

新闻