Note:

Importación de recursos de Oracle Cloud Infrastructure en un archivo de estado de Terraform

Introducción

Hay muchas ventajas de utilizar Terraform para gestionar sus recursos de Oracle Cloud Infrastructure (OCI). Una de ellas es que aporta consistencia y reproducibilidad a los despliegues de infraestructura. Otra es que las configuraciones de Terraform se pueden modularizar y reutilizar en los proyectos, lo que facilita la gestión y ampliación de las configuraciones de infraestructura. Del mismo modo, con Terraform, el aprovisionamiento y la gestión de la infraestructura se pueden automatizar, lo que lleva a despliegues consistentes y repetibles. Otro aspecto importante es que Terraform mantiene un archivo de estado que realiza un seguimiento del estado actual de la infraestructura. Este archivo de estado se utiliza para planificar y aplicar cambios, lo que permite a Terraform determinar qué cambios se deben realizar para lograr el estado deseado.

Sin embargo, hay situaciones en las que no todos los recursos de Oracle Cloud Infrastructure (OCI) los gestiona Terraform. Esto suele ocurrir cuando aprovisiona recursos mediante Terraform, que a continuación están presentes en el archivo de estado, mientras que otros recursos los crea manualmente otra persona. Más tarde, puede que descubra que necesita que estos recursos creados manualmente los gestione Terraform.

Tenga en cuenta lo siguiente:

Si desea gestionar los recursos informáticos recién agregados mediante el archivo de estado y configuración de Terraform que ya tiene, puede utilizar el comando de importación de Terraform, pero hay más pasos que seguir y debe actualizar el archivo de configuración de Terraform.

Terraform v1.5.0 y superiores soportan bloques de importación. Con este enfoque, su código de Terraform existente no cambia. Puede que desee integrarlo en el archivo de configuración de Terraform existente, pero esto no es necesario. El objetivo es importar recursos de OCI a un archivo de estado de Terraform que no esté gestionado por Terraform.

Un aspecto importante es que el bloque de importación funciona con pipelines de integración y despliegue continuos. También le permite obtener una vista previa de una operación de importación antes de modificar el estado. Al final, todo depende de usted y de la complejidad del caso de uso.

Objetivos

Requisitos

Tarea 1: Comprobación de la infraestructura existente creada con Terraform

  1. Ejecute el comando terraform state list para comprobar los recursos de OCI gestionados por el archivo de configuración de 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"]
    

    Como puede ver, tenemos VCN, subredes, listas de seguridad y tablas de rutas.

  2. Estos son mis archivos de configuración de 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
    

Tarea 2: Creación de una máquina virtual de OCI Compute mediante la consola de OCI

Cree una máquina virtual de OCI Compute en la misma región en la que se creen otros recursos de OCI en la tarea 1. Para este tutorial, lo estamos creando en una de las subredes que existe en la tarea 1 (no es necesario que esté en una de esas subredes). Después de crearlo, obtenga el identificador de Oracle Cloud (OCID) de recursos informáticos, ya que será necesario en otras tareas.

Nota: Terraform no gestiona esta máquina virtual en este momento.

Tarea 3: Creación del archivo import_block.tf

Cree un archivo denominado import_block.tf (puede asignarle un nombre diferente) en la misma carpeta en la que se encuentra el código de Terraform.

Importaremos un recurso informático utilizando el tipo oci_core_instance. El nombre del recurso será demo_inst_1. Al ejecutar el comando terraform plan, Terraform leerá este archivo y reconocerá que necesita importar un nuevo recurso al archivo de estado existente.

Tarea 4: Ejecución del comando terraform plan

Ejecute el siguiente comando. Este argumento generate-config-out generará un archivo con la configuración de Terraform para los recursos informáticos creados en la tarea 2.

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

La salida debe ser similar a:

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.

Ahora, tenemos un archivo 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

Tarea 5: Ejecución del comando terraform apply

Ejecute el siguiente comando para agregar recursos informáticos al archivo de estado de Terraform.

terraform apply

La salida debe ser similar a:

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.

Ahora, aplique la configuración.

Tarea 6: Comprobación del archivo de estado

Ejecute el comando terraform state list y observe que oci_core_instance.demo_inst_1 está presente.

~/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"]

Tarea 7: Eliminación del archivo import_block.tf

En este punto, podemos eliminar el archivo import_block.tf de forma segura. Terraform lo ignorará de todas formas.

Tarea 8: Prueba en Compute

Puede cambiar la unidad de computación. En compute.tf, cambie memory_in_gbs de shape_config y ejecute terraform plan para ver el cambio.

La salida debe ser similar a:

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.

Agradecimientos

Más recursos de aprendizaje

Explore otros laboratorios en docs.oracle.com/learn o acceda a más contenido de aprendizaje gratuito en el canal YouTube de Oracle Learning. Además, visite education.oracle.com/learning-explorer para convertirse en Oracle Learning Explorer.

Para obtener documentación sobre el producto, visite Oracle Help Center.