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은 인프라 정의를 명확하고 효율적으로 작성하고 이해할 수 있도록, 인간이 읽을 수 있고 기계가 처리하기 쉽게 설계되었습니다. HCL은 변수, 표현식, 함수, 모듈 등 다양한 기능을 지원합니다. HCL의 구문은 포괄적인 가이드와 예시를 제공하는 공식 HashiCorp Terraform 문서를 통해 학습할 수 있습니다.

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의 관리형 Service Infrastructure의 일부로, 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의 관리하에 포함시키는 것을 의미합니다. 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 프로젝트에 그대로 유지합니다. 이 옵션은 실수로 사용 중지되거나 삭제되어서는 안 되는 중요한 서비스에 자주 사용됩니다.