Configuración de una infraestructura simple con Terraform de OCI

Utilice Terraform para configurar una infraestructura simple en su cuenta de Oracle Cloud Infrastructure.

Las tareas clave incluyen cómo:

  • Copie los scripts existentes de otros tutoriales de Terraform.
  • Editar los scripts para combinar todos los recursos en un directorio.
  • Ejecute un comando apply para crear los siguientes recursos:
    • un compartimento
    • una red virtual en la nube
    • una instancia informática
Diagrama de los componentes necesarios para crear una infraestructura simple con Terraform. Desde un entorno local de Linux, el usuario crea una red virtual en la nube con Terraform. Esta red tiene una subred pública y una instancia informática a la que se puede acceder desde Internet. La red también tiene una subred privada que se conecta a Internet a través de un gateway de NAT y también se conecta de forma privada a Oracle Services Network. El bloque CIDR para la red virtual en la nube es 10.0.0.0/16, para la subred pública es 10.0.0.0/24 y para la subred privada es el diagrama 10.0.1.0/24.A de un usuario conectado desde una máquina local a un arrendamiento de Oracle Cloud Infrastructure.

Para obtener más información, consulte:

Antes de empezar

Para realizar correctamente este tutorial, debe tener lo siguiente:

Requisitos

1. Preparación

Copie los scripts que ha creado en los tutoriales de Terraform anteriores en un nuevo directorio.

Copia de recursos declarados
  1. En el directorio $HOME, cree un directorio denominado tf-simple-infrastructure y cambie a ese directorio.
    mkdir tf-simple-infrastructure
    cd tf-simple-infrastructure
  2. Copie los scripts de Terraform del directorio tf-provider.
    cp ../tf-provider/*.tf .
    Nota

    No copie los archivos de estado (terraform.tfstate o terraform.tfstate.backup). Estos archivos contienen el estado de los recursos para su directorio actual. Después de ejecutar los scripts en este nuevo directorio, obtendrá un nuevo archivo de estado.
  3. Cambie el nombre del archivo outputs.tf a outputs1.tf.
    mv outputs.tf outputs1.tf
  4. Copie los scripts de Terraform desde el directorio tf-compartment.
    cp ../tf-compartment/*.tf .
    Nota

    Dado que solo necesita un archivo de proveedor por directorio, no se produce ningún perjuicio cuando el comando de copia sustituye un archivo provider.tf por otro.
  5. Cambie el nombre del archivo outputs.tf a outputs2.tf.
    mv outputs.tf outputs2.tf
  6. Copie los scripts de Terraform desde el directorio tf-compute.
    cp ../tf-compute/*.tf .
  7. Cambie el nombre del archivo outputs.tf a outputs3.tf.
    mv outputs.tf outputs3.tf
  8. Copie los scripts de Terraform del directorio tf-vcn.
    cp ../tf-vcn/*.tf .
  9. Cambie el nombre del archivo outputs.tf a outputs4.tf.
    mv outputs.tf outputs4.tf
  10. Concatene los cuatro archivos de salida.
    cat outputs1.tf outputs2.tf outputs3.tf outputs4.tf > outputs.tf
  11. Elimine los archivos outputs1.tf, outputs2.tf, outputs3.tf y outputs4.tf del directorio tf-simple-infrastructure.
    rm outputs1.tf outputs2.tf outputs3.tf outputs4.tf
  12. Confirme que tiene los siguientes archivos en el directorio.
    ls
    availability-domains.tf
    compartment.tf
    compute.tf
    outputs.tf
    private-security-list.tf
    private-subnet.tf
    provider.tf
    public-security-list.tf
    public-subnet.tf
    vcn-module.tf
    versions.tf

2. Edición de los scripts

Edite los scripts para asignar un nuevo nombre al compartimento y para sustituir todos los OCID de codificación fija por referencias.

Actualización del nombre del compartimento
  1. Abra el archivo compartment.tf.
  2. Actualice <your-compartment-name> con <your-new-compartment-name> , en caso de que ya haya creado <your-compartment-name> en los tutoriales anteriores.
    # Source from https://registry.terraform.io/providers/oracle/oci/latest/docs/resources/identity_compartment
    
    resource "oci_identity_compartment" "tf-compartment" {
        # Required
        compartment_id = "<tenancy-ocid>"
        description = "Compartment for Terraform resources."
        name = "<your-new-compartment-name>"
    }
Actualización de las referencias de compartimento
Búsqueda de la referencia al OCID del compartimento

En los tutoriales anteriores, codifica de forma fija el OCID del compartimento. Ahora, actualice <compartment-ocid> para hacer referencia al compartimento desde compartment.tf.

  1. Busque cómo se hace referencia al OCID de compartimento en el archivo outputs.tf.
    grep -R compartment outputs.tf

    Salida de ejemplo:

    # Outputs for compartment
    output "compartment-name" {
      value = oci_identity_compartment.tf-compartment.name
    output "compartment-OCID" {
      value = oci_identity_compartment.tf-compartment.id
                                    
  2. Copie el valor del OCID del compartimento en el panel de notas:
    
                                        oci_identity_compartment.tf-compartment.id
                                    
Actualización de los OCID del compartimento de codificación fija
  1. Busque qué archivos hacen referencia a compartment_id.
    grep -Rn compartment_id

    Salida de ejemplo:

    availability-domains.tf:7:  compartment_id = "<tenancy-ocid>"
    compartment.tf:3:   compartment_id = "<tenancy-ocid>"
    compute.tf:4:  compartment_id = "<compartment-ocid>"
    private-security-list.tf:6:  compartment_id = "<compartment-ocid>"
    private-subnet.tf:6:  compartment_id = "<compartment-ocid>"
    public-security-list.tf:6:  compartment_id = "<compartment-ocid>"
    public-subnet.tf:6:  compartment_id = "<compartment-ocid>"
    vcn-module.tf:9:  compartment_id = "<compartment-ocid>"
    Nota

    Los archivos availability-domains.tf y compartment.tf apuntan a <tenancy-ocid> . Por ejemplo, el archivo compartment.tf apunta al arrendamiento como su compartimento principal y, a continuación, crea un compartimento debajo. No edite compartment_id en estos dos archivos.
  2. A excepción de availability-domains.tf y compartment.tf, en los archivos restantes resultantes del comando grep, sustituya compartment_id = "<compartment-ocid>" por:
    compartment_id = oci_identity_compartment.tf-compartment.id
Actualización de referencias de subred
Búsqueda de la referencia al OCID de subred

En el tutorial Creación de una instancia informática, codifica de manera fija la subred pública que aloja la instancia informática. Ahora, actualice el archivo compute.tf para que haga referencia a public-subnet-OCID del archivo public-subnet.tf.

  1. Busque cómo se hace referencia a subnet OCID en el archivo outputs.tf.
    grep -R subnet outputs.tf

    Salida de ejemplo:

    ...
    # Outputs for private subnet
    output "private-subnet-name" {
      value = oci_core_subnet.vcn-private-subnet.display_name
    output "private-subnet-OCID" {
      value = oci_core_subnet.vcn-private-subnet.id
    # Outputs for public subnet
    output "public-subnet-name" {
      value = oci_core_subnet.vcn-public-subnet.display_name
    output "public-subnet-OCID" {
      value = oci_core_subnet.vcn-public-subnet.id
                                    
  2. Copie el valor para el OCID de subred pública en el panel de notas:
    
                                        oci_core_subnet.vcn-public-subnet.id
                                    
Actualización de los OCID de la subred de codificación fija
  1. Busque qué archivos hacen referencia a subnet_id.
    grep -Rn subnet_id

    Salida de ejemplo:

    compute.tf:19:        subnet_id = "<your-public-subnet-ocid>"
  2. En el archivo compute.tf que resulta del comando grep, sustituya compartment_id = "<your-public-subnet-ocid>" por:
    subnet_id = oci_core_subnet.vcn-public-subnet.id
    

Felicidades! Todos los scripts ya están listos para ejecutarse.

3. Creación de una infraestructura simple

Ejecute los scripts de Terraform para crear un compartimento, una red virtual en la nube y una instancia informática en la subred pública.

Ejecute los scripts
  1. Inicialice un directorio de trabajo en el directorio tf-simple-infrastructure.
    terraform init
  2. Cree un plan de ejecución y revise los cambios que Terraform planea realizar en su cuenta:
    terraform plan

    Salida de ejemplo:

    ....
    Terraform will perform the following actions:
    
      # oci_core_instance.ubuntu_instance will be created
    ....
    Plan: 14 to add, 0 to change, 0 to destroy.
    
    Changes to Outputs:
      + all-availability-domains-in-your-tenancy              = [
    ....
  3. Cree su infraestructura sencilla con Terraform:
    terraform apply

    Cuando se le solicite confirmación, introduzca yes para crear los recursos.

Visualización de la creación en la consola (opcional)
  1. abra el menú de navegación y seleccione Identity & Security. En Identidad, seleccione Compartimentos.
  2. Refresque la página hasta que vea el nombre del compartimento.
  3. Abra el menú de navegación , seleccione Red y, a continuación, seleccione Redes virtuales en la nube.
  4. Seleccione su compartimento.

    Si no encuentra el compartimento, refresque la página.

  5. Seleccione la VCN y, a continuación, revise los recursos creados.
  6. Abra el menú de navegación y seleccione Recursos informáticos. En Recursos informáticos, seleccione Instancias.
  7. Vea que la instancia aparece en la lista de instancias.
Revisión de las salidas

Revise las salidas del terminal de salida.

Ejemplo de salida mostrada en el terminal:
oci_identity_compartment.tf-compartment: Creating...
oci_identity_compartment.tf-compartment: Creation complete after 7s [id=xxx]
module.vcn.oci_core_vcn.vcn: Creating...
module.vcn.oci_core_vcn.vcn: Creation complete after 2s [id=xxx]
module.vcn.oci_core_internet_gateway.ig[0]: Creating...
module.vcn.oci_core_nat_gateway.nat_gateway[0]: Creating...
module.vcn.oci_core_default_security_list.lockdown[0]: Creating...
module.vcn.oci_core_service_gateway.service_gateway[0]: Creating...
oci_core_security_list.private-security-list: Creating...
oci_core_security_list.public-security-list: Creating...
module.vcn.oci_core_internet_gateway.ig[0]: Creation complete after 1s [id=xxx]
module.vcn.oci_core_route_table.ig[0]: Creating...
oci_core_security_list.public-security-list: Creation complete after 1s [id=xxx]
module.vcn.oci_core_default_security_list.lockdown[0]: Creation complete after 1s [id=xxx]
oci_core_security_list.private-security-list: Creation complete after 1s [id=xxx]
module.vcn.oci_core_route_table.ig[0]: Creation complete after 1s [id=xxx]
oci_core_subnet.vcn-public-subnet: Creating...
module.vcn.oci_core_nat_gateway.nat_gateway[0]: Creation complete after 2s [id=xxx]
module.vcn.oci_core_service_gateway.service_gateway[0]: Creation complete after 3s [id=xxx]
module.vcn.oci_core_route_table.service_gw[0]: Creating...
module.vcn.oci_core_route_table.nat[0]: Creating...
module.vcn.oci_core_route_table.service_gw[0]: Creation complete after 0s [id=xxx]
module.vcn.oci_core_route_table.nat[0]: Creation complete after 1s [id=xxx]
oci_core_subnet.vcn-private-subnet: Creating...
oci_core_subnet.vcn-public-subnet: Creation complete after 2s [id=xxx]
oci_core_instance.ubuntu_instance: Creating...
oci_core_subnet.vcn-private-subnet: Creation complete after 2s [id=xxx]
oci_core_instance.ubuntu_instance: Still creating... [10s elapsed]
oci_core_instance.ubuntu_instance: Still creating... [20s elapsed]
oci_core_instance.ubuntu_instance: Still creating... [30s elapsed]
oci_core_instance.ubuntu_instance: Creation complete after 38s [id=xxx]

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

Referencias: