Configuración de la detección de recursos

Configure la detección de recursos para generar archivos de Terraform para los recursos existentes en el compartimento.

Utilice la función de detección de recursos de OCI para:

  • Crear archivos de estado para recursos existentes en la consola y, a continuación, agregar esos recursos a una configuración de Terraform.
  • Duplicar su infraestructura existente en un nuevo arrendamiento o región.
  • Permite detectar el cambio de estado para los recursos actualizados.

En este tutorial, configurará la función de detección de recursos del proveedor Oracle Cloud Infrastructure Terraform en su entorno local. Para confirmar la configuración, ejecute la detección de recursos para recuperar información desde su arrendamiento y crear un script para ella.

Las tareas clave incluyen cómo:

  • Crear claves RSA.
  • Instalar los binarios del proveedor de Terraform de OCI.
  • Configurar las variables de autenticación de la API del proveedor Terraform de OCI.
  • Autenticar los comandos de la CLI del proveedor de OCI.
  • Crear un script en su entorno, en relación con los dominios de disponibilidad de su arrendamiento, mediante la función de detección de recursos.
Diagrama de un usuario conectado desde un entorno local a un arrendamiento de Oracle Cloud Infrastructure. El entorno local es Linux y tiene instalados binarios del proveedor Terraform de OCI. Hay una flecha que va del entorno local conectado a Terraform Registry 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 variables del proveedor de OCI para que las autentique su arrendamiento. A continuación, el usuario puede recuperar información del arrendamiento mediante los comandos del proveedor Terraform de OCI y el registro de Terraform. En este ejemplo, el arrendamiento muestra tres dominios de disponibilidad, que es la información que recupera la detección de recursos para crear scripts de Terraform en el entorno del usuario.

Para obtener más información, consulte Casos de uso y beneficios.

Antes de empezar

Para realizar correctamente este tutorial, debe tener lo siguiente:

MacOS o Linux
Windows 10

1. Preparación

Prepare su entorno para autenticar y ejecutar comandos de detección de recursos. Además, recopile la información que su cuenta necesita para autenticar sus comandos.

Creación de claves RSA

Puede crear claves RSA para la firma de API en su cuenta de Oracle Cloud Infrastructure.

Nota

Si utiliza Cloud Shell o Resource Manager, omita la creación de las claves de RSA. Ya se ha autenticado al conectarse a la consola de OCI.
  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 comandos del proveedor de Terraform OCI y cópielos en el blo de notas.

Nota

Si utiliza Cloud Shell, solo tendrá que buscar <tenancy-ocid> en el siguiente paso.
  1. Recopile la siguiente información de credenciales de la consola de Oracle Cloud.
    • OCID de arrendamiento: <tenancy-ocid>
      • En la barra de navegación, seleccione el menú Perfil Icono de menú de perfil y, a continuación, seleccione Arrendamiento: <your_tenancy_name>.
    • OCID de usuario: <user-ocid>
      • En el menú de navegación , seleccione el menú Perfil Icono de menú de perfil y, a continuación, seleccione Configuración de usuario.
      • Copiar OCID.
    • H huella: <fingerprint>
      • En el menú de navegación , seleccione el menú Perfil Icono de menú de perfil y, a continuación, seleccione Configuración de usuario.
      • Seleccione Claves de API.
      • Copie la huella asociada a la clave pública RSA creada en la sección Creación de claves RSA. El formato es: xx:xx:xx...xx.
    • Región: <region-identifier>
  2. Recopile la siguiente información de su entorno.
    • Ruta de acceso de clave privada: <rsa-private-key-path>
Instalación del proveedor Terraform de OCI
Nota

Si utiliza Cloud Shell, omita esta sección.

Instale la última versión de los binarios del proveedor de Terraform de OCI v4.2+:

  1. Desde un explorador, vaya a HashiCorp Releases.
  2. Seleccione el último enlace.
  3. Busque el enlace del entorno y, a continuación, copie la dirección del enlace. Ejemplo para Linux de 64 bits:
    https://releases.hashicorp.com/terraform-provider-oci/4.59.0/terraform-provider-oci_4.59.0_linux_amd64.zip
  4. En su entorno, cree un directorio temporal y cambie a ese directorio:
    mkdir temp
    cd temp
  5. Descargue el archivo zip de Terraform. Ejemplo:
    wget https://releases.hashicorp.com/terraform-provider-oci/4.59.0/terraform-provider-oci_4.59.0_linux_amd64.zip
  6. Descomprimir el archivo. Ejemplo:
    unzip terraform-provider-oci_4.59.0_linux_amd64.zip
  7. Mueva la carpeta descomprimida a /usr/local/bin. Ejemplo:
    sudo mv terraform-provider-oci_v4.59.0_x4 /usr/local/bin
    Nota

    Utilice sudo para el directorio /usr/local/bin si no permite ejecutar los comandos.
  8. Utilice un enlace simbólico para acortar el comando terraform-provider-oci_<version>:
    sudo ln -s <source-executable> <shorter-alias>
    cd /usr/local/bin/
    sudo ln -s terraform-provider-oci_<version> tf-oci

    Para este tutorial, utilice tf-oci para <shorter-alias>, en lugar de <source-executable>.

  9. Vuelva al directorio de inicio:
    cd
  10. Compruebe la versión del proveedor de Terraform de OCI:
    Nota

    En MacOS, debe crear una excepción de seguridad para el ejecutable.
    tf-oci

    Salida de ejemplo: [INFO] terraform-provider-oci 4.59.0.

2. Creación de un script de autenticación

Cree un script de shell para asignar información de autenticación a las variables de autenticación del proveedor de OCI. Su cuenta de Oracle Cloud Infrastructure autentica sus comandos de proveedor de OCI mediante los valores asignados a estos parámetros.

Adición de autenticación
Nota

Si utiliza Cloud Shell o Resource Manager, no necesita agregar autenticación. Continúe con la sección 3. Detectar un recurso.
  1. Cree un archivo de secuencia de comandos ejecutable en algún lugar de PATH y asígnele el nombre provider-oci.sh. Por ejemplo, si ~/bin está en su PATH, los pasos son los siguientes:
    cd ~/bin
    touch provider-oci.sh
    chmod 755 provider-oci.sh
    ls -l

    Obtendrá algo similar a:

    -rwxr-xr-x 1 <your-username> <your-username> 0 <date> provider-oci.sh
  2. Agregue el siguiente código a provider-oci.sh.

    Sustituya los campos con corchetes con la información recopilada en Recopilación de información necesaria.

    #!/bin/bash
    export TF_VAR_tenancy_ocid="<tenancy-ocid>"
    export TF_VAR_user_ocid="<user-ocid>"
    export TF_VAR_fingerprint="<fingerprint>"
    export TF_VAR_private_key_path="<rsa-private-key-path>"
    export TF_VAR_region="<region-identifier>"
  3. Guarde el archivo provider-oci.sh.
Explicación
  • Vaya a Autenticación (Detección de recursos).
  • Configure las siguientes variables de entorno para la autenticación basada en claves de API:
    • TF_VAR_tenancy_ocid
    • TF_VAR_user_ocid
    • TF_VAR_fingerprint
    • TF_VAR_private_key_path
    • TF_VAR_region
Exportación de variables de entorno

En esta sección, ejecute el archivo provider-oci.sh para agregar las variables de autenticación del proveedor de OCI a las variables de entorno.

  1. Desde el directorio $HOME/bin, ejecute el archivo provider-oci.sh.
    source provider-oci.sh
  2. Confirme que las variables de autenticación del proveedor de OCI se agregan a las variables de entorno.
    env | sort

    Las variables se muestran en el orden alfabético. Por ejemplo:

    ...
    TF_VAR_fingerprint=<fingerprint>
    TF_VAR_private_key_path=<rsa-private-key-path>
    TF_VAR_region=<region-identifier>
    TF_VAR_tenancy_ocid=<tenancy-ocid>
    TF_VAR_user_ocid=<user-ocid>
    ...
  3. Para cargar las variables de entorno, cuando se inicia un nuevo shell, agregue el comando source ~/bin/provider-oci.sh a .bashrc.
    source ~/bin/provider-oci.sh

3. Detección de un recurso

Descubra los dominios de disponibilidad de su arrendamiento.

Ejecución de detección de recursos

Cada arrendamiento tiene una lista de dominios de disponibilidad. Al detectar los dominios de disponibilidad en su región, confirma lo siguiente:

  • Su cuenta de Oracle Cloud Infrastructure puede autenticar sus comandos de proveedor de Oracle Cloud Infrastructure.
  • Puede obtener información de su cuenta con la función de detección de recursos.
  1. En el directorio $HOME, cree un directorio denominado resource-discovery.
    cd
    mkdir resource-discovery
  2. Si utiliza Cloud Shell, busque el archivo de proveedor de Terraform de OCI instalado en el directorio /usr/bin.
    ls /usr/bin

    El nombre de archivo es:

    terraform-provider-oci_<version>
                                

    Nombre de archivo de ejemplo:

    terraform-provider-oci_v5.2.1
  3. Ejecute el siguiente comando:
    • En Cloud Shell:
      terraform-provider-oci_<version> -command=export -compartment_id=<tenancy-ocid> -services=availability_domain -output_path=$HOME/resource-discovery
    • En su instancia informática o en su entorno local:
      tf-oci -command=export -compartment_id=<tenancy-ocid> -services=availability_domain -output_path=$HOME/resource-discovery
    Importante

    • Sustituya <tenancy-ocid> por la información de Recopilación de la información necesaria.
    • Si utiliza Cloud Shell, sustituya terraform-provider-oci_<version> por el nombre de archivo que ha encontrado en el paso 2.

    Salida de ejemplo:

    ...
    INFO <date> [INFO] ===> Generating resource 'oci_identity_availability_domain.export_QnsC-US-ASHBURN-AD-1'
    INFO <date> [INFO] ===> Generating resource 'oci_identity_availability_domain.export_QnsC-US-ASHBURN-AD-2'
    INFO <date> [INFO] ===> Generating resource 'oci_identity_availability_domain.export_QnsC-US-ASHBURN-AD-3'
    ...
    INFO <date> Found 6 'availability_domain' resources. Generated under '/<home-directory>/resource-discovery/availability_domain.tf'.
    INFO <date> === COMPLETED ===
    Nota

    • El OCID de arrendamiento es el OCID de compartimento para el compartimento raíz. Al proporcionar un <compartment-ocid> específico o su <tenancy-ocid> se obtienen los mismos dominios de disponibilidad.
    • Para detectar recursos de identidad, no necesita mencionar un OCID de compartimento. En el ejemplo anterior, obtiene el mismo resultado si elimina compartment_id del comando. compartment_id permite conocer la sintaxis de otros servicios.
Solución de Problemas
  • mensaje de error: Fallo al consultar los paquetes de proveedores disponibles:
    • Si estás en una VPN, comprueba tu configuración de proxy.
  • Errores 401 - (Error de servicio: No autenticado):
    • Tiene un valor incorrecto para uno de los siguientes:
      • OCID de arrendamiento
      • OCID de usuario
      • huella
      • Clave privada de RSA (la ruta o la clave)
  • no existe dicho host:
    • Tiene un valor incorrecto para lo siguiente:
      • identificador de región
Explicación
  • Vaya a Uso (Detección de recursos).

    Se muestran dos opciones de comandos.

  • Seleccione la opción de comando que utiliza compartment_id como comando base:
    terraform-provider-oci -command=export -compartment_id= -output_path=
  • Actualice el comando base:
    • En lugar de terraform-provider-oci, utilice el comando de enlace simbólico:

      tf-oci

    • Revise la sección Descripción de parámetro para agregar valores adecuados a los parámetros del comando base:
      • Utilice el comando export para realizar la detección de recursos:

        -command=export

      • Agregue el OCID del compartimento en el que está detectando recursos:

        -compartment_id=<tenancy-ocid>

      • Cree y, a continuación, especifique un directorio para los recursos detectados:

        Ejemplo: -output_path=$HOME/resource-discovery

  • Busque la frase availability_domain y observe la siguiente información:
    Resources that are dependent on availability domains will be generated under availability_domain.tf file. These include:
    
        oci_core_boot_volume
        oci_file_storage_file_system
        oci_file_storage_mount_target
        oci_file_storage_snapshot
    
  • Para servicios, utilice:
    • availability_domain (aunque no sea un servicio, funciona con el servicio).
    • Ejemplo: -services=availability_domain
    • No necesita comillas alrededor de los nombres de servicio.
  • Cree el comando:

    Por ejemplo:

    tf-oci -command=export -compartment_id=<tenancy-ocid> -services=availability_domain -output_path=$HOME/resource-discovery
    Nota

    El comando de detección de recursos no crea un directorio para los recursos detectados. Cree un directorio y especifique la ruta de acceso en el comando.
Revisión de recursos detectados
  1. En el directorio $HOME, cambie al directorio resource-discovery.
    cd resource-discovery
  2. Visualice el contenido de la detección.
    ls

    Salida de ejemplo:

    availability_domain.tf  provider.tf  vars.tf
  3. Revise en el script de Terraform los dominios de disponibilidad:
    cat availability_domain.tf

    Salida de ejemplo:

    ## This configuration was generated by terraform-provider-oci
    
    data oci_identity_availability_domain export_QnsC-US-ASHBURN-AD-1 {
      compartment_id = var.compartment_ocid
      ad_number      = "1"
    }
    data oci_identity_availability_domain export_QnsC-US-ASHBURN-AD-2 {
      compartment_id = var.compartment_ocid
      ad_number      = "2"
    }
    data oci_identity_availability_domain export_QnsC-US-ASHBURN-AD-3 {
      compartment_id = var.compartment_ocid
      ad_number      = "3"
    }
    resource oci_file_storage_file_system export_JennFS ... <some info>
    resource oci_file_storage_snapshot export_Snapshot-1 ... <some info>
    resource oci_file_storage_mount_target export_MountTarget-xxx ... <some info>
    Nota

    El script de Terraform availability_domain.tf utiliza una variable denominada compartment_ocid. Busque el valor de esta variable en vars.tf.
  4. Revise las variables:
    cat vars.tf

    Salida de ejemplo:

    variable compartment_ocid { default = "<tenancy-ocid>" }
    variable region { default = "us-ashburn-1" }
  5. Revise la información del script del proveedor:
    cat provider.tf

    Salida de ejemplo:

    provider oci {
            region = var.region
    }
    Nota

    • provider.tf indica que está utilizando el proveedor Terraform de OCI con provider oci { }.
    • El archivo provider.tf no incluye la información de autenticación, ya que proporciona información de autenticación a través de las variables de entorno.

Felicidades! Su cuenta de Oracle Cloud Infrastructure ahora puede autenticar sus comandos de proveedor Terraform de OCI. Y su entorno está listo para ejecutar los comandos de detección de recursos.

Referencias: