개발하자

테라폼과 함께 GCP 클라우드를 사용할 때 API를 자동으로 활성화할 수 있습니까?

Cuire 2023. 4. 15. 07:26
반응형

테라폼과 함께 GCP 클라우드를 사용할 때 API를 자동으로 활성화할 수 있습니까?

저는 테라폼을 사용하는 GCP가 매우 생소하며 중앙 집중식 도구를 사용하여 제 모든 모듈을 배치하고 싶습니다.

배포가 중단되지 않도록 매번 Google API를 활성화하는 단계를 제거할 수 있는 방법이 있습니까?




"google_project_service"라는 테라폼 리소스 정의가 있어 서비스(API)를 활성화할 수 있습니다. 이는 에서 문서화되어 있습니다.

사용 예는 다음과 같습니다:

resource "google_project_service" "project" {
  project = "your-project-id"
  service = "iam.googleapis.com"
}



예, 리소스를 사용하여 한 번에 하나의 API를 활성화할 수 있습니다. 또는 다른 루프 방법을 사용하여 여러 API를 활성화할 수 있습니다. 이 작업을 수행하려면 프로젝트 편집자/소유자 역할이 필요합니다.

# Enable services in newly created GCP Project.
resource "google_project_service" "gcp_services" {
  count   = length(var.gcp_service_list)
  project = google_project.demo_project.project_id
  service = var.gcp_service_list[count.index]

  disable_dependent_services = true
}

완전한 예를 찾을 수 있습니다




@pradedeep에서 제안한 것처럼 사용하는 대신 문제의 서비스를 루프할 수도 있습니다:

variable "gcp_service_list" {
  description ="The list of apis necessary for the project"
  type = list(string)
  default = [
    "cloudresourcemanager.googleapis.com",
    "serviceusage.googleapis.com"
  ]
}

resource "google_project_service" "gcp_services" {
  for_each = toset(var.gcp_service_list)
  project = "your-project-id"
  service = each.key
}



2022년에 이 글을 읽는 사람들에게 Terraform에서 자동으로 활성화하는 것은 API를 통해 해당 API를 활성화하는 것과 관련이 있기 때문에 작동하지 않습니다...

솔루션은 Gcloud 명령줄을 통해 이를 수행하는 것입니다:

# Use `gcloud` to enable:
# - serviceusage.googleapis.com
# - cloudresourcemanager.googleapis.com
resource "null_resource" "enable_service_usage_api" {
  provisioner "local-exec" {
    command = "gcloud services enable serviceusage.googleapis.com cloudresourcemanager.googleapis.com --project ${var.project_id}"
  }

  depends_on = [google_project.project]
}

# Wait for the new configuration to propagate
# (might be redundant)
resource "time_sleep" "wait_project_init" {
  create_duration = "60s"

  depends_on = [null_resource.enable_service_usage_api]
}

자세한 내용은




2022년 - 코드를 이용한 서비스 활성화 경험 공유

Terraform을 사용하여 서비스를 활성화하면 안 되는 이유
  1. 일반적으로 는 서비스 활성화와 관련되어 있으며 청구 계정은 해당 서비스에 연결되어 있어야 합니다. 예를 들어 정적 공용 IP를 생성하거나 Cloud CDN을 설정하려고 합니다.

  2. 및 (Gcloud 명령을 실행하는 Terraform null resource 사용)에서 제안한 대로 코드를 사용하여 서비스를 활성화할 수 있지만, 추가적인 과제는 , 입니다.

    대기/수면 또는 의존성 흐름을 추가하는 것이 잠시 도움이 되었지만, 장기적으로 보면 그렇습니다.

  3. . 컴퓨팅 서비스를 활성화했을 때 테라폼 코드를 사용하여 다른 개발자가 리소스를 생성할 수 있었습니다. 얼마 후, 제가 더 이상 필요하지 않고 노력했을 때, 저는 몇 가지 의존성 문제를 겪었습니다.

TL;DR 서비스 활성화는 청구 계정을 만드는 것과 마찬가지로 일반적으로 일회성 작업입니다. 내 경험에 따르면, 나는 그런 중요한 것들을 자동화하지 않는 것을 추천한다.

다음은 2023년 4월에 추가되었습니다

  1. . @FreshMike & @Juarez_에서 제안한 바와 같이Rudsatz, TF 코드를 여러 폴더에 배포하십시오.

    요구 사항에 따라 제품별(Compute/Networking/IAM/Service Accounts/...) 또는 모듈별(Permissions/Admin/Module-A/Product-A/Product-B/...) 또는 기타로 이 작업을 수행할 수 있습니다.

    나의 팀 프로젝트에서, 우리는 별도의 폴더 호출을 사용했고 이 모듈을 사용하여 한 번에 여러 개의 API를 사용할 수 있었다.


반응형