DevOps

Terraform에서 OCI 인스턴스 생성 시 `400-CannotParseRequest` 오류 해결

es6.kr 2025. 2. 8. 13:47
반응형

Terraform을 사용하여 Oracle Cloud Infrastructure(OCI)에서 VM 인스턴스를 생성하려고 할 때 다음과 같은 오류가 발생했다.

Error: 400-CannotParseRequest, Incorrectly formatted request. Please refer to our documentation for help.
Request Target: POST https://iaas.ap-chuncheon-1.oraclecloud.com/20160918/instances

Terraform 코드에서 compartment_idavailability_domain 값을 직접 변수에서 가져와 사용하고 있었다.

resource "oci_core_instance" "instance1" {
  availability_domain = var.availability_domain
  compartment_id = var.compartment_id
  shape = "VM.Standard.E2.1.Micro"

  create_vnic_details {
    subnet_id = var.subnet_id
    assign_public_ip = true
  }

  source_details {
    source_type = "image"
    source_id = var.image_id
  }
}

원인 분석

OCI에서 availability_domaincompartment_id를 올바르게 가져오지 못해 요청이 잘못된 형식(400-CannotParseRequest)으로 전달된 것이 원인이었다.

해결 방법

Terraform의 data 블록을 활용하여 compartment_idavailability_domain 값을 동적으로 가져오도록 수정했다.

수정된 코드

data "oci_identity_compartment" "compartment1" {
  id = var.compartment_id
}

data "oci_identity_availability_domain" "availability_domain1" {
  compartment_id = var.tenancy_ocid
  ad_number = 1
}

resource "oci_core_instance" "instance1" {
  availability_domain = data.oci_identity_availability_domain.availability_domain1.name
  compartment_id = data.oci_identity_compartment.compartment1.id
  shape = "VM.Standard.E2.1.Micro"

  create_vnic_details {
    subnet_id = var.subnet_id
    assign_public_ip = true
  }

  source_details {
    source_type = "image"
    source_id = var.image_id
  }
}

결론

Terraform에서 OCI 인스턴스를 생성할 때 availability_domaincompartment_id를 직접 변수로 할당하는 대신, data 블록을 사용하여 동적으로 조회해야 한다. 이를 통해 잘못된 요청 형식 오류(400-CannotParseRequest)를 방지할 수 있다.

반응형

'DevOps' 카테고리의 다른 글

[k8s] 프라이빗 클라우드 구축을 위한 K3s 추천 가이드  (0) 2025.02.01