Nature as it should be

#datapipeline: Serverless Data Pipeline implementeren naar GCP met Terraform

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.

Elektriciteits data pijplijn
Elektriciteits data pijplijn

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.


Posted

in

,

by

Tags:

Comments

Leave a Reply

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