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 tu shell y terminal locales, o el editor y la terminal de Cloud Shell. También usarás 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. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. Enable the Cloud Storage API.

    Enable the API

  5. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  6. Make sure that billing is enabled for your Google Cloud project.

  7. Enable the Cloud Storage API.

    Enable the 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:

Cloud Shell

  1. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  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.

Shell local

  1. Si aún no lo hiciste, instala y configura Terraform. Asegúrate de instalar y inicializar Google Cloud CLI.

    De forma predeterminada, Terraform lee la configuración que crea Google Cloud CLI y, luego, implementa los recursos que especificas en tu proyecto activo de Google Cloud CLI.

  2. En la terminal, establece el directorio principal como el directorio activo:
    cd
  3. Crea una nueva carpeta llamada terraform:
    mkdir terraform
  4. En el editor de texto que prefieras, crea un archivo nuevo llamado main.tf en la carpeta terraform.
  5. En el editor de texto que prefieras, crea un archivo nuevo llamado sample_file.txt en la carpeta terraform.

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. 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. En la terminal, configura la carpeta terraform como el directorio de trabajo actual:

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

    terraform init
  3. Si usas Cloud Shell y se te solicita que autorices a 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, 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 la terminal, borra la carpeta terraform.

    rm -rf ~/terraform
  6. 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?