Usa Terraform para crear buckets de almacenamiento y subir objetos

En esta guía de inicio rápido, crearás un archivo de configuración de Terraform que aprovisione un bucket de almacenamiento y suba un objeto sample_file.txt al bucket. Para completar esta guía de inicio rápido, usarás el editor de Cloud Shell, la terminal de Cloud Shell y la CLI de Terraform, que está preinstalada en Cloud Shell.

Antes de comenzar

A fin de configurar un proyecto para esta guía de inicio rápido, completa los siguientes pasos:

  1. Accede a tu cuenta de Google Cloud. Si eres nuevo en Google Cloud, crea una cuenta para evaluar el rendimiento de nuestros productos en situaciones reales. Los clientes nuevos también obtienen $300 en créditos gratuitos para ejecutar, probar y, además, implementar cargas de trabajo.
  2. En la página del selector de proyectos de la consola de Google Cloud, selecciona o crea un proyecto de Google Cloud.

    Ir al selector de proyectos

  3. Asegúrate de que la facturación esté habilitada para tu proyecto de Google Cloud.

  4. Habilita la API de Cloud Storage.

    Habilita la API

  5. En la página del selector de proyectos de la consola de Google Cloud, selecciona o crea un proyecto de Google Cloud.

    Ir al selector de proyectos

  6. Asegúrate de que la facturación esté habilitada para tu proyecto de Google Cloud.

  7. Habilita la API de Cloud Storage.

    Habilita la API

Crea la estructura de carpetas y el archivo de configuración de Terraform

Para crear el archivo de configuración de Terraform y el archivo que subirás como objeto a Cloud Storage, completa los siguientes pasos:

  1. En la consola de Google Cloud, activa Cloud Shell.

    Activar Cloud Shell

    En la parte inferior de la consola de Google Cloud, se inicia una sesión de Cloud Shell en la que se muestra una ventana de línea de comandos. Cloud Shell es un entorno de shell con Google Cloud CLI ya instalada y con valores ya establecidos para el proyecto actual. La sesión puede tardar unos segundos en inicializarse.

  1. Establece el proyecto de Google Cloud predeterminado en el que deseas aplicar tus configuraciones de Terraform:
    export GOOGLE_CLOUD_PROJECT=PROJECT_ID
  2. En la terminal de Cloud Shell, establece el directorio principal como el directorio activo:
    cd
  3. Crea una nueva carpeta llamada terraform:
    mkdir terraform
  4. Haz clic en Abrir editor en la barra de herramientas de la ventana de Cloud Shell para iniciar el editor de Cloud Shell.
  5. En el panel Explorador, haz clic con el botón derecho en la carpeta terraform y, luego, en Archivo nuevo.
  6. Ingresa main.tf como el nombre del archivo y haz clic en Aceptar.
  7. En el panel Explorador, haz clic con el botón derecho en la carpeta terraform y, luego, en Archivo nuevo.
  8. Ingresa sample_file.txt como el nombre del archivo y haz clic en Aceptar.

Define la infraestructura en el archivo de configuración de Terraform

Para definir la infraestructura que deseas aprovisionar en el archivo de configuración de Terraform, completa los siguientes pasos:

  1. En el Editor de Cloud Shell, abre el archivo main.tf.

  2. Copia la siguiente muestra en el archivo main.tf.

    # Create new storage bucket in the US
    # location with Standard Storage
    
    resource "google_storage_bucket" "static" {
     name          = "BUCKET_NAME"
     location      = "US"
     storage_class = "STANDARD"
    
     uniform_bucket_level_access = true
    }
    
    # Upload a text file as an object
    # to the storage bucket
    
    resource "google_storage_bucket_object" "default" {
     name         = "OBJECT_NAME"
     source       = "OBJECT_PATH"
     content_type = "text/plain"
     bucket       = google_storage_bucket.static.id
    }

    Reemplaza lo siguiente:

    • BUCKET_NAME por el nombre del bucket que deseas crear. Por ejemplo, my-bucket

    • OBJECT_NAME por el nombre del objeto que deseas subir. Para esta guía de inicio rápido, ingresa el nombre sample_file.txt.

    • OBJECT_PATH por la ruta de acceso al objeto que deseas subir. Para esta guía de inicio rápido, ingresa la ruta de acceso ~/terraform/sample_file.txt.

  3. Guarda el archivo main.tf.

Inicializa el directorio de trabajo que contiene el archivo de configuración de Terraform

Para inicializar Terraform y el directorio que contiene tu archivo de configuración de Terraform, completa los siguientes pasos:

  1. Para abrir la terminal de Cloud Shell, haz clic en Abrir terminal en la barra de herramientas del editor de Cloud Shell.

  2. En la terminal de Cloud Shell, configura la carpeta terraform como el directorio de trabajo actual:

    cd ~/terraform
    
  3. Inicializa Terraform mediante este comando:

    terraform init
    
  4. Si se te solicita que autorices Cloud Shell, haz clic en Autorizar.

    Terraform inicializa el directorio de trabajo. Si inicializa correctamente el directorio de trabajo, Terraform muestra un resultado similar al siguiente:

    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.
    

Obtén una vista previa del plan de ejecución

El plan de ejecución de Terraform se basa en la configuración de Terraform e indica los cambios que Terraform planea realizar en la infraestructura y los servicios de Cloud Storage.

Visualiza el plan de ejecución de Terraform:

terraform plan

Resultado de ejemplo:

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:

  # google_storage_bucket.static will be created
  + resource "google_storage_bucket" "static" {
      + force_destroy               = false
      + id                          = (known after apply)
      + location                    = "US"
      + name                        = "my-bucket"
      + project                     = "my-project"
      + public_access_prevention    = (known after apply)
      + self_link                   = (known after apply)
      + storage_class               = "STANDARD"
      + uniform_bucket_level_access = true
      + url                         = (known after apply)

      + versioning {
          + enabled = (known after apply)
        }

      + website {
          + main_page_suffix = (known after apply)
          + not_found_page   = (known after apply)
        }
    }

  # google_storage_bucket_object.default will be created
  + resource "google_storage_bucket_object" "default" {
      + bucket         = (known after apply)
      + content_type   = "text/plain"
      + crc32c         = (known after apply)
      + detect_md5hash = "different hash"
      + id             = (known after apply)
      + kms_key_name   = (known after apply)
      + md5hash        = (known after apply)
      + media_link     = (known after apply)
      + name           = "sample_file.txt"
      + output_name    = (known after apply)
      + self_link      = (known after apply)
      + source         = "sample_file.txt"
      + storage_class  = (known after apply)
    }

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

Aplica los cambios propuestos en el plan de ejecución

Para aplicar los cambios en tu archivo de configuración de Terraform, completa los siguientes pasos:

  1. Aplica los cambios del plan de ejecución a la infraestructura de Cloud Storage con el siguiente comando. Cuando aplicas los cambios, Terraform crea un bucket de almacenamiento y sube sample_file.txt al bucket.

    terraform apply
    

    Resultado de ejemplo:

    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:
    
      # google_storage_bucket.static will be created
      + resource "google_storage_bucket" "static" {
          + force_destroy               = false
          + id                          = (known after apply)
          + location                    = "US"
          + name                        = "my-bucket"
          + project                     = "my-project"
          + public_access_prevention    = (known after apply)
          + self_link                   = (known after apply)
          + storage_class               = "STANDARD"
          + uniform_bucket_level_access = true
          + url                         = (known after apply)
    
          + versioning {
              + enabled = (known after apply)
            }
    
          + website {
              + main_page_suffix = (known after apply)
              + not_found_page   = (known after apply)
            }
        }
    
      # google_storage_bucket_object.default will be created
      + resource "google_storage_bucket_object" "default" {
          + bucket         = (known after apply)
          + content_type   = "text/plain"
          + crc32c         = (known after apply)
          + detect_md5hash = "different hash"
          + id             = (known after apply)
          + kms_key_name   = (known after apply)
          + md5hash        = (known after apply)
          + media_link     = (known after apply)
          + name           = "sample_file.txt"
          + output_name    = (known after apply)
          + self_link      = (known after apply)
          + source         = "sample_file.txt"
          + storage_class  = (known after apply)
        }
    
    Plan: 2 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:
    
  2. Escribe yes y presiona Intro.

    Si se ejecuta de forma correcta, Terraform mostrará un resultado similar al siguiente:

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

Ve tu bucket de almacenamiento y el objeto subido

En la consola de Cloud, ve a la página Buckets de Cloud Storage.

Ir a Buckets

Aparecerá el bucket nuevo que contiene el objeto sample_file.txt. Ten en cuenta que los recursos pueden tardar unos minutos en aprovisionarse después de ejecutar terraform apply.

Limpie su proyecto.

Para evitar que se generen cargos inesperados de los recursos de Google Cloud que creaste durante esta guía de inicio rápido, completa los siguientes pasos para limpiar los recursos:

  1. En la terminal de Cloud Shell, configura la carpeta terraform como el directorio de trabajo actual:

    cd ~/terraform
    
  2. Borra los recursos de Cloud Storage que creaste en tu archivo de configuración de Terraform:

    terraform destroy
    
  3. Si se ejecuta de forma correcta, Terraform mostrará un resultado similar al siguiente:

    Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols:
      - destroy
    
    Terraform will perform the following actions:
    
      # google_storage_bucket.static will be destroyed
      - resource "google_storage_bucket" "static" {
          - default_event_based_hold    = false -> null
          - force_destroy               = false -> null
          - id                          = "my-bucket" -> null
          - labels                      = {} -> null
          - location                    = "US" -> null
          - name                        = "" -> null
          - project                     = "example-project" -> null
          - public_access_prevention    = "inherited" -> null
          - requester_pays              = false -> null
          - self_link                   = "https://www.googleapis.com/storage/v1/b/cbonnie-bucket-9" -> null
          - storage_class               = "STANDARD" -> null
          - uniform_bucket_level_access = true -> null
          - url                         = "gs://BUCKET_NAME" -> null
        }
    
      # google_storage_bucket_object.default will be destroyed
      - resource "google_storage_bucket_object" "default" {
          - bucket           = "my-bucket" -> null
          - content_type     = "text/plain" -> null
          - crc32c           = "yZRlqg==" -> null
          - detect_md5hash   = "XrY7u+Ae7tCTyyK7j1rNww==" -> null
          - event_based_hold = false -> null
          - id               = "my-bucket-sample_file.txt" -> null
          - md5hash          = "XrY7u+Ae7tCTyyK7j1rNww==" -> null
          - media_link       = "https://storage.googleapis.com/download/storage/v1/b/BUCKET_NAME/o/sample_file.txt?generation=1675800386233102&alt=media" -> null
          - metadata         = {} -> null
          - name             = "sample_file.txt" -> null
          - output_name      = "sample_file.txt" -> null
          - self_link        = "https://www.googleapis.com/storage/v1/b/BUCKET_NAME/o/sample_file.txt" -> null
          - source           = "sample_file.txt" -> null
          - storage_class    = "STANDARD" -> null
          - temporary_hold   = false -> null
        }
    
    Plan: 0 to add, 0 to change, 2 to destroy.
    
    Do you really want to destroy all resources?
      Terraform will destroy all your managed infrastructure, as shown above.
      There is no undo. Only 'yes' will be accepted to confirm.
    
      Enter a value:
    
  4. Escribe yes y presiona Intro. Si se ejecuta de forma correcta, Terraform mostrará un resultado similar al siguiente:

    Destroy complete! Resources: 2 destroyed.
    
  5. En el editor de Cloud Shell, haz clic con el botón derecho en la carpeta terraform en el panel Explorador y, luego, en Borrar.

  6. Cuando se te solicite, haz clic en Aceptar para confirmar.

  7. Para verificar que el bucket y el objeto se hayan borrado, ve a la página Buckets en la consola de Google Cloud.

    Ir a Buckets

¿Qué sigue?