Usar o Terraform para criar buckets de armazenamento e fazer upload de objetos

Neste guia de início rápido, você vai criar um arquivo de configuração do Terraform que provisiona um bucket de armazenamento e faz upload de um objeto sample_file.txt nele. Para concluir este guia de início rápido, use o shell e o terminal locais ou o editor e o terminal do Cloud Shell. Você também vai usar a CLI do Terraform, que é pré-instalada no Cloud Shell.

Antes de começar

Para configurar um projeto para este guia de início rápido, siga estas etapas:

  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

Criar a estrutura de pastas e o arquivo de configuração do Terraform

Para criar o arquivo de configuração do Terraform e o arquivo que você vai enviar como um objeto para o Cloud Storage, siga estas etapas:

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. Defina o projeto padrão do Google Cloud em que você quer aplicar as configurações do Terraform:
    export GOOGLE_CLOUD_PROJECT=PROJECT_ID
  2. No terminal do Cloud Shell, defina o diretório inicial como o diretório ativo:
    cd
  3. Crie uma nova pasta chamada terraform:
    mkdir terraform
  4. Clique em Abrir editor na barra de ferramentas da janela para iniciar o editor do Cloud Shell.
  5. No painel Explorer, clique com o botão direito do mouse na pasta terraform e, em seguida, clique em Novo arquivo.
  6. Insira main.tf como o nome do arquivo e clique em OK.
  7. No painel Explorer, clique com o botão direito do mouse na pasta terraform e, em seguida, clique em Novo arquivo.
  8. Insira sample_file.txt como o nome do arquivo e clique em OK.

Shell local

  1. Instale e configure o Terraform, caso ainda não tenha feito isso. Instale e inicialize a Google Cloud CLI.

    Por padrão, o Terraform lê a configuração criada pela Google Cloud CLI e implanta os recursos que você especifica mais tarde no seu projeto ativo da Google Cloud CLI.

  2. No terminal, defina o diretório inicial como o ativo:
    cd
  3. Crie uma nova pasta chamada terraform:
    mkdir terraform
  4. No editor de texto de sua preferência, crie um novo arquivo chamado main.tf na pasta terraform.
  5. No editor de texto de sua preferência, crie um novo arquivo chamado sample_file.txt na pasta terraform.

Definir a infraestrutura no arquivo de configuração do Terraform

Para definir a infraestrutura que você quer provisionar no arquivo de configuração do Terraform, siga estas etapas:

  1. Abra o arquivo main.tf.

  2. Copie o exemplo a seguir para o arquivo 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
    }

    Substitua:

    • BUCKET_NAME pelo nome do bucket que você quer criar. Por exemplo, my-bucket.

    • OBJECT_NAME pelo nome do objeto que você quer enviar. Para este guia de início rápido, insira o nome sample_file.txt.

    • OBJECT_PATH pelo caminho do objeto que você quer enviar. Para este guia de início rápido, insira o caminho ~/terraform/sample_file.txt.

  3. Salve o arquivo main.tf.

Inicializar o diretório de trabalho que contém o arquivo de configuração do Terraform

Para inicializar o Terraform e o diretório que contém seu arquivo de configuração do Terraform, siga as seguintes etapas:

  1. No terminal, defina a pasta terraform como o diretório de trabalho atual:

    cd ~/terraform
  2. Inicialize o Terraform:

    terraform init
  3. Se você estiver usando o Cloud Shell e for solicitado que o autorize, clique em Autorizar.

    O Terraform inicializa o diretório de trabalho. Se o diretório de trabalho for inicializado, o Terraform retornará uma saída semelhante a esta:

    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.
    

Visualizar o plano de execução

O plano de execução do Terraform é baseado na configuração do Terraform e indica as alterações que ele planeja fazer na infraestrutura e nos serviços do Cloud Storage.

Confira o plano de execução do Terraform:

terraform plan

Exemplo de saída:

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.

Aplicar as alterações propostas no plano de execução

Para aplicar as alterações no arquivo de configuração do Terraform, siga estas etapas:

  1. Aplique as alterações do plano de execução à infraestrutura do Cloud Storage com o comando a seguir. Quando você aplica as alterações, o Terraform cria um bucket de armazenamento e envia sample_file.txt ao bucket.

    terraform apply

    Exemplo de saída:

    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. Digite yes e pressione Enter.

    Se for bem-sucedido, o Terraform retornará uma saída semelhante a esta:

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

Ver o bucket de armazenamento e o objeto enviado por upload

No Console do Cloud, acesse a página Buckets do Cloud Storage.

Acessar buckets

O novo bucket será exibido com o objeto sample_file.txt. Os recursos podem levar alguns minutos para serem provisionados após a execução de terraform apply.

Limpar o projeto

Para evitar cobranças inesperadas dos recursos do Google Cloud criados durante este guia de início rápido, conclua as etapas a seguir para limpar os recursos:

  1. No terminal, defina a pasta terraform como o diretório de trabalho atual:

    cd ~/terraform
  2. Exclua os recursos do Cloud Storage criados com base no arquivo de configuração do Terraform:

    terraform destroy
  3. Se for bem-sucedido, o Terraform retornará uma saída semelhante a esta:

    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. Digite yes e pressione Enter. Se for bem-sucedido, o Terraform retornará uma saída semelhante a esta:

    Destroy complete! Resources: 2 destroyed.
    
  5. No terminal, exclua a pasta terraform.

    rm -rf ~/terraform
  6. Para verificar se o bucket e o objeto foram excluídos, acesse a página Buckets no console do Google Cloud.

    Acessar buckets

A seguir