Configuración de Terraform de OCI

Configure los scripts del proveedor de Terraform de Oracle Cloud Infrastructure, documentados en el registro de Terraform, para conectarse a una cuenta de OCI. Confirme la configuración recuperando información del arrendamiento.

Las tareas clave incluyen cómo:

  • Crear claves RSA.
  • Configurar los scripts del proveedor de Terraform de Oracle Cloud Infrastructure:
    • Autentique los scripts de Terraform.
    • Obtenga información sobre los dominios de disponibilidad de su arrendamiento.
Diagrama de un usuario conectado desde un entorno local a un arrendamiento de Oracle Cloud Infrastructure. El entorno local es Linux y tiene Terraform instalado. Hay una flecha desde Terraform en el entorno local conectado al registro de Terraform en la nube. Hay una segunda flecha desde el entorno local que envía un mensaje al arrendamiento de Oracle Cloud Infrastructure del usuario con la etiqueta Autenticar? La tercera flecha va desde el arrendamiento hasta el entorno local con la etiqueta Recuperar datos. Estas flechas sugieren que el usuario ha configurado sus scripts de Terraform para que los autentique su arrendamiento. A continuación, el usuario puede recuperar la información del arrendamiento mediante Terraform y Registro de Terraform. En este ejemplo, el arrendamiento muestra tres dominios de disponibilidad, es decir, la información que el usuario está recuperando.

Para obtener más información, consulte:

Antes de empezar

Para realizar correctamente este tutorial, debe tener lo siguiente:

MacOS o Linux
Windows
Nota

En este tutorial se utiliza un entorno de VM de Oracle Linux con una unidad AMD para sus ejemplos, pero puede utilizar cualquier entorno mencionado en esta sección.

1. Preparación

Prepare su entorno para autenticar y ejecutar scripts de Terraform. Además, recopile la información que necesita su cuenta para autenticar los scripts.

Instalación de Terraform
En este tutorial se sugiere instalar la última versión de Terraform soportada para OCI Resource Manager. Resource Manager es un servicio para crear plantillas de Terraform para recursos de OCI. En caso de que desee utilizar Resource Manager con sus scripts de Terraform más adelante, estará soportada la versión de Terraform.
  1. En el entorno, compruebe la versión de Terraform.
    terraform -v
    Si no tiene la última versión de Terraform soportada, instale la última versión soportada mediante los siguientes pasos.
  2. Desde un explorador, vaya a HashiCorp List of Terraform Versions.
  3. Seleccione la carpeta con la última versión de Terraform soportada.

    Ejemplo: terraform_1.5.7

  4. Copie el nombre del archivo zip que coincide con el entorno en un bloc de notas.

    terraform_<version>_<your_environment>.zip

    Ejemplo para un entorno Linux AMD de 64 bits de Oracle: terraform_1.5.7_linux_amd64.zip

  5. En su entorno, cree un directorio temporal y cambie a ese directorio:
    mkdir temp
    cd temp
  6. Descargue el archivo zip de Terraform:
    wget https://releases.hashicorp.com/terraform/<version>/terraform_<version>_<your_environment>.zip
    Consejo

    Puede crear la URL copiando la dirección del explorador. Tenga en cuenta que <version> no incluye la palabra terraform.

    Por ejemplo:

    wget https://releases.hashicorp.com/terraform/1.5.7/terraform_1.5.7_linux_amd64.zip

    Si ves un error de conexión y estás en VPN, comprueba la configuración de tu proxy. Consulte Solución de problemas.

  7. Descomprimir el archivo. Ejemplo:
    unzip terraform_1.5.7_linux_amd64.zip
  8. Mueva la carpeta descomprimida a una carpeta que contenga los binarios de las aplicaciones de terceros que instale. Por ejemplo, para Oracle Linux, mueva la carpeta descomprimida a /usr/local/bin:
    sudo mv terraform /usr/local/bin
  9. Vuelva al directorio de inicio:
    cd
  10. Compruebe la versión de Terraform:
    terraform -v

    Ejemplo: Terraform v1.5.7 on linux_amd64

    No tenga en cuenta ningún mensaje que indique que la versión de Terraform está desactualizada. Lo importante es utilizar la última versión de Terraform soportada.

Ya ha instalado correctamente Terraform.
Creación de claves RSA
Puede crear claves RSA para la firma de API en su cuenta de Oracle Cloud Infrastructure.
Nota

Omita la creación de claves RSA si:
  1. Abra una ventana de terminal.
  2. En el directorio raíz, cree un directorio .oci.
    mkdir <your-home-directory>/.oci

    Ejemplo para Oracle Linux:

    mkdir /home/opc/.oci
    Nota

    Si utiliza el subsistema de Windows para Linux (WSL), cree el directorio /.oci directamente en el entorno de Linux. Si crea el directorio /.oci en una carpeta /mnt (sistema de archivos de Windows), debe utilizar el comando chmod para cambiar los permisos para los archivos de configuración de WSL.
  3. Genere una clave privada de 2.048 bits en formato PEM:
    openssl genrsa -out <your-home-directory>/.oci/<your-rsa-key-name>.pem 2048
  4. Cambie los permisos para que solo pueda leer y escribir en el archivo de clave privada:
    chmod 600 <your-home-directory>/.oci/<your-rsa-key-name>.pem
  5. Genere la clave pública:
    openssl rsa -pubout -in <your-home-directory>/.oci/<your-rsa-key-name>.pem -out $HOME/.oci/<your-rsa-key-name>_public.pem
  6. Copie la clave pública.
    En el terminal, introduzca:
    cat <your-home-directory>/.oci/<your-rsa-key-name>_public.pem

    Ejemplo (extracto):

    -----BEGIN PUBLIC KEY-----
    MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAoTFqF...
    ...
    -----END PUBLIC KEY——
  7. Agregue la clave pública a su cuenta de usuario.
    1. Conéctese a la consola de Oracle Cloud.
    2. En el menú de navegación , seleccione el menú Perfil Icono de menú de perfil y, a continuación, seleccione Configuración de usuario.
    3. Seleccione Claves de API.
    4. Seleccione Agregar clave de API.
    5. Seleccione Pegar una clave pública.
    6. Pegue el valor del paso anterior, incluidas las líneas con BEGIN PUBLIC KEY y END PUBLIC KEY.
    7. Haga clic en Agregar.

      Se abre el cuadro de diálogo Vista previa de archivo de configuración. Por ejemplo:

      [DEFAULT]
      user=ocid1.user.oc1..exampleid
      fingerprint=exampleid
      tenancy=ocid1.tenancy.oc1..exampleid
      region=us-ashburn-1
      key_file=<path to your private keyfile> # TODO
    8. Seleccione Copy (Copiar) y, a continuación, péguelo en el bloc de notas.

      La vista previa del archivo de configuración incluye información que necesitará más adelante, como los OCID de arrendamiento y usuario, la huella y la región.

Ahora ha configurado las claves RSA para conectarse a su cuenta de OCI.

Referencia
Cómo generar una clave de firma de API
Adición de la política de lista

Si su nombre de usuario está en el grupo Administrators, omita esta sección. De lo contrario, solicite al administrador que agregue la siguiente política a su arrendamiento:

allow group <a-group-that-your-username-belongs-to> to read all-resources in tenancy

Con este privilegio, puede mostrar todos los recursos de su arrendamiento.

Pasos para agregar la política
  1. Conéctese a la consola de Oracle Cloud.
  2. En el menú de navegación , seleccione el menú Perfil Icono de menú de perfil y, a continuación, seleccione Configuración de usuario.
  3. Seleccione Grupos o Mis grupos, según la opción que vea.
  4. En un bloc de notas, copie el nombre de un grupo al que pertenece el nombre de usuario.
  5. Abra el menú de navegación y seleccione Identidad y seguridad. En Identidad, seleccione Políticas.
  6. Seleccione el compartimento: <your-tenancy>(root)
  7. Seleccione Crear política.
  8. En la página Crear política, introduzca los siguientes valores:
    • Nombre: list-resources
    • Descripción: Allow the group <a-group-that-your-username-belongs-to> to list the resources in this tenancy.
    • Compartimento: <your-tenancy>(root)
  9. En Creador de Política, seleccione Mostrar Editor Manual.
  10. Pegue la siguiente política:
    allow group <a-group-that-your-username-belongs-to> to read all-resources in tenancy
  11. Haga clic en Crear.

Referencia: Políticas comunes

Recopilación de la información necesaria

Prepare la información que necesita para autenticar los scripts de Terraform y copie la información en un bloc de notas.

  1. Recopile la ruta a la clave privada que ha agregado en Crear claves RSA.

    Ejemplo para Oracle Linux: /home/opc/.oci/<your-rsa-key-name>.pem

  2. Recopile el OCID de usuario, la huella, el OCID de arrendamiento y la región desde la clave de API que ha agregado en Crear claves RSA. (Es posible que ya lo tenga en el bloc de notas).
    1. Conéctese a la consola de Oracle Cloud.
    2. En el menú de navegación , seleccione el menú Perfil Icono de menú de perfil y, a continuación, seleccione Configuración de usuario.
    3. Seleccione Claves de API.
    4. Busque la clave de API que ha agregado en Crear claves RSA.
    5. En el menú Acciones de la clave, seleccione Ver archivo de configuración.

      Se abre el cuadro de diálogo Vista previa de archivo de configuración. Por ejemplo:

      [DEFAULT]
      user=ocid1.user.oc1..exampleid
      fingerprint=xx:xx:xx...xx
      tenancy=ocid1.tenancy.oc1..exampleid
      region=us-ashburn-1
      key_file=<path to your private keyfile> # TODO
    6. Seleccione Copy (Copiar) y, a continuación, péguelo en el bloc de notas.

2. Creación de scripts

Cree scripts para la autenticación, para recuperar datos de su cuenta e imprimir salidas.

Adición de la autenticación basada en la clave de API
En primer lugar, configure un directorio para los scripts de Terraform. A continuación, agregue un script de proveedor para que la cuenta de OCI pueda autenticar los scripts que se ejecutan desde este directorio. Por último, agregue un script de versiones que contenga un bloque required_providers para declarar las versiones de proveedor necesarias.
  1. En <your-home-directory>, cree un directorio denominado tf-provider y cambie a ese directorio.
    mkdir tf-provider
    cd tf-provider
  2. Cree un archivo llamado provider.tf.
  3. Agregue el siguiente código a provider.tf:
    provider "oci" {
      tenancy_ocid = "<tenancy-ocid>"
      user_ocid = "<user-ocid>" 
      private_key_path = "<rsa-private-key-path>"
      fingerprint = "<fingerprint>"
      region = "<region-identifier>"
    }
  4. Guarde el archivo provider.tf.
  5. En el mismo directorio, cree un archivo denominado versions.tf.
  6. Agregue el siguiente código a versions.tf:
    terraform {
      required_providers {
        oci = {
          source  = "oracle/oci"
          version = ">=4.67.3"
        }
      }
      required_version = ">= 1.0.0"
    }
  7. Guardar el archivo versions.tf.
Explicación

Use las siguientes variables para la autenticación basada en claves de API:

  • tenancy_ocid
  • user_ocid
  • private_key_path
  • fingerprint
  • region
Para obtener más información sobre el proveedor de OCI Terraform, consulte
Consejo

No es necesario instalar el proveedor. El proveedor se descarga cuando se ejecutan los scripts en este tutorial.
Adición de un origen de datos
En esta sección, recuperará una lista de los dominios de disponibilidad en su arrendamiento. Al recuperar los datos, confirma que su cuenta de OCI autentica el script provider.tf y obtiene información de su cuenta.
  1. En el directorio tf-provider, cree un archivo denominado availability-domains.tf.
    Importante

    Asegúrese de que todos los archivos *.tf estén en el mismo directorio. Terraform procesa todos los archivos de un directorio en el orden correcto, según su relación. (Para un enfoque modular y una reutilización futura, coloque la información del proveedor en un archivo separado de otros scripts).
  2. Agregue el siguiente código a availability-domains.tf, sustituyendo el campo por corchetes, con información de Recopilación de información necesaria.
    # Source from https://registry.terraform.io/providers/oracle/oci/latest/docs/data-sources/identity_availability_domains
    
    # Tenancy is the root or parent to all compartments.
    # For this tutorial, use the value of <tenancy-ocid> for the compartment OCID.
    
    data "oci_identity_availability_domains" "ads" {
      compartment_id = "<tenancy-ocid>"
    }
    Nota

    El origen de datos obtiene una lista de dominios de disponibilidad en todo el arrendamiento. El arrendamiento es el OCID de compartimento para el compartimento raíz. Al proporcionar un "<compartment-ocid>" específico o el "<tenancy-ocid>" se muestra la misma lista.
Explicación

En Terraform, para recuperar datos, se utiliza un origen de datos. La recuperación de datos de un origen de datos es similar al método GET en las API de REST.

  • Vaya a Proveedor de Oracle Cloud Infrastructure.
  • En el cuadro Filtro de la parte superior izquierda, introduzca availability domains.
  • En Identidad, vaya a Orígenes de datos y seleccione oci_identity_availability_domains.

    El título de la página es el tipo de recurso: oci_identity_availability_domains

  • Busque el nombre del origen de datos en el título de la página:
    • Origen de Datos:
  • En la sección Referencia de argumento, busque todos los argumentos (entrada) etiquetados como (Necesario):
    • compartment_id
  • Cree un bloque de origen de datos:
    • Declare un origen de datos con la palabra clave: data .
    • Agregue una etiqueta para el nombre del origen de datos: "oci_identity_availability_domains"
    • Agregue una etiqueta de su elección para el nombre local:
      • La etiqueta puede contener letras, dígitos, caracteres de subrayado (_) y guiones (-). El primer carácter no debe ser un dígito.
      • En este tutorial se utiliza el nombre local, "ads", para crear data "oci_identity_availability_domains" "ads".
    • Dentro del bloque de código, proporcione valores para todos los argumentos necesarios.
      • Ejemplo: compartment_id = "<some-compartment-ocid>"
    • Para argumentos opcionales, proporcione valores para reducir los resultados de la recuperación. Solo algunos orígenes de datos tienen argumentos opcionales.
Adición de salidas

El origen de datos oci_identity_availability_domains recupera una lista de dominios de disponibilidad. En esta sección, declara un bloque de salida para imprimir la información recuperada.

  1. En el directorio tf-provider, cree un archivo denominado outputs.tf.
  2. Agregue el siguiente código a outputs.tf.
    # Output the "list" of all availability domains.
    output "all-availability-domains-in-your-tenancy" {
      value = data.oci_identity_availability_domains.ads.availability_domains
    }
  3. Guarde el archivo outputs.tf.
    Importante

    Asegúrese de que todos los archivos *.tf estén en el mismo directorio. Terraform procesa todos los archivos de un directorio en el orden correcto, según su relación.
Explicación
  • Vaya a Referencia de atributos (oci_identity_availability_domains).
    Nota

    Los atributos son las salidas que puede devolver para el origen de datos oci_identity_availability_domains.
  • Busque los atributos:
    • Atributo: availability_domains:
      • Lista de dominios de disponibilidad
      • Si muestra availability_domains:, obtendrá tres atributos para cada dominio de disponibilidad en la lista:
        • compartment_id
        • Identificador
        • nombre
  • Cree un bloque de salida de origen de datos:
    • Declare un bloque de salida con la palabra clave: output
    • Agregue una etiqueta a imprimir con los resultados de la salida:
      • La etiqueta puede contener letras, dígitos, caracteres de subrayado (_) y guiones (-). El primer carácter no debe ser un dígito.
      • Ejemplo: "all-availability-domains-in-your-tenancy"
    • Dentro del bloque de código, introduzca un valor para la salida de origen de datos con la expresión:
      • value = data.<data-source-name>.<local-name-for-data-source>.<attribute>
      • Ejemplo: value = data.oci_identity_availability_domains.ads.availability_domains

3. Ejecución de scripts

Ejecute los scripts de Terraform. Una vez que su cuenta autentica los scripts, Terraform recupera los dominios de disponibilidad de su arrendamiento.

Inicialización
Inicialice un directorio de trabajo en el directorio tf-provider.
  1. Ejecute el comando init de Terraform.
    terraform init

    Salida de ejemplo:

    Initializing the backend...
    
    Initializing provider plugins...
    
    Terraform has been successfully initialized!

    Si ve un error de conexión o un error de "no se pudo consultar" y está en VPN, compruebe la configuración de proxy. Consulte Solución de problemas.

  2. Compruebe el contenido del directorio tf-provider.
    ls -a

Ahora tiene una carpeta denominada .terraform que incluye los plugins para el proveedor oci.

Planificación
Cree un plan de ejecución para comprobar si los cambios que se muestran en el plan de ejecución coinciden con sus expectativas, sin cambiar los recursos reales.
Ejecute el comando plan de Terraform.
terraform plan

Salida de ejemplo:

data.oci_identity_availability_domains.ads: Reading...
data.oci_identity_availability_domains.ads: Read complete after 1s [id=xxx]

Changes to Outputs:
  + all-availability-domains-in-your-tenancy = [
      + {
          + compartment_id = "ocid1.tenancy.oc1..xxx"
          + id             = "ocid1.availabilitydomain.xxx"
          + name           = "QnsC:US-ASHBURN-AD-1"
        },
      + {
          + compartment_id = "ocid1.tenancy.oc1..xxx"
          + id             = "ocid1.availabilitydomain.yyy"
          + name           = "QnsC:US-ASHBURN-AD-2"
        },
      + {
          + compartment_id = "ocid1.tenancy.oc1..xxx"
          + id             = "ocid1.availabilitydomain.zzz"
          + name           = "QnsC:US-ASHBURN-AD-3"
        },
    ]

You can apply this plan to save these new output values to the Terraform state, without changing any real
infrastructure.
Nota

  • Está recuperando datos, por lo que el plan muestra que solo está agregando salidas. No va a agregar, cambiar ni destruir ningún recurso.
  • Está utilizando el archivo output.tf en lugar de la opción -out, por lo que puede ignorar el siguiente mensaje:
    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.
Aplicar
  1. Ejecute los scripts de Terraform y obtenga sus resultados:
    terraform apply
  2. Cuando se le solicite confirmación, introduzca yes.

    Después de ejecutar el comando apply, la salida se muestra en el terminal.

    Salida de ejemplo:
    Apply complete! Resources: 0 added, 0 changed, 0 destroyed.
    
    Outputs:
    
    all-availability-domains-in-your-tenancy = tolist([
      {
        "compartment_id" = "ocid1.tenancy.xxx"
        "id" = "ocid1.availabilitydomain.xxx"
        "name" = "QnsC:US-ASHBURN-AD-1"
      },
      {
        "compartment_id" = "ocid1.tenancy.xxx"
        "id" = "ocid1.availabilitydomain.xxx"
        "name" = "QnsC:US-ASHBURN-AD-2"
      },
      {
        "compartment_id" = "ocid1.tenancy.xxx"
        "id" = "ocid1.availabilitydomain.xxx"
        "name" = "QnsC:US-ASHBURN-AD-3"
      },
    ])

Felicidades! Su cuenta de Oracle Cloud Infrastructure ahora puede autenticar sus scripts del proveedor Terraform de Oracle Cloud Infrastructure.

Referencias:

Solución de Problemas

Es posible que encuentre los siguientes mensajes de error al ejecutar los scripts de Terraform.

Errores 401 - (Error de servicio: No autenticado)

Una de las siguientes variables tiene un valor incorrecto:

  • OCID de arrendamiento
  • OCID de usuario
  • Huella
  • Clave privada de RSA (la ruta o la clave)
  1. En el archivo provider.tf, compruebe los nombres de variables y sus valores.
    provider "oci" {
      tenancy_ocid = "<tenancy-ocid>"
      user_ocid = "<user-ocid>" 
      private_key_path = "<rsa-private-key-path>"
      fingerprint = "<fingerprint>"
      region = "<region-identifier>"
    }
  2. Actualice las variables o sus valores según sea necesario.
  3. Asegúrese de agregar comillas alrededor de los valores de cadena.
  4. Ejecute los scripts.

No se puede crear el cliente, configuración incorrecta: no se ha encontrado una configuración adecuada para la clave privada

Los scripts de Terraform no pueden encontrar la clave privada RSA.

  1. Repita los pasos para crear claves RSA y utilice la clave actualizada.
  2. Asegúrese de que en el archivo provider.tf, la variable que describe el RSA se denomina private_key_path.
    private_key_path = "<rsa-private-key-path>"
  3. Asegúrese de que la ruta de acceso a la clave privada RSA en el archivo provider.tf sea correcta. Por ejemplo, asegúrese de que la ruta empiece por una barra inclinada y tenga el nombre correcto para la clave privada, <your-rsa-key-name>.pem
  4. Elimine las variables de entorno de <rsa-private-key-path>.

    Por ejemplo, en el archivo provider.tf, en lugar de $HOME/.oci/<rsa-private-key-path> , utilice /home/opc/<rsa-private-key-path> .

    Nota

    Si utiliza el subsistema de Windows para Linux (WSL), cree el directorio /.oci directamente en el entorno de Linux. Si crea el directorio /.oci en una carpeta /mnt (sistema de archivos de Windows), debe utilizar el comando chmod para cambiar los permisos para los archivos de configuración de WSL.

No existe dicho host

El identificador de región tiene un valor incorrecto.

  1. En la barra de navegación de la consola, busque su región.
  2. En la tabla de las regiones y los dominios de disponibilidad, busque <region-identifier> de su región. Por ejemplo: us-ashburn-1.
  3. En el archivo provider.tf, actualice el valor de <region-identifier> y vuelva a intentarlo.

Error al consultar los paquetes de proveedores disponibles

Si estás en una VPN, comprueba la configuración del proxy.

  1. Desconéctese de la VPN.
  2. Conéctese a su máquina virtual o a su entorno sin la VPN y ejecute los siguientes scripts de Terraform.
    terraform init
    terraform plan
    terraform apply
    Si no recibe un mensaje de error, la configuración del proxy VPN está causando el error.
  3. Consulte con el administrador, actualice la configuración del proxy y vuelva a intentarlo.