Data Engineering Zoomcamp 第 1 周实战:Terraform + GCP 环境搭建与基础设施即代码(IaC)完整指南
2026/9/12 17:37:04 网站建设 项目流程

Data Engineering Zoomcamp 第 1 周实战:Terraform + GCP 环境搭建与基础设施即代码(IaC)完整指南

【免费下载链接】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

本篇指南面向 Data Engineering Zoomcamp 2027 队列第 1 周(Containerization and Infrastructure as Code)的学员,以仓库中 Terraform 与 GCP 环境搭建文档 为核心骨架,系统讲解从 Terraform 客户端安装、GCP 账号与项目创建、服务账号与 IAM 权限配置,到用 Terraform 在 GCP 上创建 Data Lake(GCS 存储桶)与 Data Warehouse(BigQuery 数据集)的完整流程。读完本文,你将能够独立完成本课程的云基础设施环境准备,并通过terraform init / plan / apply / destroy四条命令安全地创建与销毁课程所需的全部云资源。

一、前置条件:安装 Terraform 与准备云账号

在开始任何基础设施配置之前,需要完成两件最基础的工作,这也是整个课程后续所有云上实操的前提。

1. 安装 Terraform 客户端

Terraform 是 HashiCorp 出品的开源基础设施即代码(Infrastructure-as-Code, IaC)工具。安装方式为从 Terraform 官方下载页获取与操作系统匹配的安装包,将其解压并放入系统PATH环境变量即可通过命令行调用。安装完成后,可以通过terraform version命令验证是否可用。

提示:本仓库中 terraform_with_variables 的 main.tf 声明了required_providers中 google provider 的版本为5.6.0,而 terraform_basic 的 main.tf 使用4.51.0。建议使用与示例配置兼容的 Terraform 版本,并在执行前先运行terraform version确认环境。

2. 注册云服务商账号

本课程使用 Google Cloud Platform(GCP)。课程设计使用免费版本(约 300 美元额度),因此建议使用你的 Google 邮箱注册一个 GCP 账号,并在 Google Cloud Console 中创建你的第一个项目(例如命名为 "DTC DE Course")。创建项目后请务必记下Project ID——后续部署 Terraform 基础设施时需要通过-var="project=<你的 Project ID>"显式传入。

二、Terraform 核心概念速览

在动手执行之前,理解 Terraform 的基本概念能帮助你明白每一步在做什么。以下是本课程中会用到的核心知识,详细讲解参见 Terraform Overview 文档。

1. 什么是基础设施即代码(IaC)

  • Terraform:HashiCorp 开发的开源工具,用于配置(provisioning)基础设施资源,支持 DevOps 变更管理最佳实践。
  • IaC:通过可版本化、可复用、可共享的资源配置文件来安全、一致、可重复地构建、变更和管理基础设施。
  • 核心优势
    • 基础设施生命周期管理;
    • 配置可纳入版本控制(Git commit);
    • 非常适合基于 Stack 的部署,支持 AWS、GCP、Azure、K8s 等主流云平台;
    • 基于 State(状态)的方式追踪部署过程中的资源变更。

2. Terraform 的组成文件

一个典型的 Terraform 配置目录包含:

文件作用
main.tf主配置文件,定义 provider、resource 等核心内容
variables.tf声明输入变量及其默认值
resources.tf/output.tf(可选)拆分资源定义与输出定义
terraform.tfstate状态文件,记录真实资源与配置的映射关系(本地后端时生成)

3. 关键声明块

  • terraform:配置 Terraform 基础设置,包括:
    • required_version:本配置要求的最低 Terraform 版本;
    • backend:存储 Terraform "state" 快照,用于将真实世界资源映射到配置;local表示将状态文件本地存储为terraform.tfstate
    • required_providers:指定当前模块所需的 provider(如hashicorp/google)。
  • provider:添加一组 Terraform 可管理的资源类型和数据源。Terraform Registry 是主要 provider 的公共目录。
  • resource:定义基础设施的具体组件。本项目涉及的核心资源为google_storage_bucket(GCS 存储桶)、google_bigquery_dataset(BigQuery 数据集)和google_bigquery_table(BigQuery 表)。
  • variablelocals:分别对应运行时参数与常量。

4. 四条核心执行命令

  1. terraform init:初始化并配置后端,安装 provider 插件,必要时从版本控制检出已有配置;
  2. terraform plan:将本地变更与远端状态进行比对/预览,生成执行计划(Execution Plan);
  3. terraform apply:请求批准计划并应用到云端;
  4. terraform destroy:从云端移除整个 Stack。

三、GCP 初始化设置(第一次使用必做)

这部分对应 GCP Overview 文档 中的 "Initial Setup",包含五个步骤。

1. 创建项目

登录 Google Cloud Console 并创建你的第一个项目(如 "DTC DE Course"),记下Project ID。它是后续所有云资源归属的标识。

2. 创建服务账号并完成认证

  • 为项目创建服务账号(Service Account),并下载对应的密钥文件(.json);
  • 认证配置方法参见 GCP 官方认证入门文档;
  • 建议先将Viewer角色授予该服务账号(后续小节会补充更多角色)。

3. 下载并安装 Google Cloud SDK

从 GCP 官方 SDK 快速入门页面下载并安装 Cloud SDK,它提供gcloudgsutilbq等命令行工具。

4. 设置环境变量指向密钥文件

export GOOGLE_APPLICATION_CREDENTIALS="<path/to/your/service-account-authkeys>.json"

5. 刷新令牌并验证认证

# 刷新 token/session,并验证认证 gcloud auth application-default login

四、为服务账号配置访问权限(IAM 与 API)

本部分对应 GCP Overview 文档 中的 "Setup for Access"。配置不当是 Terraform 部署失败最常见的根因(典型报错如Error 403: ... does not have storage.buckets.create access)。

1. 追加 IAM 角色

进入IAM & AdminIAM页面(https://console.cloud.google.com/iam-admin/iam),点击服务账号对应的编辑主体(Edit principal)图标,在Viewer之外追加以下角色:

  • Storage Admin
  • Storage Object Admin
  • BigQuery Admin

2. 启用所需 API

在 APIs & Services 页面为项目启用以下两个 API:

  • https://console.cloud.google.com/apis/library/iam.googleapis.com(IAM API)
  • https://console.cloud.google.com/apis/library/iamcredentials.googleapis.com(IAM Service Account Credentials API)

3. 再次确认环境变量

export GOOGLE_APPLICATION_CREDENTIALS="<path/to/your/service-account-authkeys>.json"

确保该环境变量在当前终端会话中已正确设置,Terraform 的 google provider 会读取它来完成认证。

五、Windows 用户专属配置(纯 Windows 环境)

如果你在 Windows 上且不使用 WSL,需要参考 Terraform 与 GCP on Windows 专属文档 完成额外配置(使用 WSL 的用户可跳过本节)。

1. 准备 Linux 风格环境与 SDK

  • 需要一个类 Linux 环境,例如 GitBash、MinGW 或 Cygwin(PowerShell 也可用,但需要自行调整命令);
  • 以 zip 形式下载 Google Cloud SDK(google-cloud-sdk.zip),解压后运行其中的install.sh脚本;
  • 安装时若提示无法自动更新系统 PATH,请手动将C:\tools\google-cloud-sdk\bin加入PATH(可写入.bashrc或系统级环境变量);
  • 若使用 Anaconda 的 Python,需指定export CLOUDSDK_PYTHON=~/Anaconda3/python
  • 通过gcloud version验证 SDK 是否正常(输出中应包含 Google Cloud SDK 版本号及 bq、core、gsutil 组件版本)。

2. SDK 认证

将下载的服务账号密钥放到固定位置(例如~/.gc/ny-rides.json),然后:

export GOOGLE_APPLICATION_CREDENTIALS=~/.gc/ny-rides.json # 方式一:使用服务账号密钥直接激活 gcloud auth activate-service-account --key-file $GOOGLE_APPLICATION_CREDENTIALS # 方式二:OAuth 应用默认登录(与视频演示一致) gcloud auth application-default login

如果遇到quota exceeded类警告(如 "Cannot find a quota project to add to ADC"),执行:

PROJECT_NAME="ny-rides-alexey" # 替换为你的项目名 gcloud auth application-default set-quota-project ${PROJECT_NAME}

3. Windows 上的 Terraform 使用

  • 下载 Terraform 并放入PATH中的目录;
  • 在 Terraform 配置文件所在目录执行terraform init
  • 可选:在variables.tf中直接配置项目 ID:
variable "project" { description = "Your GCP Project ID" default = "ny-rides-alexey" type = string }
  • 随后按 Terraform Overview 文档的执行步骤 依次运行terraform planterraform apply

故障排查:如果出现Error: googleapi: Error 403: ... does not have storage.buckets.create access,说明服务账号缺少权限,请回到第四节,确保所有必需角色都已授予。

六、Terraform Workshop:在 GCP 上创建基础设施

环境就绪后,进入仓库中的 terraform 目录 执行部署。该目录按学习进度提供了多套示例配置。

1. 三套参考配置的结构

  • terraform_basic/main.tf:最简入门版。声明hashicorp/googleprovider(版本4.51.0),直接硬编码projectregionus-central1),并定义两个核心资源:
    • google_storage_bucket.data-lake-bucketSTANDARD存储类、开启uniform_bucket_level_access与版本管理(versioning)、配置 30 天自动删除的生命周期规则、force_destroy = true
    • google_bigquery_dataset.dataset:指定dataset_idprojectlocation(US)。
  • terraform_with_variables/:引入variables.tf变量化改造,provider 版本升级为5.6.0,资源定义全部引用变量。variables.tf中可配置项包括:
变量默认值说明
credentials<Path to your Service Account json file>服务账号 JSON 密钥路径,provider 通过credentials = file(var.credentials)读取
project<Your Project ID>GCP 项目 ID
regionus-central1资源区域
locationUS资源位置(Bucket/Dataset 均为多区域 US)
bq_dataset_namedemo_datasetBigQuery 数据集名称
gcs_bucket_nameterraform-demo-terra-bucketGCS 存储桶名称(需全局唯一)
gcs_storage_classSTANDARD存储桶存储类
  • terraform_with_variable_AWS/:面向 AWS 的变量化示例(含terraform.tfvars),用于对比理解不同云厂商 provider 的写法,本课程主流程以 GCP 为准。

2. 执行步骤(完整命令序列)

terraform 目录的 README 给出了官方执行序列:

# 1. 刷新服务账号的 auth-token(当前会话) gcloud auth application-default login # 2. 初始化状态文件(.tfstate)并下载 provider 插件 terraform init # 3. 预览对基础设施的变更,生成执行计划 terraform plan -var="project=<your-gcp-project-id>"
# 4. 创建新基础设施(会请求确认) terraform apply -var="project=<your-gcp-project-id>"
# 5. 工作完成后删除基础设施,避免运行中服务的费用 terraform destroy

3. 组织策略限制下的后备方案(Impersonation)

部分组织禁止直接生成服务账号密钥文件。此时可使用"服务账号模拟(impersonation)"方式绕过,步骤如下:

  1. 为用户授予目标服务账号的roles/iam.serviceAccountTokenCreator角色:
gcloud iam service-accounts add-iam-policy-binding \ <SERVICE_ACCOUNT_EMAIL> \ --member="user:YOUR_EMAIL@gmail.com" \ --role="roles/iam.serviceAccountTokenCreator"
  1. 在 main 配置中加入以下数据块与第二个 provider:
# 使用 ADC(身份验证)连接 GCP provider "google" { project = var.project region = var.region zone = var.zone } # 获取服务账号的临时 token data "google_service_account_access_token" "default" { provider = google target_service_account = "<SERVICE_ACCOUNT_EMAIL>" scopes = ["https://www.googleapis.com/auth/cloud-platform"] lifetime = "3600s" } # 第二个 provider 使用临时 token 执行实际操作 provider "google" { alias = "impersonated" access_token = data.google_service_account_access_token.default.access_token project = var.project region = var.region zone = var.zone }
  1. 完成配置后,即可按上文"执行步骤"正常执行terraform init / plan / apply

4. 重要提醒:.gitignore 与安全

在把 Terraform 配置发布到 GitHub 等代码托管平台前,务必使用合适的.gitignore(可参考官方 Terraform.gitignore 模板)。重点排除terraform.tfstate*.tfstate.*.terraform/*.tfvars(尤其包含服务账号密钥或敏感默认值时)等文件,避免泄露云资源状态与服务账号凭据。

七、与课程其他环节的衔接

本模块的 Terraform 配置围绕课程的数据平台架构展开:GCS(Google Cloud Storage)充当 Data Lake(数据湖),BigQuery 充当 Data Warehouse(数据仓库)。后续 Week 2(数据摄取)将把数据从 GCS 加载到 BigQuery,因此本模块创建的两个资源是整条数据管线的云侧地基。

关于 Docker 容器化数据管道(Week 1 前半部分)、Kestra 工作流编排(Week 2)与本模块的衔接方式,可继续阅读 01-docker-terraform 模块 README 与 pipeline 目录;完成基础设施创建后,即可回到 Terraform 目录 对照配置逐条验证本指南中的每一步。

八、常见问题速查

现象原因与解决
terraform命令不存在Terraform 未安装或未加入PATH,重新安装并检查环境变量
Error 403: does not have storage.buckets.create access服务账号缺少 Storage/BigQuery 相关 IAM 角色,按第四节补齐
quota exceeded / Cannot find a quota project使用gcloud auth application-default set-quota-project <PROJECT_NAME>指定配额项目
服务账号密钥无法生成(组织策略)使用第六节的服务账号模拟(impersonation)后备方案
plan时提示项目错误确认-var="project=..."传入的是正确的 Project ID

以上每一步均可对照仓库中的 setup 文档、Terraform Overview、GCP Overview 与 Windows 专属指南 进行交叉验证,配合 terraform 示例配置 逐行理解,即可顺利完成 Week 1 的云基础设施搭建任务。

【免费下载链接】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),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询