Hinweis:

Benutzerdefinierte Images mit Terraform in mehrere Regionen in Oracle Cloud Infrastructure kopieren

Einführung

Oracle Cloud Infrastructure (OCI) verwendet Images zum Starten von Instanzen. Beim Starten einer Instanz können Sie das zu verwendende Image angeben. Sie können ein benutzerdefiniertes Image eines Instanz-Boot-Disks erstellen und zum Starten anderer Instanzen verwenden. Instanzen, die von Ihrem benutzerdefinierten Image gestartet werden, umfassen die Anpassungen, Konfigurationen und die installierte Software aus dem Originalimage. Benutzerdefinierte Images können mit Imageimport und -export mandanten- und regionsübergreifend geteilt werden.

Ziele

Voraussetzungen

Aufgabe 1: Variablendateien erstellen

Erstellen Sie eine Variablendatei mit dem Namen var.tf, und fügen Sie die folgenden Variablen in der Datei hinzu.

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

Aufgabe 2: Benutzerdefiniertes Image mit Terraform in Bucket-Speicher exportieren

Exportierte Images werden im OCI Object Storage-Service gespeichert. Für den Export eines Images benötigen Sie Schreibzugriff auf den OCI-Objektspeicher-Bucket für das Image. OCI-Terraform-Provider verfügt über keine integrierte Ressource zum Exportieren benutzerdefinierter Images. Wir verwenden den local-exec-Provisioner, um den OCI-CLI-Befehl zum Exportieren benutzerdefinierter Images auszuführen.

Erstellen Sie eine Datei mit dem Namen 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"
}

Aufgabe 3: Exportiertes benutzerdefiniertes Imageobjekt mit Terraform in alle Regionen kopieren

Erstellen Sie die Liste der Regionen, in die Sie die benutzerdefinierten Images kopieren möchten, und speichern Sie sie in einem lokalen Wert. Wir verwenden den local-exec-Provisioner, um das Objekt in jede in der Liste genannte Region zu kopieren. OCI-CLI-Befehl wird für jede Region separat ausgeführt.

Erstellen Sie eine Datei mit dem Namen 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"
}

Aufgabe 4: Benutzerdefinierte Images in jeder Region aus OCI Object Storage importieren

Der OCI-Terraform-Provider stellt keine Ressourcen für den Import benutzerdefinierter Images aus OCI Object Storage bereit. Wir verwenden erneut den local-exec-Provisioner zum Importieren benutzerdefinierter Images in jeder Region. Das Importieren von Bildern in jeder Region erfolgt gleichzeitig.

Erstellen Sie eine Datei mit dem Namen 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
  }
}

Nächste Schritte

Das manuelle Kopieren benutzerdefinierter Images über die OCI-Konsole dauert lange. Die in diesem Tutorial beschriebenen Terraform-Skripte reduzieren den Zeit- und Arbeitsaufwand beim Kopieren der benutzerdefinierten Images, da der Import benutzerdefinierter Images gleichzeitig in jeder Region erfolgt.

Danksagungen

Weitere Lernressourcen

Lernen Sie andere Übungen auf docs.oracle.com/learn kennen, oder greifen Sie auf weitere kostenlose Lerninhalte im Oracle Learning YouTube Channel zu. Besuchen Sie außerdem education.oracle.com/learning-explorer, um Oracle Learning Explorer zu werden.

Produktdokumentation finden Sie im Oracle Help Center.