Usando Terraform no Azure Pipelines

bernardo

Luiz Bernardo

Posted on April 26, 2023

Usando Terraform no Azure Pipelines

Já vimos o que é Azure Pipelines e agora vamos construir uma pipeline para executar um código Terraform. 

Para saber mais o que é o Terraform: https://developer.hashicorp.com/terraform/tutorials/aws-get-started

Para executar um código terraform precisaremos do programa binário de Terraform e o AWS CLI, vamos ver como configurar cada um deles. 

Primeira configuração e a trigger, nessa configuração informamos qual branch será utilizado para iniciar a pipeline de forma contínua e integrada.

trigger:
  branches:
    include:
    - master
Enter fullscreen mode Exit fullscreen mode

Em seguida, escrevemos as estruturas básicas do Azure Pipelines de stages, jobs e steps.

stages:
- stage: DeployTerraform
  displayName: Deploy Terraform
  jobs:
  - job: DeployTerraform
    displayName: 'Deploy infrastructure with Terraform'
    steps: 
Enter fullscreen mode Exit fullscreen mode

Agora vamos criar nosso primeiro step de instalação do programa binário de Terraform no job que estamos executando. 

Relembrando o job funciona como um container para a execução das etapas da nossa pipeline.

 

- bash: |
    echo "# Downloading Terraform v1.3.7"
    wget https://releases.hashicorp.com/terraform/1.3.7/terraform_1.3.7_linux_amd64.zip
    echo "# Unzipping files"
    unzip terraform_1.3.7_linux_amd64.zip

    echo "# Configuring terraform and checking version"
    export TERRAFORM_PATH=$(which terraform)
    ls -lha
    sudo mv terraform $TERRAFORM_PATH

    terraform -v
Enter fullscreen mode Exit fullscreen mode

Por último, vamos instalar o AWS Cli utilizando a task AWSShellScript@1 e executar os comandos do Terraform para realizarmos o build e deploy do nosso Terraform.

 

    - task: AWSShellScript@1
      displayName: 'Deploy Service'
      inputs:
          awsCredentials: aws-teste-dev
          regionName: $(AWS_REGION)
          scriptType: 'inline'
          inlineScript: |
            terraform init
            terraform plan
            terraform apply -auto-approve
            terraform destroy -auto-approve
Enter fullscreen mode Exit fullscreen mode

Beleza, mas a task AWSShellScript@1 exige a utilização de credenciais de acesso aos serviços AWS, para isso, precisamos criar uma IAM user credentials. 

Para criar a IAM user credentials basta seguir o passo a passo da AWS no link https://docs.aws.amazon.com/cli/latest/userguide/cli-authentication-user.html

Agora precisamos configurar a credencial criada no Azure Pipelines, para isso vamos utilizar a configuração Service Connections. 

O Service Connections do Azure Pipelines é um recurso que permite que você conecte seus pipelines a serviços externos, como Azure, GitHub, Bitbucket, Jenkins, Docker Hub, etc.

Essa conexão é estabelecida por meio de um endpoint seguro, que é uma configuração de conexão que inclui as credenciais necessárias para se comunicar com o serviço externo. O endpoint é criado e gerenciado pelo Azure Pipelines e pode ser usado em seus pipelines para se conectar ao serviço externo.

Ao criar um Service Connection, você pode configurá-lo com diferentes tipos de autenticação, dependendo do serviço externo que está sendo usado. Por exemplo, ao conectar-se ao Azure, você pode usar a autenticação baseada em certificado, enquanto que para o GitHub, você pode usar autenticação baseada em token.

Uma vez que o Service Connection é criado e configurado, ele pode ser usado em seus pipelines para conectar seus repositórios, contêineres, máquinas virtuais e outros serviços. Por exemplo, você pode usar um Service Connection para se conectar ao seu repositório GitHub e implementar seu aplicativo em um ambiente de hospedagem do Azure.

Além disso, o Azure Pipelines também permite que você compartilhe seus Service Connections com outros projetos e equipes na organização, o que simplifica o gerenciamento de credenciais e aumenta a segurança.

Agora vamos instalar o  AWS Toolkit for Azure DevOps No Azure Devops 

  1. Acesse o link: https://marketplace.visualstudio.com/items?itemName=AmazonWebServices.aws-vsts-tools
  2. Clique em "Get it free"
  3. Selecione a organização que deseja instalar e clique no botão "Install"  Azure Devops AWS

Agora podemos utilizar as credenciais criadas no Service Connections através do AWS Toolkit for Azure DevOps.

  1. Acesse o projeto no Azure Devops e clique em Project Settings
  2. Em pipelines, clique em Service Connection
  3. Clique em New service connection e selecione AWS, clique em Next
  4. Insira as credenciais criadas em Access Key ID e Secret Access Key
  5. Inclua o Service connection name, marque o checkbox Grant access permission to all pipelines e clique em Save credenciais

O Service connection name é muito importante pois ele será utilizado na task AWSShellScript@1 no input awsCredentials. 

Por último, vamos criar um código Terraform simples. Utilizei o mesmo código utilizado no AWS get started da Hashicorp.

terraform {
  required_providers {
    aws = {
      source  = "hashicorp/aws"
      version = "~> 4.16"
    }
  }

  required_version = ">= 1.2.0"
}

provider "aws" {
  region  = "us-west-2"
}

resource "aws_instance" "app_server" {
  ami           = "ami-830c94e3"
  instance_type = "t2.micro"

  tags = {
    Name = "ExampleAppServerInstance"
  }
}
Enter fullscreen mode Exit fullscreen mode

Agora é só seguir o passo a passo de como executar uma pipeline, post com mais detalhes:
executar uma pipeline

Pronto, você tem uma pipeline executando código Terraform.  
terraform com azure pipelines

💖 💪 🙅 🚩
bernardo
Luiz Bernardo

Posted on April 26, 2023

Join Our Newsletter. No Spam, Only the good stuff.

Sign up to receive the latest update from our blog.

Related