Note:
- Este tutorial requiere acceso a Oracle Cloud. Para registrarse en una cuenta gratuita, consulte Introducción a la capa gratuita de Oracle Cloud Infrastructure.
- Utiliza valores de ejemplo para credenciales, arrendamiento y compartimentos de Oracle Cloud Infrastructure. Al completar el laboratorio, sustituya estos valores por otros específicos de su entorno en la nube.
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:
-
Cree una VCN con Terraform para que tenga un archivo de estado y un archivo de configuración de Terraform que gestione esta VCN.
-
Agregue manualmente un nuevo recurso (un recurso informático) en su arrendamiento de OCI.
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
- Cree el recurso manualmente (una máquina virtual de OCI Compute) e importe en un archivo de estado de Terraform existente para que Terraform lo gestione aún más.
Requisitos
-
Terraform
v1.5.0
y superior. -
Entorno de infraestructura creado y gestionado por Terraform. En este tutorial, tenemos una VCN con algunas subredes, listas de seguridad, tablas de rutas, etc.
Tarea 1: Comprobación de la infraestructura existente creada con Terraform
-
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.
-
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.
-
import_block.tf
.import { to = oci_core_instance.demo_inst_1 id = "ocid1.instance.oc1.iad.anuwcljswe6j4fqcqxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }
- id: OCID de los recursos informáticos creados en la tarea 2.
- a: dirección de instancia que el recurso tendrá en el archivo de estado.
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.
Enlaces relacionados
Agradecimientos
- Autor: Francisc Vass
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.
Import Oracle Cloud Infrastructure Resources into a Terraform State File
F96413-01
April 2024