Noções básicas sobre as APIs do Google Cloud e o Terraform

Este guia tem como objetivo esclarecer como o Terraform interage com as APIs (diferenciando entre APIs públicas e privadas) e explicar conceitos importantes, como ativação de API e importação de recursos. Google Cloud Esse entendimento é fundamental para gerenciar seus Google Cloud recursos de maneira eficaz com o Terraform e evitar armadilhas comuns.

APIs públicas x privadas Google Cloud

Google Cloud Os serviços expõem várias APIs que permitem que aplicativos e ferramentas (como o Terraform) interajam e gerenciem recursos. Essas APIs se enquadram em duas categorias:

APIs públicas

Finalidade:são as principais interfaces para clientes e ferramentas criarem, configurarem e gerenciarem Google Cloud recursos (por exemplo, instâncias do Compute Engine, buckets do Cloud Storage, conjuntos de dados do BigQuery).

Exposição:as APIs públicas são bem documentadas, têm endpoints REST definidos e são destinadas ao consumo externo. Elas são as APIs com que o provedor do Terraform google foi criado para interagir.

Exemplos:compute.googleapis.com, storage.googleapis.com, bigquery.googleapis.com.

APIs privadas (internas)

Finalidade:essas APIs são internas aos Google Cloud serviços, usadas pelo próprio Google para operação interna, orquestração e provisionamento dos serviços gerenciados. Elas expõem funcionalidades que não são destinadas à interação ou gerenciamento direto do cliente.

Exposição:as APIs privadas geralmente não são documentadas publicamente, não têm endpoints externos estáveis e não são projetadas para acesso direto por ferramentas de terceiros, como o Terraform. Elas são um detalhe de implementação do serviço.

Exemplo:dataproc-control.googleapis.com é uma API interna que o serviço gerenciado para Apache Spark usa para o plano de controle operacional. Os clientes não interagem ou gerenciam essa API diretamente.

Ativação de API x importação de recursos no Terraform

Entender a distinção entre "ativar uma API" e "importar um recurso" é fundamental para usar o Terraform de maneira eficaz com Google Cloud.

Como ativar uma API

  • O que significa:quando você "ativa uma API" no Google Cloud, está ativando um serviço específico para seu projeto. Google Cloud Isso concede ao projeto as permissões e o acesso necessários para usar as funcionalidades desse serviço e criar recursos gerenciados por ele.

Contexto do Terraform:no Terraform, isso geralmente é feito usando o recurso google_project_service. Esse recurso verifica se uma API pública especificada (por exemplo, compute.googleapis.com) está ativada para seu Google Cloud projeto.

Finalidade:a ativação de uma API é um pré-requisito para criar ou gerenciar recursos pertencentes a esse serviço. Por exemplo, é necessário ativar compute.googleapis.com antes de criar recursos google_compute_instance.

Exemplo (Terraform) :

```hcl
resource "google_project_service" "compute_api" {
  project            = "your-gcp-project-id"
  service            = "compute.googleapis.com"
  disable_on_destroy = false
}
```

Observação importante: O recurso google_project_service foi projetado exclusivamente para gerenciar o estado de ativação de APIs Google Cloud acessíveis publicamente. Ele não foi criado para APIs internas ou privadas e não funciona com elas. Tentar usá-lo para APIs privadas vai resultar em erros, já que essas APIs não são expostas pela superfície da API pública para esse gerenciamento.

Como importar um recurso

O que significa:no Terraform, "importar" significa trazer um recurso de nuvem existente (criado manualmente ou por outro processo fora do Terraform) para o gerenciamento do Terraform. Ao importar um recurso, o Terraform gera uma entrada de estado para ele, permitindo que você gerencie o ciclo de vida (atualizações, exclusão) usando a configuração do Terraform.

Contexto do Terraform:isso é feito usando o comando terraform import ou utilizando blocos import introduzidos no Terraform 1.5 e versões mais recentes.

Finalidade:para controlar recursos que não foram provisionados inicialmente pelo Terraform.

Exemplo (CLI do Terraform) :

```bash
terraform import google_compute_instance.my_instance projects/your-gcp-project-id/zones/us-central1-a/instances/my-vm
```

Como resolver problemas relacionados a APIs privadas (por exemplo, dataproc-control.googleapis.com)

Os clientes às vezes encontram referências a APIs privadas (como dataproc-control.googleapis.com para o serviço gerenciado para Apache Spark) em registros ou documentação e se perguntam se precisam ativá-las ou importá-las com o Terraform.

Nenhuma ação do cliente necessária: se uma API for identificada como privada ou interna Google Cloud API, não será necessário ativá-la explicitamente usando google_project_service ou tentar importá-la com o Terraform.

Gerenciamento interno: essas APIs são essenciais para a operação interna dos Google Cloud serviços. Elas são gerenciadas automaticamente pelo Google e não são projetadas para interação ou gerenciamento direto do cliente por ferramentas públicas.

Nenhum impacto no Service Usage: a incapacidade de "importar" ou gerenciar explicitamente uma API privada usando o Terraform não afeta sua capacidade de usar o serviço associado Google Cloud (por exemplo, o serviço gerenciado para Apache Spark vai funcionar corretamente sem que você gerencie dataproc-control.googleapis.com). As interações necessárias da API interna são processadas pelo Google.

Foco em APIs públicas: ao gerenciar Google Cloud recursos com o Terraform, seu foco deve ser apenas na ativação e configuração das APIs públicas que correspondem aos serviços e recursos que você pretende provisionar.

Conclusão

Ao entender a distinção clara entre APIs públicas e privadas Google Cloud e os papéis específicos de "ativação" de APIs versus "importação" de recursos no Terraform, você pode gerenciar sua Google Cloud infraestrutura de maneira eficaz. Não tente gerenciar ou importar APIs privadas Google Cloud explicitamente. Elas são componentes internos processados pelo Google. Concentre suas configurações do Terraform nas APIs expostas publicamente e nos recursos correspondentes.