Nota

Introduzione a Terraform in Oracle Cloud Infrastructure

Introduzione

Terraform è uno strumento Infrastructure as Code (IaC) sviluppato da Hashicorp che ti consente di definire, eseguire il provisioning e gestire la tua infrastruttura tra più provider cloud utilizzando la sintassi del linguaggio Terraform, HCL. Terraform ti consente di automatizzare l'intero ciclo di vita della tua infrastruttura cloud, semplificando la creazione, l'aggiornamento e la scalabilità delle risorse in modo coerente e riproducibile. Terraform è ampiamente utilizzato dai team DevOps per gestire le risorse cloud, migliorare l'efficienza dell'infrastruttura, ridurre gli errori manuali e le risorse cloud per il controllo delle versioni.

Questa esercitazione consente di iniziare a utilizzare IaC per la distribuzione e la gestione dell'infrastruttura cloud.

Workflow dell'architettura Terraform

Workflow dell'architettura Terraform

Obiettivi

Prerequisiti

Task 1: Dichiara il provider

Un provider Terraform si riferisce a un plugin che è responsabile della comprensione e dell'interazione con un tipo specifico di infrastruttura o servizio. I provider sono il ponte tra Terraform e le API dei servizi o delle piattaforme che si desidera gestire. I provider consentono a Terraform di comunicare e interagire con le piattaforme cloud in modo efficace. In altre parole, il provider Terraform è come un traduttore che aiuta Terraform a parlare con diversi servizi o sistemi cloud, consentendogli di creare, gestire ed eliminare risorse come virtual machine, database e reti.

Ogni provider in genere corrisponde a una piattaforma cloud specifica (ad esempio, OCI, AWS, Azure, GCP) o a un servizio di infrastruttura (ad esempio, Kubernetes, Docker).

  1. Creare una cartella denominata terraform-beginners-demo e aprirla in VS Code.

  2. Installare l'estensione HashiCorp Terraform in VS Code.

  3. Creare i file provider.tf e variables.tf nella cartella terraform-beginners-demo.

  4. Copiare il codice seguente nel file 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: il codice è stato utilizzato dalla pagina ufficiale del registro Terraform. Per ulteriori informazioni, consulta Oracle Cloud Infrastructure Provider e Ultima versione (5.30.0).

Task 2: Crea configurazione OCI

Per configurare il provider, sono necessari OCI User Oracle Cloud Identifier (OCID), OCID tenancy e OCID compartimento.

  1. Eseguire il login alla console OCI.

  2. Fare clic sull'icona del profilo utente e selezionare Profilo personale.

  3. Per ottenere la coppia di chiavi API, effettuare le operazioni riportate di seguito.

    1. In Risorse, selezionare Chiavi API e fare clic su Aggiungi chiave API.

    2. È possibile generare una nuova coppia di chiavi API oppure utilizzare la chiave pubblica esistente per generare una coppia di chiavi API. Selezionare Generate API key pair. Accertarsi di scaricare la chiave privata e la chiave pubblica.

    3. Fare clic su Aggiungi. Verrà visualizzata una casella di anteprima del file di configurazione.

      Creazione coppia di chiavi API

    4. Copiare i dettagli forniti nell'anteprima del file di configurazione e salvarlo da qualche parte. Verrà utilizzato nel file variables.tf.

      Deve essere:

      [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. Fare clic su Chiudi.

    OR

    Per ottenere la coppia di chiavi API, vedere Generate an API key configuration in OCI Console.

Task 3: configurare l'ambiente Terraform con le credenziali OCI

  1. Andare all'editor di VS Code e creare un nuovo file denominato variables.tf nella cartella terraform-beginners-demo e incollare il codice seguente.

    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. Creare un altro nuovo file denominato terraform.tfvars e incollare il codice seguente. Definire ogni variabile da variables.tf utilizzando i valori del file di configurazione del task 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: nell'ambiente di produzione si consiglia di utilizzare il file terraform.tfvars per definire le variabili terraform per promuovere sicurezza e scalabilità. Per ulteriori informazioni, vedere File delle definizioni variabili (.tfvars).

Task 4: eseguire il test della connettività Terraform con la tenancy OCI

  1. Creare un nuovo file denominato data_source.tf nella cartella terraform-beginners-demo e copiare il codice seguente.

    data "oci_identity_availability_domains" "ad" {
        #Required
        compartment_id = var.tenancy_id
    }
    
  2. Creare un nuovo file denominato output.tf nella cartella terraform-beginners-demo e copiare il codice seguente.

    output "list_ads" {
      value = data.oci_identity_availability_domains.ad.availability_domains
    }
    
  3. Aprire un nuovo terminale in VS Code ed eseguire i comandi riportati di seguito per eseguire lo script 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
    

    Workflow di esecuzione Terraform

    Ora dovresti essere in grado di visualizzare la lista dei domini di disponibilità e il compartimento ad essi associato negli output.

    Domini di disponibilità OCI

    Ora la configurazione del sistema è riuscita per distribuire le risorse nella tenancy OCI all'interno di Terraform. Le variabili sono state passate, ma non sono state apportate modifiche alla tenancy. Esamineremo alcuni esempi per aiutarti a comprendere meglio il processo di aggiunta, concatenamento e distruzione delle risorse utilizzando Terraform.

Task 5: (Esempio) distribuire un'istanza di OCI Compute utilizzando Terraform

Ora ci baseremo su ciò che hai creato nei task precedenti per distribuire le risorse di rete e di calcolo.

  1. Creare un file denominato networking.tf e copiare il codice seguente.

    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: per ulteriori informazioni sulla variabile core-vcn con configurazioni aggiuntive, vedere oci_core_vcn.

  2. Modificare il file variables.tf e aggiungere le seguenti variabili.

    #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. Aggiungere le nuove variabili in terraform.tfvars e definire ogni variabile in base alla configurazione della tenancy.

    # 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: se si dispone già di una VCN esistente, impostare create_new_vcn su false e modificare le variabili vcn_id, private_subnet_id e public_subnet_id.

  4. Creare subnet per la nuova VCN.

    1. Nel file networking.tf, aggiungere il codice seguente per creare le subnet pubbliche e private.

      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: per ulteriori informazioni sulla variabile della subnet di base con configurazioni aggiuntive, vedere oci_core_subnet.

    2. Aggiungere le nuove variabili della sottorete nel file variables.tf copiando il codice seguente.

        #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. Dichiarare le nuove variabili della sottorete nel file 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. Aggiungere il codice seguente nel file networking.tf per creare un gateway 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. Aggiungere il codice seguente in networking.tf per la tabella di instradamento per gestire il traffico verso 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. Creare il gruppo di sicurezza di rete (NSG) associato alla VCN. Copiare il codice seguente nel file 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. Ora creeremo 2 nuovi file, compute_linux.tf e compute_windows.tf, per la distribuzione di una VM Linux e di una VM Windows.

  9. In compute_linux.tf, copiare il codice seguente per creare un'istanza di computazione 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. In compute_windows.tf, copiare il codice seguente.

    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. Aggiornare variables.tf con le nuove variabili per compute_linux e 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. Aggiungere e definire le nuove variabili in 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: gli OCID immagine sono specifici di ogni area. All'interno del codice precedente sono presenti OCID di immagini per le aree più diffuse e gli OCID di immagine per tutte le altre aree sono disponibili qui: Tutte le famiglie di immagini.

  13. In output.tf, copiare il codice seguente. Verranno stampate le risorse create nel terminale.

    # 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. Aprire il nuovo terminale per terraform-example ed eseguire i comandi riportati di seguito.

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

    Dovresti visualizzare l'output riportato di seguito e creare una VCN, una subnet privata e una subnet pubblica, una tabella di instradamento, un gateway Internet, un nsg, una VM Linux e una VM Windows.

    Esecuzione terminale di esempio Terraform

  15. Le risorse sono state ora distribuite utilizzando Terraform. Dopo aver verificato la creazione della risorsa nella tenancy OCI, utilizzare il comando seguente per eliminare tutte le risorse.

    Command: terraform destroy
    

Passi successivi

Ora hai creato la connessione a Terraform e hai imparato a distribuire, aggiornare ed eliminare le risorse con un semplice esempio. Per continuare il tuo percorso Terraform in OCI e prepararti per la certificazione OCI Architect Professional, consulta la sezione relativa all'accelerazione della certificazione Oracle Cloud Infrastructure Architect Professional con Terraform.

Accogliamo con favore i contributi dei lettori per migliorare ed espandere questo tutorial. I tuoi contributi sono molto preziosi per il miglioramento di questa risorsa per i futuri studenti Terraform.

Conferme

Altre risorse di apprendimento

Esplora altri laboratori su docs.oracle.com/learn o accedi a più contenuti gratuiti sulla formazione su Oracle Learning YouTube channel. Inoltre, visita education.oracle.com/learning-explorer per diventare un Oracle Learning Explorer.

Per la documentazione del prodotto, visita l'Oracle Help Center.