Imposta ricerca automatica risorse

Impostare la ricerca automatica delle risorse per generare i file Terraform per le risorse esistenti nel compartimento.

Utilizzare la funzione di ricerca automatica delle risorse OCI per:

  • Creare file di stato per le risorse esistenti nella console, quindi aggiungere tali risorse a un'impostazione Terraform.
  • Duplica l'infrastruttura esistente in una nuova tenancy o area.
  • Rileva la deviazione dello stato per le risorse aggiornate.

In questa esercitazione viene impostata la funzione di ricerca automatica delle risorse del provider Terraform di Oracle Cloud Infrastructure nell'ambiente locale. Per confermare l'impostazione, eseguire la ricerca automatica delle risorse per recuperare le informazioni dalla tenancy e crearne uno script.

I task chiave includono come:

  • Creare chiavi RSA.
  • Installare i file binari del provider OCI Terraform.
  • Impostare le variabili di autenticazione API del provider OCI Terraform.
  • Autenticare i comandi CLI del provider OCI.
  • Creare uno script nell'ambiente, relativo ai domini di disponibilità nella tenancy, mediante la funzione di ricerca automatica delle risorse.
Diagramma di un utente connesso da un ambiente locale a una tenancy di Oracle Cloud Infrastructure. L'ambiente locale è Linux e dispone di file binari del provider OCI Terraform installati. Nell'ambiente locale connesso al registro Terraform nel cloud è presente una freccia. 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 ha impostato le variabili del provider OCI da autenticare dalla propria tenancy. L'utente può quindi recuperare le informazioni dalla tenancy utilizzando i comandi del provider OCI Terraform e il registro Terraform. In questo esempio, la tenancy visualizza tre domini di disponibilità, ovvero le informazioni recuperate da Resource Discovery per creare script Terraform nell'ambiente dell'utente.

Per ulteriori informazioni, vedere Casi d'uso e vantaggi.

Informazioni preliminari

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

MacOS o Linux

1. Prepara

Preparare l'ambiente per l'autenticazione e l'esecuzione dei comandi di ricerca automatica delle risorse. Inoltre, raccogliere le informazioni necessarie per autenticare i comandi.

Crea chiavi RSA

Puoi creare chiavi RSA per l'accesso API al tuo account Oracle Cloud Infrastructure.

Nota

Se si utilizza Cloud Shell o Resource Manager, saltare la creazione delle chiavi RSA. L'autenticazione è già stata eseguita quando si accede a OCI Console.
  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, quindi selezionare Impostazioni utente.
    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, quindi selezionare Impostazioni utente.
  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 i comandi del provider OCI Terraform e copiarli nel blocco note.

Nota

Se si utilizza Cloud Shell, è sufficiente trovare il file <tenancy-ocid> solo nel passo seguente.
  1. Raccogliere le seguenti informazioni sulle credenziali dalla console di Oracle Cloud.
    • OCID tenancy: <tenancy-ocid>
      • Nella barra di navigazione selezionare il menu Profilo Icona menu Profilo, quindi selezionare Tenancy: <your_tenancy_name>.
    • OCID utente: <user-ocid>
      • Nel menu di navigazione selezionare il menu Profilo Icona menu Profilo, quindi selezionare Impostazioni utente.
      • Copia OCID.
    • Impronta: <fingerprint>
      • Nel menu di navigazione selezionare il menu Profilo Icona menu Profilo, quindi selezionare Impostazioni utente.
      • Selezionare Chiavi API.
      • Copiare l'impronta associata alla chiave pubblica RSA creata nella sezione Crea chiavi RSA. Il formato è: xx:xx:xx...xx.
    • Area: <region-identifier>
      • Nella barra di navigazione della console, individuare l'area.
      • Trova il sito <region-identifier> della tua area da Regioni e domini di disponibilità. Esempio: us-ashburn-1.
  2. Raccogliere le informazioni seguenti dall'ambiente in uso.
    • Percorso della chiave privata: <rsa-private-key-path>
      • Percorso della chiave privata RSA eseguita in Creazione di chiavi RSA. Esempio: $HOME/.oci/<your-rsa-key-name>.pem.
Installa provider OCI Terraform
Nota

Se si utilizza Cloud Shell, saltare questa sezione.

Installare la versione più recente dei file binari del provider OCI Terraform v4.2+:

  1. Da un browser, andare a HashiCorp Release.
  2. Selezionare il collegamento più recente.
  3. Trovare il collegamento per l'ambiente, quindi copiare l'indirizzo del collegamento. Esempio per Linux a 64 bit:
    https://releases.hashicorp.com/terraform-provider-oci/4.59.0/terraform-provider-oci_4.59.0_linux_amd64.zip
  4. Nell'ambiente in uso, creare una directory temporanea e passare a tale directory:
    mkdir temp
    cd temp
  5. Scaricare il file zip Terraform. Ad esempio
    wget https://releases.hashicorp.com/terraform-provider-oci/4.59.0/terraform-provider-oci_4.59.0_linux_amd64.zip
  6. Estrai il file. Ad esempio
    unzip terraform-provider-oci_4.59.0_linux_amd64.zip
  7. Spostare la cartella decompressa in /usr/local/bin. Ad esempio
    sudo mv terraform-provider-oci_v4.59.0_x4 /usr/local/bin
    Nota

    Utilizzare sudo per la directory /usr/local/bin se non consente di eseguire i comandi.
  8. Utilizzare un collegamento simbolico per abbreviare il comando terraform-provider-oci_<version>:
    sudo ln -s <source-executable> <shorter-alias>
    cd /usr/local/bin/
    sudo ln -s terraform-provider-oci_<version> tf-oci

    Per questa esercitazione, utilizzare tf-oci per <shorter-alias> anziché <source-executable>.

  9. Tornare alla directory home:
    cd
  10. Controllare la versione del provider OCI Terraform:
    Nota

    In MacOS, è necessario creare un'eccezione di sicurezza per l'eseguibile.
    tf-oci

    Output di esempio: [INFO] terraform-provider-oci 4.59.0.

2. Creare uno script di autenticazione

Creare uno script shell per assegnare le informazioni di autenticazione alle variabili di autenticazione del provider OCI. L'account Oracle Cloud Infrastructure autentica i comandi del provider OCI tramite i valori assegnati a questi parametri.

Aggiungere l'autenticazione
Nota

Se si utilizza Cloud Shell o Resource Manager, non è necessario aggiungere l'autenticazione. Passare alla sezione 3. Ricerca automatica di una risorsa.
  1. Creare un file di script eseguibile, da qualche parte in PATH, e denominarlo provider-oci.sh. Ad esempio, se ~/bin si trova in PATH, i passi sono i seguenti:
    cd ~/bin
    touch provider-oci.sh
    chmod 755 provider-oci.sh
    ls -l

    Si ottiene qualcosa del genere:

    -rwxr-xr-x 1 <your-username> <your-username> 0 <date> provider-oci.sh
  2. Aggiungere il codice seguente a provider-oci.sh.

    Sostituire i campi con parentesi con le informazioni raccolte in Raccolta delle informazioni obbligatorie.

    #!/bin/bash
    export TF_VAR_tenancy_ocid="<tenancy-ocid>"
    export TF_VAR_user_ocid="<user-ocid>"
    export TF_VAR_fingerprint="<fingerprint>"
    export TF_VAR_private_key_path="<rsa-private-key-path>"
    export TF_VAR_region="<region-identifier>"
  3. Salvare il file provider-oci.sh.
Spiegazione
  • Andare a Autenticazione (ricerca automatica delle risorse).
  • Impostare le variabili di ambiente riportate di seguito per l'autenticazione basata su chiave API.
    • TF_VAR_tenancy_ocid
    • TF_VAR_user_ocid
    • TF_VAR_fingerprint
    • TF_VAR_private_key_path
    • TF_VAR_region
Esporta variabili di ambiente

In questa sezione, eseguire il file provider-oci.sh per aggiungere le variabili di autenticazione del provider OCI alle variabili di ambiente.

  1. Dalla directory $HOME/bin, eseguire il file provider-oci.sh.
    source provider-oci.sh
  2. Confermare che le variabili di autenticazione del provider OCI vengano aggiunte alle variabili di ambiente.
    env | sort

    Le variabili sono visualizzate in ordine alfabetico. Ad esempio:

    ...
    TF_VAR_fingerprint=<fingerprint>
    TF_VAR_private_key_path=<rsa-private-key-path>
    TF_VAR_region=<region-identifier>
    TF_VAR_tenancy_ocid=<tenancy-ocid>
    TF_VAR_user_ocid=<user-ocid>
    ...
  3. Per caricare le variabili di ambiente, all'avvio di una nuova shell, aggiungere il comando source ~/bin/provider-oci.sh a .bashrc.
    source ~/bin/provider-oci.sh

3. Trova una risorsa

Individuare i domini di disponibilità nella tenancy.

Esegui ricerca automatica risorse

Ogni tenancy dispone di una lista di domini di disponibilità. Individuando i domini di disponibilità nella tua area, confermi che:

  • Il tuo account Oracle Cloud Infrastructure può autenticare i comandi del provider Oracle Cloud Infrastructure.
  • Puoi ottenere informazioni dal tuo account con la funzione di ricerca automatica delle risorse.
  1. Nella directory $HOME creare una directory denominata resource-discovery.
    cd
    mkdir resource-discovery
  2. Se si utilizza Cloud Shell, trovare il file del provider Terraform OCI installato nella directory /usr/bin.
    ls /usr/bin

    Il nome file è:

    terraform-provider-oci_<version>
                                

    Nome file campione:

    terraform-provider-oci_v5.2.1
  3. Eseguire il comando riportato di seguito:
    • In Cloud Shell:
      terraform-provider-oci_<version> -command=export -compartment_id=<tenancy-ocid> -services=availability_domain -output_path=$HOME/resource-discovery
    • Nell'istanza di computazione o nell'ambiente locale:
      tf-oci -command=export -compartment_id=<tenancy-ocid> -services=availability_domain -output_path=$HOME/resource-discovery
    Importante

    • Sostituire <tenancy-ocid> con le informazioni fornite da Raccolta delle informazioni obbligatorie.
    • Se si utilizza Cloud Shell, sostituire terraform-provider-oci_<version> con il nome file trovato nel passo 2.

    Output di esempio:

    ...
    INFO <date> [INFO] ===> Generating resource 'oci_identity_availability_domain.export_QnsC-US-ASHBURN-AD-1'
    INFO <date> [INFO] ===> Generating resource 'oci_identity_availability_domain.export_QnsC-US-ASHBURN-AD-2'
    INFO <date> [INFO] ===> Generating resource 'oci_identity_availability_domain.export_QnsC-US-ASHBURN-AD-3'
    ...
    INFO <date> Found 6 'availability_domain' resources. Generated under '/<home-directory>/resource-discovery/availability_domain.tf'.
    INFO <date> === COMPLETED ===
    Nota

    • L'OCID tenancy è l'OCID del compartimento per il compartimento radice. Se si fornisce un <compartment-ocid> specifico o <tenancy-ocid> specifico, vengono restituiti gli stessi domini di disponibilità.
    • Per trovare le risorse di identità, non è necessario menzionare l'OCID di un compartimento. Nell'esempio precedente, si ottiene lo stesso risultato se si rimuove compartment_id dal comando. compartment_id consente di apprendere la sintassi di altri servizi.
Risoluzione dei problemi
  • messaggio di errore: impossibile eseguire una query sui package di provider disponibili:
    • Se ti trovi su una VPN, controlla le impostazioni proxy.
  • 401 errori - (Errore del servizio:NotAuthenticated):
    • Valore non corretto per una delle seguenti opzioni:
      • OCID tenancy
      • OCID utente
      • impronta
      • Chiave privata RSA (il percorso o la chiave)
  • host non trovato:
    • Valore errato per i seguenti elementi:
      • identificativo area
Spiegazione
  • Andare a Utilizzo (individuazione risorse).

    Vengono elencate due opzioni di comando.

  • Selezionare l'opzione di comando che utilizza compartment_id come comando base:
    terraform-provider-oci -command=export -compartment_id= -output_path=
  • Aggiornare il comando di base:
    • Al posto di terraform-provider-oci, utilizzare il comando di collegamento simbolico:

      tf-oci

    • Rivedere la sezione Descrizione parametro per aggiungere i valori appropriati ai parametri nel comando base.
      • Utilizzare il comando export per eseguire la ricerca automatica delle risorse:

        -command=export

      • Aggiungere l'OCID del compartimento in cui si trovano le risorse:

        -compartment_id=<tenancy-ocid>

      • Creare e quindi specificare una directory per le risorse trovate:

        Esempio: -output_path=$HOME/resource-discovery

  • Cercare la frase availability_domain e osservare le seguenti informazioni:
    Resources that are dependent on availability domains will be generated under availability_domain.tf file. These include:
    
        oci_core_boot_volume
        oci_file_storage_file_system
        oci_file_storage_mount_target
        oci_file_storage_snapshot
    
  • Per i servizi, utilizzare:
    • availability_domain (anche se non è un servizio, funziona con il servizio.)
    • Esempio: -services=availability_domain
    • Non sono necessarie virgolette intorno ai nomi dei servizi.
  • Costruisci il comando:

    Ad esempio:

    tf-oci -command=export -compartment_id=<tenancy-ocid> -services=availability_domain -output_path=$HOME/resource-discovery
    Nota

    Il comando di ricerca automatica delle risorse non crea una directory per le risorse trovate. Creare una directory e specificare il percorso nel comando.
Rivedi risorse trovate
  1. Dalla directory $HOME, passare alla directory resource-discovery.
    cd resource-discovery
  2. Visualizzare il contenuto della directory.
    ls

    Output di esempio:

    availability_domain.tf  provider.tf  vars.tf
  3. Esaminare lo script Terraform per i domini di disponibilità:
    cat availability_domain.tf

    Output di esempio:

    ## This configuration was generated by terraform-provider-oci
    
    data oci_identity_availability_domain export_QnsC-US-ASHBURN-AD-1 {
      compartment_id = var.compartment_ocid
      ad_number      = "1"
    }
    data oci_identity_availability_domain export_QnsC-US-ASHBURN-AD-2 {
      compartment_id = var.compartment_ocid
      ad_number      = "2"
    }
    data oci_identity_availability_domain export_QnsC-US-ASHBURN-AD-3 {
      compartment_id = var.compartment_ocid
      ad_number      = "3"
    }
    resource oci_file_storage_file_system export_JennFS ... <some info>
    resource oci_file_storage_snapshot export_Snapshot-1 ... <some info>
    resource oci_file_storage_mount_target export_MountTarget-xxx ... <some info>
    Nota

    Lo script Terraform availability_domain.tf utilizza una variabile denominata compartment_ocid. Trovare il valore di questa variabile in vars.tf.
  4. Esaminare le variabili.
    cat vars.tf

    Output di esempio:

    variable compartment_ocid { default = "<tenancy-ocid>" }
    variable region { default = "us-ashburn-1" }
  5. Esaminare le informazioni sullo script del provider:
    cat provider.tf

    Output di esempio:

    provider oci {
            region = var.region
    }
    Nota

    • provider.tf indica che si sta utilizzando il provider OCI Terraform con provider oci { }.
    • Il file provider.tf non include le informazioni di autenticazione perché le informazioni di autenticazione vengono fornite tramite le variabili di ambiente.

Complimenti. L'account Oracle Cloud Infrastructure ora può autenticare i comandi del provider OCI Terraform. E l'ambiente è pronto per eseguire i comandi di ricerca automatica delle risorse.

Riferimenti: