Parte 1 — Como implantar uma aplicação estática do Next.js no Google Cloud Storage usando o Terraform e Github Actions
Olá, bem vindo a mais um tutorial sobre Next.js, desta vez nós iremos realizar o deployment de uma aplicação desenvolvida em Next.js no Google Cloud Platform usando Terraform, para iniciar nosso aprendizado espero que você tenha instalado o Terraform em seu ambiente e também o Google Cloud SDK, caso contrário acesse os links abaixo e realize a instalação:
Google Cloud SDK — https://cloud.google.com/sdk
Terraform — https://learn.hashicorp.com/collections/terraform/gcp-get-started
Fique a vontade para ver os outros artigos:
- Credentials Google Console — Parte 1
- Configurando nosso arquivo Terraform — Parte 2
- Configurando o Github Actions — Parte 3
Nesta primeira parte vamos focar em criar um service-account e dar as permissões necessárias para o terraform gerenciar o Cloud Storage.
Criando as credenciais no GCP
Após ter feito toda a etapa de instalação acima, precisamos criar um service-account utilizando o terraform e gerar essa credencial através do nosso ambiente local, com isso será possível autenticar no GCP.
De acordo com a documentação do Google Cloud Platform a maneira mais recomendada de fazer isso é criar um service-account para o terraform e dar as permissões necessárias para criação da nossa infraestrutura.
Execute o comando abaixo para iniciar o sdk do gcloud e ser possível configurá-lo com a nossa conta do google e projeto que iremos trabalhar. Na etapa "Pick cloud project to use:" escolha o projeto criado no Google Console.
gcloud init
Agora que você está conectado ao GCP e oPROJECT_ID
salvo, precisamos criar um service-account que será utilizada pelo terraform.
gcloud iam service-accounts create terraform-tutorial --display-name "Terraform account tutorial"
Com o service-account criado, vamos gerar nosso arquivo de configuração local para que possamos realizar a autenticação no GCP. Não esqueça de substituir PROJECT_ID
pelo seu próprio valor.
gcloud iam service-accounts keys create ~/.config/gcloud/PROJECT_ID.json --iam-account=terraform-tutorial@$PROJECT_ID.iam.gserviceaccount.com
A próxima etapa é configurar nosso ambiente para o provedor Google Cloud Terraform, substitua o valor do PROJECT_ID
e execute o código abaixo em seu terminal:
export GOOGLE_APPLICATION_CREDENTIALS=~/.config/gcloud/PROJECT_ID.json
O comandoterraform
está pronto para ser utilizado. Agora podemos ser capaz de vincular corretamente o service-account que criamos usando as credenciais exportadas acima. No entanto, não tem nenhuma permissão concedida a ela, com isso, o terraform não será autorizado a criar qualquer infraestrutura, a menos que seja dada as permissões necessárias.
# Conceda permissão à conta de serviço para visualizar o projeto GCPgcloud projects add-iam-policy-binding PROJECT_ID --member serviceAccount:terraform-tutorial@PROJECT_ID.iam.gserviceaccount.com --role roles/admin# Conceda permissão à conta de serviço para gerenciar o Cloud Storagegcloud projects add-iam-policy-binding PROJECT_ID --member serviceAccount:terraform-tutorial@PROJECT_ID.iam.gserviceaccount.com --role roles/storage.admin
Se você tiver algum problema referente ao faturamento, é porque o serviço correspondente precisa está ativado para seu projeto. Você pode resolver isso ativando todas as APIs necessárias para que seja executada as ações que o terraform precisa.
gcloud services enable cloudresourcemanager.googleapis.com
gcloud services enable cloudbilling.googleapis.com
gcloud services enable iam.googleapis.com
gcloud services enable storage.googleapis.com
gcloud services enable serviceusage.googleapis.com
Em seguida, crie um arquivo de configuração do Terraform chamado “main.tf”. Dentro, você vai incluir a seguinte configuração:
provider "google" {
project = "{{YOUR GCP PROJECT}}"
region = "us-central1"
zone = "us-central1-c"
}
- A propriedade project deve ser o
PROJECT_ID
. Essa propriedade é indicada com o valor do projeto GCP padrão em que todos os seus recursos serão criados. A maioria dos recursos do Terraform terá um campo chamado project. - A
region
e azone
são os locais onde seus recursos serão criados.
Podemos executar o terraform init
para testar a conexão com o GCP e verificar se as permissões estão configuradas corretamente.
Tudo funcionando! Espero que vocês tenham gostado dessa primeira parte onde criamos um service-account e definimos todas as permissões necessárias para o terraform gerenciar o Cloud Storage.