Article image

AS

Airton Silveira13/10/2023 11:33
Compartilhe

Automação de Processos com Terraform na GCP

  • #Terraform
  • #GCP

Automação de Processos com Terraform na GCP

Criando Pastas e Projetos na GCP com Terraform: Guia Passo a Passo

O uso de infraestrutura como código (IaC) para provisionar recursos na Google Cloud Platform (GCP) é uma prática recomendada para automatizar e gerenciar a infraestrutura de maneira eficiente e escalável. Neste artigo, vou fornecer um guia passo a passo detalhado sobre como criar pastas e projetos na GCP usando o Terraform.

Passo 1: Configuração do Ambiente

Antes de começar, certifique-se de que você tenha o ambiente de desenvolvimento configurado:

Passo 2: Acessos e Permissões

Para dar seguimento precisamos liberar alguns acessos e habilitar algumas APIs em seu projeto

  • Crie um projeto na GCP
  • No meno a esquerda vá em APIs e Serviços e Habilite as seguintes APIs: Cloud Resource manager API e Cloud Billing API

image

Cloud Resource manager API

image

Cloud Billing API

  • Crie uma Service Account e conceda os seguintes acessos acesso: Criador de Pastas e Criador de Projetos
  • Na sua conta de faturamento vá em gerenciamento da conta, no menu superior em “mostrar painel de informações” adicione o email da conta de serviço e atribua os papeis “Faturamento -> Usuário da Conta de faturamento”

image

image

Menu superior — Mostrar Painel

image

Adicione o email da conta de serviço

image

Adicione o email da conta de serviço e atribuir os papeis necessarios

image

Passo 3: Configuração do Provider Google Cloud

Crie um arquivo de configuração Terraform (com a extensão .tf) e adicione o provedor do Google Cloud com suas credenciais:

provider "google" {
project = "test-devops-iac"
region = "us-central1"
zone = "us-central1-c"
credentials = "${file("serviceaccount.yaml")}"
}

Este código configura o provedor do Google Cloud para ser usado pelo Terraform. Vamos analisar linha por linha:

  1. provider "google": Isso define o provedor que o Terraform usará. No caso, é o provedor do Google Cloud Platform (GCP).
  2. project = "test-devops-iac": Isso especifica o projeto da GCP no qual as ações do Terraform serão executadas. Todas as operações feitas com este provedor serão associadas ao projeto "test-devops-iac".
  3. region = "us-central1": Define a região padrão a ser usada para recursos na GCP. Neste caso, "us-central1" se refere à região central dos Estados Unidos.
  4. zone = "us-central1-c": Define a zona padrão dentro da região especificada. Neste caso, "us-central1-c" se refere a uma zona específica na região central dos Estados Unidos.
  5. credentials = "${file("serviceaccount.yaml")}": Especifica o arquivo de credenciais de serviço que o Terraform usará para autenticar com a GCP. O ${file("serviceaccount.yaml")} é uma função que lê o conteúdo do arquivo "serviceaccount.yaml" e o utiliza para autenticar as ações do Terraform. Esse arquivo contém as credenciais necessárias para autorizar as ações no projeto da GCP especificado.

Passo 4: Configuração da criação de pastas

Nesse exemplo iremos criar uma pasta chamada Financeiro

resource "google_folder" "Financeiro" {
display_name = "Financeiro"
parent = "organizations/751207485742"
}

O trecho de código que você forneceu é usado para criar um recurso de pasta (folder) no Google Cloud Platform (GCP). Vamos analisar cada linha desse código:

  1. resource "google_folder" "Financeiro" {: Isso define um recurso do tipo “google_folder” e atribui um nome de recurso chamado “Financeiro”. O nome “Financeiro” é um identificador exclusivo para esse recurso dentro do módulo Terraform.
  2. display_name = "Financeiro": Aqui, estamos configurando a propriedade “display_name” do recurso. Isso define o nome de exibição da pasta no GCP, que é “Financeiro”.
  3. parent = "organizations/751207485742": A linha “parent” define a relação hierárquica da pasta com sua pasta pai ou a organização à qual ela pertence. Neste caso, a pasta está sendo criada sob a organização com o ID “751207485742”. Isso indica que a pasta “Financeiro” está localizada diretamente sob a organização especificada.

Passo 4.1: Configuração da criação de subpastas

Iremos configurar a criação de uma subpasta chamada “Salesforce”

resource "google_folder" "Salesforce" {
display_name = "Salesforce"
parent = google_folder.Financeiro.name
}

A linha parent no código acima está especificando o local onde a nova pasta "Salesforce" será criada em relação a outra pasta existente chamada "Financeiro". Vamos analisar essa linha em detalhes:

parent = google_folder.Financeiro.name
  • parent é o atributo que indica a relação hierárquica do recurso que está sendo criado (a pasta "Salesforce") com relação a outra pasta existente (a pasta "Financeiro").
  • google_folder.Financeiro.name é uma referência ao nome da pasta "Financeiro" que já foi criada ou está configurada em outro lugar no seu código Terraform. Isso é uma referência à propriedade name do recurso "Financeiro".

Portanto, o valor da linha parent indica que a pasta "Salesforce" será criada como uma subpasta da pasta "Financeiro". Isso estabelece uma hierarquia onde "Financeiro" é a pasta pai e "Salesforce" é a pasta filha, dentro da qual você pode criar outros recursos específicos para o Salesforce, se necessário. Essa estrutura organizacional é útil para gerenciar e organizar recursos no Google Cloud Platform.

Iremos configurar mais essa subpasta, caracterizando um ambiente de Desenvolvimento:

resource "google_folder" "Desenvolvimento" {
display_name = "Desenvolvimento"
parent = google_folder.Salesforce.name
}

E assim terminamos o codigo de criação de pastas e subpastas.

Passo 5: Configuração da criação de projetos

Agora iremos configurar a criação de projeto, nesse exemplo usaremos o nome de projeto “Salesforce-Dev”, mas vc pode usar qualquer outro de sua preferencia.

resource "google_project" "rvm-salesforce-dev" {
name = "Salesforce-Dev"
project_id = "rvm-salesforce-dev"
folder_id = google_folder.Desenvolvimento.name
auto_create_network = false
billing_account = "01C2E1-3F5033-7A50EC"
}

Vamos analisar o código Terraform fornecido linha por linha:

  1. resource "google_project" "rvm-salesforce-dev": Esta linha define um novo recurso do tipo “google_project” com um nome de recurso chamado “rvm-salesforce-dev”. O nome “rvm-salesforce-dev” é um identificador exclusivo para este recurso dentro do módulo Terraform.
  2. name = "Salesforce-Dev": Define a propriedade “name” do projeto como “Salesforce-Dev”.
  3. project_id = "rvm-salesforce-dev": Define o identificador do projeto como “rvm-salesforce-dev”. O identificador do projeto é uma identificação única para o projeto no GCP.
  4. folder_id = google_folder.Desenvolvimento.name: Aqui, está definindo o ID da pasta na qual o projeto será criado. Usa a referência google_folder.Desenvolvimento.name para obter o nome da pasta "Desenvolvimento" a partir de outro recurso previamente definido no código. Isso estabelece uma relação hierárquica, onde o projeto está associado à pasta "Desenvolvimento"
  5. auto_create_network = false: Define a propriedade “auto_create_network” como “false”. Isso significa que a rede de computadores padrão não será automaticamente criada para este projeto. Você terá que criar manualmente as redes de computadores, sub-redes e configurações de rede, se necessário.
  6. billing_account = "01C2E1-3F5033-7A50EC": Define a conta de faturamento associada a este projeto. Esta conta de faturamento é a que será usada para cobrar os custos associados a este projeto.

Em resumo, este código Terraform cria um projeto no Google Cloud com o nome “Salesforce-Dev”, associado à pasta “Desenvolvimento”, desativa a criação automática de redes de computadores e vincula o projeto a uma conta de faturamento específica. Esses são os principais detalhes de configuração do projeto. Certifique-se de que a pasta “Desenvolvimento” já exista e tenha sido configurada antes de usar este código.

O código final ficará assim:

provider "google" {
project = "rvm-devops-iac"
region = "us-central1"
zone = "us-central1-c"
credentials = "${file("serviceaccount.yaml")}"
}

resource "google_folder" "Financeiro" {
display_name = "Financeiro"
parent = "organizations/751207485742"
}

resource "google_folder" "Salesforce" {
display_name = "Salesforce"
parent = google_folder.Financeiro.name
}

resource "google_folder" "Desenvolvimento" {
display_name = "Desenvolvimento"
parent = google_folder.Salesforce.name
}

resource "google_project" "rvm-salesforce-dev" {
name = "Salesforce-Dev"
project_id = "rvm-salesforce-dev"
folder_id = google_folder.Desenvolvimento.name
auto_create_network = false
billing_account = "01C2E1-3F5033-7A50EC"
}

Passo 6: Comandos para rodar nosso Código

terraform init

O comando terraform init é uma etapa inicial fundamental ao trabalhar com o Terraform. Ele é usado para inicializar um novo diretório de configuração do Terraform ou para atualizar as dependências e plugins do Terraform em um diretório existente.

Ao rodar o comando você deverá ter o seguinte resultado:

$ terraform init

Initializing the backend...

Initializing provider plugins...
- Reusing previous version of hashicorp/google from the dependency lock file
- Using previously-installed hashicorp/google v5.1.0

Terraform has been successfully initialized!

You may now begin working with Terraform. Try running "terraform plan" to see
any changes that are required for your infrastructure. All Terraform commands
should now work.

If you ever set or change modules or backend configuration for Terraform,
rerun this command to reinitialize your working directory. If you forget, other
commands will detect it and remind you to do so if necessary.

E por fim, rode o seguinte comando:

terraform apply

Esse comando irá criar toda a sua estrutura de configuração do código no seu Cloud Provider, nesse caso na GCP.

Passo 7: Verificando a criação de pastas e projetos na GCP

Em seu console na GCP ao selecionar um projeto, verifique se foi criado a hierarquia de pastas, subpastas e projetos:

image

A infraestrutura como código (IaC) é uma abordagem revolucionária para o gerenciamento e provisionamento de recursos em nuvem. O uso do Terraform para criar pastas, subpastas e projetos na Google Cloud Platform (GCP) exemplifica como a automação e a padronização podem simplificar o gerenciamento da infraestrutura.

A capacidade de definir a estrutura organizacional, projetos e recursos com código oferece muitos benefícios. Isso não apenas melhora a eficiência operacional, mas também promove uma abordagem mais consistente e segura para a implantação de aplicativos na nuvem.

Ao longo deste passo a passo, exploramos os princípios do Terraform e como ele pode ser usado para criar pastas e projetos na GCP. Através da automação do Terraform, podemos garantir que nossa infraestrutura seja escalável, confiável e altamente configurável, ao mesmo tempo em que reduzimos o risco de erros manuais.

Além disso, vimos como o Terraform oferece suporte à criação de hierarquias organizacionais, tornando a estrutura da organização mais transparente e gerenciável. O controle granular, a rastreabilidade e a padronização proporcionados pela IaC não só economizam tempo, mas também aumentam a segurança e a governança.

À medida que as organizações continuam a adotar práticas modernas de gerenciamento de infraestrutura, a integração do Terraform na GCP se torna uma escolha poderosa. Com sua capacidade de automatizar a criação de pastas, subpastas e projetos, o Terraform oferece uma base sólida para construir ambientes de nuvem altamente eficientes.

À medida que você mergulha no mundo da automação de infraestrutura com o Terraform, lembre-se de que a criação de pastas e projetos é apenas o começo. Essa abordagem escalonável e programática permite uma infinidade de possibilidades na orquestração de recursos na nuvem. À medida que você avança, aproveite ao máximo essa tecnologia e continue a explorar as oportunidades que ela oferece.

Github deste Projeto: https://github.com/AirtonFrancoSilveira/terraform-create-folder-projects

link da materia no Medium: https://medium.com/@airton.franco/automa%C3%A7%C3%A3o-de-processos-com-terraform-na-gcp-5270d1771cac

Compartilhe
Comentários (1)

VR

Vitor Rezende - 13/10/2023 17:52

Incrível, muito útil, parabéns!