본문 바로가기
INFRA/Operation

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

by BTC_지수 2022. 11. 10.

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

오늘은 지난번에 이어서 Terraform 리소스의 개념 GCP 편! 을 다루어보도록 하겠습니다.

 

 

"You're braver than you believe and stronger and smarter than you think" - Winnie the Pooh

 

 

google_compute_attached_disk

 

영구 디스크는 Computing instance 구성 내의 attached_disk 섹션을 사용하여 컴퓨팅 인스턴스에 연결할 수 있습니다. 

resource "google_compute_attached_disk" "default" {
  disk     = google_compute_disk.default.id
  instance = google_compute_instance.default.id
}

 

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

 

<필수>

  • instance : 디스크가 연결될 compue instance의 name 또는 self_link 입니다. self_link가 제공된 경우 자체 링크 zone에서 project가 추출됩니다. name만 사용되는 경우 리소스 또는 공급자의 zone으로 project가 정의되어야 합니다.
  • disk : name 또는 연결할 self_link 디스크 입니다.

<선택 사항>

  • project : 참조된 컴퓨팅 인스턴스가 속한 프로젝트입니다. instance가 self_link에 의해 참조되는 경우 링크에 정의된 프로젝트가 우선됩니다.
  • zone : 참조된 compute instance가 있는 영역입니다. instance가 self_link에 의해 참조되는 경우 링크에 정의된 프로젝트가 우선됩니다.
  • device_name : 인스턴스 내에서 실행되는 Linux 운영 체제의 /dev/disk/by-id/google-* 트리에 반영되는 고유한 장치 이름을 지정합니다. 이 이름은 인스턴스 내에서 마운트, 크기 조정 등을 위해 장치를 참조하는 데 사용할 수 있습니다.

       지정하지 않으면 서버는 영구 디스크-x 형식으로 이 디스크에 적용할 기본 기기 이름을 선택합니다. 여기서 x는                   Google Compute Engine에서 할당한 숫자입니다.

  • mode : 이 디스크를 연결할 모드(READ_WRITE 또는 READ_ONLY)입니다. 지정하지 않으면 기본값은 READ_WRITE 모드에서 디스크를 연결하는 것입니다. 

       가능한 값 : "READ_ONLY" "READ_WRITE"

 

google_compute_disk

영구 디스크는 데스크탑이나 서버의 물리적 디스크와 유사하게 작동하는 내구성 있는 저장 장치입니다. Compute Engine은 이러한 기기 뒤에 있는 하드웨어를 관리하여 데이터 중복성을 보장하고 성능을 최적화합니다. 영구 디스크는 표준 하드 디스크 드라이브(HDD) 또는 솔리드 스테이트 드라이브(SDD)로 제공됩니다.

 

영구 디스크는 가상 머신 인스턴스와 독립적으로 위치하므로 영구 디스크를 분리하거나 이동하여 인스턴스를 삭제한 후에도 데이터를 유지할 수 있습니다. 영구 디스크 성능은 크기에 따라 자동으로 조정되므로 기존 영구 디스크의 크기를 조정하거나 인스턴스에 영구 디스크를 추가하여 성능 및 저장 공간 요구 사항을 충족할 수 있습니다.

 

resource "google_compute_disk" "default" {
  name  = "test-disk"
  type  = "pd-ssd"
  zone  = "us-central1-a"
  image = "debian-11-bullseye-v20220719"
  labels = {
    environment = "dev"
  }
  physical_block_size_bytes = 4096
}

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

 

<필수>

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

<선택 사항>

  • description : 이 자원에 대한 선택적 설명입니다. 리소스를 생성할 때 이 속성을 제공하세요
  • labels : 이 디스크에 적용할 레이블입니다. 키->값 쌍의 목록입니다.
  • size : 영구 디스크의 크기로, GB 단위로 지정됩니다. image 또는 snapshot 매개변수를 사용하여 영구 디스크를 생성할 때 이 필드 를지정하거나 단독으로 지정하여 빈 영구 디스크를 생성할 수 있습니다. 이 필드를 이미지 또는 스냅샷과 함께 지정할 경우 값이 이미지 크기 또는 스냅샷 크기보다 작으면 안 됩니다.

=> 크기를 변경하면 업사이징이 감지되면 Terraform이 디스크 크기를 업데이트하고 다운사이징이 요청되면 디스크를 다시 만듭니다. 파괴 및 재생성을 방지하기 위해 구성에 lifecycle.prevent_destroy를 추가할 수 있습니다.

 

  • physical_block_size_bytes : 영구 디스크의 물리적 블록 크기(byte)입니다. 요청에 없으면 기본값이 사용됩니다. 현재 지원되는 크기는 4096 및 16384 이며 향후 다른 크기가 추가될 수 있습니다. 지원되지 않는 값이 요청되면 오류 메시지에 호출자의 프로젝트에 대해 지원되는 값이 나열됩니다.
  • interface : 이 디스크를 연결하는 데 사용할 디스크 인터페이스(SCSI or NVME)를 지정합니다. 기본값은 SCSI 입니다.
  • source_disk : 이 디스크를 만드는 데 사용된 원본 디스크입니다. 이를 리소스에 대한 부분 또는 전체 URL로 제공할 수 있습니다. 예를 들어 다음은 유효한 값입니다.
  • type : 디스크를 만드는 데 사용할 디스크 유형을 설명하는 디스크 유형 리소스의 URL입니다. 디스크를 생성할 떄 제공합니다.
  • image : 이 디스크를 초기화할 이미지 입니다. 다음중 하나가 될 수 있습니다.
    • self_link, projects/{project}/global/images/{image}, projects/{project}/global/images/family/{family}, global/images/{image}, global/images/family/{family}, family/{family}, {project}/{family}, {project}/{image}, {family}, or {image}. 
  • family가 참조되는 경우, 이미지 이름에는 family 이름이 포함되어야 합니다. 
  • resource_policies : 자동 스냅샷 생성을 위해 이 디스크에 적용된 리소스 정책입니다. 

=> resource_policies는 한 번에 둘 이상 업데이트할 수 없으므로 이 값은 리소스 정책 업데이트를 지원하지 않습니다. google_compute_disk_resource_policy_attachment 디스크에 연결된 리소스 정책 업데이트를 허용하는 데 사용 합니다.

 

  • multi_writer : 둘 이상의 인스턴스에 연결된 디스크를 읽고 쓸 수 있는지 여부를 나타냅니다.
  • provisioned_iops : 디스크에 프로비저닝해야 하는 IOPS 수를 나타냅니다.
  • zone : 디스크가 있는 영역에 대한 참조입니다.
  • source_image_encryption_key { } : 소스 이미지의 customer-supplied encryption key  입니다. 소스 이미지가 customer-supplied encryption key 로 보호 되는 경우 필요한 블록입니다.
  • disk_encryption_key { } : customer-supplied encryption key 를 사용하여 디스크를 암호화 합니다. customer-supplied encryption key 로 디스크를 암호화한 후 나중에 디스크를 사용하는 경우 동일한 키를 제공해야 합니다. customer-supplied encryption key 는 디스크의 메타데이터에 대한 액세스를 보호하지 않습니다. 디스크를 생성할 때 암호화 키를 제공하지 않으면 자동으로 생성된 키를 사용하여 디스크가 암호화되며 나중에 디스크를 사용하기 위해 키를 제공할 필요가 없습니다.
  • snapshop : 이 디스크를 만드는 데 사용된 소스 스냅샷입니다. 이를 리소스에 대한 부분 또는 전체 URL로 제공할 수 있습니다. 스냅샷이 이 디스크가 아닌 다른 프로젝트에 있는 경우 전체 URL을 제공해야 합니다. 예를 들어 다음은 유효한 값입니다.
  • source_snapshop_encryption_key : 소스 스냅샷의 customer-supplied encryption key 입니다. 소스 스냅샷이 customer-supplied encryption key 로 보호되는 경우 필요합니다.
  • project : 리소스가 속한 프로젝트의 ID입니다. 제공하지 않으면 공급자 프로젝트가 사용됩니다.

 

오늘은 이렇게 disk 에 대해서 다루어 보았는데요!

이번 내용도 많은 도움이 되기를 바라며 다음시간에 뵙겠습니다~!

댓글