[ad_1]
MLOps: Điều phối đường ống dữ liệu
Đây là phần kết thúc của Dataform 101 trình bày các nguyên tắc cơ bản của việc thiết lập Dataform với trọng tâm là luồng xác thực của nó. Phần thứ hai này tập trung vào việc triển khai quy trình theo địa hình được giải thích trong phần 1.
Cung cấp biểu mẫu dữ liệu
Dataform có thể được thiết lập thông qua bảng điều khiển GCP, nhưng Terraform cung cấp một cách tiếp cận tinh tế để cung cấp và quản lý cơ sở hạ tầng như Dataform. Việc sử dụng Terraform mang lại tính di động, khả năng sử dụng lại và tạo phiên bản cơ sở hạ tầng cùng với nhiều lợi ích khác. Do đó, cần phải có kiến thức về Terraform trong phần này. Nếu bạn quen thuộc với Terraform, hãy đến Kho lưu trữ GitHub và tải xuống tất cả mã. Nếu không, việc tăng cường kỹ năng trên đám mây của Google sẽ tốt tài nguyên để bắt đầu.
Thiết lập môi trường
Chúng tôi bắt đầu bằng cách thiết lập hai môi trường, prod
Và staging
, như được phản ánh trong sơ đồ dòng kiến trúc ở trên. Cần lưu ý rằng việc phát triển mã được thực hiện trên hệ thống macOS và do đó, người dùng hệ thống cửa sổ có thể cần một số điều chỉnh để thực hiện.
mkdir prod
mkdir staging
Thiết lập tập tin dàn dựng
Tất cả các mã ban đầu được viết trong staging
danh mục. Điều này là do kiến trúc đề xuất cung cấp Dataform trong môi trường chạy thử và chỉ có một số tài nguyên được cung cấp trong môi trường sản xuất.
Hãy bắt đầu bằng cách cung cấp một bộ chứa từ xa để lưu trữ trạng thái Terraform trong phần phụ trợ từ xa. Việc này sẽ được thực hiện thủ công và chúng tôi sẽ không đưa nhóm vào quản lý địa hình. Có một chút vấn đề là liệu thùng chứa trạng thái Terraform có nên được quản lý bởi cùng một Terraform hay không. Cái mà bạn gọi là Catch-22. Vì vậy, chúng tôi tự tạo một nhóm có tên dataform-staging-terraform-state trong môi trường dàn dựng bằng cách thêm phần sau vào staging
danh mục:
#staging/backend.tf
terraform {
backend "gcs" {
bucket = "dataform-staging-terraform-state"
prefix = "terraform/state"
}
Tiếp theo, thêm nhà cung cấp tài nguyên vào cơ sở mã.
#staging/suppliers.tf
terraform {
required_providers {
google = {
supply = "hashicorp/google"
model = ">=5.14.0"
}
google-beta = {
supply = "hashicorp/google-beta"
model = ">=5.14.0"
}
}required_version = ">= 1.7.3"
}
supplier "google" {
challenge = var.project_id
}
Sau đó, chúng tôi tạo một tệp biến để xác định tất cả các biến được sử dụng để cung cấp cơ sở hạ tầng.
#staging/variables.tf
variable "project_id" {
sort = string
description = "Identify of the GCP Mission."
}variable "area" {
sort = string
description = "The google cloud area to make use of"
default = "europe-west2"
}
variable "project_number" {
sort = string
description = "Variety of the GCP Mission."
}
variable "location" {
sort = string
description = "The google cloud location wherein to create sources"
default = "EU"
}
variable "dataform_staging_service_account" {
sort = string
description = "E mail of the service account Dataform makes use of to execute queries in staging env"
}
variable "dataform_prod_service_account" {
sort = string
description = "E mail of the service account Dataform makes use of to execute queries in manufacturing"
}
variable "dataform_github_token" {
description = "Dataform GitHub Token"
sort = string
delicate = true
}
Các auto.tfvars
tập tin được thêm vào để đảm bảo các biến có thể tự động phát hiện được. Đảm bảo thay thế thích hợp cho các phần giữ chỗ biến trong tệp.
#staging/staging.auto.tfvars
project_id = "{staging-project-id}"
area = "{staging-project--region}"
project_number = "{staging-project-number}"
dataform_staging_service_account = "dataform-staging"
dataform_prod_service_account = "{dataform-prod-service-account-email}"
dataform_github_token = "dataform_github_token"
Tiếp theo là việc cung cấp bí mật nơi lưu trữ mã thông báo người dùng máy.
#staging/secrets and techniques.tf
useful resource "google_secret_manager_secret" "dataform_github_token" {
challenge = var.project_id
secret_id = var.dataform_github_token
replication {
user_managed {
replicas {
location = var.area
}
}
}
}
Sau khi cung cấp bí mật, một knowledge
tài nguyên được thêm vào cơ sở mã terraform để đọc động giá trị bí mật được lưu trữ để Dataform có quyền truy cập vào thông tin xác thực GitHub của người dùng máy khi được cung cấp. Các knowledge
tài nguyên được điều chỉnh dựa trên tài nguyên bí mật để đảm bảo rằng nó chỉ chạy khi bí mật đã được cung cấp.
#staging/knowledge.tf
knowledge "google_secret_manager_secret_version" "dataform_github_token" {
challenge = var.project_id
secret = var.dataform_github_tokendepends_on = (
google_secret_manager_secret.dataform_github_token
)
}
Chúng tôi tiến hành cung cấp tài khoản dịch vụ cần thiết cho môi trường chạy thử cùng với việc cấp các quyền cần thiết để hiển thị dữ liệu cho BigQuery.
#staging/service_accounts.tf
useful resource "google_service_account" "dataform_staging" {
account_id = var.dataform_staging_service_account
display_name = "Dataform Service Account"
challenge = var.project_id
}
Và các quyền BQ
#staging/iam.tf
useful resource "google_project_iam_member" "dataform_staging_roles" {
for_each = toset((
"roles/bigquery.dataEditor",
"roles/bigquery.dataViewer",
"roles/bigquery.person",
"roles/bigquery.dataOwner",
))challenge = var.project_id
position = every.worth
member = "serviceAccount:${google_service_account.dataform_staging.e-mail}"
depends_on = (
google_service_account.dataform_staging
)
}
Đây là thời điểm quan trọng vì chúng tôi có tất cả cơ sở hạ tầng cần thiết để cung cấp Dataform trong môi trường chạy thử.
#staging/dataform.tf
useful resource "google_dataform_repository" "dataform_demo" {
supplier = google-beta
title = "dataform_demo"
challenge = var.project_id
area = var.area
service_account = "${var.dataform_staging_service_account}@${var.project_id}.iam.gserviceaccount.com"git_remote_settings {
url = "https://github.com/kbakande/terraforming-dataform"
default_branch = "essential"
authentication_token_secret_version = knowledge.google_secret_manager_secret_version.dataform_github_token.id
}
workspace_compilation_overrides {
default_database = var.project_id
}
}
useful resource "google_dataform_repository_release_config" "prod_release" {
supplier = google-beta
challenge = var.project_id
area = var.area
repository = google_dataform_repository.dataform_demo.title
title = "prod"
git_commitish = "essential"
cron_schedule = "30 6 * * *"
code_compilation_config {
default_database = var.project_id
default_location = var.location
default_schema = "dataform"
assertion_schema = "dataform_assertions"
}
depends_on = (
google_dataform_repository.dataform_demo
)
}
useful resource "google_dataform_repository_workflow_config" "prod_schedule" {
supplier = google-beta
challenge = var.project_id
area = var.area
title = "prod_daily_schedule"
repository = google_dataform_repository.dataform_demo.title
release_config = google_dataform_repository_release_config.prod_release.id
cron_schedule = "45 6 * * *"
invocation_config {
included_tags = ()
transitive_dependencies_included = false
transitive_dependents_included = false
fully_refresh_incremental_tables_enabled = false
service_account = var.dataform_prod_service_account
}
depends_on = (
google_dataform_repository.dataform_demo
)
}
Các google_dataform_repository tài nguyên cung cấp kho lưu trữ dạng dữ liệu trong đó kho lưu trữ từ xa đích được chỉ định cùng với mã thông báo để truy cập vào kho lưu trữ. Sau đó, chúng tôi cung cấp cấu hình phát hành cho biết nhánh repo từ xa nào sẽ tạo quá trình biên dịch và định cấu hình thời gian bằng lịch trình cron.
Cuối cùng, cấu hình quy trình làm việc được cung cấp với lịch trình hơi so le trước cấu hình phát hành để đảm bảo rằng có sẵn bản biên dịch mới nhất khi cấu hình quy trình làm việc chạy.
Khi Dataform được cung cấp, một tài khoản dịch vụ mặc định sẽ được tạo cùng với nó ở định dạng service-{project_number}@gcp-sa-dataform.iam.gserviceaccount.com. Tài khoản dịch vụ mặc định này sẽ cần phải mạo danh cả tài khoản dịch vụ dàn dựng và dịch vụ sản phẩm để hiện thực hóa dữ liệu trong các môi trường đó.
Chúng tôi sửa đổi iam.tf
tệp trong môi trường chạy thử để cấp các vai trò cần thiết cho tài khoản dịch vụ mặc định của Dataform nhằm mạo danh tài khoản dịch vụ trong môi trường chạy thử và truy cập vào bí mật được cung cấp.
#staging/iam.tf
useful resource "google_project_iam_member" "dataform_staging_roles" {
for_each = toset((
"roles/bigquery.dataEditor",
"roles/bigquery.dataViewer",
"roles/bigquery.person",
"roles/bigquery.dataOwner",
))challenge = var.project_id
position = every.worth
member = "serviceAccount:${google_service_account.dataform_staging.e-mail}"
depends_on = (
google_service_account.dataform_staging
)
}
useful resource "google_service_account_iam_binding" "custom_service_account_token_creator" {
service_account_id = "initiatives/${var.project_id}/serviceAccounts/${var.dataform_staging_service_account}@${var.project_id}.iam.gserviceaccount.com"
position = "roles/iam.serviceAccountTokenCreator"
members = (
"serviceAccount:@gcp-sa-dataform.iam.gserviceaccount.com">service-${var.project_number}@gcp-sa-dataform.iam.gserviceaccount.com"
)
depends_on = (
module.service-accounts
)
}
useful resource "google_secret_manager_secret_iam_binding" "github_secret_accessor" {
secret_id = google_secret_manager_secret.dataform_github_token.secret_id
position = "roles/secretmanager.secretAccessor"
members = (
"serviceAccount:@gcp-sa-dataform.iam.gserviceaccount.com">service-${var.project_number}@gcp-sa-dataform.iam.gserviceaccount.com"
)
depends_on = (
google_secret_manager_secret.dataform_github_token,
module.service-accounts,
)
}
Dựa trên nguyên tắc của kiểm soát truy cập đặc quyền tối thiểuliên kết IAM cho tài nguyên được nhắm mục tiêu được sử dụng để cấp quyền truy cập chi tiết vào tài khoản dịch vụ mặc định.
Để không kéo dài bài đăng này hơn mức cần thiết, mã terraform để cung cấp tài nguyên trong môi trường sản phẩm có sẵn trong Kho lưu trữ GitHub. Chúng tôi chỉ cần cung cấp nhóm phụ trợ từ xa và tài khoản dịch vụ (cùng với các quyền chi tiết hơn cho tài khoản dịch vụ mặc định) trong môi trường sản xuất. Nếu việc cung cấp thành công, trạng thái biểu mẫu dữ liệu trong môi trường chạy thử sẽ trông giống như hình ảnh bên dưới.
Một số ưu và nhược điểm của kiến trúc đề xuất được nêu bật như sau:
Ưu điểm
- Tuân theo nguyên tắc kiểm soát phiên bản. Kiến trúc được đề xuất chỉ có một phiên bản nhưng mã có thể được hiện thực hóa trong nhiều môi trường.
- Thử nghiệm được giới hạn trong môi trường dàn dựng nhằm giảm thiểu nguy cơ sửa đổi dữ liệu sản xuất ngoài ý muốn.
Nhược điểm
- Lo ngại rằng tài khoản dịch vụ mặc định có thể tạo ra thay đổi ngoài ý muốn trong môi trường sản xuất nhưng điều này được giảm thiểu bằng kiểm soát truy cập đặc quyền tối thiểu.
- Nhiều nhà phát triển làm việc đồng thời trong môi trường dàn dựng có thể ghi đè dữ liệu. Mặc dù không được hiển thị trong bài đăng này, nhưng kịch bản này có thể được giảm nhẹ bằng ghi đè biên dịch không gian làm việc Và tính năng hậu tố lược đồ của Dữ liệu.
Như với bất kỳ kiến trúc nào, đều có những ưu và nhược điểm. Quyết định cuối cùng phải dựa trên hoàn cảnh bên trong tổ chức. Hy vọng rằng bài đăng này góp phần đưa ra quyết định đó.
TRONG phần 1, Chúng tôi đã xem xét một số thuật ngữ được sử dụng trong Biểu mẫu dữ liệu GCP và hướng dẫn chi tiết về quy trình xác thực cho một kho lưu trữ duy nhất, Biểu mẫu dữ liệu đa môi trường được thiết lập. Sau đó, mã Terraform sẽ được cung cấp trong phần 2 này cùng với phương pháp triển khai kiểm soát quyền truy cập đặc quyền tối thiểu cho các tài khoản dịch vụ.
Tôi hy vọng bạn thấy bài viết này hữu ích trong sự hiểu biết của bạn về Dataform. Hãy kết nối trên Linkedln
Tín dụng hình ảnh: Tất cả hình ảnh trong bài viết này đều do Tác giả tạo ra
Người giới thiệu
[ad_2]
Source link