Google Cloud API 및 Terraform 이해

이 가이드에서는 Terraform이 Google Cloud API와 상호작용하는 방식을 명확히 설명하고(공개 API와 비공개 API의 차이를 구분), API 사용 설정 및 리소스 가져오기와 같은 핵심 개념을 설명하고자 합니다. 이러한 이해는 Terraform으로 Google Cloud 리소스를 효과적으로 관리하고 흔히 발생하는 문제를 방지하는 데 매우 중요합니다.

공개 vs 비공개 Google Cloud API의 차이

Google Cloud 서비스는 애플리케이션 및 도구(Terraform 등)가 리소스와 상호작용하고 이를 관리할 수 있도록 다양한 API를 제공합니다 이러한 API는 크게 두 가지 카테고리로 나눌 수 있습니다.

공개 API

목적: 고객과 도구가 Google Cloud 리소스를 생성, 구성, 관리하기 위해 사용하는 기본 인터페이스입니다(예: Compute Engine 인스턴스, Cloud Storage 버킷, BigQuery 데이터 세트).

노출 범위: 공개 API는 문서화가 잘 되어 있고, 명확한 REST 엔드포인트가 정의되어 있으며, 외부 소비를 목적으로 합니다. google Terraform 제공업체는 이러한 API와 상호작용하도록 설계되어 있습니다.

예시: compute.googleapis.com, storage.googleapis.com, bigquery.googleapis.com.

비공개(내부) API

목적: 이러한 API는 Google Cloud 서비스 내부에서 Google 자체적으로 사용되며, 관리형 서비스의 내부 운영, 조정, 프로비저닝을 위해 사용됩니다. 이 API는 고객이 직접 상호작용하거나 관리하도록 설계되지 않은 기능을 제공합니다.

노출 범위: 비공개 API는 일반적으로 공개 문서가 없으며, 안정적인 외부 엔드포인트를 제공하지 않고, Terraform과 같은 서드 파티 도구에서 직접 액세스하도록 설계되지 않았습니다. 이는 서비스의 구현 세부정보에 해당합니다.

예시: dataproc-control.googleapis.com은 Dataproc의 운영 컨트롤 플레인에서 사용되는 내부 API입니다. 고객은 이 API와 직접 상호작용하거나 이를 관리하지 않습니다.

Terraform에서의 API 사용 설정과 리소스 가져오기 비교

"API 사용 설정"과 "리소스 가져오기"의 차이를 이해하는 것은 Google Cloud에서 Terraform을 효과적으로 사용하는 데 기본이 됩니다.

API 사용 설정

  • 의미: Google Cloud에서 "API를 사용 설정"한다는 것은 프로젝트에서 특정 Google Cloud 서비스를 활성화하는 것을 의미합니다. 이 작업을 통해 프로젝트는 해당 서비스의 기능을 사용할 수 있는 필수 권한과 액세스 권한을 부여받으며, 해당 서비스에서 관리되는 리소스를 만들 수 있습니다.

Terraform 컨텍스트: Terraform에서는 일반적으로 google_project_service 리소스를 사용하여 이 작업을 수행합니다. 이 리소스는 지정된 공개 API(예: compute.googleapis.com)가 Google Cloud 프로젝트에서 사용 설정되어 있는지 확인합니다.

목적: API를 사용 설정하는 것은 해당 서비스에 속한 리소스를 만들거나 관리하기 위한 필수 요건입니다. 예를 들어 google_compute_instance 리소스를 만들려면 먼저 compute.googleapis.com을 사용 설정해야 합니다.

예시(Terraform):

```hcl
resource "google_project_service" "compute_api" {
  project            = "your-gcp-project-id"
  service            = "compute.googleapis.com"
  disable_on_destroy = false
}
```

중요: google_project_service 리소스는 공개적으로 액세스 가능한 Google Cloud API의 사용 설정 상태를 관리하도록 설계되었습니다. 내부 또는 비공개 API에는 사용할 수 없으며 작동하지 않습니다. 비공개 API에 사용하려고 하면 해당 API가 공개 API 노출 영역을 통해 해당 방식으로 노출되어 있지 않기 때문에 오류가 발생합니다.

리소스 가져오기

의미: Terraform에서 "가져오기"란 Terraform 외부에서 수동으로 또는 다른 프로세스에 의해 생성된 기존 클라우드 리소스를 Terraform 관리하에 포함시키는 것을 의미합니다. 리소스를 가져오면 Terraform은 해당 리소스에 대한 상태 항목을 생성하여 Terraform 구성을 통해 해당 리소스의 수명 주기(업데이트, 삭제 등)를 관리할 수 있게 합니다.

Terraform 컨텍스트: 이는 terraform import 명령어나 Terraform 1.5 이상에 도입된 import 블록을 사용하여 수행할 수 있습니다.

목적: Terraform으로 처음부터 프로비저닝되지 않은 리소스를 제어하기 위함입니다.

예시(Terraform CLI):

```bash
terraform import google_compute_instance.my_instance projects/your-gcp-project-id/zones/us-central1-a/instances/my-vm
```

비공개 API 관련 우려사항 해결(예: dataproc-control.googleapis.com)

고객은 때때로 로그나 문서에서 비공개 API(예: Dataproc의 dataproc-control.googleapis.com)에 대한 언급을 발견하고, 이를 Terraform에서 사용 설정하거나 가져와야 하는지 궁금해합니다.

고객 조치 불필요: API가 비공개 또는 내부 Google Cloud API로 식별된 경우, google_project_service를 사용해 명시적으로 사용 설정하거나 Terraform으로 가져올 필요가 없습니다.

내부 관리: 이러한 API는Google Cloud 서비스의 내부 운영에 필수적입니다. 이들은 Google에서 자동으로 관리하며, 고객이 공개 도구를 통해 직접 상호작용하거나 관리하도록 설계되지 않았습니다.

서비스 사용에 영향 없음: Terraform으로 이러한 비공개 API를 "가져오거나" 명시적으로 관리할 수 없더라도, 해당 Google Cloud 서비스 사용에는 아무런 영향이 없습니다. 예를 들어 Dataproc은 dataproc-control.googleapis.com을 직접 관리하지 않아도 올바르게 작동합니다. 필요한 내부 API 상호작용은 Google이 자동으로 처리합니다.

공개 API에 집중: Terraform으로 Google Cloud 리소스를 관리할 때는 프로비저닝하려는 서비스 및 리소스에 해당하는 공개 API를 사용 설정하고 구성하는 데에만 집중해야 합니다.

결론

공개 및 비공개 Google CloudAPI의 명확한 구분, 그리고 Terraform에서 API "사용 설정"과 리소스 "가져오기"의 구체적인 역할을 이해하면 Google Cloud 인프라를 효과적으로 관리할 수 있습니다. 비공개 Google Cloud API를 명시적으로 관리하거나 가져오려 시도하지 마세요. 이러한 API는 Google이 관리하는 내부 구성요소입니다. Terraform 구성에서는 공개적으로 노출된 API와 해당 리소스에 집중하세요.