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.

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.
Leave a Reply