Observação:
- Este tutorial requer acesso ao Oracle Cloud. Para se inscrever em uma conta gratuita, consulte Conceitos básicos do Oracle Cloud Infrastructure Free Tier.
- Ele usa valores de exemplo para credenciais, tenancy e compartimentos do Oracle Cloud Infrastructure. Ao concluir seu laboratório, substitua esses valores por valores específicos do seu ambiente de nuvem.
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
- Automatize o processo de cópia de imagens personalizadas para várias regiões usando o Terraform.
Pré-requisitos
-
Instale e configure o Terraform. Para obter mais informações, consulte Instalar o Terraform.
-
Instalar e configurar a CLI do Oracle Cloud Infrastructure Command Line Interface (OCI). Para obter mais informações, consulte CLI do OCI.
-
OCID (Oracle Cloud Identifier) de imagem personalizada que queremos copiar.
-
Crie um bucket do OCI Object Storage em cada região com a mesma convenção de nomenclatura. Por exemplo,
custom-image-bucket-<region name>
. -
Configure o provedor Terraform do OCI. Para obter mais informações, consulte Configurando o Provedor.
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.
Links Relacionados
Confirmação
- Autor - Nikhil Khandelwal (Arquiteto de Nuvem Empresarial)
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.
Copy Custom Images to Multiple Regions in Oracle Cloud Infrastructure using Terraform
F97119-01
May 2024