Nota

Copia immagini personalizzate in più aree in Oracle Cloud Infrastructure utilizzando Terraform

Introduzione

Oracle Cloud Infrastructure (OCI) utilizza le immagini per avviare le istanze. Quando si avvia un'istanza, è possibile specificare l'immagine da utilizzare. È possibile creare un'immagine personalizzata di un disco di avvio dell'istanza e utilizzarla per avviare altre istanze. Le istanze avviate dall'immagine personalizzata includono le personalizzazioni, le configurazioni e il software installato dall'immagine originale. Le immagini personalizzate possono essere condivise tra tenancy e aree utilizzando l'importazione e l'esportazione delle immagini.

Obiettivi

Prerequisiti

Task 1: Creare un file variabile

Creare un file di variabili denominato var.tf e aggiungere le seguenti variabili nel file.

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

Task 2: Esporta immagine personalizzata in storage bucket utilizzando Terraform

Le immagini esportate vengono memorizzate nel servizio OCI Object Storage. Per eseguire un'esportazione di immagini, hai bisogno dell'accesso in scrittura al bucket di storage degli oggetti OCI per l'immagine. Il provider Terraform OCI non dispone di risorse incorporate per l'esportazione di immagini personalizzate. Verrà utilizzato il provisioninger local-exec per eseguire il comando CLI OCI per l'esportazione delle immagini personalizzate.

Creare un file denominato 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"
}

Task 3: copiare l'oggetto Immagine personalizzata esportata in tutte le aree utilizzando Terraform

Creare la lista delle aree in cui si desidera copiare le immagini personalizzate e memorizzarle in un valore locale. Verrà utilizzato il provisioninger local-exec per copiare l'oggetto in ogni area menzionata nell'elenco. Il comando CLI OCI verrà eseguito separatamente per ogni area.

Creare un file denominato 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"
}

Task 4: Importa immagini personalizzate in ogni area da OCI Object Storage

Il provider Terraform OCI non fornisce risorse per l'importazione di immagini personalizzate dallo storage degli oggetti OCI. Verrà nuovamente utilizzato il provisioninger local-exec per importare immagini personalizzate in ogni area. L'importazione di immagini in ogni regione avverrà simultaneamente.

Creare un file denominato 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
  }
}

Passi successivi

La copia manuale delle immagini personalizzate tramite OCI Console richiede molto tempo. Gli script Terraform descritti in questa esercitazione ridurranno i tempi e gli sforzi necessari per copiare le immagini personalizzate poiché l'importazione di immagini personalizzate verrà eseguita contemporaneamente in ogni area.

Riconoscimenti

Altre risorse di apprendimento

Esplora altri laboratori su docs.oracle.com/learn o accedi a più contenuti gratuiti sulla formazione su Oracle Learning YouTube channel. Inoltre, visita education.oracle.com/learning-explorer per diventare Oracle Learning Explorer.

Per la documentazione del prodotto, visitare Oracle Help Center.