Créer des environnements avec Terraform

Airflow géré (3e génération) | Airflow géré (2e génération) | Airflow géré (1re génération héritée)

Cette page complète la page principale sur la création d'environnements. Elle explique comment configurer un environnement Airflow géré et un compte de service géré par l'utilisateur pour cet environnement dans un projet existant Google Cloud avec Terraform. Vous pouvez utiliser cette page comme point de départ, puis ajouter d'autres paramètres de configuration pour votre environnement, si nécessaire.

À propos des modules Terraform pour Airflow géré

Google gère le fournisseur Terraform pour Google Cloud, qui inclut la google_composer_environment. Il s'agit du module officiellement compatible avec Terraform.

D'autres modules Terraform sont gérés par la communauté Open Source. Pour résoudre les problèmes liés à ces modules, vous pouvez créer des problèmes dans leurs dépôts sur GitHub. Le module terraform-google-composer, qui fait partie des plans et modules Terraform pour Google Cloud, est un exemple de projet Open Source géré sur GitHub. Bien que Google contribue à ce projet, le module n'est pas géré par Google et n'est pas lié au fournisseur Terraform pour Google Cloud.

Avant de commencer

  • Ce guide suppose que vous disposez d'un Google Cloud projet avec la facturation configurée :

    • Vous pouvez utiliser un projet existant.
    • Vous pouvez créer un projet à l'aide de la Google Cloud console, de Google Cloud CLI, de l'API ou d'une bibliothèque cliente Python.
    • Vous pouvez créer et gérer votre projet à l'aide de Terraform. Pour en savoir plus, consultez la documentation Terraform pour la google_project ressource.
  • Installez la gcloud CLI.

S'authentifier avec Google Cloud

Pour vous authentifier avec Google Cloud, exécutez la commande suivante :

gcloud auth application-default login

Pour en savoir plus sur cette commande, consultez gcloud auth application-default.

Configurer le fournisseur Google dans Terraform

Spécifiez l'ID de votre projet existant project ID et une région par défaut pour les ressources. Votre environnement Airflow géré utilise cette région.

Le fournisseur google-beta est compatible avec les fonctionnalités d'Airflow géré en version preview. Si vous ne souhaitez utiliser que les fonctionnalités en disponibilité générale de Managed Airflow, utilisez le google fournisseur au lieu de google-beta.

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

Activer l'API Cloud Composer

Activez l'API Cloud Composer dans votre projet.

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
}

Créer un compte de service d'environnement dans votre projet

Ce guide explique comment créer un compte de service d'environnement disposant de toutes les autorisations requises pour exécuter un environnement Airflow géré.

Nous vous recommandons vivement de configurer un compte de service géré par l'utilisateur pour vos environnements Airflow gérés, qui ne dispose que des autorisations requises pour exécuter votre environnement et vos opérations dans vos DAG, comme décrit dans ce guide.

Le compte de service de votre environnement peut avoir besoin d'autorisations supplémentaires pour accéder à d'autres ressources de votre projet. Par exemple, si vos DAG transfèrent des données dans BigQuery, ce compte peut avoir besoin d'autorisations ou de rôles spécifiques à BigQuery.

Définissez un compte de service personnalisé avec les rôles et autorisations suivants :

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"
}

Créer un environnement

Créez votre environnement à l'aide de Terraform.

L'exemple montre comment créer un environnement qui utilise un compte de service personnalisé. Vous pouvez ajouter d'autres paramètres qui définissent d'autres paramètres de configuration de votre environnement, tels que des paramètres de scaling et de performances personnalisés, ou des packages PyPI supplémentaires.

Pour en savoir plus sur les autres paramètres, consultez Créer des environnements.

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

  config {

    software_config {
      image_version = "composer-1.20.12-airflow-1.10.15"
    }

    node_config {
      service_account = google_service_account.custom_service_account.email
    }

  }
}

Script Terraform complet

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_composer_environment" "example_environment" {
  provider = google-beta
  name = "example-environment"

  config {

    software_config {
      image_version = "composer-1.20.12-airflow-1.10.15"
    }

    node_config {
      service_account = google_service_account.custom_service_account.email
    }

  }
}

Étape suivante

Consultez d'autres pages de documentation pour savoir comment configurer votre environnement avec Terraform. Exemple :