Nota

Importa le risorse Oracle Cloud Infrastructure in un file di stato Terraform

Introduzione

L'uso di Terraform per gestire le risorse Oracle Cloud Infrastructure (OCI) offre molti vantaggi. Uno di questi è che porta coerenza e riproducibilità alle implementazioni dell'infrastruttura. Un'altra è che le configurazioni Terraform possono essere modularizzate e riutilizzate tra i progetti, semplificando la gestione e la scalabilità delle configurazioni dell'infrastruttura. Allo stesso modo, con Terraform, il provisioning e la gestione dell'infrastruttura possono essere automatizzati, portando a distribuzioni coerenti e ripetibili. Un altro aspetto importante è che Terraform gestisce un file di stato che tiene traccia dello stato corrente dell'infrastruttura. Questo file di stato viene utilizzato per pianificare e applicare le modifiche, consentendo a Terraform di determinare quali modifiche devono essere apportate per ottenere lo stato desiderato.

Tuttavia, ci sono situazioni in cui non tutte le risorse in Oracle Cloud Infrastructure (OCI) sono gestite da Terraform. Ciò si verifica in genere quando si esegue il provisioning delle risorse utilizzando Terraform, che sono quindi presenti nel file di stato, mentre altre risorse vengono create manualmente da un altro utente. In seguito, potresti scoprire che hai bisogno di queste risorse create manualmente per essere gestite da Terraform.

Considerare quanto riportato di seguito.

Se si desidera gestire la computazione appena aggiunta utilizzando il file di configurazione e stato Terraform già disponibile, è possibile utilizzare il comando di importazione Terraform, ma sono necessari altri passi da seguire ed è necessario aggiornare il file di configurazione Terraform.

Terraform v1.5.0 e versioni successive supporta i blocchi di importazione. Con questo approccio il codice Terraform esistente non viene modificato. Potrebbe essere necessario scegliere di integrarlo nel file di configurazione Terraform esistente, ma non è necessario. L'obiettivo è importare le risorse OCI in un file di stato Terraform non gestito da Terraform.

Un aspetto importante è che il blocco di importazione funziona con le pipeline CI/CD. Inoltre, consente di visualizzare in anteprima un'operazione di importazione prima di modificare lo stato. Alla fine tutto dipende da te e dalla complessità del caso d'uso.

Obiettivi

Prerequisiti

Task 1: controllare l'infrastruttura esistente creata con Terraform

  1. Eseguire il comando terraform state list per controllare le risorse OCI gestite dal file di configurazione Terraform.

    terraform state list
    module.network.data.oci_core_services.all_oci_services
    module.network.oci_core_internet_gateway.igw["igw"]
    module.network.oci_core_nat_gateway.ngw["ngw"]
    module.network.oci_core_route_table.route_table["rt_priv"]
    module.network.oci_core_route_table.route_table["rt_pub"]
    module.network.oci_core_security_list.sl["sl_priv"]
    module.network.oci_core_security_list.sl["sl_public"]
    module.network.oci_core_service_gateway.this["sgw"]
    module.network.oci_core_subnet.subnets["sn1_priv"]
    module.network.oci_core_subnet.subnets["sn1_pub"]
    module.network.oci_core_subnet.subnets["sn2_priv"]
    module.network.oci_core_subnet.subnets["sn3_priv"]
    module.network.oci_core_virtual_network.vcn["vcn1"]
    

    Come puoi vedere, abbiamo VCN, subnet, liste di sicurezza e tabelle di instradamento.

  2. Di seguito sono riportati i file di configurazione Terraform.

    ~/workORCL/_MY_OCI_INFRA/oci-vcn> ls -l
    total 120
    -rwxr-xr-x@ 1 fvass  staff    849 Jul 10  2023 main.tf
    drwxr-xr-x@ 3 fvass  staff     96 May 25  2023 modules
    -rwxr-xr-x@ 1 fvass  staff    387 May 25  2023 output.tf
    -rw-r--r--  1 fvass  staff    379 Apr  3 09:18 provider.auto.tfvars
    -rw-r--r--  1 fvass  staff  29040 Apr  3 11:00 terraform.tfstate
    -rw-r--r--  1 fvass  staff    182 Apr  3 11:00 terraform.tfstate.backup
    -rwxr-xr-x@ 1 fvass  staff   6007 Apr  3 10:59 terraform.tfvars
    -rwxr-xr-x@ 1 fvass  staff   2869 May 25  2023 variables.tf
    

Task 2: creare una VM di OCI Compute utilizzando OCI Console

Crea una VM di OCI Compute nella stessa area in cui vengono create altre risorse OCI nel task 1. Per questa esercitazione, la stiamo creando in una delle subnet esistenti nel Task 1 (non è necessario che si trovi in una di queste subnet). Dopo averlo creato, ottieni l'OCID (OCID, Compute Oracle Cloud Identifier) che sarà richiesto in ulteriori task.

Nota: al momento questa VM non è gestita da Terraform.

Task 3: creare il file import_block.tf

Creare un file denominato import_block.tf (è possibile assegnare un nome diverso) nella stessa cartella in cui si trova il codice Terraform.

Una risorsa di computazione verrà importata utilizzando il tipo oci_core_instance. Il nome della risorsa sarà demo_inst_1. Quando viene eseguito il comando terraform plan, Terraform leggerà questo file e riconoscerà che deve importare una nuova risorsa nel file di stato esistente.

Task 4: eseguire il comando terraform plan

eseguire il comando seguente. Questo argomento generate-config-out genererà un file con la configurazione Terraform per il calcolo creato nel task 2.

terraform plan --generate-config-out=compute.tf

L'output dovrebbe essere il seguente:

Plan: 1 to import, 0 to add, 0 to change, 0 to destroy.
╷
│ Warning: Config generation is experimental
│
│ Generating configuration during import is currently experimental, and the generated configuration format may change in future versions.
╵

─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────

Terraform has generated configuration and written it to compute.tf. Please review the configuration and edit it as necessary before adding it to version control.

Ora abbiamo un file compute.tf.

~/workORCL/_MY_OCI_INFRA/oci-vcn> ls -ltr
total 144
-rwxr-xr-x@ 1 fvass  staff    387 May 25  2023 output.tf
drwxr-xr-x@ 3 fvass  staff     96 May 25  2023 modules
-rwxr-xr-x@ 1 fvass  staff   2869 May 25  2023 variables.tf
-rw-r--r--  1 fvass  staff    379 Apr  3 09:18 provider.auto.tfvars
-rwxr-xr-x@ 1 fvass  staff   6007 Apr  3 10:59 terraform.tfvars
-rw-r--r--  1 fvass  staff    182 Apr  3 11:00 terraform.tfstate.backup
-rw-r--r--  1 fvass  staff  29040 Apr  3 11:00 terraform.tfstate
-rwxr-xr-x@ 1 fvass  staff    855 Apr  3 11:12 main.tf
-rw-r--r--  1 fvass  staff    142 Apr  3 11:12 import_block.tf
-rw-r--r--  1 fvass  staff   4421 Apr  3 11:17 compute.tf

Task 5: eseguire il comando terraform apply

Eseguire il comando seguente per aggiungere computazione al file di stato Terraform.

terraform apply

L'output dovrebbe essere il seguente:

Plan: 1 to import, 0 to add, 0 to change, 0 to destroy.

Do you want to perform these actions?
Terraform will perform the actions described above.
Only 'yes' will be accepted to approve.

A questo punto, applicare la configurazione.

Task 6: Controllare il file di stato

Eseguire il comando terraform state list e verificare che sia presente oci_core_instance.demo_inst_1.

~/workORCL/_MY_OCI_INFRA/oci-vcn> terraform state list
oci_core_instance.demo_inst_1
module.network.data.oci_core_services.all_oci_services
module.network.oci_core_internet_gateway.igw["igw"]
module.network.oci_core_nat_gateway.ngw["ngw"]
module.network.oci_core_route_table.route_table["rt_priv"]
module.network.oci_core_route_table.route_table["rt_pub"]
module.network.oci_core_security_list.sl["sl_priv"]
module.network.oci_core_security_list.sl["sl_public"]
module.network.oci_core_service_gateway.this["sgw"]
module.network.oci_core_subnet.subnets["sn1_priv"]
module.network.oci_core_subnet.subnets["sn1_pub"]
module.network.oci_core_subnet.subnets["sn2_priv"]
module.network.oci_core_subnet.subnets["sn3_priv"]
module.network.oci_core_virtual_network.vcn["vcn1"]

Task 7: rimuovere il file import_block.tf

A questo punto, possiamo rimuovere il file import_block.tf in modo sicuro. Verrà comunque ignorato da Terraform.

Task 8: Test su Compute

Puoi modificare la forma della tua computazione. In compute.tf modificare memory_in_gbs da shape_config ed eseguire terraform plan per visualizzare la modifica.

L'output dovrebbe essere il seguente:

Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols:
  ~ update in-place

Terraform will perform the following actions:

  # oci_core_instance.demo_inst_1 will be updated in-place
  ~ resource "oci_core_instance" "demo_inst_1" {
        id                  = "ocid1.instance.oc1.iad.anuwcljswe.........."
        # (20 unchanged attributes hidden)

      ~ shape_config {
          ~ memory_in_gbs                 = 16 -> 32
            # (8 unchanged attributes hidden)
        }

        # (7 unchanged blocks hidden)
    }

Plan: 0 to add, 1 to change, 0 to destroy.

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.