이 가이드에서는 Terraform이 Google Cloud API와 상호작용하는 방법을 명확히 하고(공개 API와 비공개 API 구분) API 사용 설정 및 리소스 가져오기와 같은 주요 개념을 설명합니다. 이해는 Terraform으로 Google Cloud 리소스를 효과적으로 관리하고 일반적인 함정을 피하는 데 중요합니다.
공개 API와 비공개 API의 차이점 Google Cloud
Google Cloud 서비스는 애플리케이션과 도구(예: Terraform)가 리소스와 상호작용하고 리소스를 관리할 수 있도록 다양한 API를 노출합니다. 이러한 API는 크게 두 가지 카테고리로 나뉩니다.
공개 API
목적: 고객과 도구가 Google Cloud 리소스 (예: Compute Engine 인스턴스, Cloud Storage 버킷, BigQuery 데이터 세트)
노출: 공개 API는 문서화가 잘 되어 있고, 정의된 REST 엔드포인트가 있으며, 외부 소비를 위한 것입니다. 이러한 API는 google
Terraform 제공업체가 상호작용하도록 빌드된 API입니다.
예: compute.googleapis.com
, storage.googleapis.com
, bigquery.googleapis.com
비공개 (내부) API
목적: 이러한 API는 Google Cloud 서비스 내부용이며, Google에서 관리 서비스의 내부 작업, 오케스트레이션, 프로비저닝을 위해 사용합니다. 직접적인 고객 상호작용이나 관리를 위한 것이 아닌 기능을 노출합니다.
노출: 비공개 API는 일반적으로 공개적으로 문서화되지 않고 안정적인 외부 엔드포인트가 없으며 Terraform과 같은 서드 파티 도구에서 직접 액세스하도록 설계되지 않습니다. 이는 서비스의 구현 세부정보입니다.
예: dataproc-control.googleapis.com
은 Dataproc이 운영 제어 영역에 사용하는 내부 API입니다. 고객은 이 API와 직접 상호작용하거나 관리하지 않습니다.
Terraform의 API 사용 설정과 리소스 가져오기 비교
Google Cloud에서 Terraform을 효과적으로 사용하려면 'API 사용 설정'과 '리소스 가져오기'의 차이점을 이해해야 합니다.
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-control.googleapis.com
를 관리하지 않아도 Dataproc이 올바르게 작동합니다. 필요한 내부 API 상호작용은 Google에서 처리합니다.
공개 API에 집중: Terraform으로 Google Cloud 리소스를 관리할 때는 프로비저닝하려는 서비스 및 리소스에 해당하는 공개 API를 사용 설정하고 구성하는 데만 집중해야 합니다.
결론
공개 및 비공개 Google CloudAPI의 명확한 차이점과 Terraform에서 API를 '사용 설정'하는 것과 리소스를 '가져오기'하는 것의 구체적인 역할을 이해하면 Google Cloud 인프라를 효과적으로 관리할 수 있습니다. 비공개 Google Cloud API를 명시적으로 관리하거나 가져오려고 하지 마세요. Google에서 처리하는 내부 구성요소입니다. Terraform 구성을 공개적으로 노출된 API와 해당 리소스에 집중합니다.