Creación de una VCN en Oracle Cloud Infrastructure (OCI) con Terraform

Índice

Las VCN (Virtual Cloud Network) son un recurso fundamental en Oracle Cloud Infrastructure. En este post se utiliza la herramienta de IaC Terraform para provisionar uno de estos recursos en un arrendamiento de OCI.

Creación de la configuración

La configuración para crear un recurso de este tipo es sencilla:

terraform {
  required_providers {
    oci = {
      source  = "oracle/oci"
      version = "7.15.0"
    }
  }
}

provider "oci" {
  region              = "eu-madrid-1"
  auth                = "SecurityToken"
  config_file_profile = "DEFAULT"
}

resource "oci_core_vcn" "mi_vcn" {
  dns_label      = "mivcn"
  cidr_block     = "172.22.0.0/16"
  compartment_id = "OCID_del_compartimento"
  display_name   = "Mi VCN"
}

El primer bloque de este fichero de configuración es terraform{}. Este bloque contiene la configuración de Terraform como, por ejemplo, el proveedor con el que la herramienta se tiene que comunicar para provisionar el escenario definido en el fichero. En este caso, el proveedor que se configura es oracle/oci del registro de Terraform.

A continuación, en el bloque provider se configura el proveedor específico, en este caso oci. La información que recibe Terraform en este bloque es la región, el token de autentificación y el perfil del fichero de configuración con el que debe conectarse al proveedor de cloud.

Por último, se definen los recursos en el bloque resorce. En este caso, el único recurso que se define es una VCN. Antes del bloque se añaden dos cadenas que indican el tipo de recurso (oci_core_vcn) y el nombre (mi_vcn), respectivamente. En el bloque se añade otra información relevante como la etiqueta DNS del a VCN, el bloque de direcciones IP que se le asigna, el ID del compartimento en el que se debe crear o el nombre del recurso.

Inicializar el directorio

Una vez definida la infraestructura que Terraform debe crear en la nube, el siguiente paso es inicializar el directorio. Esto se hace con el comando terraform init.

❯ terraform init
Initializing the backend...
Initializing provider plugins...
- Finding latest version of oracle/oci...
- Installing oracle/oci v7.15.0...
- Installed oracle/oci v7.15.0 (signed by a HashiCorp partner, key ID 1533A49284137CEB)
Partner and community providers are signed by their developers.
If you'd like to know more about provider signing, you can read about it here:
https://developer.hashicorp.com/terraform/cli/plugins/signing
Terraform has created a lock file .terraform.lock.hcl to record the provider
selections it made above. Include this file in your version control repository
so that Terraform can guarantee to make the same selections by default when
you run "terraform init" in the future.

Terraform has been successfully initialized!

You may now begin working with Terraform. Try running "terraform plan" to see
any changes that are required for your infrastructure. All Terraform commands
should now work.

If you ever set or change modules or backend configuration for Terraform,
rerun this command to reinitialize your working directory. If you forget, other
commands will detect it and remind you to do so if necessary.

Inicializar el directorio descarga e instala el plugin que permite a Terraform comunicarse con el proveedor de cloud, en este caso, oci. Este plugin se descarga e instala en un directorio oculto llamado .terraform que la propia herramienta crea.

Formatear y validar la configuración

Cuando se trabaja con infraestructura como código es fundamental atender a las buenas prácticas de formato para que la configuración sea legible, entendible y replicable. Por eso, Terraform cuenta con un comando que revisa el formato de todos los ficheros de configuración de un directorio y aplica los cambios necesarios para corregir los posibles errores. Si realiza alguna modificación, devuelve el nombre de los ficheros sobre los que ha efectuado cambios. En este caso, se utiliza un único fichero con una configuración muy sencilla en el que esta herramienta no ha necesitado realizar ninguna modificación.

terraform fmt

Además, antes de aplicar la configuración se puede validar con terraform validate. A diferencia del anterior, este comando sí devuelve una salida cuando el resultado es exitoso.

❯ terraform validate
Success! The configuration is valid.

Crear la infraestructura

Antes de ejecutar el comando que crea la infraestructura, es conveniente aplicar un plan. Con este comando Terraform planifica la infraestructura que debe crear en el servicio de cloud y notifica los posibles errores que aparezcan durante el proceso. Es una buena práctica realizar este plan antes de aplicar la configuración.

❯ terraform plan

Terraform used the selected providers to generate the following execution plan.
Resource actions are indicated with the following symbols:
  + create

Terraform will perform the following actions:

  # oci_core_vcn.mi_vcn will be created
  + resource "oci_core_vcn" "mi_vcn" {
      + byoipv6cidr_blocks               = (known after apply)
      + cidr_block                       = "172.22.0.0/16"
      + cidr_blocks                      = (known after apply)
      + compartment_id                   = <OCID_del_compartimento>
      + default_dhcp_options_id          = (known after apply)
      + default_route_table_id           = (known after apply)
      + default_security_list_id         = (known after apply)
      + defined_tags                     = (known after apply)
      + display_name                     = "Mi VCN"
      + dns_label                        = "mivcn"
      + freeform_tags                    = (known after apply)
      + id                               = (known after apply)
      + ipv6cidr_blocks                  = (known after apply)
      + ipv6private_cidr_blocks          = (known after apply)
      + is_ipv6enabled                   = (known after apply)
      + is_oracle_gua_allocation_enabled = (known after apply)
      + security_attributes              = (known after apply)
      + state                            = (known after apply)
      + time_created                     = (known after apply)
      + vcn_domain_name                  = (known after apply)

      + byoipv6cidr_details (known after apply)
    }

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

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

Note: You didn't use the -out option to save this plan, so Terraform can't
guarantee to take exactly these actions if you run "terraform apply" now.

Tras comprobar que la información que muestra el plan es coherente con el objetivo que se busca, se puede aplicar la configuración.

❯ terraform apply

Terraform used the selected providers to generate the following execution plan.
Resource actions are indicated with the following symbols:
  + create

Terraform will perform the following actions:

  # oci_core_vcn.mi_vcn will be created
  + resource "oci_core_vcn" "mi_vcn" {
      + byoipv6cidr_blocks               = (known after apply)
      + cidr_block                       = "172.22.0.0/16"
      + cidr_blocks                      = (known after apply)
      + compartment_id                   = <OCID_del_compartimento>
      + default_dhcp_options_id          = (known after apply)
      + default_route_table_id           = (known after apply)
      + default_security_list_id         = (known after apply)
      + defined_tags                     = (known after apply)
      + display_name                     = "Mi VCN"
      + dns_label                        = "mivcn"
      + freeform_tags                    = (known after apply)
      + id                               = (known after apply)
      + ipv6cidr_blocks                  = (known after apply)
      + ipv6private_cidr_blocks          = (known after apply)
      + is_ipv6enabled                   = (known after apply)
      + is_oracle_gua_allocation_enabled = (known after apply)
      + security_attributes              = (known after apply)
      + state                            = (known after apply)
      + time_created                     = (known after apply)
      + vcn_domain_name                  = (known after apply)

      + byoipv6cidr_details (known after apply)
    }

Plan: 1 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.

  Enter a value: yes

oci_core_vcn.mi_vcn: Creating...
oci_core_vcn.mi_vcn: Creation complete after 2s [id=<OCID del recurso creado>]

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

Tras aplicar el plan con Terraform, el recurso se ha creado en OCI.

❯ oci network vcn list --compartment-id <OCID del compartimento> --profile javi-huete --auth security_token
{
  "data": [
    {
      "byoipv6-cidr-blocks": null,
      "cidr-block": "172.22.0.0/16",
      "cidr-blocks": [
        "172.22.0.0/16"
      ],
      "compartment-id": "<OCID del compartimento>",
      "default-dhcp-options-id": "<OCID del recurso>",
      "default-route-table-id": "<OCID del recurso>",
      "default-security-list-id": "<OCID del recurso>",
      "defined-tags": {
        "Oracle-Tags": {
          "CreatedBy": "default/fjhuete",
          "CreatedOn": "2025-08-22T14:31:11.222Z"
        }
      },
      "display-name": "Mi VCN",
      "dns-label": "mivcn",
      "freeform-tags": {},
      "id": "<OCID del recurso>",
      "ipv6-cidr-blocks": null,
      "ipv6-private-cidr-blocks": null,
      "is-zpr-only": null,
      "lifecycle-state": "AVAILABLE",
      "security-attributes": {},
      "time-created": "2025-08-22T14:31:11.279000+00:00",
      "vcn-domain-name": "mivcn.oraclevcn.com"
    }
  ]
}
comments powered by Disqus

Relacionados

Instalación de Terraform

En este post se describe el proceso de instalación de la herramienta para la línea de comandos de Terraform, que permite aplicar la configuración de Terraform a una estructura en un proveedor del cloud.

Leer

Instalación y configuración del gestor de arranque systemd-boot en Debian

systemd-boot es un gestor de arranque creado de la fusión del proyecto gummiboot con el proyecto systemd. Tanto gummiboot como systemd-boot están desarrollados por Red Hat. Este gestor de arranque pretende ser una alternativa minimalista al gestor de arranque GRUB, desarrollado por GNU y está diseñado para sistemas que usan la interfaz de firmware UEFI.

Leer

Funcionamiento básico de Linux Bridge

Un bridge o puente en Linux es un dispositivo de red virtual que permite que las máquinas virtuales alojadas en una máquina física usen su tarjeta de red. En este post se muestra un ejemplo de configuración de un Bridge en una máquina Debian.

Leer