Note:

Introducción a Terraform en Oracle Cloud Infrastructure

Introducción

Terraform es una herramienta de infraestructura como código (IaC) desarrollada por Hashicorp que permite definir, aprovisionar y gestionar su infraestructura en varios proveedores de nube mediante la sintaxis de lenguaje de Terraform, HCL. Terraform te permite automatizar todo el ciclo de vida de tu infraestructura en la nube, facilitando la creación, actualización y ampliación de recursos de una forma coherente y reproducible. Los equipos de DevOps utilizan ampliamente Terraform para gestionar los recursos en la nube, mejorar la eficiencia de la infraestructura, reducir los errores manuales y controlar las versiones de los recursos en la nube.

Este tutorial le ayuda a comenzar su recorrido hasta aprovechar IaC para desplegar y gestionar su infraestructura en la nube.

Flujo de Trabajo de Arquitectura de Terraform

Flujo de Trabajo de Arquitectura de Terraform

Objetivos

Requisitos

Tarea 1: Declaración del profesional asistencial

Un proveedor de Terraform se refiere a un plugin que es responsable de comprender e interactuar con un tipo específico de infraestructura o servicio. Los proveedores son el puente entre Terraform y las API de los servicios o plataformas que desea gestionar. Los proveedores permiten que Terraform se comunique e interactúe con las plataformas en la nube de forma eficaz. En otras palabras, el proveedor de Terraform es como un traductor que ayuda a Terraform a hablar con diferentes servicios o sistemas en la nube, lo que le permite crear, gestionar y suprimir recursos como máquinas virtuales, bases de datos y redes.

Cada proveedor suele corresponder a una plataforma en la nube específica (por ejemplo, OCI, AWS, Azure, GCP) o un servicio de infraestructura (por ejemplo, Kubernetes, Docker).

  1. Cree una carpeta denominada terraform-beginners-demo y ábrala en VS Code.

  2. Instale la extensión HashiCorp Terraform en VS Code.

  3. Cree los archivos provider.tf y variables.tf en la carpeta terraform-beginners-demo.

  4. Copie el siguiente código en el archivo provider.tf.

    terraform {
      required_providers {
        oci = {
          source = "oracle/oci"
          version = "5.30.0"
        }
      }
    }
    
    provider "oci" {
      tenancy_ocid          = var.tenancy_id
      user_ocid             = var.user_id
      fingerprint           = var.api_fingerprint
      private_key_path      = var.api_private_key_path
      region                = var.region
    }
    

    Nota: hemos utilizado el código de la página oficial del registro de Terraform. Para obtener más información, consulte Proveedor de Oracle Cloud Infrastructure y Última versión (5.30.0).

Tarea 2: Creación de la configuración de OCI

Necesitamos el identificador de Oracle Cloud (OCID) del usuario de OCI, el OCID del arrendamiento, el OCID del compartimento para configurar el proveedor.

  1. Conéctese a la consola de OCI.

  2. Haga clic en el icono de perfil de usuario y seleccione Mi perfil.

  3. Para obtener el par de claves de API, siga estos pasos:

    1. En Recursos, seleccione Claves de API y haga clic en Agregar clave de API.

    2. Puede generar un nuevo par de claves de API o utilizar su clave pública existente para generar un par de claves de API. Seleccione Generate API key pair. Asegúrese de descargar la clave privada y la clave pública.

    3. Haga clic en Agregar. Se mostrará un cuadro de vista previa del archivo de configuración.

      Creación de pares de claves de API

    4. Copie los detalles proporcionados en la vista previa del archivo de configuración y guárdelo en algún lugar. Se utilizará en el archivo variables.tf.

      Debe tener el siguiente aspecto:

      [DEFAULT]
      user=ocid1.user.oc1..xxxxxxxxxxx
      fingerprint=xx:xx:xx:xx:xx
      tenancy=ocid1.tenancy.oc1..xxxxxxxxx
      region=us-phoenix-1 # your region ID
      key_file=<path to your private keyfile> # TODO
      
    5. Haga clic en Cerrar.

    O BIEN

    Para obtener el par de claves de API, consulte Generación de una configuración de clave de API en la consola de OCI.

Tarea 3: Configuración del entorno de Terraform con credenciales de OCI

  1. Vaya al editor de códigos VS y cree un nuevo archivo denominado variables.tf en la carpeta terraform-beginners-demo y pegue el siguiente código.

    variable "api_fingerprint" {
      description = "Fingerprint of OCI API private key for Tenancy"
      type        = string
    }
    
    variable "api_private_key_path" {
      description = "Path to OCI API private key used for Tenancy"
      type        = string
    }
    
    variable "tenancy_id" {
      description = "Tenancy ID where to create resources for Tenancy"
      type        = string
    }
    
    variable "user_id" {
      description = "User ID that Terraform will use to create resources for Tenancy"
      type        = string
    }
    
    variable "region" {
      description = "OCI region where resources will be created for Tenancy"
      type        = string
    }
    
  2. Cree otro archivo nuevo denominado terraform.tfvars y pegue el siguiente código. Defina cada variable de variables.tf con los valores del archivo de configuración de la tarea 2.3.

    # Identity and access parameters
    api_fingerprint      = "REPLACE_BY_YOUR_FINGERPRINT" # Fingerprint of OCI API private key for Tenancy
    api_private_key_path = "~/.oci/oci_api_key.pem"      # Path to OCI API private key used for Tenancy
    region               = "us-phoenix-1"                # OCI region where resources will be created for Tenancy
    tenancy_id           = "REPLACE_YOUR_TENACY_OCID"    # Tenancy ID where to create resources
    user_id              = "REPLACE_BY_YOUR_USER_OCID"   # Path to OCI API private key used for Tenancy
    

    Nota: En el entorno de producción, se recomienda utilizar el archivo terraform.tfvars para definir las variables de terraform para promover la seguridad y la escalabilidad. Para obtener más información, consulte Variable Definitions (.tfvars) Files.

Tarea 4: Prueba de la conectividad de Terraform con su arrendamiento de OCI

  1. Cree un nuevo archivo denominado data_source.tf en la carpeta terraform-beginners-demo y copie el siguiente código.

    data "oci_identity_availability_domains" "ad" {
        #Required
        compartment_id = var.tenancy_id
    }
    
  2. Cree un nuevo archivo denominado output.tf en la carpeta terraform-beginners-demo y copie el siguiente código.

    output "list_ads" {
      value = data.oci_identity_availability_domains.ad.availability_domains
    }
    
  3. Abra un terminal nuevo en VS Code y ejecute los siguientes comandos para ejecutar la secuencia de comandos terraform.

    Command 1: terraform init
    
    Command 2: terraform plan #to view your deployments what is going to be created
    
    Command 3: terraform apply #then type "yes" once prompted alternatively run "apply -auto-approve
    

    Flujo de trabajo de ejecución de Terraform

    Ahora debería poder ver la lista de dominios de disponibilidad y el compartimento asociado a ellos en las salidas.

    Dominios de disponibilidad de OCI

    Ahora ha configurado correctamente el sistema para desplegar recursos en su arrendamiento de OCI dentro de Terraform. Ha transferido las variables, pero no ha realizado ningún cambio en su arrendamiento. Repasaremos algunos ejemplos para ayudarle a comprender mejor el proceso de adición, encadenamiento y destrucción de recursos mediante Terraform.

Tarea 5: (Ejemplo) Despliegue de una instancia informática de OCI mediante Terraform

Ahora vamos a construir sobre lo que ha creado en tareas anteriores para desplegar recursos informáticos y de redes.

  1. Cree un archivo denominado networking.tf y copie el siguiente código.

    resource "oci_core_vcn" "test_vcn" {
      count = (var.create_new_vcn) ? 1 : 0
    
      #Required
      compartment_id = var.compartment_id
    
    
      cidr_block   = var.vcn_cidr_block
      display_name = var.vcn_display_name
      dns_label    = var.vcn_dns_label
    }
    

    Nota: Para obtener más información sobre la variable core-vcn con configuraciones adicionales, consulte oci_core_vcn.

  2. Edite el archivo variables.tf y agregue las siguientes variables.

    #VCN specific variables
    variable "create_new_vcn" {
      description = "Boolean variable to specify whether to create a new VCN or to reuse an existing one."
      type        = bool
    }
    
    variable "compartment_id" {
      description = "OCI compartment where resources will be created"
      type        = string
    }
    
    variable "vcn_cidr_block" {
      description = "The list of IPv4 CIDR blocks the VCN will use"
      type        = string
    }
    
    variable "vcn_display_name" {
      description = "provide a descriptive name for the VCN - this is what you will see displayed in the OCI console"
      type        = string
    }
    
    variable "vcn_dns_label" {
      description = "provide a descriptive alphanumeric name for the DNS - this is what you will see displayed in the OCI console"
      type        = string
    }
    
    variable "vcn_id" {
      description = "provide your existing VCN OCID if create_new_vcn = false"
      type = string
    }
    
    variable "private_subnet_id" {
      description = "provide existing private subnet OCID"
      type = string
    }
    
    variable "public_subnet_id" {
      description = "provide existing public subnet OCID"
      type = string
    }
    
  3. Agregue las nuevas variables en terraform.tfvars y defina cada variable según la configuración de su arrendamiento.

    # VCN specific variables
    create_new_vcn = true # Set this to true if you want terraform to crearte the network for you, otherwise set it to false.
    compartment_id   = "REPLACE_BY_YOUR_COMPARTMENT_OCID" # add your own compartment id where the vcn will be created 
    vcn_cidr_block   = "10.0.0.0/16"                      # The list of IPv4 CIDR blocks the VCN will use
    vcn_display_name = "terraform_vcn_example"   # provide a descriptive name for the VCN - this is what you will see displayed in the OCI console
    vcn_dns_label    = "terraformvcn"                     # provide a descriptive alphanumeric name for the DNS - this is what you will see displayed in the OCI console
    
    # Configure CIDR Blocks, Subnet(Public, Private) OCIDS for an existing VCN. #
    vcn_id            = "REPLACE_BY_YOUR_VCN_OCID"             #ADD WITH YOUR VCN OCID
    private_subnet_id = "REPLACE_BY_YOUR__PRIVATE_SUBNET_OCID" #ADD WITH YOUR PRIVATE SUBNET
    public_subnet_id  = "REPLACE_BY_YOUR_PUBLIC_SUBNET__OCID"  #AA WITH YOUR PUBLIC SUBNET
    

    Nota: Si ya tiene una VCN existente, defina create_new_vcn en false y modifique las variables vcn_id, private_subnet_id y public_subnet_id.

  4. Crear subredes para la nueva VCN.

    1. En el archivo networking.tf, agregue el siguiente código para crear sus subredes públicas y privadas.

      resource "oci_core_subnet" "private_subnet" {
        count = (var.create_new_vcn) ? 1 : 0
      
        #Required
        cidr_block     = var.private_subnet_cidr_block
        compartment_id = var.compartment_id
        vcn_id         = oci_core_vcn.test_vcn.*.id[0]
      
        display_name               = var.private_subnet_display_name
        prohibit_public_ip_on_vnic = var.private_subnet_prohibit_public_ip_on_vnic
      }
      
      resource "oci_core_subnet" "public_subnet" {
        count = (var.create_new_vcn) ? 1 : 0
      
        #Required
        cidr_block     = var.public_subnet_cidr_block
        compartment_id = var.compartment_id
        vcn_id         = oci_core_vcn.test_vcn.*.id[0]
      
      
        display_name               = var.public_subnet_display_name
        prohibit_public_ip_on_vnic = var.public_subnet_prohibit_public_ip_on_vnic
        route_table_id             = oci_core_route_table.test_route_table.*.id[0]
      }
      

      Nota: Para obtener más información sobre la variable de subred principal con configuraciones adicionales, consulte oci_core_subnet.

    2. Agregue las nuevas variables de subred al archivo variables.tf copiando el siguiente código.

        #Private subnet variables
      variable "private_subnet_cidr_block" {
        description = "OCI private subnet CIDR block range"
        type        = string
      }
      
      
      variable "private_subnet_display_name" {
        description = "provide a descriptive name for the private subnet - this is what you will see displayed in the OCI console"
        type        = string
      }
      
      
      variable "private_subnet_prohibit_public_ip_on_vnic" {
        description = "Allow public IP address to the VNIC"
        type        = bool
      }
      
      
      #Public subnet variables
      variable "public_subnet_cidr_block" {
        description = "OCI public subnet CIDR block range"
        type        = string
      }
      
      
      variable "public_subnet_display_name" {
        description = "provide a descriptive name for the public subnet - this is what you will see displayed in the OCI console"
        type        = string
      }
      
      
      variable "public_subnet_prohibit_public_ip_on_vnic" {
        description = "Allow public IP address to the VNIC"
        type        = bool
      }
      
    3. Declare las nuevas variables de subred en el archivo terrform.tfvars.

      #Private subnet variables
      private_subnet_cidr_block                 = "10.0.1.0/24"                               # OCI private subnet CIDR block range
      private_subnet_display_name               = "terraform_private_subnet_example" # provide a descriptive name for the private subnet - this is what you will see displayed in the OCI console
      private_subnet_prohibit_public_ip_on_vnic = false                                       # Allow public IP address to the VNIC
      
      #Public subnet variables
      public_subnet_cidr_block                 = "10.0.2.0/24"                              # OCI public subnet CIDR block range
      public_subnet_display_name               = "terraform_public_subnet_example" # provide a descriptive name for the public subnet - this is what you will see displayed in the OCI console
      public_subnet_prohibit_public_ip_on_vnic = false 
      
  5. Agregue el siguiente código en el archivo networking.tf para crear un gateway de Internet.

    resource "oci_core_internet_gateway" "test_internet_gateway" {
      count = (var.create_new_vcn) ? 1 : 0
    
      #Required
      compartment_id = var.compartment_id
      display_name   = "INTERNET_GTWFOR_${var.vcn_display_name}"
      vcn_id         = oci_core_vcn.test_vcn.*.id[0]
      #route_table_id = oci_core_route_table.test_route_table.id
    }
    
  6. Agregue el siguiente código en networking.tf para que la tabla de rutas gestione el tráfico a Internet.

    resource "oci_core_route_table" "test_route_table" {
      count = (var.create_new_vcn) ? 1 : 0
    
      #Required
      compartment_id = var.compartment_id
      vcn_id         = oci_core_vcn.test_vcn.*.id[0]
    
    
      route_rules {
        #Required
        network_entity_id = oci_core_internet_gateway.test_internet_gateway.*.id[0]
    
    
        description      = "route rule internet access for ${var.vcn_display_name}"
        destination      = "0.0.0.0/0"
        destination_type = "CIDR_BLOCK"
      }
    }
    
  7. Cree el grupo de seguridad de red (NSG) asociado a la VCN. Copie el siguiente código en el archivo networking.tf.

    resource "oci_core_network_security_group" "test_nsg" {
      count = (var.create_new_vcn) ? 1 : 0
    
      #Required
      compartment_id = var.compartment_id
      vcn_id         = oci_core_vcn.test_vcn.*.id[0]
      display_name   = "NETWORK_SECURITY_GROUP_${var.vcn_display_name}"
      freeform_tags  = { "Lab" = "Terraofm 101 Guide" }
    }
    
  8. Ahora crearemos 2 nuevos archivos, compute_linux.tf y compute_windows.tf, para desplegar una máquina virtual de Linux y una máquina virtual de Windows.

  9. En compute_linux.tf, copie el siguiente código para crear una instancia informática con un sistema operativo Linux.

    resource "oci_core_instance" "test_linux_instance" {
      #Required
      count = var.create_linux_instance ? 1 : 0
    
      availability_domain = data.oci_identity_availability_domains.ad.availability_domains[0].name
      compartment_id      = var.compartment_id
    
    
      create_vnic_details {
        assign_public_ip       = "true"
        display_name           = var.instance_display_name
        nsg_ids                = []
        skip_source_dest_check = "false"
        subnet_id              = var.create_new_vcn ? oci_core_subnet.public_subnet.*.id[0] : var.public_subnet_id
      }
    
      display_name = "${var.instance_display_name}_linux"
    
      metadata = {
        ssh_authorized_keys = "${file(var.public_ssh_key)}"
      }
    
      shape = var.instance_shape
      shape_config {
    
        memory_in_gbs = var.instance_flex_memory_in_gbs
        ocpus         = var.instance_flex_ocpus
      }
    
      launch_options {
        boot_volume_type                    = "PARAVIRTUALIZED"
        firmware                            = "UEFI_64"
        is_consistent_volume_naming_enabled = "true"
        is_pv_encryption_in_transit_enabled = "true"
        network_type                        = "PARAVIRTUALIZED"
        remote_data_volume_type             = "PARAVIRTUALIZED"
    
      }
    
      source_details {
        #Required
        source_id   = var.linux_image_ocid
        source_type = "image"
    
      }
      preserve_boot_volume = false
    }
    
  10. En compute_windows.tf, copie el código siguiente.

    resource "oci_core_instance" "test_windows_instance" {
      #Required
      count = var.create_windows_instance ? 1 : 0
    
    
      availability_domain = data.oci_identity_availability_domains.ad.availability_domains[0].name
      compartment_id      = var.compartment_id
    
    
    
      create_vnic_details {
        assign_public_ip       = "true"
        display_name           = var.instance_display_name
        nsg_ids                = []
        skip_source_dest_check = "false"
        subnet_id              = var.create_new_vcn ? oci_core_subnet.public_subnet.*.id[0] : var.public_subnet_id
    
    
      }
    
      display_name = "${var.instance_display_name}_windows"
    
      metadata = {
      }
    
      shape = var.instance_shape
      shape_config {
    
        memory_in_gbs = var.instance_flex_memory_in_gbs
        ocpus         = var.instance_flex_ocpus
      }
    
      launch_options {
        boot_volume_type                    = "PARAVIRTUALIZED"
        firmware                            = "UEFI_64"
        is_pv_encryption_in_transit_enabled = "true"
        network_type                        = "PARAVIRTUALIZED"
        remote_data_volume_type             = "PARAVIRTUALIZED"
    
      }
    
      source_details {
        #Required
        source_id   = var.windows_image_ocid
        source_type = "image"
    
      }
      preserve_boot_volume = false
    }
    
  11. Actualice variables.tf con las nuevas variables para compute_linux y compute_windows.

    #Compute variables
    variable "instance_shape" {
      description = "value"
      type        = string
    }
    
    
    variable "instance_flex_memory_in_gbs" {
      description = "(Updatable) The total amount of memory available to the instance, in gigabytes."
      type        = number
    }
    
    
    variable "instance_flex_ocpus" {
      description = "(Updatable) The total number of OCPUs available to the instance."
      type        = number
    }
    
    
    variable "instance_create_vnic_details_assign_public_ip" {
      description = "To allow compute connectivity from internet"
      type        = bool
    }
    
    
    variable "instance_display_name" {
      description = "provide a descriptive name for the compute instance - this is what you will see displayed in the OCI console"
      type        = string
    }
    
    
    variable "public_ssh_key" {
      description = "Add your public ssh key - for provisioning your compute instance"
      type        = string
    }
    
    
    variable "private_ssh_key" {
      description = "Add your private ssh key - for accessing your compute instance after creation"
      type        = string
    }
    
    
    variable "create_linux_instance" {
      description = "Boolean variable to specify whether to provision a Linux instances"
      type        = bool
    }
    
    
    variable "create_windows_instance" {
      description = "Boolean variable to specify whether to provision a Windows instances"
      type        = bool
    }
    
    
    variable "windows_image_ocid" {
      description = "OCID of the Windows image to use"
      type        = string
    }
    
    
    variable "linux_image_ocid" {
      description = "OCID of the Linux image to use"
      type        = string
    }
    
  12. Agregue y defina las nuevas variables en terraform.tfvars.

    #Compute variables - Make sure to select a compatible shape (e.g.: VM.Standard.E4.Flex)
    instance_shape                                = "VM.Standard.E5.Flex"                # Shape of the compute instance 
    instance_flex_memory_in_gbs                   = 16                                   # (Updatable) The total amount of memory available to the instance, in gigabytes.
    instance_flex_ocpus                           = 1                                    # (Updatable) The total number of OCPUs available to the instance.
    instance_create_vnic_details_assign_public_ip = true                                 # To allow compute connectivity from internet
    instance_display_name                         = "terraform_compute_example" # provide a descriptive name for the compute instance - this is what you will see displayed in the OCI console
    
    #SSH keys https://docs.oracle.com/en/learn/generate_ssh_keys/index.html#introduction
    public_ssh_key  = "~/cloudshellkey.pub" # Add your public ssh key
    private_ssh_key = "~/cloudshellkey"     # Add your private ssh key
    
    create_linux_instance   = true # if set to true a test linux instance will be created and false no linux instance will be deployed.
    create_windows_instance = true # # If set to true a test windows instance will be created and false no windows instance will be deployed.
    
    linux_image_ocid   = "REPLACE_BY_YOUR_REGION_LINUX_IMAGE_OCID"   # OCID for chosen image (Oracle Linux 9 example) specific to the test region (us-phoenix-1)
    windows_image_ocid = "REPLACE_BY_YOUR_REGION_WINDOWS_IMAGE_OCID" # OCID for chosen image (Windows example) specific to each region (us-phoenix-1)
    
    # Here are other image OCIDs for popular region (Ashburn, San Jose, Toronto)
    # Ashburn
    # Oracle linux image_id = ocid1.image.oc1.iad.aaaaaaaau7uaok7n5qd4nivgiyfatfdddhltmxddtfbyqg3bsg3fxk6z6aqq
    # Windows image_id = ocid1.image.oc1.iad.aaaaaaaamaaiupezxbrw6fji5ndk3jdujwhjuexcafheqjqf45g6nzyblz6a
    
    #San Jose
    # Oracle linux image_id = ocid1.image.oc1.us-sanjose-1.aaaaaaaabjixxpfouczgpcnpvgny5pcqtgjgi3nincszbfdkd2xr4jvzahua
    # Windows image_id = ocid1.image.oc1.us-sanjose-1.aaaaaaaatmjlzoqw5gzohjvygzcm5rpugomxyfho5xi6subjchoxnxo4wcfa
    
    #Toronto
    # Oracle linux image_id = ocid1.image.oc1.ca-toronto-1.aaaaaaaai6uhjrtajuuitl5hara5brnvwqvq4aebenmnbehv2cila75xbvzq
    # Windows image_id = ocid1.image.oc1.ca-toronto-1.aaaaaaaaeged3obrrmmwvyruvknszy23btvb2fqu7vn3c5azeecbj2prm64q
    
    # for other image OCIDs: https://docs.oracle.com/en-us/iaas/images/
    

    Nota: Los OCID de imagen son específicos de cada región. En el código anterior hay OCID de imágenes para regiones populares y puede encontrar OCID de imagen para todas las demás regiones aquí: Todas las familias de imágenes.

  13. En output.tf, copie el código siguiente. Esto imprimirá los recursos creados en el terminal.

    # Regions
    output "linux_instance_region" {
      value = oci_core_instance.test_linux_instance.*.region
    }
    
    output "windows_instance_region" {
      value = oci_core_instance.test_windows_instance.*.region
    }
    
    # Networking
    output "network_vcn_name" {
      value = oci_core_vcn.test_vcn.*.display_name
    }
    
    # Compute: Linux Test Instance
    output "output_linux_instance_display_name" {
      value = oci_core_instance.test_linux_instance.*.display_name
    }
    
    output "output_linux_instance_public_ip" {
      value = oci_core_instance.test_linux_instance.*.public_ip
    }
    
    output "output_linux_instance_state" {
      value = oci_core_instance.test_linux_instance.*.state
    }
    
    # Compute: Windows Test Instance
    output "output_windows_instance_display_name" {
      value = oci_core_instance.test_windows_instance.*.display_name
    }
    
    output "output_windows_instance_public_ip" {
      value = oci_core_instance.test_windows_instance.*.public_ip
    }
    
    output "output_windows_instance_state" {
      value = oci_core_instance.test_windows_instance.*.state
    }
    
  14. Abra un terminal nuevo para terraform-example y ejecute los siguientes comandos.

    Command 1: terraform init
    
    Command 2: terraform plan
    
    Commnad 3: terraform apply (and then respond "yes") OR terraform apply -auto-approve
    

    Debe ver la siguiente salida y se debe crear una VCN, una subred privada y una subred pública, una tabla de rutas, un gateway de Internet, nsg, una máquina virtual de Linux y una máquina virtual de Windows.

    Ejemplo de ejecución de terminal de Terraform

  15. Los recursos ahora se han desplegado mediante Terraform. Una vez que haya verificado la creación de recursos en su arrendamiento de OCI, utilice el siguiente comando para destruir todos los recursos.

    Command: terraform destroy
    

Pasos Siguientes

Ahora ha creado la conexión a Terraform y ha aprendido a desplegar, actualizar y destruir recursos con un ejemplo sencillo. Para continuar su recorrido por Terraform en OCI y configurarse para la certificación de OCI Architect Professional, consulte Acelere la certificación de Oracle Cloud Infrastructure Architect Professional con Terraform.

Damos la bienvenida a las contribuciones de los lectores para mejorar y ampliar este tutorial. Sus contribuciones tienen gran valor por mejorar este recurso para futuros alumnos de Terraform.

Agradecimientos

Más recursos de aprendizaje

Explore otros laboratorios en docs.oracle.com/learn o acceda a más contenido de formación gratuita en el canal YouTube de Oracle Learning. Además, visita education.oracle.com/learning-explorer para convertirte en un Oracle Learning Explorer.

Para obtener documentación sobre el producto, visite Oracle Help Center.