Comece a usar o Terraform e o Firebase

O Firebase está começando a oferecer suporte ao Terraform. Se a sua equipe quer automatizar e padronizar a criação de projetos do Firebase com provisionamento de recursos e ativação de serviços específicos, usar o Terraform e o Firebase pode ser uma boa opção.

O fluxo de trabalho básico para usar o Terraform com o Firebase inclui o seguinte:

  • Criação e personalização de um arquivo de configuração do Terraform (um arquivo .tf) que especifica a infraestrutura que você quer provisionar, ou seja, os recursos que você quer provisionar e os serviços que você quer ativar.

  • Uso de comandos da CLI gcloud que interagem com o Terraform para provisionar a infraestrutura especificada no arquivo .tf.

O que você pode fazer com o Terraform e o Firebase?

Neste guia, o exemplo de fluxo de trabalho genérico é criar um novo projeto do Firebase com um app Android. Mas você pode fazer muito mais com o Terraform, como:

  • Excluir e modificar infraestruturas atuais usando o Terraform.

  • Gerenciar configurações e tarefas específicas do produto usando o Terraform, como:

    • Ativar os provedores de login do Firebase Authentication.
    • Criar buckets do Cloud Storage ou instâncias de bancos de dados e implantar regras de segurança do Firebase.

Você pode usar arquivos de configuração e comandos padrão do Terraform para realizar todas essas tarefas. Para ajudar nisso, mostramos exemplos de arquivos de configuração do Terraform para vários casos de uso comuns.



Fluxo de trabalho genérico para uso do Terraform com o Firebase

Pré-requisitos

Este guia é uma introdução ao uso do Terraform com o Firebase, portanto, é necessário conhecer os princípios básicos do Terraform. Verifique se você concluiu os seguintes pré-requisitos antes de iniciar esse fluxo de trabalho:

  • Instale o Terraform e leia os tutoriais oficiais dele.

  • Instale a Google Cloud CLI (CLI gcloud). Faça login usando uma conta de usuário ou uma conta de serviço.


Etapa 1: criar e personalizar um arquivo de configuração do Terraform

Um arquivo de configuração do Terraform precisa de duas seções principais, explicadas em detalhes abaixo:

Configure seu provider

Uma configuração de provider é necessária, seja quais forem os produtos ou serviços do Firebase envolvidos.

  1. Crie um arquivo de configuração do Terraform (como o main.tf) no diretório local.

    Neste guia, você vai usar esse arquivo de configuração para especificar as características de provider e toda a infraestrutura a ser criada pelo Terraform. No entanto, você tem opções para incluir a configuração do provedor.

  2. Inclua a seguinte configuração de provider na parte superior do arquivo main.tf.

    Use o provedor google-beta porque esta é uma versão Beta da integração do Firebase e Terraform. Tenha cuidado ao utilizar esse recurso na produção.

    # Terraform configuration to set up providers by version.
    terraform {
      required_providers {
        google-beta = {
          source  = "hashicorp/google-beta"
          version = "~> 4.0"
        }
      }
    }
    
    # Configures the provider to use the resource block's specified project for quota checks.
    provider "google-beta" {
      user_project_override = true
    }
    
    # Configures the provider to not use the resource block's specified project for quota checks.
    # This provider should only be used during project creation and initializing services.
    provider "google-beta" {
      alias = "no_user_project_override"
      user_project_override = false
    }
    

    Saiba mais sobre os diferentes tipos de atributos relacionados ao projeto, incluindo o que este guia chama de "projeto de verificação de cota", ao usar o Terraform com o Firebase.

  3. Acesse a próxima seção para concluir o arquivo de configuração e especificar qual infraestrutura será criada.

Especificar qual infraestrutura criar usando blocos de resource

No arquivo de configuração do Terraform (para este guia, o arquivo main.tf), é necessário especificar toda a infraestrutura que você quer que o Terraform crie, ou seja, todos os recursos a serem provisionados e todos os serviços a serem ativados. Neste guia você encontra uma lista completa de todos os recursos do Firebase que oferecem suporte ao Terraform.

  1. Abra seu arquivo main.tf.

  2. Na configuração de provider, inclua a seguinte definição dos blocos de resource.

    Este exemplo básico cria um novo projeto do Firebase e, em seguida, um app Android do Firebase nesse projeto.

    # Terraform configuration to set up providers by version.
    ...
    
    # Configures the provider to use the resource block's specified project for quota checks.
    ...
    
    # Configures the provider to not use the resource block's specified project for quota checks.
    ...
    
    # Creates a new Google Cloud project.
    resource "google_project" "default" {
      provider   = google-beta.no_user_project_override
    
      name       = "Project Display Name"
      project_id = "project-id-for-new-project"
      # Required for any service that requires the Blaze pricing plan
      # (like Firebase Authentication with GCIP)
      billing_account = "000000-000000-000000"
    
      # Required for the project to display in any list of Firebase projects.
      labels = {
        "firebase" = "enabled"
      }
    }
    
    # Enables required APIs.
    resource "google_project_service" "default" {
      provider = google-beta.no_user_project_override
      project  = google_project.default.project_id
      for_each = toset([
        "cloudbilling.googleapis.com",
        "cloudresourcemanager.googleapis.com",
        "firebase.googleapis.com",
        # Enabling the ServiceUsage API allows the new project to be quota checked from now on.
        "serviceusage.googleapis.com",
      ])
      service = each.key
    
      # Don't disable the service if the resource block is removed by accident.
      disable_on_destroy = false
    }
    
    # Enables Firebase services for the new project created above.
    resource "google_firebase_project" "default" {
      provider = google-beta
      project  = google_project.default.project_id
    
      # Waits for the required APIs to be enabled.
      depends_on = [
        google_project_service.default
      ]
    }
    
    # Creates a Firebase Android App in the new project created above.
    resource "google_firebase_android_app" "default" {
      provider = google-beta
    
      project      = google_project.default.project_id
      display_name = "My Awesome Android app"
      package_name = "awesome.package.name"
    
      # Wait for Firebase to be enabled in the Google Cloud project before creating this App.
      depends_on = [
        google_firebase_project.default,
      ]
    }
    


Etapa 2: executar comandos do Terraform para criar a infraestrutura especificada

Para provisionar os recursos e ativar os serviços especificados no arquivo main.tf, execute os seguintes comandos no mesmo diretório de main.tf. Se você quiser informações detalhadas sobre esses comandos, consulte a documentação do Terraform.

  1. Se esta for a primeira vez que você está executando comandos do Terraform no diretório, inicialize o diretório de configuração e instale o provedor do Google Terraform. Para isso, execute o seguinte comando:

    terraform init
  2. Crie a infraestrutura especificada no arquivo main.tf executando o seguinte comando:

    terraform apply
  3. Confirme se tudo foi provisionado ou ativado conforme o esperado:

    • Opção 1: revise a configuração mostrada no terminal executando o seguinte comando:

      terraform show
    • Opção 2: visualize seu projeto do Firebase no Console do Firebase.



Recursos do Firebase com suporte ao Terraform

Os seguintes recursos do Firebase e do Google oferecem suporte ao Terraform. Novos recursos são adicionados constantemente. Portanto, se você não encontrar o que procura, volte em breve para conferir se ele está disponível ou solicite ao informar um problema no repositório do GitHub.


Gerenciamento de projetos e apps do Firebase

  • google_firebase_project: ative os serviços do Firebase em um projeto atual do Google Cloud.

  • google_firebase_project_location: defina o local dos recursos padrão do Google Cloud para o projeto.

  • Apps do Firebase


Firebase Authentication

Sem suporte no momento:

  • Configurar a autenticação multifator (MFA) no Terraform
  • Configurar funções de bloqueio pelo Terraform

Firebase Realtime Database

Sem suporte no momento:

  • Implantar regras de segurança do Firebase Realtime Database pelo Terraform (aprenda a implantar essas regras usando outras ferramentas, incluindo opções programáticas)

Cloud Firestore

  • google_firestore_database: crie uma instância do Cloud Firestore.

  • google_firestore_index: ative consultas eficientes no Cloud Firestore.

  • google_firestore_document: propague uma instância do Cloud Firestore com um documento específico em uma coleção.

    Importante: não use dados reais de usuário final ou de produção neste documento semente.


Cloud Storage para Firebase


Regras de segurança do Firebase (para o Cloud Firestore e o Cloud Storage)

O Firebase Realtime Database usa um sistema de provisionamento diferente para as regras de segurança do Firebase.

  • google_firebaserules_ruleset: defina as regras de segurança do Firebase que se aplicam à instância do Cloud Firestore ou a um bucket do Cloud Storage.

  • google_firebaserules_release: implante conjuntos de regras específicos na instância do Cloud Firestore ou em um bucket do Cloud Storage.



Exemplos de arquivos de configuração do Terraform para casos de uso comuns



Solução de problemas e perguntas frequentes