Parte 1 — Como implantar uma aplicação estática do Next.js no Google Cloud Storage usando o Terraform e Github Actions

Felipe Marques
Webera
Published in
3 min readDec 17, 2021

--

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 SDKhttps://cloud.google.com/sdk

Terraform https://learn.hashicorp.com/collections/terraform/gcp-get-started

Fique a vontade para ver os outros artigos:

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_IDpelo 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 comandoterraformestá 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 a zone 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.

--

--