주:

Terraform을 사용하여 Oracle Cloud Infrastructure의 여러 지역에 사용자정의 이미지 복사

소개

OCI(Oracle Cloud Infrastructure)는 인스턴스 실행에 이미지를 활용합니다. 인스턴스를 실행할 때 사용할 이미지를 지정할 수 있습니다. 인스턴스 부트 디스크의 커스터마이징 이미지를 만들어 다른 인스턴스를 실행하는 데 사용할 수 있습니다. 사용자정의 이미지에서 실행된 인스턴스에는 원래 이미지의 사용자정의, 구성 및 설치된 소프트웨어가 포함됩니다. 이미지 임포트 및 익스포트를 사용하여 테넌시 및 영역 간에 사용자정의 이미지를 공유할 수 있습니다.

목표

필요 조건

작업 1: 변수 파일 생성

var.tf라는 변수 파일을 생성하고 파일에 다음 변수를 추가합니다.

variable compartment_id { default = "<compartment ocid>" }
variable region { default = "<Region name where base custom image will be exported>" }
variable custom_image_ocid {default = "<custom image ocid>"}
variable bucket_name { default = "prefix of bucket names of each region"}
variable os_namespace { default = "<namespace of object storage where base custom image will be exported>"}
variable imported_image_name { default = "<custom image name which will be imported in all regions>"}
variable base_image_name { default = "<custom image name which needs to be copied>"}

작업 2: Terraform을 사용하여 버킷 스토리지에 사용자정의 이미지 익스포트

익스포트된 이미지는 OCI 오브젝트 스토리지 서비스에 저장됩니다. 이미지 익스포트를 수행하려면 이미지의 OCI Object Storage 버킷에 대한 쓰기 액세스 권한이 필요합니다. OCI Terraform 제공자에는 사용자정의 이미지를 익스포트하기 위한 내장 리소스가 없습니다. local-exec 프로비전자를 사용하여 사용자정의 이미지 익스포트를 위해 OCI CLI 명령을 실행합니다.

export_image.tf라는 파일을 생성합니다.

# Export the custom image to Object Storage
resource "null_resource" "export_image" {
  provisioner "local-exec" {
    command = "oci compute image export to-object --image-id ${var.custom_image_ocid} --bucket-name ${var.bucket_name}_${var.region} --namespace ${var.os_namespace} --name ${var.base_image_name}"
  }
}

resource "time_sleep" "wait_15_min" {
  depends_on = [null_resource.export_image]

  create_duration = "900s"
}

작업 3: Terraform을 사용하여 모든 지역에 익스포트된 사용자정의 이미지 객체 복사

사용자정의 이미지를 복사할 영역 목록을 만들어 로컬 값에 저장합니다. local-exec 프로비전자를 사용하여 목록에 언급된 모든 영역의 객체를 복사합니다. OCI CLI 명령은 각 지역에 대해 별도로 실행됩니다.

copy_image_object.tf라는 파일을 생성합니다.

locals {
  regions = [
    "us-ashburn-1",
    "us-phoenix-1",
    // Add more regions as needed
  ]
}

resource "null_resource" "copy_objects" {
  # depends_on = [time_sleep.wait_15_min]
  count = length(local.regions)
  triggers = {
    region_index = count.index
  }
  provisioner "local-exec" {
    command = <<EOF
      oci os object copy -bn ${var.bucket_name}_${var.region} --source-object-name ${var.base_image_name} --destination-bucket ${var.bucket_name}_${local.regions[count.index]}  --destination-region ${local.regions[count.index]} -ns ${var.os_namespace}
    EOF
  }
}

resource "time_sleep" "wait_60_seconds" {
  depends_on = [null_resource.copy_objects]

  create_duration = "60s"
}

작업 4: OCI Object Storage에서 각 리전의 커스텀 이미지 임포트

OCI Terraform 제공자는 OCI Object Storage에서 사용자정의 이미지를 임포트하기 위한 리소스를 제공하지 않습니다. 각 영역에서 사용자정의 이미지를 임포트하는 데 local-exec 프로비전자를 다시 사용합니다. 각 영역에서 이미지를 동시에 가져옵니다.

import_image.tf라는 파일을 생성합니다.

resource "null_resource" "import-image" {
  depends_on = [time_sleep.wait_60_seconds]
  count = length(local.regions)

  triggers = {
    region_index = count.index
  }

  provisioner "local-exec" {
    command = <<EOF
      oci compute image import from-object --compartment-id ${var.compartment_id} -ns ${var.os_namespace} --bucket-name ${var.bucket_name}_${local.regions[count.index]} --name ${var.base_image_name} --region ${local.regions[count.index]} --display-name ${var.imported_image_name}
    EOF
  }
}

다음 단계

OCI 콘솔을 통해 사용자정의 이미지를 수동으로 복사하는 데 시간이 오래 걸립니다. 이 자습서에 설명된 Terraform 스크립트는 사용자정의 이미지 임포트가 각 영역에서 동시에 수행되므로 사용자정의 이미지를 복사하는 데 드는 시간과 노력을 줄입니다.

확인

추가 학습 자원

docs.oracle.com/learn에서 다른 실습을 살펴보거나 Oracle Learning YouTube 채널에서 더 많은 무료 학습 콘텐츠에 액세스하십시오. 또한 education.oracle.com/learning-explorer를 방문하여 Oracle Learning Explorer가 되십시오.

제품 설명서는 Oracle Help Center를 참조하십시오.