
#datapipeline: Serverless Data Pipeline implementeren naar GCP met Terraform
by bernt & torsten
Ik heb onlangs een datapijplijn gebouwd die ik heb geschreven in een artikel data pipeline het uurtarief voor elektriciteit, wat ik niet heb uitgelegd was hoe ik het heb geïmplementeerd op het Google Cloud Platform. In dit artikel laat ik je zien hoe ik Terraform heb gebruikt om het te implementeren op het Google Cloud Platform.
Het grootste communicatieprobleem is dat we niet luisteren om te begrijpen dat we luisteren om te reageren
Terraform is een open-source infrastructuur als een codesoftwaretool die een consistente CLI-workflow biedt om honderden cloudservices te beheren.
Dit bericht biedt een overzicht van de Terraform-bronnen die nodig zijn om de infrastructuur te configureren voor het maken van de Electricity Data Pipeline op Google Cloud Platform (GCP), zoals geïllustreerd in het onderstaande diagram.

Terraform Bronnen
Om de bovenstaande infrastructuur in Terraform te definiëren, hebben we de volgende Terraform-bronnen nodig:
Definieer de provider
Ik gebruik Google Ik stel mijn provider in op Google en definieer ook de naam van het GCP-project
provider "google" {
project = "<project id>"
regio = "us-central1"
}
Een bucket definiëren
Vervolgens definieer ik de bucket om de broncode voor de Cloud-functie op te slaan
resource "google_storage_bucket" "bucket" {
name = "swedish-electricty-prices" # Deze emmernaam moet uniek zijn
locatie = "ons"
}
Archiefbestand definiëren
Op mijn lokale computer definieer ik waar mijn src is en waar het src.zip bestand moet worden opgeslagen – Directory waar uw Python-broncode zich bevindt
gegevens "archive_file" "src" {
type = "zip"
source_dir = "${path.root}/.. /src" #
output_path = "${path.root}/.. /gegenereerd/src.zip"
}
bron "google_storage_bucket_object" "archive" {
name = "${data.archive_file.src.output_md5}.zip"
bucket = google_storage_bucket.bucket.name
source = "${path.root}/.. /gegenereerd/src.zip"
}
De cloudfunctie definiëren
Ik definieer de Cloud Function resource, welke regio, welk geheugen, welk type runtime en het entry point van de code. En van waar de code naar de cloudfunctie moet worden geïmplementeerd.
resource "google_cloudfunctions_function" "function" {
name = "swedish-electricty-prices"
description = "Trigger for Swedish Electricity Prices"
runtime = "python37"
environment_variables = {
PROJECT_NAME = "<Projectnaam",
}
available_memory_mb = 256
time-out = 360
source_archive_bucket = google_storage_bucket.bucket.name
source_archive_object = google_storage_bucket_object.archive.name
trigger_http = waar
entry_point = "main" # Dit is de naam van de functie die wordt uitgevoerd in uw Python-code
}
Serviceaccount definiëren
Ik moet een serviceaccount definiëren dat automatisch toegankelijk is voor de verschillende GCP-services zonder mijn tussenkomst.
resource "google_service_account" "service_account" {
account_id = "swedish-electricty-prices"
display_name = "Cloud Function Swedish Electricty Prices Invoker Service Account"
}
IAM-rol instellen
Om de Cloud Scheduler in staat te stellen een Cloud Function aan te roepen, moet ik een paar IAM-rollen instellen.
resource "google_cloudfunctions_function_iam_member" "invoker" {
project = google_cloudfunctions_function.function.project
regio = google_cloudfunctions_function.functie.regio
cloud_function = google_cloudfunctions_function.function.name
role = "roles/cloudfunctions.invoker"
member = "serviceAccount:${google_service_account.service_account.email}"
}
De Cloud Scheduler definiëren
Om de Cloud-functie te activeren, moet ik een geplande taak kunnen maken, ik doe dat door de Cloud Scheduler te gebruiken en in terraform de details van het instellen van een Cloud Schedule-taak te definiëren.
resource "google_cloud_scheduler_job" "job" {
name = "swedish-electricty-prices"
description = "Activeer de ${google_cloudfunctions_function.function.name} Cloud Function Daily om 6:00."
schema = "10 0 * * *" # Dagelijks om 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
}
}
}
Er zijn veel verschillende manieren om een datapijplijn te implementeren met behulp van een flexibele oplossing die volledig gebruik maakt van de mogelijkheden van Terraform en tegelijkertijd een goedkope, schaalbare infrastructuur creëert. Als u vragen of ideeën heeft over hoe u deze aanpak kunt verbeteren, kunt u hieronder een opmerking maken.

The Human Brain and Its Role in Creativity, Memory, and AI
The human brain is a marvel of evolution, a universe within, teeming with thoughts, memories,...

What’s the Environmental Cost of Your Online Activities? From AI Queries to Streaming Video
Scrolling through social media, searching on Google, or chatting with an AI feels like a...

A Poem: Too Old to Be Seen, Too Wise to Be Broken
They saw my years, not the code I wrote,
Dismissed the knowledge I carried, remote.