Cloud Composer 1 | Cloud Composer 2 | Cloud Composer 3
이 페이지는 환경 만들기에 대한 기본 페이지와 함께 제공됩니다. Terraform을 사용하여 기존 Google Cloud 프로젝트에서 Cloud Composer 환경 및 이 환경의 사용자 관리형 서비스 계정을 설정하는 방법을 보여줍니다. 이 페이지를 처음에 사용한 다음 필요에 따라 환경의 구성 매개변수를 더 추가할 수 있습니다.
시작하기 전에
이 가이드에서는 결제가 구성된 Google Cloud 프로젝트가 있다고 가정합니다.
- 기존 프로젝트를 사용할 수 있습니다.
- Google Cloud 콘솔, Google Cloud CLI, API, Python 클라이언트 라이브러리를 사용하여 새 프로젝트를 만들 수 있습니다.
- Terraform을 사용하여 프로젝트를 만들고 관리할 수 있습니다. 자세한 내용은
google_project
리소스에 대한 Terraform 문서를 참조하세요.
gcloud CLI를 설치합니다.
Google Cloud로 인증
Google Cloud로 인증하려면 다음을 실행합니다.
gcloud auth application-default login
이 명령어에 대한 자세한 내용은 gcloud auth application-default
항목을 참조하세요.
Terraform에서 Google 제공업체 구성
기존 프로젝트 ID와 리소스의 기본 리전을 지정합니다. Cloud Composer 환경은 이 리전을 사용합니다.
provider "google-beta" {
project = "example-project"
region = "us-central1"
}
Cloud Composer API 사용 설정
프로젝트에서 Cloud Composer API를 사용 설정합니다.
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
}
프로젝트에서 환경의 서비스 계정 만들기
이 가이드에서는 Cloud Composer 환경을 실행하는 데 필요한 모든 권한이 있는 환경의 서비스 계정을 만드는 방법을 보여줍니다.
이 가이드에 설명된 대로 DAG에서 환경과 작업을 실행하는 데 필요한 권한만 있는 Cloud Composer 환경에 사용자 관리형 서비스 계정을 설정하는 것이 좋습니다.
이 접근 방식을 사용하지 않는 것이 좋지만 환경의 서비스 계정을 지정하지 않으면 Cloud Composer 환경에서 기본 Compute Engine 서비스 계정을 사용합니다.
환경의 서비스 계정에는 프로젝트의 다른 리소스에 액세스할 수 있는 추가 권한이 필요할 수 있습니다. 예를 들어 DAG가 BigQuery로 데이터를 전송하는 경우 이 계정에는 BigQuery와 관련된 권한이나 역할이 필요할 수 있습니다.
다음 역할 및 권한으로 커스텀 서비스 계정을 정의합니다.
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"
}
Cloud Composer 서비스 계정에 필요한 권한 부여
환경 서비스 계정 허용 정책에 새 역할 바인딩을 추가합니다.
Cloud Composer 서비스 에이전트 계정을 환경 서비스 계정의 새 주 구성원으로 추가하고 Cloud Composer v2 API 서비스 에이전트 확장 역할을 부여합니다.
Terraform을 사용하여 프로젝트의 허용 정책을 정의하지 않는 경우 다음 예시를 사용하지 마세요. 대신 다른 메서드를 사용하여 이 바인딩을 추가합니다.
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"
}
환경 만들기
Terraform을 사용하여 환경을 만듭니다.
이 예시에서는 커스텀 서비스 계정을 사용하는 환경을 만드는 방법을 보여줍니다. 환경의 다른 구성 매개변수를 정의하는 매개변수(예: 커스텀 확장 및 성능 매개변수)나 추가 PyPI 패키지를 더 추가할 수 있습니다.
다른 매개변수에 대한 자세한 내용은 환경 만들기를 참조하세요.
resource "google_composer_environment" "example_environment" {
provider = google-beta
name = "example-environment"
config {
software_config {
image_version = "composer-2.9.11-airflow-2.9.3"
}
node_config {
service_account = google_service_account.custom_service_account.email
}
}
}
전체 Terraform 스크립트
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.9.11-airflow-2.9.3"
}
node_config {
service_account = google_service_account.custom_service_account.email
}
}
}
다음 단계
Terraform을 사용한 환경 구성에 대한 자세한 내용은 다른 문서 페이지를 참조하세요. 예를 들면 다음과 같습니다.