Umgebungen mit Terraform erstellen

Cloud Composer 3 | Cloud Composer 2 | Cloud Composer 1

Diese Seite ist eine Ergänzung zur Hauptseite zum Erstellen von Umgebungen. Darin wird gezeigt, wie Sie in einem vorhandenen Google Cloud -Projekt mit Terraform eine Cloud Composer-Umgebung und ein nutzerverwaltetes Dienstkonto für diese Umgebung einrichten. Sie können diese Seite als Ausgangspunkt verwenden und bei Bedarf weitere Konfigurationsparameter für Ihre Umgebung hinzufügen.

Terraform-Module für Cloud Composer

Google verwaltet den Terraform-Provider für Google Cloud, der die Ressource google_composer_environment enthält. Dies ist das offiziell unterstützte Modul für Terraform.

Es gibt weitere Terraform-Module, die von der Open-Source-Community verwaltet werden. Wenn Sie Probleme mit solchen Modulen beheben möchten, können Sie in den entsprechenden GitHub-Repositories Probleme erstellen. Ein Beispiel für ein Open-Source-Projekt, das auf GitHub verwaltet wird, ist das Modul terraform-google-composer, das Teil von Terraform-Blueprints und -Modulen für Google Cloud ist. Google trägt zwar zu diesem Projekt bei, das Modul wird jedoch nicht von Google verwaltet und steht in keinem Zusammenhang mit dem Terraform-Anbieter für Google Cloud.

Hinweise

  • In diesem Leitfaden wird davon ausgegangen, dass Sie ein Google Cloud -Projekt mit konfigurierter Abrechnung haben:

    • Sie können ein vorhandenes Projekt verwenden.
    • Sie können ein neues Projekt erstellen, indem Sie die Google Cloud Console, die Google Cloud CLI, die API oder eine Python-Clientbibliothek verwenden.
    • Sie können Ihr Projekt mit Terraform erstellen und verwalten. Weitere Informationen finden Sie in der Terraform-Dokumentation zur Ressource google_project.
  • gcloud CLI installieren

Mit Google Cloudauthentifizieren

Führen Sie Folgendes aus, um sich mit Google Cloudzu authentifizieren:

gcloud auth application-default login

Weitere Informationen zu diesem Befehl finden Sie unter gcloud auth application-default.

Google-Anbieter in Terraform konfigurieren

Geben Sie Ihre vorhandene Projekt-ID und eine Standardregion für Ressourcen an. Ihre Cloud Composer-Umgebung verwendet diese Region.

Der google-beta-Anbieter unterstützt Cloud Composer-Funktionen, die sich in der Vorschau befinden. Wenn Sie nur GA-Funktionen von Cloud Composer verwenden möchten, verwenden Sie den google-Anbieter anstelle von google-beta.

provider "google-beta" {
  project = "example-project"
  region  = "us-central1"
}

Cloud Composer API aktivieren

Aktivieren Sie die Cloud Composer API in Ihrem Projekt:

resource "google_project_service" "composer_api" {
  provider = google-beta
  project = "example-project"
  service = "composer.googleapis.com"
  // Disabling Cloud Composer API might irreversibly break all other
  // environments in your project.
  // This parameter prevents automatic disabling
  // of the API when the resource is destroyed.
  // We recommend to disable the API only after all environments are deleted.
  disable_on_destroy = false
  // this flag is introduced in 5.39.0 version of Terraform. If set to true it will
  //prevent you from disabling composer_api through Terraform if any environment was
  //there in the last 30 days
  check_if_service_has_usage_on_destroy = true
}

Dienstkonto einer Umgebung in Ihrem Projekt erstellen

In dieser Anleitung wird gezeigt, wie Sie ein Dienstkonto für eine Umgebung erstellen, das alle erforderlichen Berechtigungen zum Ausführen einer Cloud Composer-Umgebung hat.

Wir empfehlen dringend, ein nutzerverwaltetes Dienstkonto für Ihre Cloud Composer-Umgebungen einzurichten, das nur die Berechtigungen hat, die zum Ausführen Ihrer Umgebung und Vorgänge in Ihren DAGs erforderlich sind, wie in diesem Leitfaden beschrieben.

Wir raten zwar davon ab, aber wenn Sie kein Dienstkonto für eine Umgebung angeben, verwendet Ihre Cloud Composer-Umgebung das Compute Engine-Standarddienstkonto.

Das Dienstkonto Ihrer Umgebung benötigt möglicherweise zusätzliche Berechtigungen, um auf andere Ressourcen in Ihrem Projekt zuzugreifen. Wenn Ihre DAGs beispielsweise Daten in BigQuery übertragen, benötigt dieses Konto möglicherweise Berechtigungen oder Rollen, die speziell für BigQuery gelten.

Definieren Sie ein benutzerdefiniertes Dienstkonto mit den folgenden Rollen und Berechtigungen:

resource "google_service_account" "custom_service_account" {
  provider = google-beta
  account_id   = "custom-service-account"
  display_name = "Example Custom Service Account"
}

resource "google_project_iam_member" "custom_service_account" {
  provider = google-beta
  project  = "example-project"
  member   = format("serviceAccount:%s", google_service_account.custom_service_account.email)
  // Role for Public IP environments
  role     = "roles/composer.worker"
}

Erforderliche Berechtigungen für das Cloud Composer-Dienstkonto gewähren

Fügen Sie dem Dienstkonto Ihrer Umgebung eine neue Rollenbindung zur Allow-Richtlinie hinzu.

Sie fügen das Cloud Composer-Dienst-Agent-Konto als neues Hauptkonto dem Dienstkonto Ihrer Umgebung hinzu und weisen ihm die Rolle Cloud Composer v2 API Service Agent Extension (Dienst-Agent-Erweiterung für die Cloud Composer v2 API) zu.

Verwenden Sie das folgende Beispiel nur, wenn Sie Terraform zum Definieren der Zulassungsrichtlinie Ihres Projekts verwenden. Fügen Sie ansonsten diese Bindung mithilfe anderer Methoden hinzu.

resource "google_service_account_iam_member" "custom_service_account" {
  provider = google-beta
  service_account_id = google_service_account.custom_service_account.name
  role = "roles/composer.ServiceAgentV2Ext"
  member = "serviceAccount:service-PROJECT_NUMBER@cloudcomposer-accounts.iam.gserviceaccount.com"
}

Umgebung erstellen

Erstellen Sie Ihre Umgebung mit Terraform.

Das Beispiel zeigt, wie Sie eine Umgebung erstellen, in der ein benutzerdefiniertes Dienstkonto verwendet wird. Sie können weitere Parameter hinzufügen, um andere Konfigurationsparameter Ihrer Umgebung zu definieren, z. B. benutzerdefinierte Skalierungs- und Leistungsparameter oder zusätzliche PyPI-Pakete.

Weitere Informationen zu anderen Parametern finden Sie unter Umgebungen erstellen.

resource "google_composer_environment" "example_environment" {
  provider = google-beta
  name = "example-environment"

  config {

    software_config {
      image_version = "composer-2.14.0-airflow-2.10.5"
    }

    node_config {
      service_account = google_service_account.custom_service_account.email
    }

  }
}

Vollständiges Terraform-Skript

provider "google-beta" {
  project = "example-project"
  region  = "us-central1"
}

resource "google_project_service" "composer_api" {
  provider = google-beta
  project = "example-project"
  service = "composer.googleapis.com"
  // Disabling Cloud Composer API might irreversibly break all other
  // environments in your project.
  disable_on_destroy = false
  // this flag is introduced in 5.39.0 version of Terraform. If set to true it will
  //prevent you from disabling composer_api through Terraform if any environment was
  //there in the last 30 days
  check_if_service_has_usage_on_destroy = true
}

resource "google_service_account" "custom_service_account" {
  provider = google-beta
  account_id   = "custom-service-account"
  display_name = "Example Custom Service Account"
}

resource "google_project_iam_member" "custom_service_account" {
  provider = google-beta
  project  = "example-project"
  member   = format("serviceAccount:%s", google_service_account.custom_service_account.email)
  // Role for Public IP environments
  role     = "roles/composer.worker"
}

resource "google_service_account_iam_member" "custom_service_account" {
  provider = google-beta
  service_account_id = google_service_account.custom_service_account.name
  role = "roles/composer.ServiceAgentV2Ext"
  member = "serviceAccount:service-PROJECT_NUMBER@cloudcomposer-accounts.iam.gserviceaccount.com"
}

resource "google_composer_environment" "example_environment" {
  provider = google-beta
  name = "example-environment"

  config {

    software_config {
      image_version = "composer-2.14.0-airflow-2.10.5"
    }

    node_config {
      service_account = google_service_account.custom_service_account.email
    }

  }
}

Nächste Schritte

Informationen zum Konfigurieren Ihrer Umgebung mit Terraform finden Sie auf anderen Dokumentationsseiten. Beispiel: