#datapipeline: Distribuera serverlös datapipeline till GCP med Terraform

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.

Pipeline för eldata
Pipeline för eldata

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.


Posted

in

, ,

by

Tags:

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *