#datapipeline: Distribuera serverlös datapipeline till GCP med Terraform
by bernt & torsten
Jag byggde nyligen en datapipeline som jag skrev upp i en artikeldatapipeline timströmhastigheten, vad jag inte förklarade var hur jag distribuerade den till Google Cloud Platform. I den här artikeln kommer jag att visa dig hur jag använde Terraform för att distribuera den till Google Cloud Platform.
Det största kommunikationsproblemet är att vi inte lyssnar för att förstå att vi lyssnar för att svara
Terraform är en infrastruktur med öppen källkod som ett kodprogramverktyg som ger ett konsekvent CLI-arbetsflöde för att hantera hundratals molntjänster.
Det här inlägget ger en översikt över de Terraform-resurser som krävs för att konfigurera infrastrukturen för att skapa eldatapipeline på Google Cloud Platform (GCP) som illustreras i diagrammet nedan.
Terraform-resurser
För att definiera ovanstående infrastruktur i Terraform behöver vi följande Terraform-resurser:
Definiera providern
Jag använder Google jag ställer in min leverantör på Google och definierar även GCP-projektets namn
leverantör "google" {
projekt = "<projekt-id>"
region = "oss-central1"
}
Definiera en bucket
Därefter definierar jag bucketen för att lagra källkoden för molnfunktionen
resurs "google_storage_bucket" "bucket" {
namn = "svensk-elektriska priser" # Detta bucket name måste vara unikt
plats = "oss"
}
Definiera arkivfil
På min lokala dator definierar jag var min src är och var du ska lagra den .zip filen – Katalog där din Python-källkod finns
data "archive_file" "src" {
typ = "zip"
source_dir = "${path.root}/.. /src" #
output_path = "${path.root}/.. /generated/src.zip"
}
resurs "google_storage_bucket_object" "arkiv" {
namn = "${data.archive_file.src.output_md5}.zip"
bucket = google_storage_bucket.bucket.name
källa = "${path.root}/.. /generated/src.zip"
}
Definiera molnfunktionen
Jag definierar molnfunktionsresursen, vilken region, vilket minne, vilken typ av körning och kodens startpunkt. Och varifrån koden ska distribueras till molnfunktionen.
resurs "google_cloudfunctions_function" "funktion" {
namn = "svensk-elektriska priser"
beskrivning = "Trigger för svenska elpriser"
körtid = "python37"
environment_variables = {
PROJECT_NAME = "<Projektnamn",
}
available_memory_mb = 256
timeout = 360
source_archive_bucket = google_storage_bucket.bucket.name
source_archive_object = google_storage_bucket_object.archive.name
trigger_http = sant
entry_point = "main" # Det här är namnet på funktionen som ska köras i din Python-kod
}
Definiera tjänstkonto
Jag måste definiera ett tjänst konto som kan nås av de olika GCP-tjänsten automatiskt utan mitt ingripande.
resurs "google_service_account" "service_account" {
account_id = "svensk-elektriska priser"
display_name = "Cloud Function Svenska elpriser Invoker Servicekonto"
}
Ange IAM-roll
För att moln schemaläggaren ska kunna anropa en moln funktion måste jag ange några IAM-roller.
resurs "google_cloudfunctions_function_iam_member" "invoker" {
projekt = google_cloudfunctions_function.function.project
region = google_cloudfunctions_function.function.region
cloud_function = google_cloudfunctions_function.function.name
roll = "roles/cloudfunctions.invoker"
medlem = "serviceAccount:${google_service_account.service_account.email}"
}
Definiera molnschemaläggaren
För att väcka molnfunktionen måste jag kunna skapa ett schemalagt jobb, jag gör det genom att använda Cloud Scheduler och i terraform definiera detaljerna för att ställa in ett moln schema jobb.
resurs "google_cloud_scheduler_job" "jobb" {
namn = "svensk-elektriska priser"
beskrivning = "Utlösa ${google_cloudfunctions_function.function.name} Cloud Function Daily kl. 6:00."
schema = "10 0 * * *" # Dagligen kl 12:10
time_zone = "Europa/Stockholm"
attempt_deadline = "320s"
http_target {
http_method = "GET"
uri = google_cloudfunctions_function.function.https_trigger_url
oidc_token {
service_account_email = google_service_account.service_account.email
}
}
}
Det finns många olika sätt att distribuera en datapipeline med en flexibel lösning som utnyttjar Terraforms funktioner fullt ut samtidigt som en billig, skalbar infrastruktur skapas. Om du har några frågor eller idéer om hur du kan förbättra detta tillvägagångssätt kan du göra en kommentar nedan.
Take Your Brand Up a Notch
So, your brand's been jogging comfortably along the marketing track, maybe even breaking...
The AI boom – a ticking energy bomb
Yes, the rise of artificial intelligence indeed presents a conundrum, not unlike the many...
Three Ideas To Keep Your Construction Business Running Smoothly
If your construction business is currently struggling, then you need to work out how to get...