Umgebungen mit Terraform erstellen

Managed Airflow (Gen 3) | Managed Airflow (Gen 2) | Managed Airflow (Legacy Gen 1)

Diese Seite ergänzt die Hauptseite zum Erstellen von Umgebungen. Hier wird gezeigt, wie Sie in einem vorhandenen Google Cloud Projekt mit Terraformeine Managed Airflow-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 Managed Airflow

Google verwaltet den Terraform-Anbieter für Google Cloud, der die google_composer_environment-Ressource 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 haben, 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 der Terraform-Blaupausen und ‑Module für Google Cloud ist. Google trägt zu diesem Projekt bei, verwaltet das Modul aber nicht und es steht in keiner Beziehung zum Terraform-Anbieter für Google Cloud.

Hinweis

  • In dieser Anleitung 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 über die Google Cloud Console, die Google Cloud CLI, die API oder eine Python-Clientbibliothek.
    • Sie können Ihr Projekt mit Terraform erstellen und verwalten. Weitere Informationen finden Sie in der Terraform-Dokumentation zur google_project Ressource.
  • Installieren Sie die gcloud CLI.

Authentifizieren mit Google Cloud

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 Managed Airflow-Umgebung verwendet diese Region.

Der Anbieter google-beta unterstützt Managed Airflow-Funktionen, die sich in der Vorschauphase befinden. Wenn Sie nur GA-Funktionen von Managed Airflow 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 für eine 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 Managed Airflow-Umgebung hat.

Wir empfehlen dringend, ein nutzerverwaltetes Dienstkonto für Ihre Managed Airflow-Umgebungen einzurichten, das nur die Berechtigungen hat, die zum Ausführen Ihrer Umgebung und von Vorgängen in Ihren DAGs erforderlich sind, wie in dieser Anleitung beschrieben.

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 Managed Airflow-Dienstkonto gewähren

Fügen Sie der Zulassungsrichtlinie für das Dienstkonto Ihrer Umgebung eine neue Rollenbindung hinzu .

Fügen Sie das Managed Airflow-Dienst-Agent-Konto als neuen Prinzipal zum Dienstkonto Ihrer Umgebung hinzu und gewähren Sie ihm die Rolle Dienst-Agent-Erweiterung für die Cloud Composer v2 API.

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, die ein benutzerdefiniertes Dienstkonto verwendet. Sie können weitere Parameter hinzufügen, die andere Konfigurationsparameter Ihrer Umgebung 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.17.0-airflow-2.11.1"
    }

    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.17.0-airflow-2.11.1"
    }

    node_config {
      service_account = google_service_account.custom_service_account.email
    }

  }
}

Nächste Schritte

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