)
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),僅供參考