Creación de scripts y archivos de estado con detección de recursos

Genere 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, puede crear scripts y archivos de estado para los recursos de su cuenta mediante la función de detección de recursos. A continuación, utilice Terraform para gestionar los recursos.

Las tareas clave incluyen cómo:

  • Crear un recurso a través de la consola.
  • Crear scripts y un archivo de estado para el recurso mediante la función de detección de recursos.
  • Actualizar el recurso con Terraform.
  • Confirmar que el recurso se ha actualizado en la consola.
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 del arrendamiento al entorno local con la etiqueta Recuperar datos, Crear scripts y Crear un archivo de estado. 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 y crear scripts y archivos de estado mediante los comandos del proveedor de OCI de Terraform y el registro de Terraform. El arrendamiento contiene un bucket con el nombre rd-bucket, en un compartimento denominado rd-compartment. La detección de recursos está recuperando información sobre este bucket para crear scripts de Terraform y un archivo de estado en el entorno del usuario.

Para obtener más información, consulte:

Antes de empezar

Para realizar correctamente este tutorial, debe tener lo siguiente:

Requisitos
  • Una cuenta de Oracle Cloud Infrastructure. Consulte Solicitar y gestionar promociones de Oracle Cloud gratis.
  • Una computadora MacOS, Linux o Windows.
  • Recursos del tutorial de Terraform:
    • Siga todos los pasos de Configuración de detección de recurso.
    • Anote el comando del proveedor de Terraform de OCI:
      • Cloud Shell: terraform-provider-oci_<version> de /usr/bin
      • Instancia informática o un entorno local: utilice el <shorter-alias> que ha creado en el tutorial anterior para utilizarlo en lugar del comando terraform-provider-oci_<version> .
        • Ejemplo: tf-oci
  • Terraform v1.1.3+:
    • Si utiliza Cloud Shell, no necesita instalar Terraform. Terraform ya está instalado.
    • Si utiliza una instancia informática o un entorno local, siga los pasos de Instalación de Terraform.

1. Creación de un recurso

Cree un bucket en su arrendamiento a través de la consola. Este cubo no tiene un script de Terraform. Posteriormente, utilice la detección de recursos para crear un script de Terraform y un archivo de estado para el bucket.

Adición de una política de compartimento

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-your-username-belongs-to> to manage compartments in tenancy

Con este privilegio, puede crear un compartimento para todos los recursos del tutorial.

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: manage-compartments
    • Descripción: Allow the group <a-group-your-username-belongs-to> to list, create, update, delete and recover compartments in the 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-your-username-belongs-to> to manage compartments in tenancy
  11. Haga clic en Crear.

Referencia: Detalles de combinaciones de verbos + tipo de recurso (consulte el tipo de recurso compartments)

Crear un compartimento

Cree un compartimento para los recursos que cree en este tutorial.

  1. En la Consola: abra el menú de navegación , seleccione Identidad y seguridad. En Identidad, seleccione Compartimentos.
  2. Seleccione Create Compartment.
  3. Introduzca los siguientes valores:
    • Nombre: <your-compartment-name>
    • Descripción: Compartment for <your-description>.
    • Compartimento principal: <your-tenancy>(root)
  4. Seleccione Create Compartment.

Referencia: Creación de un compartimento

Adición de una política de recursos

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-your-username-belongs-to> to manage all-resources in compartment <your-compartment-name>
                    

Con este privilegio, puede gestionar todos los recursos del compartimento, otorgándole derechos administrativos en dicho compartimento.

Pasos para agregar la política
  1. En la consola: abra el menú de navegación y seleccione Identidad y seguridad. En Identidad, seleccione Políticas.
  2. Seleccione su compartimento.
  3. Seleccione Crear política.
  4. En la página Crear política, introduzca los siguientes valores:
    • Name: manage-<your-compartment-name>-resources
    • Description:: Allow users to list, create, update, and delete resources in <your-compartment-name>.
    • Compartment: <your-tenancy>(root)
  5. En Creador de políticas, introduzca los siguientes valores:
    • Casos de uso de política: Compartment Management
    • Plantillas de políticas comunes: Let compartment admins manage the compartment
    • Dominio de identidad: <identity-domain>
    • Grupos: <a-group-your-username-belongs-to>
    • Ubicación: <your-compartment-name>
  6. Haga clic en Crear.

Referencia: Políticas comunes

Creación de un cubo

Cree un bucket en el compartimento.

  1. Abra el menú de navegación y seleccione Storage. En Almacenamiento de objetos y archivos, seleccione Cubos.
  2. Seleccione el compartimento: <your-compartment-name> .
  3. Seleccione Crear cubo.
  4. Introduzca los siguientes valores:
    • Nombre del cubo: <your-bucket-name>
    • Mantenga el resto de los valores por defecto.
  5. Haga clic en Crear.
Ha creado correctamente un bucket privado.
Nota

Asegúrese de crear el cubo en <your-compartment-name> .

2. Detección del recurso

Descubra el cubo que ha creado en el compartimento.

Descubrimiento del cubo
  1. En el directorio $HOME, suprima y vuelva a crear el directorio resource-discovery creado para el tutorial Configuración de Detección de Recursos.
    cd
    rm -R resource-discovery
    mkdir resource-discovery
  2. Ejecute el siguiente comando:
    tf-oci -command=export -compartment_name=<your-compartment-name> -services=object_storage -output_path=$HOME/resource-discovery
    Cloud Shell:
    
                                        terraform-provider-oci_<version>
                                         -command=export -compartment_name=<your-compartment-name> -services=object_storage -output_path=$HOME/resource-discovery
    • Sustituya <your-compartment-name> por el nombre del compartimento.
    Salida de ejemplo:
    ...
    INFO <date> [INFO] ===> Generating resource 'oci_objectstorage_namespace.export_namespace'
    INFO <date> [INFO] ===> Generating resource 'oci_objectstorage_bucket.export_<your-bucket-name>'
    INFO <date> [INFO] Optional TF attribute 'kms_key_id' not found in source
    INFO <date> Found 2 'object_storage' resources. Generated under '/<home-directory>/resource-discovery/object_storage.tf'.
    INFO <date> === COMPLETED ===
    Nota

    Puede que aparezca el siguiente mensaje:
    <date> ERROR IN GET: Service error: LifecyclePolicy NotFound. The bucket '<your-bucket-name>' does not define a lifecycle policy.. http status code: 404. Opc request id: iad-1:xxx

    La falta de una política de ciclo de vida no supone un problema para este tutorial. Para planificar que el servicio archive o suprima automáticamente este cubo, consulte Uso de la gestión del ciclo de vida de objetos.

  3. Revise los scripts de Terraform generados.
    cd resource-discovery
    ls
    • object_storage.tf
    • provider.tf
    • vars.tf
  4. Consulte el script object_storage.tf.
    cat object_storage.tf
    ## This configuration was generated by terraform-provider-oci
    
    data oci_objectstorage_namespace export_namespace {
      compartment_id = var.compartment_ocid
    }
    resource oci_objectstorage_bucket export_<your-bucket-name> {
      access_type    = "NoPublicAccess"
      auto_tiering   = "Disabled"
      compartment_id = var.compartment_ocid
      defined_tags = {
      }
      freeform_tags = {
      }
      #kms_key_id = <<Optional value not found in discovery>>
      metadata = {
      }
      name                  = "<your-bucket-name>"
      namespace             = data.oci_objectstorage_namespace.export_namespace.namespace
      object_events_enabled = "false"
      storage_tier          = "Standard"
      versioning            = "Disabled"
    }
Ha detectado correctamente recursos de Object Storage en su compartimento.
Explicación
  • Vaya a Uso (Detección de recursos).

    Se muestran dos opciones de comandos.

  • Seleccione la opción de comando que utiliza compartment_name como comando base:
    terraform-provider-oci -command=export -compartment_name=<xxx> -output_path=<xxx>
  • 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

      • Introduzca el nombre del compartimento que está detectando sus recursos:

        -compartment_name=<your-compartment-name>

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

        Ejemplo: -output_path=$HOME/resource-discovery

  • Agregue el siguiente parámetro de la sección Descripción de parámetro al comando base:
    • services
  • En los nombres de servicio enumerados para services, utilice:
    • object_storage
    • Ejemplo: -services=object_storage
    • Para detectar más de un servicio, separe los nombres de servicio con una coma.
    • Ejemplo: -services=object_storage,core
    • No necesita comillas alrededor de los nombres de servicio.
  • Cree el comando:

    Por ejemplo:

    tf-oci -command=export -compartment_name=<your-compartment-name> -services=object_storage -output_path=$HOME/resource-discovery
    Nota

    Solución de problemas
    [ERROR] output_path does not exist: stat /$HOME/resource-discovery: no such file or directory

    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.

    [ERROR] no output directory specified

    El analizador se para en el parámetro al que le falte un guión. Asegúrese de agregar un guión al principio de cada parámetro. Por ejemplo, si utiliza services en lugar de -services, el analizador no llega al directorio de salida.

Generación de un archivo de estado
Para realizar un seguimiento de los recursos, Terraform almacena el estado de los recursos en un archivo de estado. Posteriormente, cada vez que actualice un recurso con Terraform, Terraform actualizará el archivo de estado con ese cambio.
  1. Ejecute el comando de detección del recurso con el indicador -generate_state :
    • En Cloud Shell:
    • terraform-provider-oci_<version> -command=export -compartment_id=<tenancy-ocid> -command=export -compartment_name=<your-compartment-name> -services=object_storage -generate_state -output_path=$HOME/resource-discovery
    • En su instancia informática o en su entorno local:
      tf-oci -command=export -compartment_name=<your-compartment-name> -services=object_storage -generate_state -output_path=$HOME/resource-discovery
    Salida de ejemplo:
    ...
    Terraform has been successfully initialized!
    ...
    Import successful!
    
    The resources that were imported are shown above. These resources are now in
    your Terraform state and will henceforth be managed by Terraform.
    
    INFO <date> [INFO] ===> Generating resource 'oci_objectstorage_namespace.export_namespace'
    INFO <date> [INFO] ===> Generating resource 'oci_objectstorage_bucket.export_<your-bucket-name>'
    INFO <date> [INFO] Optional TF attribute 'kms_key_id' not found in source
    INFO <date> Found 2 'object_storage' resources. Generated under '/<home-directory>/resource-discovery/object_storage.tf'.
    INFO <date> === COMPLETED ===
    
    Nota

    Solución de problemas:
    • Error: Fallo al consultar los paquetes de proveedores disponibles
      • Si está en una VPN, compruebe la configuración del proxy.
  2. Consulte el contenido del directorio resource-discovery.
    ls

    Salida de ejemplo:

    • object_storage.tf
    • provider.tf
    • terraform.tfstate
    • vars.tf
    Nota

    El comando de detección de recursos sobrescribe los archivos <resource>.tf cada vez que lo ejecuta. Si no especifica un servicio, crea un archivo <resource>.tf para cada recurso del compartimento especificado.
  3. Vea el archivo de estado de Terraform generado.
    cat terraform.tfstate

    Salida de ejemplo:

    ...
    "instances": [
      {
          "bucket_id": "ocid1.bucket.xxx",
          "compartment_id": "ocid1.compartment.xxx",
          "created_by": "ocid1.user.xxx",
          "id": "xxx/<your-bucket-name>",
    ...

Felicidades! Ha creado un archivo de estado para el recurso de bucket.

Referencias:

3. Actualización del recurso

Actualice el nombre del bucket en el archivo object_storage.tf y, a continuación, ejecute los scripts de Terraform. Su cuenta autentica los scripts y, a continuación, Terraform actualiza el nombre del bucket. Confirme el nuevo nombre del bucket a través de la consola.

Cambio del nombre del cubo
  1. En su editor, abra el archivo object_storage.tf y cambie el nombre del cubo de <your-bucket-name> a <your-bucket-name>-2.
    Nota

    Solo puede cambiar el nombre de los cubos vacíos.
    ## This configuration was generated by terraform-provider-oci
    
    data oci_objectstorage_namespace export_namespace {
      compartment_id = var.compartment_ocid
    }
    resource oci_objectstorage_bucket export_<your-bucket-name> {
      access_type    = "NoPublicAccess"
      auto_tiering   = "Disabled"
      compartment_id = var.compartment_ocid
      defined_tags = {
      }
      freeform_tags = {
      }
      #kms_key_id = <<Optional value not found in discovery>>
      metadata = {
      }
      name                  = "<your-bucket-name>-2"
      namespace             = data.oci_objectstorage_namespace.export_namespace.namespace
      object_events_enabled = "false"
      storage_tier          = "Standard"
      versioning            = "Disabled"
    }
  2. Guarde el archivo object_storage.tf.
Inicialización
Al crear un archivo de estado, la detección de recursos inicializa un directorio de trabajo que incluye archivos de configuración de Terraform. Acostúmbrese a ejecutar este comando cada vez que actualice los scripts de Terraform.
  1. Compruebe el contenido del directorio resource-discovery.
    ls -a

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

  2. Confirme que tiene Terraform instalado.
    terraform -v
  3. Ejecute el comando init:
    terraform init

    Salida de ejemplo:

    Initializing the backend...
    
    Initializing provider plugins...
    - Using previously-installed hashicorp/oci vx.x.x
    ...
    Terraform has been successfully initialized!
Planificación
Un plan de ejecución es la lista de cambios que Terraform tiene previsto aplicar a su cuenta.
  1. Cree un plan de ejecución:
    terraform plan
  2. Revise el plan de ejecución.

    El comando terraform plan permite comprobar si los cambios mostrados en el plan de ejecución coinciden con sus expectativas, sin cambiar a los recursos reales. Salida de ejemplo:

    Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols:
    -/+ destroy and then create replacement
    
    Terraform will perform the following actions:
    
      # oci_objectstorage_bucket.export_<your-bucket-name>
                                        must be replaced
    -/+ resource "oci_objectstorage_bucket" "export_<your-bucket-name>" {
    ...
        ~ name = "<your-bucket-name>" -> "<your-bucket-name>-2" # forces replacement
            namespace = "<your-tenancy>"
            ...
    
    Plan: 1 to add, 0 to change, 0 to destroy.
Aplicar

Actualización del cubo

  1. Ejecute los scripts de Terraform:
    terraform apply
  2. Cuando se le solicite confirmación, introduzca yes para el nombre del cubo que se va a sustituir.

    Salida de ejemplo:

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

Búsqueda de un nuevo nombre de bucket en la consola

  1. Abra el menú de navegación y seleccione Almacenamiento. En Object Storage & Archive Storage, seleccione Buckets.
  2. Seleccione el compartimento: <your-compartment-name> .
  3. En la lista de buckets, compruebe el nombre del cubo.

    El nombre del cubo es ahora <your-bucket-name>-2.