Perguntas frequentes sobre o Terraform no Google Cloud

Esta página fornece respostas para perguntas comuns encontradas ao usar o Terraform para gerenciar recursos no Google Cloud, principalmente sobre interações com a API e como começar.

Como começar a usar o Terraform

Esta seção aborda conceitos básicos e etapas iniciais para novos usuários do Terraform.

O que é infraestrutura como código (IaC) e por que usar o Terraform?

A infraestrutura como código (IaC) é a prática de gerenciar e provisionar infraestrutura de computação usando arquivos de definição legíveis por máquina. Para uma visão geral completa dos conceitos e benefícios da IaC, consulte O que é infraestrutura como código?.

O Terraform é uma ferramenta de IaC de código aberto usada para definir, provisionar e gerenciar recursos na nuvem e locais. Para saber mais sobre as vantagens de usar o Terraform no seu fluxo de trabalho de IaC, consulte os Benefícios de usar o Terraform.

Como faço para instalar o Terraform e executar minha primeira configuração?

Para começar a usar o Terraform, primeiro faça o download e instale a CLI do Terraform na sua máquina local. As instruções estão disponíveis no site do HashiCorp Terraform. Após a instalação, é possível criar um arquivo de configuração do Terraform, definir um recurso (como um bucket do Cloud Storage) e usar terraform init para inicializar o diretório de trabalho, terraform plan para visualizar as mudanças e terraform apply para aplicá-las.

O que é a linguagem de configuração HashiCorp (HCL) e onde posso aprender a sintaxe dela?

A linguagem de configuração da HashiCorp (HCL) é usada pelo Terraform. Ele foi projetado para ser legível para humanos e máquinas, para uma escrita clara e eficiente e para o entendimento das definições de infraestrutura. A HCL é compatível com vários recursos, como variáveis, expressões, funções e módulos. Você pode aprender a sintaxe da HCL na documentação oficial do Terraform da HashiCorp, que oferece guias e exemplos abrangentes.

Onde posso encontrar exemplos de configurações do Terraform para recursos do Google Cloud ?

Você pode encontrar vários exemplos de configurações do Terraform para Google Cloud:

  • HashiCorp Terraform Registry:o Terraform Registry oficial para o provedor Google Cloud contém documentação e exemplos de todos os recursos e fontes de dados.

  • Google Cloud Exemplos do Terraform:o Google oferece vários exemplos do Terraform que demonstram como implantar e gerenciar recursos comuns do Google Cloud .

  • Repositórios do GitHub:muitos repositórios de código aberto, incluindo a organização terraform-google-modules do GitHub, oferecem exemplos e módulos reutilizáveis.

Como posso gerenciar e testar configurações complexas do Terraform, especialmente quando lido com muitos recursos?

Para configurações complexas, use os recursos do Terraform projetados para escalonabilidade e capacidade de manutenção:

  • Módulos:encapsulam e reutilizam padrões comuns de infraestrutura.

  • Espaços de trabalho:gerencie várias instâncias distintas de uma única configuração.

  • terraform plan e terraform validate:use esses comandos com frequência para validar a sintaxe e visualizar as mudanças sem implantação real.

  • Recursos de segmentação (use com cuidado): para testar partes específicas, use temporariamente -target com terraform apply ou terraform destroy. No entanto, isso geralmente não é recomendado para operações rotineiras devido a complexidades de gerenciamento de estado.

  • Ambientes dedicados:implante em ambientes de desenvolvimento ou preparo para testes antes da produção.

Google Cloud Perguntas sobre API

Essas perguntas abordam dúvidas comuns sobre a interação do Terraform com as APIs do Google Cloud , incluindo APIs públicas e privadas.

Posso usar o Terraform para gerenciar ou importar APIs internas ou privadas Google Cloud , como dataproc-control.googleapis.com?

Não. As APIs internas ou privadas Google Cloud fazem parte da Service Infrastructure gerenciada do Google e não são expostas para gerenciamento, ativação ou importação direta pelo cliente usando o Terraform. Essas APIs são processadas automaticamente pelo Google Cloud. A tentativa de gerenciá-los diretamente com o Terraform vai resultar em erros.

Para uma explicação abrangente, consulte o guia Noções básicas sobre APIs Google Cloud e Terraform.

Qual é a diferença entre ativar uma API e importar um recurso no Terraform?

  • Ativar uma API:significa ativar um Google Cloud serviço específico para seu projeto e conceder a ele as permissões necessárias para usar esse serviço. Ao usar o Terraform no Google Cloud, isso geralmente é feito com o recurso google_project_service. Esse é um pré-requisito para criar recursos que dependem dessa API.

  • Importar um recurso:significa trazer um recurso Google Cloud (por exemplo, uma instância do Compute Engine ou um bucket do Cloud Storage) que foi criado fora do Terraform para o gerenciamento dele. Você importa recursos, não as APIs em si.

Para mais detalhes, consulte o Guia para entender as APIs Google Cloud e o Terraform.

E se eu não gerenciar ou importar explicitamente dataproc-control.googleapis.com? Isso vai afetar minha capacidade de usar o Dataproc?

Não, isso não vai afetar sua capacidade de usar o Dataproc. dataproc-control.googleapis.com é uma API interna usada pelo Dataproc para controle operacional próprio. A funcionalidade é gerenciada automaticamente pelo Google Cloude não requer ativação, importação ou gerenciamento explícito usando o Terraform. Seus clusters e jobs do Dataproc vão funcionar corretamente sem intervenção manual em relação a essa API interna.

Como solucionar erros de permissão negada 403 no Terraform?

Os erros 403 Permission Denied geralmente indicam que a conta de serviço ou as credenciais de usuário usadas pelo Terraform não têm as permissões necessárias do IAM para realizar uma ação solicitada em um recurso Google Cloud específico. Para solucionar o problema, faça o seguinte:

  1. Identifique o recurso e o método de API afetados:a mensagem de erro geralmente especifica o tipo de recurso e a chamada de API que falhou.

  2. Verifique os papéis do IAM:confira se o principal (conta de serviço ou usuário) tem os papéis corretos do IAM atribuídos no nível adequado (projeto, pasta, organização ou recurso). Use o solucionador de problemas do IAM no console do Google Cloud .

  3. Verifique a ativação do serviço:confirme se o serviço de API Google Cloud necessário está ativado para seu projeto (por exemplo, usando gcloud services enable ou google_project_service).

  4. Revise as políticas da organização:verifique se alguma política da organização está restringindo a ação.

Os erros de cota ocorrem quando o projeto tenta consumir mais recursos ou fazer mais solicitações de API do que o permitido pelas cotas atuais. Para solucioná-lo:

  1. Identifique a cota específica:a mensagem de erro geralmente especifica a API e o limite de cota excedido.

  2. Verifique as cotas atuais:acesse a página "Cotas" no console do Google Cloud para conferir o uso e os limites atuais.

  3. Solicite um aumento de cota:se você precisar de mais capacidade, solicite um aumento de cota diretamente na página "Cotas".

  4. Considere user_project_override:para alguns recursos, se o projeto de credenciais for diferente do projeto de recursos, as solicitações de API poderão ser cobradas da cota do projeto de credenciais. Usar user_project_override (consulte Referência do provedor) às vezes resolve isso, forçando o faturamento da cota ao projeto do recurso.

O que é uma conta de serviço padrão gerenciada pelo usuário e como posso gerenciar as permissões dela com o Terraform?

Alguns serviços do Google Cloud criam automaticamente contas de serviço gerenciado pelo usuário (geralmente chamadas de contas de serviço padrão) quando um projeto é criado ou um serviço é ativado. Elas geralmente têm permissões amplas. Embora sejam gerenciadas pelo usuário, elas são criadas pelo Google. É possível gerenciar as permissões usando recursos do IAM, como google_project_iam_member, para modificar as funções. Se você quiser realizar ações nas próprias contas de serviço padrão, como remover os papéis padrão de alto privilégio ou excluir as contas completamente, use o recurso google_project_default_service_accounts. O Google também oferece orientação sobre tipos conta de serviço padrão.

O que é uma conta serviço gerenciado pelo Google e como faço referência a ela nas configurações do Terraform?

As contas de serviço gerenciado pelo Google são criadas e totalmente gerenciadas pelo Google para determinados serviços. Elas existem fora dos projetos de usuários e não podem ser configuradas diretamente pelos usuários da mesma forma que as contas de serviço gerenciado por eles. No entanto, talvez seja necessário conceder permissões do IAM para que eles interajam com seus recursos. É possível referenciar o endereço de e-mail de uma conta de serviço gerenciado pelo Google para um serviço específico usando a fonte de dados ou o recurso google_project_service_identity no Terraform e aplicar políticas do IAM a ele. Por exemplo, isso é comum para serviços como o Cloud Build ou o Cloud Composer.

O que acontece quando eu terraform destroy um recurso que tem disable_on_destroy configurado?

O argumento disable_on_destroy em google_project_service e alguns outros recursos (por exemplo, google_storage_bucket) controla se o recurso de nuvem subjacente é desativado ou excluído quando o recurso do Terraform é destruído.

  • Se disable_on_destroy for true (ou não estiver definido, já que geralmente é o padrão), terraform destroy vai tentar desativar (para APIs) ou excluir (para buckets) o recurso de nuvem correspondente.

  • Se disable_on_destroy for false, terraform destroy vai remover o recurso do estado do Terraform, mas deixar o recurso real da nuvem (por exemplo, a API ativada ou o bucket) intacto no projeto Google Cloud . Essa é uma opção preferida para serviços críticos que não podem ser desativados ou excluídos por acidente.