Introducció

En aquest tema, aprendrem com integrar Terraform amb GitHub Actions per automatitzar el desplegament d'infraestructura com a codi (IaC). GitHub Actions és una plataforma d'integració contínua i desplegament continu (CI/CD) que permet crear fluxos de treball per automatitzar tasques de desenvolupament. Utilitzarem GitHub Actions per executar scripts de Terraform cada vegada que es faci un canvi en el codi.

Objectius

  • Comprendre els conceptes bàsics de GitHub Actions.
  • Configurar un flux de treball de GitHub Actions per executar Terraform.
  • Automatitzar el desplegament d'infraestructura amb Terraform i GitHub Actions.

Requisits previs

  • Coneixements bàsics de Terraform.
  • Un compte de GitHub.
  • Un repositori de GitHub amb configuracions de Terraform.

Passos per configurar GitHub Actions amb Terraform

  1. Crear un fitxer de flux de treball

Els fluxos de treball de GitHub Actions es defineixen en fitxers YAML que es col·loquen dins del directori .github/workflows del vostre repositori. Crearem un fitxer anomenat terraform.yml.

name: Terraform Workflow

on:
  push:
    branches:
      - main

jobs:
  terraform:
    runs-on: ubuntu-latest

    steps:
    - name: Checkout repository
      uses: actions/checkout@v2

    - name: Setup Terraform
      uses: hashicorp/setup-terraform@v1

    - name: Terraform Init
      run: terraform init

    - name: Terraform Plan
      run: terraform plan

    - name: Terraform Apply
      if: github.ref == 'refs/heads/main'
      run: terraform apply -auto-approve

  1. Explicació del fitxer de flux de treball

  • name: Nom del flux de treball.
  • on: Especifica els esdeveniments que desencadenen el flux de treball. En aquest cas, s'executa en cada push a la branca main.
  • jobs: Defineix els treballs que es realitzaran.
    • terraform: Nom del treball.
    • runs-on: Especifica el sistema operatiu en el qual s'executarà el treball. Aquí utilitzem ubuntu-latest.
    • steps: Defineix els passos del treball.
      • Checkout repository: Utilitza l'acció actions/checkout@v2 per clonar el repositori.
      • Setup Terraform: Utilitza l'acció hashicorp/setup-terraform@v1 per instal·lar Terraform.
      • Terraform Init: Executa terraform init per inicialitzar la configuració de Terraform.
      • Terraform Plan: Executa terraform plan per crear un pla d'execució.
      • Terraform Apply: Executa terraform apply -auto-approve per aplicar els canvis. Aquest pas només s'executa si la branca és main.

  1. Configurar secrets

Per a l'autenticació amb els proveïdors de núvol, necessitem configurar secrets en el repositori de GitHub. Aquests secrets es poden utilitzar en el flux de treball per proporcionar credencials de manera segura.

  1. Aneu a la pàgina del vostre repositori a GitHub.
  2. Feu clic a Settings > Secrets > New repository secret.
  3. Afegiu els secrets necessaris, com ara AWS_ACCESS_KEY_ID i AWS_SECRET_ACCESS_KEY per a AWS.

  1. Utilitzar secrets en el flux de treball

Actualitzeu el fitxer terraform.yml per utilitzar els secrets configurats.

name: Terraform Workflow

on:
  push:
    branches:
      - main

jobs:
  terraform:
    runs-on: ubuntu-latest

    steps:
    - name: Checkout repository
      uses: actions/checkout@v2

    - name: Setup Terraform
      uses: hashicorp/setup-terraform@v1

    - name: Configure AWS credentials
      env:
        AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
        AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
      run: |
        echo "AWS_ACCESS_KEY_ID=${{ secrets.AWS_ACCESS_KEY_ID }}" >> $GITHUB_ENV
        echo "AWS_SECRET_ACCESS_KEY=${{ secrets.AWS_SECRET_ACCESS_KEY }}" >> $GITHUB_ENV

    - name: Terraform Init
      run: terraform init

    - name: Terraform Plan
      run: terraform plan

    - name: Terraform Apply
      if: github.ref == 'refs/heads/main'
      run: terraform apply -auto-approve

  1. Executar el flux de treball

Cada vegada que feu un push a la branca main, el flux de treball de GitHub Actions s'executarà automàticament, inicialitzant Terraform, creant un pla i aplicant els canvis.

Exercici pràctic

  1. Creeu un repositori de GitHub i afegiu una configuració bàsica de Terraform per desplegar una instància d'EC2 a AWS.
  2. Configureu els secrets necessaris per a l'autenticació amb AWS.
  3. Creeu el fitxer de flux de treball terraform.yml seguint els passos anteriors.
  4. Feu un push a la branca main i verifiqueu que el flux de treball s'executa correctament i desplega la instància d'EC2.

Solució de l'exercici

name: Terraform Workflow

on:
  push:
    branches:
      - main

jobs:
  terraform:
    runs-on: ubuntu-latest

    steps:
    - name: Checkout repository
      uses: actions/checkout@v2

    - name: Setup Terraform
      uses: hashicorp/setup-terraform@v1

    - name: Configure AWS credentials
      env:
        AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
        AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
      run: |
        echo "AWS_ACCESS_KEY_ID=${{ secrets.AWS_ACCESS_KEY_ID }}" >> $GITHUB_ENV
        echo "AWS_SECRET_ACCESS_KEY=${{ secrets.AWS_SECRET_ACCESS_KEY }}" >> $GITHUB_ENV

    - name: Terraform Init
      run: terraform init

    - name: Terraform Plan
      run: terraform plan

    - name: Terraform Apply
      if: github.ref == 'refs/heads/main'
      run: terraform apply -auto-approve

Conclusió

En aquest tema, hem après com utilitzar GitHub Actions per automatitzar el desplegament d'infraestructura amb Terraform. Hem configurat un flux de treball bàsic que inicialitza Terraform, crea un pla i aplica els canvis cada vegada que es fa un push a la branca main. Aquesta integració permet una gestió més eficient i segura de la infraestructura com a codi.

© Copyright 2024. Tots els drets reservats