본문 바로가기
INFRA/Operation

Terraform 리소스의 개념 이해 - GCP 1편

by BTC_지수 2022. 10. 29.

안녕하세요! "하씨가문의 영광" 입니다.

 

오늘은 새로운 CSP를 가져왔는데요! 바로 "GCP" 에 대해서 다뤄볼 예정입니다.

Terraform으로는 어떤 인수를 사용하여 GCP를 구축하는지 한번 알아보도록 하겠습니다.

 

Google Cloud Platform Provider

Google Provider 은 Google Cloud Platform 인프라를 구성하는 데 사용됩니다.

일반적인 공급자 구성은 다음과 같습니다.

provider "google" {
  project     = "my-project-id"
  region      = "us-central1"
}

 

 

google_project

Google Cloud Platform 프로젝트를 만들고 관리할 수 있습니다.

 

리소스를 생성할 때 Terraform을 실행하는 사용자 또는 서비스 계정은 지정된 조직에 google_project가 있어야 합니다.

 

resource "google_project" "my_project" {
  name       = "My Project"
  project_id = "your-project-id"
  org_id     = "1234567"
}

 

resource "google_project" "my_project" { } 블록내 지원되는 인수는 다음과 같습니다.

 

<필수>

  • name : 프로젝트의 표시 이름입니다.
  • project_id : 프로젝트 ID 입니다. 이를 변경하면 새 프로젝트가 생성됩니다.

<선택 사항>

  • org_id : 이 프로젝트가 속한 조직의 숫자 ID 입니다. 이를 변경하면 새 프로젝트가 생성됩니다. org_id 또는 folder_id 중 하나만 지정할 수 있습니다. org_id가 지정되면 프로젝트가 최상위 수준에서 생성됩니다. 이 옵션을 변경하면 프로젝트가 새로 지정된 조직으로 마이그레이션됩니다.
  • folder_id : 이 프로젝트가 생성되어야 하는 폴더의 숫자 ID 입니다. folder_id가 지정된 경우 지정된 폴더 아래에 프로젝트가 생성됩니다. 이 옵션을 변경하면 프로젝트가 새로 지정된 폴더로 마이그레이션 됩니다.
  • billing_account : 이 프로젝트가 속한 결제 계정의 영숫자 ID 입니다. Terraform으로 이 작업을 수행하는 사용자 또는 서비스 계정에는 결제 계정에 대한 최소 결제 계정 사용자 권한 ( roles/billing.user )이 있어야 합니다. 
  • skip_delete : true인 경우 Google API를 통해 프로젝트를 삭제하지 않고 Terraform 리소스를 삭제할 수 있습니다.
  • labels : 프로젝트에 할당할 키/값 레이블 쌍의 집합입니다.
  • auto_create_network : "기본" 네트워크를 자동으로 생성합니다. 기본값은 true입니다. false로 설정하면 기본 네트워크가 삭제됩니다. 할당량을 위해 auto_create_network를 false로 설정해도 네트워크가 잠시 존재하므로 프로젝트를 성공적으로 생성하려면 네트워크 슬롯이 1개가 있어야 합니다.

 

google_compute_network

GCP에서 VPC 네트워크 또는 기존 네트워크 리소스를 관리합니다.

 

resource "google_compute_network" "vpc_network" {
  project                 = "my-project-name"
  name                    = "vpc-network"
  auto_create_subnetworks = true
  mtu                     = 1460
}

 

resource "google_compute_network" "vpc_network" { } 블록내 지원되는 인수는 다음과 같습니다.

 

<필수>

  • name : 리소스의 이름입니다. 리소스가 생성될 때 클라이언트에서 제공합니다. 이름은 1-63자여야 하며 RFC1035를 준수해야 합니다. 또한 정규식과 [a-z]([-a-z0-9]*[a-z0-9])? 일치 해야 합니다. 즉, 첫 번째 문자는 소문자여야 하고 다음 문자는 모두 대시, 소문자 또는 숫자여야 합니다. 마지막 문자는 대시일 수 없습니다.

 

<선택 사항>

  • description : 이 자원에 대한 선택적 설명입니다. 이 필드를 수정하려면 리소스를 다시 만들어야 합니다.
  • auto_create_subnetworks : true로 설정하면 네트워크가 "자동 서브넷 모드" 로 생성되고 10.128.0.0/9 주소 범위에 걸쳐 각 영역에 대한 서브넷이 자동으로 생성됩니다. false로 설정하면 네트워크가 "사용자 지정 서브넷 모드"로 생성되어 사용자가 하위 네트워크 리소스를 명시적으로 연결할 수 있습니다.
  • routing_mode  : 사용할 네트워크 전체 라우팅 모드입니다. 이 네트워크의 클라우드 라우터가 REGIONAL 로 설정된 경우, 라우터와 동일한 영역에 있는 이 네트워크의 하위 네트워크가 있는 경로만 보급합니다. GLOBAL로 설정되면, 이 네트워크의 클라우드 라우터는 이 네트워크의 모든 하위 네트워크로 경로를 지역 간에 보급합니다. 가능한 값은 REGIONAL 및 GLOBAL 입니다.
  • mtu : 최대 전송 단위(byte) 입니다. 이 필드의 최소값은 1460이고 최대값은 1500 byte 입니다.
  • enable_ula_internal_ipv6 : 이 네트워크에서 ULA 내부 ipv6을 활성화합니다. 이 기능을 활성화하면 Google에서 정의한 ULA 접두사 fd20::/20의 /48이 할당됩니다.
  • internal_ipv6_range : ula 내부 ipv6을 활성화할 때 호출자는 선택적으로 Google에서 정의한 ULA 접두사 fd20::/20에서 원하는 /48 범위를 지정할 수 있습니다. 입력은 유효한 /48 ULA IPv6 주소여야 하며 fd20::/20 내에 있어야 합니다. 지정된 /48이 이미 다른 리소스에서 사용 중인 경우 작업이 실패합니다. 필드가 지정되지 않은 경우 /48 범위는 fd20::/20에서 무작위로 할당되고 이 필드를 통해 반환됩니다.
  • project : 리소스가 속한 프로젝트의 ID 입니다. 제공하지 않으면 공급자 프로젝트가 사용됩니다.
  • delete_default_routes_on_create : true로 설정하면 네트워크 생성 후 기본 경로(0.0.0.0/0)가 즉시 삭제됩니다. 기본값은 false 입니다.

 

이번주는 terraform으로 gcp에서는 어떤 것이 사용되는가에 대해서 간단히 알아보았는데요!

다음주부터는 본격적으로 리소스 자원에 대해서 한번 파헤쳐 보도록 하겠습니다!

 

그럼 이번주도 수고 많으셨고 좋은 주말 보내세요!

 

댓글