Tutorial do Terraform

Neste tutorial, você verá como implantar uma função HTTP fazendo upload de um arquivo ZIP do código-fonte da função em um bucket do Cloud Storage usando Terraform para provisionar os recursos. O Terraform é uma ferramenta de código aberto que permite provisionar Google Cloud recursos com arquivos de configuração declarativos.

Neste tutorial, usamos uma função HTTP Node.js como exemplo, mas ela também funciona com funções HTTP Python, Go e Java. As instruções são as mesmas, independentemente do ambiente de execução que você está usando.

Ao implantar com o Terraform, é necessário fazer upload do arquivo de origem compactado da função para um bucket do Cloud Storage (source_archive_bucket), e também especificar o nome do objeto do Cloud Storage (source_archive_object) na configuração do Terraform. Para mais informações, consulte o guia de especificação do Terraform.

As funções do Cloud Run copiam o arquivo de origem que você faz upload no source_archive_bucket para um bucket no seu projeto com um nome de bucket que segue o formato gcf-v2-sources-PROJECT_NUMBER-REGION(funções do Cloud Run) ou gcf-sources-PROJECT_NUMBER-REGION funções do Cloud Run (1ª geração). Essa configuração varia dependendo da dependência do CMEK.

Objetivos

  • Saiba como usar o Terraform para implantar uma função HTTP.

Custos

Neste documento, você usará os seguintes componentes faturáveis do Google Cloud:

For details, see Cloud Run functions pricing.

Para gerar uma estimativa de custo baseada na projeção de uso, use a calculadora de preços.

Novos usuários do Google Cloud podem estar qualificados para um teste sem custo financeiro.

Antes de começar

  1. Faça login na sua Google Cloud conta do. Se você começou a usar o Google Cloud, crie uma conta para avaliar o desempenho dos nossos produtos em situações reais. Clientes novos também recebem US $300 em créditos para executar, testar e implantar cargas de trabalho.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. Enable the Cloud Functions, Cloud Run, Cloud Build, Artifact Registry, and Cloud Storage APIs.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

  5. Instale a Google Cloud CLI.

  6. Ao usar um provedor de identidade (IdP) externo, primeiro faça login na gcloud CLI com sua identidade federada.

  7. Para inicializar a CLI gcloud, execute o seguinte comando:

    gcloud init
  8. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  9. Verify that billing is enabled for your Google Cloud project.

  10. Enable the Cloud Functions, Cloud Run, Cloud Build, Artifact Registry, and Cloud Storage APIs.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

  11. Instale a Google Cloud CLI.

  12. Ao usar um provedor de identidade (IdP) externo, primeiro faça login na gcloud CLI com sua identidade federada.

  13. Para inicializar a CLI gcloud, execute o seguinte comando:

    gcloud init
  14. Se a CLI gcloud já estiver instalada, atualize-a executando o seguinte comando:

    gcloud components update
  15. Prepare seu ambiente de desenvolvimento.

    Acessar o guia de configuração do Node.js

Funções exigidas

Como configurar o ambiente

Neste tutorial, você executa comandos no Cloud Shell. O Cloud Shell é um ambiente com a Google Cloud CLI pré-instalada, incluindo a Google Cloud CLI e os valores já definidos para o projeto atual. O Cloud Shell pode demorar vários minutos para ser inicializado.

Abra o Cloud Shell

Como preparar o aplicativo

No Cloud Shell, execute as seguintes etapas:

  1. Clone o repositório de aplicativos de amostra para sua instância do Cloud Shell:

    git clone https://github.com/terraform-google-modules/terraform-docs-samples.git
  2. Mude para o diretório que contém os exemplos de código de exemplo das funções do Cloud Run:

    cd terraform-docs-samples/functions/basic

    O exemplo do Node.JS usado neste tutorial é uma função HTTP básica "Hello World". Confira o arquivo main.tf:

    terraform {
      required_providers {
        google = {
          source  = "hashicorp/google"
          version = ">= 4.34.0"
        }
      }
    }
    
    resource "random_id" "default" {
      byte_length = 8
    }
    
    resource "google_storage_bucket" "default" {
      name                        = "${random_id.default.hex}-gcf-source" # Every bucket name must be globally unique
      location                    = "US"
      uniform_bucket_level_access = true
    }
    
    data "archive_file" "default" {
      type        = "zip"
      output_path = "/tmp/function-source.zip"
      source_dir  = "functions/hello-world/"
    }
    resource "google_storage_bucket_object" "object" {
      name   = "function-source.zip"
      bucket = google_storage_bucket.default.name
      source = data.archive_file.default.output_path # Add path to the zipped function source code
    }
    
    resource "google_cloudfunctions2_function" "default" {
      name        = "function-v2"
      location    = "us-central1"
      description = "a new function"
    
      build_config {
        runtime     = "nodejs22"
        entry_point = "helloHttp" # Set the entry point
        source {
          storage_source {
            bucket = google_storage_bucket.default.name
            object = google_storage_bucket_object.object.name
          }
        }
      }
    
      service_config {
        max_instance_count = 1
        available_memory   = "256M"
        timeout_seconds    = 60
      }
    }
    
    resource "google_cloud_run_service_iam_member" "member" {
      location = google_cloudfunctions2_function.default.location
      service  = google_cloudfunctions2_function.default.name
      role     = "roles/run.invoker"
      member   = "allUsers"
    }
    
    output "function_uri" {
      value = google_cloudfunctions2_function.default.service_config[0].uri
    }

Inicialize o Terraform

No diretório terraform-docs-samples/functions/basic que contém o arquivo main.tf, execute este comando para adicionar os plug-ins necessários e criar o diretório .terraform:

terraform init

Aplique a configuração do Terraform:

No mesmo diretório terraform-docs-samples/functions/basic que contém o arquivo main.tf, implante a função aplicando a configuração. Quando solicitado, digite yes.

terraform apply

Testar a função

  1. Quando a implantação da função estiver concluída, anote a propriedade ou encontre-a usando o seguinte comando:

    gcloud functions describe function-v2 --gen2 --region=us-central1 --format="value(serviceConfig.uri)"
    
  2. Faça uma solicitação a este URL para ver a mensagem "Hello World" da sua função. Observe que a função é implantada exigindo autenticação. Portanto, é necessário fornecer as credenciais na sua solicitação:

    curl -H "Authorization: Bearer $(gcloud auth print-identity-token)" YOUR_FUNCTION_URL

Liberar espaço

Depois de concluir o tutorial, exclua tudo o que foi criado para que você não tenha custos adicionais.

O Terraform permite remover todos os recursos definidos no arquivo de configuração executando o comando terraform destroy no diretório terraform-docs-samples/functions/basic que contém o arquivo main.tf:

terraform destroy

Digite yes para permitir que o Terraform exclua seus recursos.