DEV Community

Luiz Bernardo
Luiz Bernardo

Posted on

3

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

Sentry image

Hands-on debugging session: instrument, monitor, and fix

Join Lazar for a hands-on session where you’ll build it, break it, debug it, and fix it. You’ll set up Sentry, track errors, use Session Replay and Tracing, and leverage some good ol’ AI to find and fix issues fast.

RSVP here →

Top comments (0)

A Workflow Copilot. Tailored to You.

Pieces.app image

Our desktop app, with its intelligent copilot, streamlines coding by generating snippets, extracting code from screenshots, and accelerating problem-solving.

Read the docs