尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

Data Engineering Zoomcamp:用 Terraform 在 AWS 上搭建与 GCP 等价的数据湖基础设施(S3 + Glue)

Data Engineering Zoomcamp:用 Terraform 在 AWS 上搭建与 GCP 等价的数据湖基础设施(S3 + Glue) Data Engineering Zoomcamp用 Terraform 在 AWS 上搭建与 GCP 等价的数据湖基础设施S3 Glue【免费下载链接】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 课程主线的云基础设施基于 Google Cloud PlatformGCS 存储桶 BigQuery 数据集但本目录提供了一套AWS 版本的 Terraform 实现将同一套数据湖概念用 Amazon S3 与 AWS Glue Data Catalog 复现帮助偏好或受限于 AWS 的学习者理解云无关cloud-agnostic的数据工程思想。读完本篇你将掌握GCP 与 AWS 服务的一一映射关系、S3 数据湖的基础资源声明版本控制、公共访问封锁、生命周期过期策略、Glue Catalog 数据库的创建以及完整的init → plan → apply → destroy执行闭环。关联文档terraform_with_variable_AWS/README.md本文所有配置均以其为骨架并结合仓库内 GCP 对照实现展开。背景为什么需要一个 AWS 版本的数据湖课程主体GCS BigQuery GCP Terraform provider面向 Google Cloud但并非所有学习者都使用 GCP。这份 AWS 实现的目标人群是正在学习 GCP 向数据工程课程但希望用 AWS 复现的学习者工作或练习环境限定在 AWS 的工程师想通过同一套概念、两朵云实现的对照来理解云无关的数据工程抽象的人。这套配置聚焦构建一个基础数据湖地基只涉及三个层面Amazon S3数据湖存储层对应 GCSAWS Glue Data Catalog元数据与查询层对应 BigQuery 的数据集/元数据层Terraform以 IaC基础设施即代码方式声明并管理上述资源。GCP → AWS 架构映射表文档用一张对照表清晰地给出了两朵云之间的服务映射这是理解整套 AWS 配置的钥匙GCP 服务AWS 等价服务用途Google Cloud StorageGCSAmazon S3数据湖存储Uniform Bucket Level Access统一存储桶级访问S3 Public Access Block安全的存储桶访问控制Object Lifecycle Rules对象生命周期规则S3 Lifecycle Configuration数据自动过期清理BigQuery DatasetAWS Glue Catalog Database元数据与查询层TerraformGCP providerTerraformAWS provider基础设施即代码可以对照仓库中另一份 GCP 实现 terraform_with_variables/main.tfgoogle_storage_bucketgoogle_bigquery_dataset与 terraform_basic/main.tf含uniform_bucket_level_access、versioning、lifecycle_rule的完整版 GCS 存储桶逐行体会两朵云的对应关系。项目结构terraform_with_variable_AWS/ ├── main.tf # 核心基础设施资源 ├── variables.tf # 输入变量定义 ├── terraform.tfvars # 环境特定取值 └── README.md # 项目文档这一结构遵循了 1_terraform_overview.md 中描述的标准 Terraform 布局main.tf声明资源variables.tf抽象输入参数terraform.tfvars提供环境级取值.tfstate由 Terraform 自动维护状态文件。核心资源main.tf 逐块拆解main.tf 是整个数据湖的地基共 5 个资源块下面逐一说明其含义与设计意图。1. Terraform 与 AWS Provider 声明terraform { required_providers { aws { source hashicorp/aws version ~ 5.0 } } } provider aws { region var.aws_region }required_providers声明模块依赖hashicorp/aws提供方版本约束~ 5.0表示接受 5.x 系列内的兼容升级provider aws把 AWS 区域绑定到变量var.aws_region实现配置与区域解耦——换区域只需改变量不改资源定义。2. S3 数据湖存储桶对应 GCS Bucketresource aws_s3_bucket data_lake_bucket { bucket var.bucket_name force_destroy true }bucket使用变量注入便于在不同环境复用同一份模板force_destroy true表示销毁时允许连同桶内对象一并删除——与 GCP 侧google_storage_bucket的force_destroy true见 terraform_with_variables/main.tf语义一致适用于课程练习场景避免残留资源产生费用。3. 桶版本控制resource aws_s3_bucket_versioning versioning { bucket aws_s3_bucket.data_lake_bucket.id # Reference the S3 bucket created above versioning_configuration { status Enabled # Enable versioning } }通过aws_s3_bucket.data_lake_bucket.id建立资源间引用这是 Terraform 声明式依赖的典型写法开启版本控制Enabled对应 GCP 侧versioning { enabled true }见 terraform_basic/main.tf为数据湖提供对象级历史回滚能力是生产数据管线的常见基线设置。4. 公共访问封锁对应 Uniform Bucket Level Accessresource aws_s3_bucket_public_access_block block_public_access { bucket aws_s3_bucket.data_lake_bucket.id block_public_acls true block_public_policy true ignore_public_acls true restrict_public_buckets true }四个开关全部置true语义如下block_public_acls拒绝通过 ACL 授予公共访问block_public_policy拒绝通过存储桶策略授予公共访问ignore_public_acls忽略任何已存在的公共 ACLrestrict_public_buckets限制通过公共存储桶策略的访问。这与 GCP 侧uniform_bucket_level_access true见 terraform_basic/main.tf目标一致默认拒绝公共访问数据湖默认私有这是数据安全基线。5. 生命周期规则30 天自动过期对应 Lifecycle Rulesresource aws_s3_bucket_lifecycle_configuration lifecycle_rules { bucket aws_s3_bucket.data_lake_bucket.id rule { id Delete_old_older_than_30_days status Enabled expiration { days 30 } filter { prefix # Apply to all objects in the bucket } } }expiration { days 30 }对象在桶中存放超过 30 天后自动删除filter { prefix }规则作用于桶内全部对象空前缀即全量匹配与 GCP 侧lifecycle_rule { action { type Delete } condition { age 30 } }见 terraform_basic/main.tf一一对应用于控制存储成本、自动清理临时数据。6. Glue Catalog 数据库对应 BigQuery Datasetresource aws_glue_catalog_database dataset { name var.dataset_name }在 AWS Glue Data Catalog 中创建一个逻辑数据库作为元数据容器它的作用是让 Athena / Glue ETL 等工具能基于该库对 S3 上的数据做SQL 查询与元数据管理对应 GCP 侧google_bigquery_dataset见 terraform_with_variables/main.tf。变量设计variables.tfvariables.tf 将易变参数从资源定义中剥离定义了三个输入变量变量类型默认值说明aws_regionstringeu-north-1资源部署区域默认斯德哥尔摩欧洲用户延迟低bucket_namestringdata-engineering-zoomcamp-1568692036S3 桶名必须在所有 AWS 账户间全局唯一dataset_namestringny_taxi_databaseGlue Catalog 数据库名Athena/Glue 查询用的逻辑数据集设计要点bucket_name的注释特别强调 S3 桶名全局唯一——这与 GCS 桶名全局唯一的约束相同是初学者最常见的apply失败原因dataset_name的默认值ny_taxi_database呼应课程主干纽约出租车数据与 GCP 侧的demo_dataset命名风格一致。环境取值terraform.tfvarsterraform.tfvars 提供环境特定的覆盖值无需修改模板即可切换部署目标bucket_name my-unique-data-lake-bucket-12345 dataset_name ny_taxi_dataset注意该文件只覆盖了bucket_name与dataset_nameaws_region仍采用variables.tf中的默认值eu-north-1。Terraform 的变量优先级为命令行-varterraform.tfvars 环境变量 默认值因此也可以直接用-var在命令行覆盖。执行流程从 init 到 destroy仓库中 GCP 侧的 terraform/README.md 给出了标准执行闭环AWS 版完全复用同一套生命周期仅需先配置 AWS 凭据例如AWS_ACCESS_KEY_ID/AWS_SECRET_ACCESS_KEY或aws configure# 1. 初始化安装 AWS provider、初始化状态文件 (.tfstate) terraform init # 2. 预览对比本地配置与当前状态生成执行计划 # 如需要临时覆盖变量可追加 -varbucket_namexxx terraform plan # 3. 应用确认执行计划后创建基础设施 terraform apply # 4. 清理课程练习完成后删除全部资源避免运行中服务的费用 terraform destroy每一步对应的语义依据 1_terraform_overview.mdterraform init初始化并配置后端安装 provider 插件terraform plan将本地更改与远端状态比对提出执行计划terraform apply请求批准计划并应用到云端terraform destroy从云端移除整个栈。练习建议与注意事项成本控制完成练习后务必执行terraform destroy。虽然本例的 S3 Glue 几乎零成本但养成清理习惯是云上课程的基本纪律.gitignore 纪律terraform.tfvars若包含敏感取值以及*.tfstate状态文件可能含敏感元数据发布代码前应配置标准的 Terraform gitignore 规则仓库 GCP 侧 terraform/README.md 亦有此警告唯一性约束bucket_name必须全局唯一建议像示例那样带上随机后缀如my-unique-data-lake-bucket-12345进一步对照学习阅读 2_gcp_overview.md 与 windows.md 了解 GCP 侧的 IAM 与本地设置再将本 AWS 配置与 terraform_with_variables/main.tf、terraform_basic/main.tf 逐行对比即可完整建立GCP ⇄ AWS 双云数据湖的心智模型。小结这份 AWS 实现用最少的资源1 个 S3 桶 版本控制 公共访问封锁 生命周期规则 1 个 Glue Catalog 数据库复刻了课程中 GCP 数据湖的全部核心能力并通过变量抽象实现了模板与环境分离。它证明了数据工程的基础设施模式是云无关的无论 GCS 还是 S3、BigQuery 还是 Glue只要掌握存储层 元数据层 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创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表