Google Cloud의 Terraform FAQ

이 페이지에서는 Terraform을 사용하여 Google Cloud에서 리소스를 관리할 때 발생하는 일반적인 질문에 대한 답변을 제공합니다. 특히 API 상호작용 및 시작에 관한 질문이 포함됩니다.

Terraform 시작하기

이 섹션에서는 Terraform 신규 사용자를 위한 기본 개념과 초기 단계를 다룹니다.

코드형 인프라 (IaC)란 무엇이며 Terraform을 사용해야 하는 이유는 무엇인가요?

코드형 인프라 (IaC)는 머신 판독 가능 정의 파일을 통해 컴퓨팅 인프라를 관리하고 프로비저닝하는 방식입니다. IaC의 개념과 이점에 대한 전체 개요는 코드형 인프라란 무엇인가요?를 참고하세요.

Terraform은 클라우드 및 온프레미스 리소스를 정의, 프로비저닝, 관리하는 데 사용되는 오픈소스 IaC 도구입니다. IaC 워크플로에 Terraform을 사용할 때의 이점에 대해 알아보려면 Terraform 사용의 이점을 참고하세요.

Terraform을 설치하고 첫 번째 구성을 실행하려면 어떻게 해야 하나요?

Terraform을 시작하려면 먼저 로컬 머신에 Terraform CLI를 다운로드하고 설치해야 합니다. HashiCorp Terraform 웹사이트에서 안내를 확인할 수 있습니다. 설치 후 Terraform 구성 파일을 만들고 리소스 (예: Cloud Storage 버킷)를 정의한 다음 terraform init를 사용하여 작업 디렉터리를 초기화하고 terraform plan를 사용하여 변경사항을 미리 보고 terraform apply를 사용하여 변경사항을 적용할 수 있습니다.

HashiCorp 구성 언어 (HCL)란 무엇이며 구문은 어디에서 확인할 수 있나요?

HashiCorp 구성 언어 (HCL)는 Terraform에서 사용하는 구성 언어입니다. 인프라 정의를 명확하고 효율적으로 작성하고 이해할 수 있도록 사람이 읽을 수 있고 머신 친화적으로 설계되었습니다. HCL은 변수, 표현식, 함수, 모듈과 같은 다양한 기능을 지원합니다. 공식 HashiCorp Terraform 문서를 통해 HCL 구문을 배울 수 있습니다. 이 문서에서는 포괄적인 가이드와 예시를 제공합니다.

Google Cloud 리소스의 Terraform 구성 예시는 어디에서 확인할 수 있나요?

Google Cloud의 Terraform 구성 예는 다음과 같습니다.

  • HashiCorp Terraform 레지스트리: Google Cloud 제공업체의 공식 Terraform 레지스트리에는 모든 리소스와 데이터 소스에 관한 문서와 예시가 포함되어 있습니다.

  • Google Cloud Terraform 샘플: Google에서는 일반적인 Google Cloud 리소스를 배포하고 관리하는 방법을 보여주는 다양한 Terraform 샘플을 제공합니다.

  • GitHub 저장소: terraform-google-modules GitHub 조직을 비롯한 많은 오픈소스 저장소에서 예시와 재사용 가능한 모듈을 제공합니다.

특히 리소스가 많은 경우 복잡한 Terraform 구성을 관리하고 테스트하려면 어떻게 해야 하나요?

복잡한 구성의 경우 확장성과 유지관리성을 위해 설계된 Terraform의 기능을 사용하는 것이 좋습니다.

  • 모듈: 일반적인 인프라 패턴을 캡슐화하고 재사용합니다.

  • 작업공간: 단일 구성의 여러 개별 인스턴스를 관리합니다.

  • terraform planterraform validate: 이러한 명령어를 자주 사용하여 실제 배포 없이 구문을 검증하고 변경사항을 미리 봅니다.

  • 타겟팅 리소스 (주의해서 사용): 특정 부분을 테스트하기 위해 terraform apply 또는 terraform destroy와 함께 -target를 일시적으로 사용할 수 있지만, 상태 관리 복잡성으로 인해 일반적으로 일상적인 작업에는 권장되지 않습니다.

  • 전용 환경: 프로덕션 전에 테스트를 위해 개발 또는 스테이징 환경에 배포합니다.

Google Cloud API 질문

이러한 질문은 공개 및 비공개 API를 비롯한 Terraform과Google Cloud API의 상호작용에 관한 일반적인 문의사항을 다룹니다.

Terraform을 사용하여 dataproc-control.googleapis.com과 같은 내부 또는 비공개 Google Cloud API를 관리하거나 가져올 수 있나요?

아니요. 내부 또는 비공개 Google Cloud API는 Google의 관리형 서비스 인프라의 일부이며 Terraform을 사용한 직접적인 고객 관리, 사용 설정 또는 가져오기에 노출되지 않습니다. 이러한 API는 Google Cloud에서 자동으로 처리합니다. Terraform으로 직접 관리하려고 하면 오류가 발생합니다.

자세한 설명은 Google Cloud API 및 Terraform 가이드 이해를 참고하세요.

Terraform에서 API를 사용 설정하는 것과 리소스를 가져오는 것의 차이점은 무엇인가요?

  • API 사용 설정: 프로젝트에 특정 Google Cloud 서비스를 활성화하고 해당 서비스를 사용할 수 있는 필요한 권한을 프로젝트에 부여하는 것을 의미합니다. Google Cloud에서 Terraform을 사용하는 경우 일반적으로 google_project_service 리소스를 사용하여 이 작업을 실행합니다. 이는 해당 API를 사용하는 리소스를 만들기 위한 기본 요건입니다.

  • 리소스 가져오기: Terraform 외부에서 생성된 기존 Google Cloud 리소스(예: Compute Engine 인스턴스, Cloud Storage 버킷)를 Terraform의 관리 하에 가져오는 것을 의미합니다. API 자체가 아닌 리소스를 가져옵니다.

자세한 내용은 Google Cloud API 및 Terraform 이해 가이드를 참고하세요.

dataproc-control.googleapis.com을 명시적으로 관리하거나 가져오지 않으면 어떻게 되나요? Dataproc 사용에 영향을 미치나요?

아니요. Dataproc 사용에는 영향을 미치지 않습니다. dataproc-control.googleapis.com는 Dataproc에서 자체 운영 제어를 위해 사용하는 내부 API입니다. 이 기능은Google Cloud에서 자동으로 관리하며, Terraform을 사용하여 명시적으로 사용 설정하거나 가져오거나 관리할 필요가 없습니다. 이 내부 API와 관련하여 수동으로 개입하지 않아도 Dataproc 클러스터와 작업이 올바르게 작동합니다.

Terraform에서 403 권한 거부 오류를 어떻게 해결하나요?

403 Permission Denied 오류는 일반적으로 Terraform에서 사용하는 서비스 계정 또는 사용자 사용자 인증 정보에 특정 Google Cloud 리소스에 대해 요청된 작업을 수행하는 데 필요한 IAM 권한이 없음을 나타냅니다. 문제를 해결하려면 다음 안내를 따르세요.

  1. 영향을 받는 리소스 및 API 메서드 식별: 오류 메시지에는 일반적으로 리소스 유형과 실패한 API 호출이 지정됩니다.

  2. IAM 역할 확인: 주 구성원 (서비스 계정 또는 사용자)에 적절한 수준 (프로젝트, 폴더, 조직 또는 리소스)에서 올바른 IAM 역할이 할당되어 있는지 확인합니다. Google Cloud 콘솔에서 IAM 문제 해결 도구를 사용합니다.

  3. 서비스 사용 설정 확인: 필요한 Google Cloud API 서비스가 프로젝트에 사용 설정되어 있는지 확인합니다 (예: gcloud services enable 또는 google_project_service 사용).

  4. 조직 정책 검토: 조직 정책으로 인해 작업이 제한되는지 확인합니다.

할당량 오류는 프로젝트가 현재 할당량에서 허용하는 것보다 더 많은 리소스를 소비하거나 더 많은 API 요청을 하려고 시도할 때 발생합니다. 이 문제를 해결하려면 다음 안내를 따르세요.

  1. 특정 할당량 식별: 오류 메시지에는 일반적으로 API와 초과된 할당량 한도가 명시됩니다.

  2. 현재 할당량 확인: Google Cloud 콘솔의 할당량 페이지를 방문하여 현재 사용량과 한도를 확인합니다.

  3. 할당량 증가 요청: 용량이 더 필요한 경우 할당량 페이지에서 직접 할당량 증가를 요청할 수 있습니다.

  4. user_project_override 고려: 일부 리소스의 경우 사용자 인증 정보 프로젝트가 리소스 프로젝트와 다르면 API 요청이 사용자 인증 정보 프로젝트의 할당량에 따라 청구될 수 있습니다. user_project_override (공급자 참조 참고)를 사용하면 할당량이 리소스의 프로젝트에 청구되도록 강제하여 이 문제를 해결할 수 있습니다.

사용자 관리 기본 서비스 계정이란 무엇이며 Terraform으로 권한을 관리하려면 어떻게 해야 하나요?

특정 Google Cloud 서비스는 프로젝트가 생성되거나 서비스가 사용 설정될 때 사용자 관리 서비스 계정(기본 서비스 계정이라고도 함)을 자동으로 생성합니다. 이러한 계정에는 일반적으로 광범위한 권한이 있습니다. 사용자가 관리하지만 Google에서 생성합니다. google_project_iam_member과 같은 IAM 리소스를 사용하여 권한을 관리하여 역할을 수정할 수 있습니다. 기본 서비스 계정 자체에 조치를 취하려면(예: 기본 높은 권한 역할 삭제 또는 계정 전체 삭제) google_project_default_service_accounts 리소스를 사용하면 됩니다. Google에서는 기본 서비스 계정 유형에 관한 안내도 제공합니다.

Google 관리 서비스 계정이란 무엇이며 Terraform 구성에서 이를 참조하려면 어떻게 해야 하나요?

Google 관리형 서비스 계정은 특정 서비스를 위해 Google에서 생성하고 완전히 관리합니다. 이러한 계정은 사용자 프로젝트 외부에 있으며 사용자 관리 서비스 계정과 같은 방식으로 사용자가 직접 구성할 수 없습니다. 하지만 리소스와 상호작용하려면 IAM 권한을 부여해야 할 수 있습니다. Terraform에서 google_project_service_identity 데이터 소스 또는 리소스를 사용하여 특정 서비스의 Google 관리 서비스 계정 이메일 주소를 참조한 다음 IAM 정책을 적용할 수 있습니다. 예를 들어 Cloud Build 또는 Cloud Composer와 같은 서비스에서 흔히 사용됩니다.

disable_on_destroy이 구성된 리소스를 terraform destroy하면 어떻게 되나요?

google_project_service 및 일부 기타 리소스 (예: google_storage_bucket)의 disable_on_destroy 인수는 Terraform 리소스가 소멸될 때 기본 클라우드 리소스가 사용 중지되는지 또는 삭제되는지를 제어합니다.

  • disable_on_destroytrue이거나 설정되지 않은 경우 (기본값인 경우가 많음) terraform destroy는 해당 클라우드 리소스를 사용 중지 (API의 경우)하거나 삭제 (버킷의 경우)하려고 시도합니다.

  • disable_on_destroyfalse인 경우 terraform destroy은 Terraform 상태에서 리소스를 삭제하지만 실제 클라우드 리소스 (예: 사용 설정된 API 또는 버킷)는 Google Cloud 프로젝트에 그대로 둡니다. 이는 실수로 사용 중지되거나 삭제되어서는 안 되는 중요한 서비스에 자주 사용됩니다.