Créer des environnements avec Terraform

Cloud Composer 1 | Cloud Composer 2

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

Avant de commencer

  • Dans ce guide, nous partons du principe que vous disposez d'un projet Google Cloud avec une facturation configurée:

    • Vous pouvez utiliser un projet existant.
    • Vous pouvez créer un projet à l'aide de la console Google Cloud, 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 sur la ressource google_project.
  • Installez gcloud CLI.

Authentification avec Google Cloud

Pour vous authentifier auprès de Google Cloud, exécutez la commande suivante:

gcloud auth application-default login

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

Configurer le fournisseur Google dans Terraform

Spécifiez votre ID de projet existant et une région par défaut pour les ressources. Votre environnement Cloud Composer utilise cette région.

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
}

Créer un compte de service personnalisé dans votre projet

Par défaut, les environnements Cloud Composer utilisent le compte Compute Engine par défaut. Ce guide présente une autre approche, qui consiste à créer un compte de service, qui dispose de toutes les autorisations requises pour exécuter un environnement Cloud Composer.

Définissez un compte de service personnalisé avec les rôles et les autorisations suivants. Pour en savoir plus sur les autorisations pour les comptes de service de l'environnement, consultez la page Contrôle des accès avec IAM.

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

Accorder les autorisations requises au compte de service Cloud Composer

Ajoutez une liaison de rôle à la stratégie d'autorisation du compte de service de votre environnement.

Ajoutez un compte d'agent de service Cloud Composer en tant que nouveau compte principal sur le compte de service de votre environnement et attribuez-lui le rôle Extension d'agent de service de l'API Cloud Composer v2.

Si vous n'utilisez pas Terraform pour définir la stratégie d'autorisation de votre projet, n'utilisez pas l'exemple suivant. Ajoutez plutôt cette liaison à l'aide d'autres méthodes.

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

Créez un environnement

Créer votre environnement à l'aide de Terraform

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

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

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

  config {
    software_config {
      image_version = "composer-2.6.6-airflow-2.6.3"
    }

    node_config {
      service_account = google_service_account.custom_service_account.email
    }

  }
}

Script Terraform complet (paramètres par défaut)

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
}

resource "google_project_iam_member" "service_agent_role" {
  provider = google-beta
  project  = "example-project"
  member   = "serviceAccount:service-PROJECT_NUMBER@cloudcomposer-accounts.iam.gserviceaccount.com"
  role     = "roles/composer.ServiceAgentV2Ext"
}

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

  config {

    // Add your environment configuration here
    software_config {
      image_version = "composer-2.6.6-airflow-2.6.3"
    }

  }
}

Script Terraform complet (compte de service personnalisé)

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
}

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.6.6-airflow-2.6.3"
    }

    node_config {
      service_account = google_service_account.custom_service_account.email
    }

  }
}

Étapes suivantes

Consultez d'autres pages de documentation pour en savoir plus sur la configuration de votre environnement avec Terraform. Exemple :