Crea script e file di stato con Ricerca automatica risorse

Generare 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 è possibile creare script e file di stato per le risorse nel proprio account mediante la funzione di ricerca automatica delle risorse. Successivamente, utilizzi Terraform per gestire le risorse.

I task chiave includono come:

  • Creare una risorsa mediante la console.
  • Creare script e un file di stato per la risorsa tramite la funzione di ricerca automatica delle risorse.
  • Aggiornare la risorsa con Terraform.
  • Verificare che la risorsa sia stata aggiornata nella console.
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 è dalla tenancy all'ambiente locale denominato Recupera dati, Crea script e Crea file di stato. 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 e creare script e file di stato utilizzando i comandi del provider OCI Terraform e il registro Terraform. La tenancy contiene un bucket con il nome rd-bucket, in un compartimento denominato rd-compartment. La ricerca automatica delle risorse sta recuperando le informazioni su questo bucket per creare script Terraform e un file di stato nell'ambiente dell'utente.

Per ulteriori informazioni, fare riferimento agli argomenti sotto riportati.

Informazioni preliminari

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

Requisiti
  • Un account Oracle Cloud Infrastructure. Vedi Richiedi e gestisci le promozioni gratuite su Oracle Cloud.
  • Un computer MacOS, Linux o Windows.
  • Risorse dell'esercitazione su Terraform:
    • Passare a tutti i passi di Impostazione della ricerca automatica delle risorse.
    • Prendere nota del comando del provider Terraform OCI:
      • Cloud Shell: terraform-provider-oci_<version> da /usr/bin
      • Istanza di computazione o ambiente locale: utilizzare il comando <shorter-alias> creato nell'esercitazione precedente anziché terraform-provider-oci_<version>.
        • Esempio: tf-oci
  • Terraform v1.1.3+:
    • Se si utilizza Cloud Shell, non è necessario installare Terraform. Terraform è già installato.
    • Se si utilizza un'istanza di computazione o un ambiente locale, attenersi alla procedura descritta in Installa Terraform.

1. Crea una risorsa

Creare un bucket nella tenancy mediante la console. Questo bucket non dispone di uno script Terraform. In seguito, utilizza la ricerca automatica delle risorse per creare uno script Terraform e un file di stato per il bucket.

Aggiungi criterio compartimento

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-your-username-belongs-to> to manage compartments in tenancy

Questo privilegio consente di creare un compartimento per tutte le risorse dell'esercitazione.

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: manage-compartments
    • Descrizione: Allow the group <a-group-your-username-belongs-to> to list, create, update, delete and recover compartments in the tenancy.
    • Compartimento: <your-tenancy>(root)
  9. Per Costruzione guidata criteri, selezionare Mostra editor manuale.
  10. Incolla nel seguente criterio:
    allow group <a-group-your-username-belongs-to> to manage compartments in tenancy
  11. Selezionare Crea.

Riferimento: Dettagli per le combinazioni Verbi + Tipo di risorsa (vedere il tipo di risorsa compartments)

Crea un compartimento

Creare un compartimento per le risorse create in questa esercitazione.

  1. Nella console: aprire il menu di navigazione , selezionare Identità e sicurezza. In Identità, selezionare Compartimenti.
  2. Selezionare Crea compartimento.
  3. Immettere i valori seguenti:
    • Nome: <your-compartment-name>
    • Descrizione: Compartment for <your-description>.
    • Compartimento padre: <your-tenancy>(root)
  4. Selezionare Crea compartimento.

Riferimento: creazione di un compartimento

Aggiungi criterio risorsa

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-your-username-belongs-to> to manage all-resources in compartment <your-compartment-name>

Con questo privilegio, puoi gestire tutte le risorse nel tuo compartimento, concedendoti i diritti amministrativi in tale compartimento.

Passi per aggiungere il criterio
  1. Nella console: aprire il menu di navigazione e selezionare Identità e sicurezza. In Identità, selezionare Criteri.
  2. Selezionare il compartimento.
  3. Selezionare Crea criterio.
  4. Nella pagina Crea criterio, immettere i valori riportati di seguito.
    • Nome: manage-<your-compartment-name>-resources
    • Descrizione: Allow users to list, create, update, and delete resources in <your-compartment-name>.
    • Compartimento: <your-tenancy>(root)
  5. In Costruzione guidata criteri, immettere i valori riportati di seguito.
    • Casi d'uso dei criteri: Compartment Management
    • Modelli di criteri comuni: Let compartment admins manage the compartment
    • Dominio di Identity: <identity-domain>
    • Gruppi: <a-group-your-username-belongs-to>
    • Posizione: <your-compartment-name>
  6. Selezionare Crea.

Riferimento: criteri comuni

Creare un bucket

Creare un bucket nel compartimento.

  1. Aprire il menu di navigazione e selezionare Memorizzazione. In Storage degli oggetti e storage di archivio selezionare Bucket.
  2. Selezionare il compartimento: <your-compartment-name>.
  3. Selezionare Crea bucket.
  4. Immettere i valori seguenti:
    • Nome bucket: <your-bucket-name>
    • Mantenere il resto delle impostazioni predefinite.
  5. Selezionare Crea.
Creazione di un bucket privato riuscita.
Nota

Assicurarsi di creare il bucket in <your-compartment-name>.

2. Scopri la risorsa

Individuare il bucket creato nel compartimento.

Scopri il bucket
  1. Nella directory $HOME eliminare e ricreare la directory resource-discovery creata per l'esercitazione Imposta ricerca automatica risorse.
    cd
    rm -R resource-discovery
    mkdir resource-discovery
  2. Eseguire il comando riportato di seguito:
    tf-oci -command=export -compartment_name=<your-compartment-name> -services=object_storage -output_path=$HOME/resource-discovery
    Cloud Shell:
    terraform-provider-oci_<version> -command=export -compartment_name=<your-compartment-name> -services=object_storage -output_path=$HOME/resource-discovery
    • Sostituire <your-compartment-name> con il nome del compartimento.
    Output di esempio:
    ...
    INFO <date> [INFO] ===> Generating resource 'oci_objectstorage_namespace.export_namespace'
    INFO <date> [INFO] ===> Generating resource 'oci_objectstorage_bucket.export_<your-bucket-name>'
    INFO <date> [INFO] Optional TF attribute 'kms_key_id' not found in source
    INFO <date> Found 2 'object_storage' resources. Generated under '/<home-directory>/resource-discovery/object_storage.tf'.
    INFO <date> === COMPLETED ===
    Nota

    È possibile che venga visualizzato il seguente messaggio:
    <date> ERROR IN GET: Service error: LifecyclePolicy NotFound. The bucket '<your-bucket-name>' does not define a lifecycle policy.. http status code: 404. Opc request id: iad-1:xxx

    La mancanza di un criterio del ciclo di vita è corretta per questa esercitazione. Per pianificare l'archiviazione o l'eliminazione automatica di questo bucket, vedere Uso di Object Lifecycle Management.

  3. Rivedere gli script Terraform generati.
    cd resource-discovery
    ls
    • object_storage.tf
    • provider.tf
    • vars.tf
  4. Visualizzare lo script object_storage.tf.
    cat object_storage.tf
    ## This configuration was generated by terraform-provider-oci
    
    data oci_objectstorage_namespace export_namespace {
      compartment_id = var.compartment_ocid
    }
    resource oci_objectstorage_bucket export_<your-bucket-name> {
      access_type    = "NoPublicAccess"
      auto_tiering   = "Disabled"
      compartment_id = var.compartment_ocid
      defined_tags = {
      }
      freeform_tags = {
      }
      #kms_key_id = <<Optional value not found in discovery>>
      metadata = {
      }
      name                  = "<your-bucket-name>"
      namespace             = data.oci_objectstorage_namespace.export_namespace.namespace
      object_events_enabled = "false"
      storage_tier          = "Standard"
      versioning            = "Disabled"
    }
Hai trovato correttamente le risorse di storage degli oggetti nel compartimento.
Spiegazione
  • Andare a Utilizzo (individuazione risorse).

    Vengono elencate due opzioni di comando.

  • Selezionare l'opzione di comando che utilizza compartment_name come comando base:
    terraform-provider-oci -command=export -compartment_name=<xxx> -output_path=<xxx>
  • 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 di esportazione per eseguire la ricerca automatica delle risorse:

        -command=export

      • Immettere il nome del compartimento che si stanno scoprendo le relative risorse:

        -compartment_name=<your-compartment-name>

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

        Esempio: -output_path=$HOME/resource-discovery

  • Aggiungere il parametro seguente dalla sezione Descrizione parametro al comando base:
    • services
  • Dai nomi dei servizi elencati per services, utilizzare:
    • object_storage
    • Esempio: -services=object_storage
    • Per individuare più servizi, separarli con una virgola.
    • Esempio: -services=object_storage,core
    • Non sono necessarie virgolette intorno ai nomi dei servizi.
  • Costruisci il comando:

    Ad esempio:

    tf-oci -command=export -compartment_name=<your-compartment-name> -services=object_storage -output_path=$HOME/resource-discovery
    Nota

    Risoluzione dei problemi
    [ERROR] output_path does not exist: stat /$HOME/resource-discovery: no such file or directory

    Il comando di ricerca automatica delle risorse non crea una directory per le risorse trovate. Creare una directory e specificare il percorso nel comando.

    [ERROR] no output directory specified

    Il parser si ferma al parametro a cui manca un trattino. Assicurarsi di aggiungere un trattino all'inizio di ogni parametro. Ad esempio, se si utilizza services anziché -services, il parser non raggiunge la directory di output.

Genera un file di stato
Per tenere traccia delle risorse, Terraform memorizza lo stato delle risorse in un file di stato. Quindi, ogni volta che si aggiorna una risorsa con Terraform, Terraform aggiorna il file di stato con tale modifica.
  1. Eseguire il comando di ricerca automatica delle risorse con il flag -generate_state:
    • In Cloud Shell:
    • terraform-provider-oci_<version> -command=export -compartment_id=<tenancy-ocid> -command=export -compartment_name=<your-compartment-name> -services=object_storage -generate_state -output_path=$HOME/resource-discovery
    • Nell'istanza di computazione o nell'ambiente locale:
      tf-oci -command=export -compartment_name=<your-compartment-name> -services=object_storage -generate_state -output_path=$HOME/resource-discovery
    Output di esempio:
    ...
    Terraform has been successfully initialized!
    ...
    Import successful!
    
    The resources that were imported are shown above. These resources are now in
    your Terraform state and will henceforth be managed by Terraform.
    
    INFO <date> [INFO] ===> Generating resource 'oci_objectstorage_namespace.export_namespace'
    INFO <date> [INFO] ===> Generating resource 'oci_objectstorage_bucket.export_<your-bucket-name>'
    INFO <date> [INFO] Optional TF attribute 'kms_key_id' not found in source
    INFO <date> Found 2 'object_storage' resources. Generated under '/<home-directory>/resource-discovery/object_storage.tf'.
    INFO <date> === COMPLETED ===
    
    Nota

    Risoluzione dei problemi:
    • Errore: impossibile eseguire la query sui package di provider disponibili:
      • Se si utilizza una VPN, controllare le impostazioni proxy.
  2. Visualizzare il contenuto della directory resource-discovery.
    ls

    Output di esempio:

    • object_storage.tf
    • provider.tf
    • terraform.tfstate
    • vars.tf
    Nota

    Il comando di ricerca automatica delle risorse sovrascrive i file <resource>.tf ogni volta che viene eseguito. Se non si specifica un servizio, viene creato un file <resource>.tf per ogni risorsa nel compartimento specificato.
  3. Visualizzare il file di stato Terraform generato.
    cat terraform.tfstate

    Output di esempio:

    ...
    "instances": [
      {
          "bucket_id": "ocid1.bucket.xxx",
          "compartment_id": "ocid1.compartment.xxx",
          "created_by": "ocid1.user.xxx",
          "id": "xxx/<your-bucket-name>",
    ...

Complimenti. È stato creato un file di stato per la risorsa bucket.

Riferimenti:

3. Aggiorna la risorsa

Aggiornare il nome del bucket nel file object_storage.tf, quindi eseguire gli script Terraform. L'account esegue l'autenticazione degli script, quindi Terraform aggiorna il nome del bucket. Confermare il nome del nuovo bucket tramite la console.

Modifica nome bucket
  1. Nell'editor, aprire il file object_storage.tf e modificare il nome del bucket da <your-bucket-name> in <your-bucket-name>-2.
    Nota

    È possibile rinominare solo i bucket vuoti.
    ## This configuration was generated by terraform-provider-oci
    
    data oci_objectstorage_namespace export_namespace {
      compartment_id = var.compartment_ocid
    }
    resource oci_objectstorage_bucket export_<your-bucket-name> {
      access_type    = "NoPublicAccess"
      auto_tiering   = "Disabled"
      compartment_id = var.compartment_ocid
      defined_tags = {
      }
      freeform_tags = {
      }
      #kms_key_id = <<Optional value not found in discovery>>
      metadata = {
      }
      name                  = "<your-bucket-name>-2"
      namespace             = data.oci_objectstorage_namespace.export_namespace.namespace
      object_events_enabled = "false"
      storage_tier          = "Standard"
      versioning            = "Disabled"
    }
  2. Salvare il file object_storage.tf.
Inizializza
Quando si crea un file di stato, la ricerca automatica delle risorse inizializza una directory di lavoro che include i file di configurazione Terraform. Prendere l'abitudine di eseguire questo comando ogni volta che si aggiornano gli script Terraform.
  1. Controllare il contenuto della directory resource-discovery.
    ls -a

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

  2. Confermare di aver installato Terraform.
    terraform -v
  3. Eseguire il comando init:
    terraform init

    Output di esempio:

    Initializing the backend...
    
    Initializing provider plugins...
    - Using previously-installed hashicorp/oci vx.x.x
    ...
    Terraform has been successfully initialized!
Piano
Un piano di esecuzione è l'elenco delle modifiche che Terraform prevede di applicare all'account.
  1. Creare un piano di esecuzione:
    terraform plan
  2. Rivedere il piano di esecuzione.

    Con il comando,terraform plan si controlla se le modifiche mostrate nel piano di esecuzione corrispondono alle proprie aspettative, senza passare alle risorse reali. Output di esempio:

    Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols:
    -/+ destroy and then create replacement
    
    Terraform will perform the following actions:
    
      # oci_objectstorage_bucket.export_<your-bucket-name> must be replaced
    -/+ resource "oci_objectstorage_bucket" "export_<your-bucket-name>" {
    ...
        ~ name = "<your-bucket-name>" -> "<your-bucket-name>-2" # forces replacement
            namespace = "<your-tenancy>"
            ...
    
    Plan: 1 to add, 0 to change, 0 to destroy.
Applicazione

Aggiorna il bucket

  1. Eseguire gli script Terraform:
    terraform apply
  2. Quando viene richiesta la conferma, immettere yes per sostituire il nome del bucket.

    Output di esempio:

    Apply complete! Resources: 1 added, 0 changed, 0 destroyed.

Trova nome nuovo bucket nella console

  1. Aprire il menu di navigazione e selezionare Memorizzazione. In Storage degli oggetti e storage di archivio selezionare Bucket.
  2. Selezionare il compartimento: <your-compartment-name>.
  3. Nella lista dei bucket, controllare il nome del bucket.

    Il nome del bucket è <your-bucket-name>-2.