Hinweis:
- Dieses Tutorial erfordert Zugriff auf Oracle Cloud. Informationen zum Registrieren eines kostenlosen Accounts finden Sie unter Erste Schritte mit Oracle Cloud Infrastructure Free Tier.
- Es verwendet Beispielwerte für Oracle Cloud Infrastructure-Zugangsdaten, -Mandanten und -Compartments. Wenn Sie Ihre Übung abgeschlossen haben, ersetzen Sie diese Werte durch spezifische Werte für Ihre Cloud-Umgebung.
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
- Automatisieren Sie das Kopieren benutzerdefinierter Images in mehrere Regionen mit Terraform.
Voraussetzungen
-
Terraform installieren und einrichten Weitere Informationen finden Sie unter Terraform installieren.
-
Oracle Cloud Infrastructure-Befehlszeilenschnittstelle (OCI-CLI) installieren und einrichten Weitere Informationen finden Sie unter OCI-CLI.
-
Benutzerdefinierte Oracle Cloud-ID (OCID) des Images, die kopiert werden soll.
-
Erstellen Sie den OCI Object Storage-Bucket in jeder Region mit derselben Benennungskonvention. Beispiel:
custom-image-bucket-<region name>
. -
Konfigurieren Sie den OCI-Terraform-Provider. Weitere Informationen finden Sie unter Provider konfigurieren.
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.
Verwandte Links
Danksagungen
- Autor - Nikhil Khandelwal (Enterprise Cloud Architect)
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.
Copy Custom Images to Multiple Regions in Oracle Cloud Infrastructure using Terraform
F97112-01
May 2024