Configurare l'ambiente di esecuzione Terraform

L'ambiente di esecuzione di Terraform include il layout delle cartelle e dei file di configurazione di Terraform necessari per creare la topologia di rete multilivello.

Informazioni sull'ambiente di esecuzione Terraform

Il layout dell'ambiente di esecuzione Terraform è progettato per la modularità e la crescita futura.

Le directory e i file che contengono la configurazione Terraform costituiscono l'ambiente di esecuzione. Ciascuna sottodirectory rappresenta un modulo Terraform. Insieme, le sottodirectory compongono una libreria riutilizzabile di risorse.

La seguente struttura di directory rappresenta l'ambiente di esecuzione creato in questa soluzione.

Segue una descrizione dell'immagine local_directory_structure.png
Descrizione dell'immagine local_directory_structure.png

L'intera configurazione si trova in una directory radice con il nome scelto. Questa directory deve essere vuota quando si inizia.

Dopo aver creato la configurazione, la directory radice contiene le directory e i file riportati di seguito.

  • La directory compartments contiene i parametri di configurazione per i compartimenti.
  • La directory iam contiene i parametri di configurazione per i criteri e i gruppi.
  • La directory vcn contiene i parametri di configurazione per la rete cloud virtuale e i gateway.
  • I seguenti file si trovano nella directory radice:
    • datasources.tf determina il numero di domini di disponibilità nell'area e i relativi nomi.
    • provider.tf definisce i parametri dei provider Terraform da utilizzare.
    • root.tf definisce i moduli che Terraform deve eseguire.
    • terraform.tvars definisce i valori delle variabili passate a Terraform.
    • variables.tf dichiara le variabili utilizzate dai moduli nella configurazione.

Crea il modulo radice

Nel modulo radice, definire i parametri necessari a Terraform per connettersi a Oracle Cloud Infrastructure. È inoltre possibile definire i dati e le variabili utilizzati dai moduli nella configurazione.

  1. Nel computer in cui è stata installata Terraform, creare una directory, indicata come directory radice nel resto della soluzione.
  2. Creare le seguenti sottodirectory nella directory radice:
    • compartments
    • iam
    • vcn
  3. Creare un file di testo denominato variables.tf nella directory radice e incollare il seguente codice nel file.
    Questo codice dichiara le variabili utilizzate dai moduli nell'uso della configurazione Terraform. Nel passo successivo, specificare i valori delle variabili.
    variable "tenancy_ocid" {}
    variable "user_ocid" {}
    variable "fingerprint" {}
    variable "private_key_path" {}
    variable "private_key_password" {}
    variable "app_tag" {}
    variable "environment" {}
    variable "home_region" {}
    variable "region" {}
    variable "vcn_cidr" {
      default = "10.0.0.0/16"
    }
    
  4. Creare un file di testo denominato terraform.tfvars nella directory radice e incollare il seguente codice nel file.
    In questo codice si definiscono i valori delle variabili dichiarate nel passo precedente.
    # Parameters to authenticate with Oracle Cloud Infrastructure
    tenancy_ocid="EXAMPLE: ocid1.tenancy.oc1..aaaaaaaaf76usem7gyfrakr35anvky4tyowvdvbik7kbrcizlyjsgfxpdg2a"
    user_ocid="EXAMPLE: ocid1.user.oc1..aaaaaaaa5tds42w2zzbsdflkjwerkjghswdjfbvbts7imlb5yru2p10a"
    fingerprint="EXAMPLE: 9b:6a:ab:ab:32:0b:7f:d5:5b:6w:c0:fe:54:72:f1:pl"
    private_key_path="YOUR_HOME_DIRECTORY/.oci/oci_api_key.pem"
    
    # Leave empty if your private key does not have a password
    private_key_password=""
    
    # See https://docs.oracle.com/pls/topic/lookup?ctx=cloud&id=oci_general_regions
    home_region="EXAMPLE: us-ashburn-1"
    region="EXAMPLE: us-phoenix-1"
    
    # A short identifier for the application, used as a prefix for naming the compartments and other resources
    app_tag="myapp"
    
    # The environment that you're creating resources for: test, dev, prod, or staging
    environment="dev"
    
    # Base CIDR for the VCN
    vcn_cidr="10.0.0.0/16"
  5. Aggiornare i valori delle variabili in terraform.tfvars come descritto nella tabella riportata di seguito.
    Variabile Descrizione
    tenancy_ocid ID Oracle Cloud (OCID) della tenancy.

    Per trovare l'OCID della tua tenancy, selezionare Amministrazione dal menu Servizi, quindi fare clic su Dettagli tenancy.

    user_ocid ID Oracle Cloud (OCID) dell'utente che si desidera venga utilizzato da Terraform per l'autenticazione con Oracle Cloud Infrastructure.

    Per trovare l'OCID dell'utente, selezionare Identità dal menu Servizi, quindi selezionare Utenti. Trovare il nome utente nella lista e copiare il valore OCID.

    impronta digitale L'impronta per la chiave di firma API caricata.
    private_key_path Il percorso del file che contiene la chiave privata.
    private_key_password La passphrase per la chiave privata. Se la chiave non dispone di una passphrase, lasciare vuota questa variabile.
    home_region Area home della tenancy. I compartimenti, i criteri e i gruppi vengono creati nell'area home.

    Per ottenere l'area home, selezionare Amministrazione dal menu dei servizi, fare clic su Dettagli tenancy e copiare il valore nel campo Area home.

    area L'area in cui si desidera creare la rete, il calcolo e altre risorse. Quest' area può essere l'area home o qualsiasi altra area di Oracle Cloud Infrastructure.
    app_tag Un prefisso da utilizzare nei nomi delle risorse per indicare l'applicazione a cui si riferisce ogni risorsa. Si consiglia di utilizzare tutti caratteri minuscoli.
    ambiente Prefisso da utilizzare nei nomi delle risorse per indicare l'ambiente al quale si riferisce ogni risorsa: sviluppo, test, staging o produzione. Si consiglia di utilizzare tutti caratteri minuscoli.
    vcn_cidr Intervallo di indirizzi della VCN in formato CIDR. Pianificare con attenzione questo intervallo. Non è possibile modificarlo in seguito.
  6. Creare un file di testo denominato datasources.tf nella directory radice e incollare il seguente codice nel file.
    Il codice in datasources.tf determina il numero di domini di disponibilità nell'area e i relativi nomi. Questo codice utilizza l'area specificata nella variabile region.
    data "oci_identity_availability_domains" "ad" {
      compartment_id = "${var.tenancy_ocid}"
    }
    
    data "template_file" "ad_names" {
      count    = "${length(data.oci_identity_availability_domains.ad.availability_domains)}"
      template = "${lookup(data.oci_identity_availability_domains.ad.availability_domains[count.index], "name")}"
    }
  7. Creare un file di testo denominato provider.tf nella directory radice e incollare il seguente codice nel file.
    Il codice in provider.tf definisce i parametri per il provider che Terraform dovrebbe usare. Un provider converte i comandi Terraform in chiamate API specifiche a un provider di servizi cloud.
    provider "oci" {
      alias                = "home"
      region               = "${var.home_region}"
      tenancy_ocid         = "${var.tenancy_ocid}"
      user_ocid            = "${var.user_ocid}"
      fingerprint          = "${var.fingerprint}"
      private_key_path     = "${var.private_key_path}"
      private_key_password = "${var.private_key_password}"
    }
    
    provider "oci" {
      region               = "${var.region}"
      tenancy_ocid         = "${var.tenancy_ocid}"
      user_ocid            = "${var.user_ocid}"
      fingerprint          = "${var.fingerprint}"
      private_key_path     = "${var.private_key_path}"
      private_key_password = "${var.private_key_password}"
    }
    In questo esempio vengono definiti due provider. Entrambi i provider sono per Oracle Cloud Infrastructure. Il primo provider si riferisce all'area home in cui si creano le risorse Oracle Cloud Infrastructure Identity and Access Management. Il secondo provider è per l'area in cui si desidera creare la rete, il calcolo e altre risorse.
  8. Creare un file di testo denominato root.tf nella directory radice e incollare il seguente codice nel file.
    Questo codice specifica i moduli che Terraform deve eseguire. Il provider viene specificato in modo esplicito per i moduli compartments e iam in quanto i compartimenti, i gruppi e i criteri devono essere creati nell'area home.
    module "compartments" {
      source       = "./compartments"
      tenancy_ocid = "${var.tenancy_ocid}"
      app_tag      = "${var.app_tag}"
      environment  = "${var.environment}"
    
      providers = {
        oci = "oci.home"
      }
    }
    
    module "a_vcn" {
      source           = "./vcn"
      tenancy_ocid     = "${var.tenancy_ocid}"
      compartment_ocid = "${module.compartments.networks_id}"
      app_tag          = "${var.app_tag}"
      environment      = "${var.environment}"
      vcn_cidr         = "${var.vcn_cidr}"
    }
    
    module "iam" {
      source       = "./iam"
      tenancy_ocid = "${var.tenancy_ocid}"
      app_tag      = "${var.app_tag}"
      environment  = "${var.environment}"
    
      providers = {
        oci = "oci.home"
      }
    }
    Le variabili app_tag e environment applicano uno schema di denominazione. L'uso di uno schema di denominazione non è obbligatorio, ma è una procedura consigliata.