Remarques :

Copie d'images personnalisées vers plusieurs régions dans Oracle Cloud Infrastructure à l'aide de Terraform

Introduction

Oracle Cloud Infrastructure (OCI) utilise des images pour lancer des instances. Lors du lancement d'une instance, vous pouvez indiquer l'image à utiliser. Vous pouvez créer une image personnalisée d'un disque d'initialisation d'instance et l'utiliser pour le lancement d'autres instances. Les instances lancées à partir de votre image personnalisée incluent les personnalisations, les configurations et les logiciels installés à partir de l'image d'origine. Les images personnalisées peuvent être partagées entre des locations et des régions à l'aide de l'import et de l'export d'image.

Objectifs

Prérequis

Tâche 1 : Créer un fichier de variables

Créez un fichier de variables nommé var.tf et ajoutez les variables suivantes dans le fichier.

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

Tâche 2 : export d'une image personnalisée vers le stockage de bucket à l'aide de Terraform

Les images exportées sont stockées dans le service OCI Object Storage. Afin d'effectuer un export d'image, vous devez disposer d'un accès en écriture au bucket OCI Object Storage pour l'image. Le fournisseur OCI Terraform ne dispose pas de ressource intégrée pour l'export d'images personnalisées. Nous allons utiliser le provisionnementeur local-exec pour exécuter la commande d'interface de ligne de commande OCI afin d'exporter des images personnalisées.

Créez un fichier nommé 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"
}

Tâche 3 : copier l'objet d'image personnalisée exportée vers toutes les régions à l'aide de Terraform

Dressez la liste des régions dans lesquelles vous souhaitez copier les images personnalisées et stockez-les dans une valeur locale. Nous utiliserons le provisionneur local-exec pour copier l'objet dans toutes les régions mentionnées dans la liste. La commande d'interface de ligne de commande OCI sera exécutée séparément pour chaque région.

Créez un fichier nommé 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"
}

Tâche 4 : import d'images personnalisées dans chaque région à partir d'OCI Object Storage

Le fournisseur OCI Terraform ne fournit pas de ressources pour l'import d'images personnalisées à partir d'OCI Object Storage. Nous utiliserons à nouveau le provisionnement local-exec pour l'import d'images personnalisées dans chaque région. L'importation d'images dans chaque région se fera simultanément.

Créez un fichier nommé 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
  }
}

Etapes suivantes

La copie manuelle d'images personnalisées via la console OCI prend beaucoup de temps. Les scripts Terraform décrits dans ce tutoriel réduiront le temps et les efforts de copie des images personnalisées car l'import d'images personnalisées sera effectué simultanément dans chaque région.

Remerciements

Ressources de formation supplémentaires

Parcourez d'autres ateliers sur docs.oracle.com/learn ou accédez à davantage de contenus de formation gratuits sur le canal Oracle Learning YouTube. De plus, rendez-vous sur education.oracle.com/learning-explorer pour devenir un explorateur Oracle Learning.

Pour obtenir de la documentation sur le produit, visitez Oracle Help Center.