Note:

Copia de imágenes personalizadas en varias regiones de Oracle Cloud Infrastructure con Terraform

Introducción

Oracle Cloud Infrastructure (OCI) utiliza imágenes para iniciar instancias. Al iniciar una instancia, puede especificar la imagen que desea utilizar. Puede crear una imagen personalizada de un disco de inicio de instancia y utilizarla para iniciar otras instancias. Las instancias iniciadas desde la imagen personalizada incluyen las personalizaciones, las configuraciones y el software instalado desde la imagen original. Las imágenes personalizadas se pueden compartir entre inquilinos y regiones mediante la importación y exportación de imágenes.

Objetivos

Requisitos

Tarea 1: Crear un archivo de variable

Cree un archivo de variables denominado var.tf y agregue las siguientes variables al archivo.

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>"}

Tarea 2: Exportación de imagen personalizada a Bucket Storage mediante Terraform

Las imágenes exportadas se almacenan en el servicio OCI Object Storage. Para realizar una exportación de imagen, necesita acceso de escritura al bloque de OCI Object Storage para la imagen. El proveedor de Terraform de OCI no tiene un recurso incorporado para exportar imágenes personalizadas. Utilizaremos el provisionador local-exec para ejecutar el comando de la CLI de OCI para exportar imágenes personalizadas.

Cree un archivo denominado 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"
}

Tarea 3: Copia del objeto de imagen personalizada exportado en todas las regiones con Terraform

Realice la lista de regiones en las que desea copiar las imágenes personalizadas y almacenarlas en un valor local. Utilizaremos el provisionador local-exec para copiar el objeto en cada región mencionada en la lista. El comando de la CLI de OCI se ejecutará para cada región por separado.

Cree un archivo denominado 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"
}

Tarea 4: Importación de imágenes personalizadas en cada región desde OCI Object Storage

El proveedor de Terraform de OCI no proporciona recursos para importar imágenes personalizadas desde OCI Object Storage. Volveremos a utilizar el provisionador local-exec para importar imágenes personalizadas en cada región. La importación de imágenes en cada región se realizará simultáneamente.

Cree un archivo denominado 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
  }
}

Pasos siguientes

La copia manual de imágenes personalizadas a través de la consola de OCI lleva mucho tiempo. Los scripts de Terraform descritos en este tutorial reducirán el tiempo y el esfuerzo para copiar las imágenes personalizadas, ya que la importación de imágenes personalizadas se realizará simultáneamente en cada región.

Agradecimientos

Más recursos de aprendizaje

Explore otros laboratorios en docs.oracle.com/learn o acceda a más contenido de aprendizaje gratuito en el canal YouTube de Oracle Learning. Además, visite education.oracle.com/learning-explorer para convertirse en Oracle Learning Explorer.

Para obtener documentación sobre el producto, visite Oracle Help Center.