Note :

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

Présentation

Oracle Cloud Infrastructure (OCI) utilise des images pour lancer des instances. Lors du lancement d'une instance, vous pouvez spécifier l'image à utiliser. Vous pouvez créer une image personnalisée d'un disque de démarrage d'instance et l'utiliser pour lancer 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 les locations et les régions à l'aide de l'importation et de l'exportation d'images.

Objectifs

Préalables

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

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 : Exporter l'image personnalisée vers le stockage de seau à l'aide de Terraform

Les images exportées sont stockées dans le service de stockage d'objets pour OCI. Pour effectuer un exportation d'image, vous devez disposer d'un accès en écriture au compartiment du service de stockage d'objets OCI pour l'image. Le fournisseur Terraform pour OCI ne comporte pas de ressource intégrée pour l'exportation d'images personnalisées. Nous utiliserons le provisionneur local-exec pour exécuter la commande d'interface de ligne de commande OCI pour 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 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 pour chaque région séparément.

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 : Importer des images personnalisées dans chaque région à partir du stockage d'objets OCI

Le fournisseur Terraform pour OCI ne fournit pas de ressources pour l'importation d'images personnalisées à partir du stockage d'objets OCI. Nous utiliserons à nouveau le provisionneur local-exec pour importer des 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
  }
}

Étape suivante

La copie manuelle d'images personnalisées au moyen de la console OCI prend beaucoup de temps. Les scripts Terraform décrits dans ce tutoriel réduiront le temps et l'effort de copie des images personnalisées, car l'importation d'images personnalisées se fera simultanément dans chaque région.

Remerciements

Autres ressources d'apprentissage

Explorez d'autres laboratoires sur docs.oracle.com/learn ou accédez à plus de contenu d'apprentissage gratuit sur le canal YouTube d'Oracle Learning. De plus, visitez education.oracle.com/learning-explorer pour devenir un explorateur Oracle Learning.

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