Nature as it should be

#datapipeline: Installer serverløs datapipeline til GCP med Terraform

Jeg har for nylig bygget en data pipeline, som jeg skrev op i en artikel data pipeline time el-sats, hvad jeg ikke forklare var, hvordan jeg indsat det til Google Cloud Platform. I denne artikel vil jeg vise dig, hvordan jeg brugte Terraform til at implementere den på Google Cloud Platform.

Det største kommunikationsproblem er, at vi ikke lytter til at forstå, at vi lytter til at reagere

Terraform er en open source-infrastruktur som et kodesoftwareværktøj, der giver en ensartet CLI-arbejdsgang til styring af hundredvis af cloud-tjenester.

Dette indlæg giver en oversigt over de Terraform ressourcer, der kræves for at konfigurere infrastrukturen til oprettelse af El Data Pipeline på Google Cloud Platform (GCP) som illustreret i diagrammet nedenfor.

Eldatarørledning
Eldatarørledning

Terraform-ressourcer

For at definere ovenstående infrastruktur i Terraform har vi brug for følgende Terraform-ressourcer:

Definer provideren

Jeg bruger Google Jeg indstiller min udbyder til Google og definerer også navnet på GCP-projektet

udbyder "google" {
  projekt = "<projekt-id>"
  region = "us-central1"
}

Definere en bucket

Dernæst definerer jeg skovlen til at gemme kildekoden til cloud-funktionen

ressourcen "google_storage_bucket" "bucket" {
  navn = "svensk-electricty-priser" # Dette bucket navn skal være unik
  placering = "os"
}

Definer arkivfil

På min lokale maskine, definerer jeg, hvor min src er, og hvor man kan gemme src.zip fil – Mappe, hvor din Python kildekode er

data "archive_file" "src" {
  type = "zip"
  source_dir = "${path.root}/.. /src" # 
  output_path = "${path.root}/.. /generated/src.zip"
}
ressourcen "google_storage_bucket_object" "arkiv" {
  navn = "${data.archive_file.src.output_md5}.zip"
  bucket = google_storage_bucket.bucket.name
  kilde = "${path.root}/.. /generated/src.zip"
}

Definer skyfunktionen

Jeg definerer cloudfunktionsressourcen, hvilket område, hvilken hukommelse, hvilken type kørselstid og kodens indgangspunkt. Og hvorfra man kan implementere koden til skyfunktionen.


ressourcen "google_cloudfunctions_function" "funktion" {
  navn = "svensk-electricty-priser"
  description = "Trigger for svenske elpriser"
  runtime = "python37"

environment_variables = {
    PROJECT_NAME = "<Project Name"
  }

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 = sand
  entry_point = "main" # Dette er navnet på den funktion, der vil blive udført i din Python-kode
}

Definer tjenestekonto

Jeg har brug for at definere en tjenestekonto, der automatisk kan tilgås af de forskellige GCP-tjenester uden min indgriben.

ressourcen "google_service_account" "service_account" {
  account_id = "svensk-electricty-priser"
  display_name = "Cloud Funktion svensk El-priser Invoker Service Konto"
}

Angiv IAM-rolle

For Cloud Scheduler at være i stand til at påberåbe sig en Cloud-funktion, jeg har brug for at indstille et par IAM roller.

ressourcen "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

role = "roller/cloudfunctions.invoker"
  medlem = "serviceAccount:${google_service_account.service_account.email}"
}

Definer Skystyring

For at vække cloud-funktionen skal jeg være i stand til at oprette et planlagt job, det gør jeg ved hjælp af Cloud Scheduler og i terraform definerer detaljerne i indstilling af et cloud schedule-job.

ressourcen "google_cloud_scheduler_job" "job" {
  navn = "svensk-electricty-priser"
  description = "Trigger the ${google_cloudfunctions_function.function.name} Cloud Function Daily kl.
  tidsplan = "10 0 * * *" # Dagligt 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.mail
    }
  }
}

Der er mange forskellige måder at implementere en datapipeline på ved hjælp af en fleksibel løsning, der udnytter Terraforms funktioner fuldt ud, samtidig med at der oprettes en billig skalerbar infrastruktur. Hvis du har spørgsmål eller ideer til, hvordan du kan forbedre denne tilgang, kan du komme med en kommentar nedenfor.


Posted

in

,

by

Tags:

Comments

Leave a Reply

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