Imposta Terraform OCI

Impostare gli script del provider Terraform di Oracle Cloud Infrastructure, documentati nel registro Terraform, per connettersi a un account OCI. Confermare l'impostazione recuperando le informazioni dalla tenancy.

I task chiave includono come:

  • Creare chiavi RSA.
  • Impostare gli script del provider Terraform di Oracle Cloud Infrastructure:
    • Autenticare gli script Terraform.
    • Ottieni informazioni sui domini di disponibilità nella tua tenancy.
Diagramma di un utente connesso da un ambiente locale a una tenancy di Oracle Cloud Infrastructure. L'ambiente locale è Linux e Terraform è installato. Nell'ambiente locale connesso al registro Terraform nel cloud è presente una freccia di Terraform. Esiste una seconda freccia dall'ambiente locale che invia un messaggio alla tenancy Oracle Cloud Infrastructure dell'utente con l'etichetta Authenticate?. La terza freccia si trova dalla tenancy all'ambiente locale denominato Recupera dati. Queste frecce suggeriscono che l'utente abbia impostato gli script Terraform da autenticare dalla propria tenancy. L'utente può quindi recuperare le informazioni dalla tenancy utilizzando Terraform e il registro Terraform. In questo esempio, la tenancy visualizza tre domini di disponibilità, ovvero le informazioni che l'utente sta recuperando.

Per ulteriori informazioni, fare riferimento agli argomenti sotto riportati.

Informazioni preliminari

Per eseguire correttamente questa esercitazione, è necessario disporre dei seguenti elementi:

MacOS o Linux
Nota

Questa esercitazione utilizza un ambiente VM Oracle Linux con una forma AMD per i relativi esempi, ma è possibile utilizzare qualsiasi ambiente menzionato in questa sezione.

1. Prepara

Preparare l'ambiente per l'autenticazione e l'esecuzione di script Terraform. Raccogliere inoltre le informazioni necessarie all'account per autenticare gli script.

Installa Terraform
Questa esercitazione suggerisce di installare la versione più recente di Terraform supportata per OCI Resource Manager. Resource Manager è un servizio per la creazione di modelli Terraform per le risorse OCI. Se si desidera utilizzare Resource Manager con gli script Terraform in un secondo momento, la versione Terraform è supportata.
  1. Nell'ambiente in uso, controllare la versione di Terraform.
    terraform -v
    Se non si dispone della versione Terraform supportata più recente, installare la versione supportata più recente utilizzando i passi riportati di seguito.
  2. Da un browser, andare a HashiCorp Lista di versioni Terraform.
  3. Selezionare la cartella con la versione Terraform supportata più recente.

    Esempio: terraform_1.5.7

  4. Copiare il nome del file zip che corrisponde all'ambiente in uso in un blocco note.

    terraform_<version>_<your_environment>.zip

    Esempio per un ambiente AMD Linux Oracle a 64 bit: terraform_1.5.7_linux_amd64.zip

  5. Nell'ambiente in uso, creare una directory temporanea e passare a tale directory:
    mkdir temp
    cd temp
  6. Scaricare il file zip Terraform:
    wget https://releases.hashicorp.com/terraform/<version>/terraform_<version>_<your_environment>.zip
    Suggerimento

    È possibile creare l'URL copiando l'indirizzo dal browser. Si noti che <version> non include la parola terraform.

    Ad esempio:

    wget https://releases.hashicorp.com/terraform/1.5.7/terraform_1.5.7_linux_amd64.zip

    Se vedi un errore di connessione e sei su VPN, controlla le impostazioni proxy. Vedere risoluzione dei problemi.

  7. Estrai il file. Ad esempio
    unzip terraform_1.5.7_linux_amd64.zip
  8. Spostare la cartella decompressa in una cartella contenente i file binari delle applicazioni di terze parti installate. Ad esempio, per Oracle Linux, spostare la cartella non compresso in /usr/local/bin:
    sudo mv terraform /usr/local/bin
  9. Tornare alla directory home:
    cd
  10. Controllare la versione di Terraform:
    terraform -v

    Esempio: Terraform v1.5.7 on linux_amd64

    Ignorare qualsiasi messaggio che indichi che la versione di Terraform è obsoleta. L'importante è usare la versione Terraform supportata più recente.

Installazione di Terraform riuscita.
Crea chiavi RSA
Puoi creare chiavi RSA per l'accesso API al tuo account Oracle Cloud Infrastructure.
Nota

Saltare la creazione di chiavi RSA se:
  • Si sta utilizzando Cloud Shell o Resource Manager. L'autenticazione è già stata eseguita quando si accede alla console di Oracle Cloud.
  • Le chiavi RSA sono già state create per l'esercitazione Imposta ricerca automatica risorse.
  1. Aprire una finestra di terminale.
  2. Nella directory home, creare una directory .oci.
    mkdir <your-home-directory>/.oci

    Esempio per Oracle Linux:

    mkdir /home/opc/.oci
    Nota

    Se si utilizza Windows Subsystem for Linux (WSL), creare la directory /.oci direttamente nell'ambiente Linux. Se si crea la directory /.oci in una cartella /mnt (file system Windows), è necessario utilizzare il comando chmod per modificare le autorizzazioni per i file di configurazione WSL.
  3. Generare una chiave privata a 2048 bit in formato PEM:
    openssl genrsa -out <your-home-directory>/.oci/<your-rsa-key-name>.pem 2048
  4. Modificare le autorizzazioni, in modo che solo l'utente possa leggere e scrivere nel file di chiavi private:
    chmod 600 <your-home-directory>/.oci/<your-rsa-key-name>.pem
  5. Generare la chiave pubblica:
    openssl rsa -pubout -in <your-home-directory>/.oci/<your-rsa-key-name>.pem -out $HOME/.oci/<your-rsa-key-name>_public.pem
  6. Copiare la chiave pubblica.
    Nel terminale, immettere:
    cat <your-home-directory>/.oci/<your-rsa-key-name>_public.pem

    Esempio (estratto):

    -----BEGIN PUBLIC KEY-----
    MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAoTFqF...
    ...
    -----END PUBLIC KEY——
  7. Aggiungere la chiave pubblica all'account utente.
    1. Accedi alla console di Oracle Cloud.
    2. Nel menu di navigazione selezionare il menu Profilo Icona menu Profilo e quindi selezionare Impostazioni utente o Profilo personale, a seconda dell'opzione visualizzata.
    3. Selezionare Chiavi API.
    4. Selezionare Aggiungi chiave API.
    5. Selezionare Incollare una chiave pubblica.
    6. Incollare il valore del passo precedente, incluse le righe con BEGIN PUBLIC KEY e END PUBLIC KEY.
    7. Selezionare Aggiungi.

      Viene visualizzata la finestra di dialogo Anteprima file di configurazione. Ad esempio:

      [DEFAULT]
      user=ocid1.user.oc1..exampleid
      fingerprint=exampleid
      tenancy=ocid1.tenancy.oc1..exampleid
      region=us-ashburn-1
      key_file=<path to your private keyfile> # TODO
    8. Selezionare Copia, quindi incollarlo nel blocco note.

      L'anteprima del file di configurazione include informazioni necessarie in seguito, ad esempio tenancy e OCID utente, impronta digitale e area.

Ora è possibile impostare le chiavi RSA per connettersi all'account OCI.

Di riferimento
Come generare una chiave di firma API
Aggiungi criterio elenco

Se il nome utente si trova nel gruppo Administrators, saltare questa sezione. In caso contrario, chiedere all'amministratore di aggiungere il criterio seguente alla tenancy:

allow group <a-group-that-your-username-belongs-to> to read all-resources in tenancy

Questo privilegio consente di elencare tutte le risorse della tenancy.

Passi per aggiungere il criterio
  1. Accedi alla console di Oracle Cloud.
  2. Nel menu di navigazione selezionare il menu Profilo Icona menu Profilo e quindi selezionare Impostazioni utente o Profilo personale, a seconda dell'opzione visualizzata.
  3. Selezionare Gruppi o Gruppi personali, a seconda dell'opzione visualizzata.
  4. In un blocco note, copia il nome di un gruppo a cui appartiene il tuo nome utente.
  5. Aprire il menu di navigazione e selezionare Identità e sicurezza. In Identità, selezionare Criteri.
  6. Selezionare il compartimento: <your-tenancy>(root)
  7. Selezionare Crea criterio.
  8. Nella pagina Crea criterio, immettere i valori riportati di seguito.
    • Nome: list-resources
    • Descrizione: Allow the group <a-group-that-your-username-belongs-to> to list the resources in this tenancy.
    • Compartimento: <your-tenancy>(root)
  9. Per Costruzione guidata criteri, selezionare Mostra editor manuale.
  10. Incolla nel seguente criterio:
    allow group <a-group-that-your-username-belongs-to> to read all-resources in tenancy
  11. Selezionare Crea.

Riferimento: criteri comuni

Raccogliere le informazioni necessarie

Preparare le informazioni necessarie per autenticare gli script Terraform e copiare le informazioni in un blocco note.

  1. Raccogliere il percorso della chiave privata aggiunta in Crea chiavi RSA.

    Esempio per Oracle Linux: /home/opc/.oci/<your-rsa-key-name>.pem

  2. Raccogliere l'OCID utente, l'impronta digitale, l'OCID tenancy e l'area dalla chiave API aggiunta all'indirizzo Crea chiavi RSA. Potrebbe già essere presente nel blocco note.
    1. Accedi alla console di Oracle Cloud.
    2. Nel menu di navigazione selezionare il menu Profilo Icona menu Profilo e quindi selezionare Impostazioni utente o Profilo personale, a seconda dell'opzione visualizzata.
    3. Selezionare Chiavi API.
    4. Trovare la chiave API aggiunta in Crea chiavi RSA.
    5. Nel menu Azioni del tasto, selezionare Visualizza file di configurazione.

      Viene visualizzata la finestra di dialogo Anteprima file di configurazione. Ad esempio:

      [DEFAULT]
      user=ocid1.user.oc1..exampleid
      fingerprint=xx:xx:xx...xx
      tenancy=ocid1.tenancy.oc1..exampleid
      region=us-ashburn-1
      key_file=<path to your private keyfile> # TODO
    6. Selezionare Copia, quindi incollarlo nel blocco note.

2. Crea script

Crea script per l'autenticazione, per recuperare i dati dal tuo account e per stampare gli output.

Aggiungi autenticazione basata su chiave API
In primo luogo, impostare una directory per gli script Terraform. Quindi aggiungere uno script del provider in modo che l'account OCI possa autenticare gli script in esecuzione da questa directory. Infine, aggiungere uno script di versioni contenente un blocco required_providers per dichiarare le versioni del provider richieste.
  1. In <your-home-directory>, creare una directory denominata tf-provider e passare a tale directory.
    mkdir tf-provider
    cd tf-provider
  2. Creare un file denominato provider.tf.
  3. Aggiungere il codice seguente a provider.tf:
    provider "oci" {
      tenancy_ocid = "<tenancy-ocid>"
      user_ocid = "<user-ocid>" 
      private_key_path = "<rsa-private-key-path>"
      fingerprint = "<fingerprint>"
      region = "<region-identifier>"
    }
  4. Salvare il file provider.tf.
  5. Nella stessa directory, creare un file denominato versions.tf.
  6. Aggiungere il codice seguente a versions.tf:
    terraform {
      required_providers {
        oci = {
          source  = "oracle/oci"
          version = ">=4.67.3"
        }
      }
      required_version = ">= 1.0.0"
    }
  7. Salvare il file versions.tf.
Spiegazione

Utilizzare le variabili riportate di seguito per l'autenticazione basata su chiave API.

  • tenancy_ocid
  • user_ocid
  • private_key_path
  • fingerprint
  • region
Per i dettagli sul provider Terraform OCI, vedere
Suggerimento

Non è necessario installare il provider. Il provider viene scaricato quando si eseguono gli script in questa esercitazione.
Aggiungi un'origine dati
In questa sezione è possibile recuperare una lista dei domini di disponibilità nella tenancy. Recuperando i dati, si conferma che l'account OCI esegue l'autenticazione dello script provider.tf e si ottengono informazioni dall'account.
  1. Nella directory tf-provider, creare un file denominato availability-domains.tf.
    Importante

    Verificare che tutti i file *.tf si trovino nella stessa directory. Terraform elabora tutti i file in una directory nell'ordine corretto, in base alla loro relazione. (Per un approccio modulare e un futuro riutilizzo, inserire le informazioni del provider in un file separato da altri script.)
  2. Aggiungere il codice seguente a availability-domains.tf, sostituendo il campo con parentesi, con le informazioni contenute in Raccogli informazioni richieste.
    # Source from https://registry.terraform.io/providers/oracle/oci/latest/docs/data-sources/identity_availability_domains
    
    # Tenancy is the root or parent to all compartments.
    # For this tutorial, use the value of <tenancy-ocid> for the compartment OCID.
    
    data "oci_identity_availability_domains" "ads" {
      compartment_id = "<tenancy-ocid>"
    }
    Nota

    L'origine dati ottiene una lista di domini di disponibilità nell'intera tenancy. La tenancy è l'OCID del compartimento per il compartimento radice. Se si specifica un valore "<compartment-ocid>" o "<tenancy-ocid>", viene generato lo stesso elenco.
Spiegazione

In Terraform, per recuperare i dati, si utilizza un'origine dati. Il recupero dei dati da un'origine dati è simile al metodo GET nelle API REST.

  • Vai a Oracle Cloud Infrastructure Provider.
  • Nella casella Filtro in alto a sinistra, immettere availability domains.
  • In Identità, andare a Origini dati e selezionare oci_identity_availability_domains.

    Il titolo della pagina è il tipo di risorsa: oci_identity_availability_domains

  • Trovare il nome dell'origine dati dal titolo della pagina:
    • Origine dati:
  • Nella sezione Riferimento argomento, trovare tutti gli argomenti (input) etichettati come (Obbligatorio):
    • compartment_id
  • Costruisce un blocco di origine dati:
    • Dichiarare un'origine dati con la parola chiave: data.
    • Aggiungere un'etichetta per il nome dell'origine dati: "oci_identity_availability_domains"
    • Aggiungere un'etichetta a scelta per il nome locale:
      • L'etichetta può contenere lettere, cifre, caratteri di sottolineatura (_) e trattini (-). Il primo carattere non deve essere una cifra.
      • Questa esercitazione utilizza il nome locale "ads" per creare data "oci_identity_availability_domains" "ads".
    • All'interno del blocco di codice, fornire i valori per tutti gli argomenti richiesti.
      • Esempio: compartment_id = "<some-compartment-ocid>"
    • Per gli argomenti facoltativi, fornire i valori per limitare i risultati del recupero. Solo alcune origini dati dispongono di argomenti facoltativi.
Aggiungere output

L'origine dati oci_identity_availability_domains recupera una lista di domini di disponibilità. In questa sezione si dichiara un blocco di output per stampare le informazioni recuperate.

  1. Nella directory tf-provider, creare un file denominato outputs.tf.
  2. Aggiungere il codice seguente a outputs.tf.
    # Output the "list" of all availability domains.
    output "all-availability-domains-in-your-tenancy" {
      value = data.oci_identity_availability_domains.ads.availability_domains
    }
  3. Salvare il file outputs.tf.
    Importante

    Verificare che tutti i file *.tf si trovino nella stessa directory. Terraform elabora tutti i file in una directory nell'ordine corretto, in base alla loro relazione.
Spiegazione
  • Andare a Riferimento attributi (oci_identity_availability_domains).
    Nota

    Gli attributi sono gli output che è possibile restituire per l'origine dati oci_identity_availability_domains.
  • Trovare gli attributi:
    • Attributo: availability_domains:
      • Lista di domini di disponibilità
      • Se si esegue l'output di availability_domains:, si ottengono tre attributi per ogni dominio di disponibilità nella lista:
        • compartment_id
        • ID
        • nome
  • Costruisce un blocco di output dell'origine dati:
    • Dichiarare un blocco di output con la parola chiave: output
    • Aggiungere un'etichetta da stampare con i risultati dell'output:
      • L'etichetta può contenere lettere, cifre, caratteri di sottolineatura (_) e trattini (-). Il primo carattere non deve essere una cifra.
      • Esempio: "all-availability-domains-in-your-tenancy"
    • All'interno del blocco di codice, immettere un valore per l'output dell'origine dati con l'espressione:
      • value = data.<data-source-name>.<local-name-for-data-source>.<attribute>
      • Esempio: value = data.oci_identity_availability_domains.ads.availability_domains

3. Esegui script

Eseguire gli script Terraform. Dopo che l'account ha autenticato gli script, Terraform recupera i domini di disponibilità della tenancy.

Inizializza
Inizializzare una directory di lavoro nella directory tf-provider.
  1. Eseguire il comando init di Terraform.
    terraform init

    Output di esempio:

    Initializing the backend...
    
    Initializing provider plugins...
    
    Terraform has been successfully initialized!

    Se viene visualizzato un errore di connessione o un errore di "interrogazione non riuscita" e si è in VPN, controllare le impostazioni proxy. Vedere risoluzione dei problemi.

  2. Controllare il contenuto della directory tf-provider.
    ls -a

Ora si dispone di una cartella denominata .terraform che include i plugin per il provider oci.

Piano
Crea un piano di esecuzione per verificare se le modifiche mostrate nel piano di esecuzione corrispondono alle tue aspettative, senza modificare le risorse reali.
Eseguire il comando plan di Terraform.
terraform plan

Output di esempio:

data.oci_identity_availability_domains.ads: Reading...
data.oci_identity_availability_domains.ads: Read complete after 1s [id=xxx]

Changes to Outputs:
  + all-availability-domains-in-your-tenancy = [
      + {
          + compartment_id = "ocid1.tenancy.oc1..xxx"
          + id             = "ocid1.availabilitydomain.xxx"
          + name           = "QnsC:US-ASHBURN-AD-1"
        },
      + {
          + compartment_id = "ocid1.tenancy.oc1..xxx"
          + id             = "ocid1.availabilitydomain.yyy"
          + name           = "QnsC:US-ASHBURN-AD-2"
        },
      + {
          + compartment_id = "ocid1.tenancy.oc1..xxx"
          + id             = "ocid1.availabilitydomain.zzz"
          + name           = "QnsC:US-ASHBURN-AD-3"
        },
    ]

You can apply this plan to save these new output values to the Terraform state, without changing any real
infrastructure.
Nota

  • Si stanno recuperando i dati, quindi il piano mostra che si stanno aggiungendo solo output. Non stai aggiungendo, modificando o distruggendo alcuna risorsa.
  • Il file output.tf viene utilizzato al posto dell'opzione -out, pertanto è possibile ignorare il messaggio seguente:
    Note: You didn't use the -out option to save this plan, so Terraform can't guarantee to take exactly these actions if you run "terraform
    apply" now.
Applicazione
  1. Eseguire gli script Terraform e ottenere gli output:
    terraform apply
  2. Quando viene richiesto di confermare, immettere yes.

    Dopo aver eseguito il comando apply, l'output viene visualizzato nel terminale.

    Output di esempio:
    Apply complete! Resources: 0 added, 0 changed, 0 destroyed.
    
    Outputs:
    
    all-availability-domains-in-your-tenancy = tolist([
      {
        "compartment_id" = "ocid1.tenancy.xxx"
        "id" = "ocid1.availabilitydomain.xxx"
        "name" = "QnsC:US-ASHBURN-AD-1"
      },
      {
        "compartment_id" = "ocid1.tenancy.xxx"
        "id" = "ocid1.availabilitydomain.xxx"
        "name" = "QnsC:US-ASHBURN-AD-2"
      },
      {
        "compartment_id" = "ocid1.tenancy.xxx"
        "id" = "ocid1.availabilitydomain.xxx"
        "name" = "QnsC:US-ASHBURN-AD-3"
      },
    ])

Complimenti. Il tuo account Oracle Cloud Infrastructure ora può autenticare gli script del provider Terraform di Oracle Cloud Infrastructure.

Riferimenti:

Risoluzione dei problemi

Durante l'esecuzione degli script Terraform potrebbero verificarsi i seguenti messaggi di errore.

401 Errori - (Errore del servizio:NotAuthenticated)

Una delle seguenti variabili ha un valore errato:

  • OCID tenancy
  • OCID utente
  • Impronta
  • Chiave privata RSA (il percorso o la chiave)
  1. Nel file provider.tf, controllare due volte i nomi delle variabili e i relativi valori.
    provider "oci" {
      tenancy_ocid = "<tenancy-ocid>"
      user_ocid = "<user-ocid>" 
      private_key_path = "<rsa-private-key-path>"
      fingerprint = "<fingerprint>"
      region = "<region-identifier>"
    }
  2. Aggiornare le variabili o i relativi valori in base alle esigenze.
  3. Assicurarsi di aver aggiunto virgolette intorno ai valori stringa.
  4. Eseguire gli script.

Impossibile creare il client, configurazione errata: configurazione non corretta per la chiave privata

Gli script Terraform non sono in grado di trovare la chiave privata RSA.

  1. Ripetere la procedura per creare le chiavi RSA e utilizzare la chiave aggiornata.
  2. Assicurarsi che nel file provider.tf la variabile che descrive l'RSA sia denominata private_key_path.
    private_key_path = "<rsa-private-key-path>"
  3. Assicurarsi che il percorso della chiave privata RSA nel file provider.tf sia corretto. Ad esempio, assicurarsi che il percorso inizi con una barra e abbia il nome corretto per la chiave privata, <your-rsa-key-name>.pem
  4. Rimuovere le variabili di ambiente dal file <rsa-private-key-path>.

    Ad esempio, nel file provider.tf, anziché $HOME/.oci/<rsa-private-key-path>, utilizzare /home/opc/<rsa-private-key-path>.

    Nota

    Se si utilizza Windows Subsystem for Linux (WSL), creare la directory /.oci direttamente nell'ambiente Linux. Se si crea la directory /.oci in una cartella /mnt (file system Windows), è necessario utilizzare il comando chmod per modificare le autorizzazioni per i file di configurazione WSL.

Host non trovato

L'identificativo dell'area contiene un valore errato.

  1. Nella barra di navigazione della console, individuare l'area.
  2. Nella tabella relativa alle aree e ai domini di disponibilità, trova l'indirizzo <region-identifier> della tua area. Esempio: us-ashburn-1.
  3. Nel file provider.tf, aggiornare il valore per <region-identifier> e riprovare.

Query sui package di provider disponibili non riuscita

Se ti trovi su una VPN, controlla le impostazioni proxy.

  1. Disconnetti da VPN.
  2. Connettersi alla VM o all'ambiente in uso senza la VPN ed eseguire i seguenti script Terraform.
    terraform init
    terraform plan
    terraform apply
    Se non viene visualizzato un messaggio di errore, le impostazioni proxy VPN causano l'errore.
  3. Consultare l'amministratore, aggiornare le impostazioni proxy e riprovare.