Observação:

Copiar Imagens Personalizadas para Várias Regiões no Oracle Cloud Infrastructure usando o Terraform

Introdução

A Oracle Cloud Infrastructure (OCI) utiliza imagens para iniciar instâncias. Ao iniciar uma instância, você pode especificar a imagem a ser usada. Você pode criar uma imagem personalizada de um disco de inicialização da instância e usá-la para iniciar outras instâncias. As instâncias iniciadas da sua imagem personalizada incluem as personalizações, as configurações e o software instalado da imagem original. As imagens personalizadas podem ser compartilhadas entre tenancies e regiões usando a importação e a exportação de imagens.

Objetivos

Pré-requisitos

Tarefa 1: Criar um Arquivo de Variável

Crie um arquivo de variável chamado var.tf e adicione as variáveis a seguir ao arquivo.

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

Tarefa 2: Exportar Imagem Personalizada para o Armazenamento do Bucket usando o Terraform

As imagens exportadas são armazenadas no serviço OCI Object Storage. Para executar uma exportação de imagem, você precisa gravar o acesso ao bucket do OCI Object Storage da imagem. O provedor Terraform do OCI não tem recurso incorporado para exportar imagens personalizadas. Usaremos o provisionador local-exec para executar o comando da CLI do OCI para exportar imagens personalizadas.

Crie um arquivo chamado 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"
}

Tarefa 3: Copiar o objeto Imagem Personalizada Exportada para todas as Regiões usando o Terraform

Faça a lista de regiões nas quais você deseja copiar as imagens personalizadas e armazená-las em um valor local. Usaremos o provisionador local-exec para copiar o objeto em cada região mencionada na lista. O comando da CLI do OCI será executado para cada região separadamente.

Crie um arquivo chamado 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"
}

Tarefa 4: Importar Imagens Personalizadas em cada Região do OCI Object Storage

O provedor Terraform do OCI não fornece recursos para importar imagens personalizadas do OCI Object Storage. Usaremos novamente o provisionador local-exec para importar imagens personalizadas em cada região. A importação de imagens em cada região ocorrerá simultaneamente.

Crie um arquivo chamado 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
  }
}

Próximas etapas

A cópia manual de imagens personalizadas por meio da Console do OCI leva muito tempo. Os scripts do Terraform descritos neste tutorial reduzirão o tempo e o esforço para copiar as imagens personalizadas, pois a importação de imagens personalizadas ocorrerá simultaneamente em cada região.

Confirmação

Mais Recursos de Aprendizagem

Explore outros laboratórios em docs.oracle.com/learn ou acesse mais conteúdo de aprendizado gratuito no canal Oracle Learning YouTube. Além disso, visite education.oracle.com/learning-explorer para se tornar um Oracle Learning Explorer.

Para obter a documentação do produto, visite o Oracle Help Center.