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
- 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
- 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
pusha la brancamain. - 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@v2per clonar el repositori. - Setup Terraform: Utilitza l'acció
hashicorp/setup-terraform@v1per instal·lar Terraform. - Terraform Init: Executa
terraform initper inicialitzar la configuració de Terraform. - Terraform Plan: Executa
terraform planper crear un pla d'execució. - Terraform Apply: Executa
terraform apply -auto-approveper aplicar els canvis. Aquest pas només s'executa si la branca ésmain.
- Checkout repository: Utilitza l'acció
- 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.
- Aneu a la pàgina del vostre repositori a GitHub.
- Feu clic a
Settings>Secrets>New repository secret. - Afegiu els secrets necessaris, com ara
AWS_ACCESS_KEY_IDiAWS_SECRET_ACCESS_KEYper a AWS.
- 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
- 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
- Creeu un repositori de GitHub i afegiu una configuració bàsica de Terraform per desplegar una instància d'EC2 a AWS.
- Configureu els secrets necessaris per a l'autenticació amb AWS.
- Creeu el fitxer de flux de treball
terraform.ymlseguint els passos anteriors. - Feu un
pusha la brancamaini 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-approveConclusió
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.
Curs de Terraform
Mòdul 1: Introducció a Terraform
- Què és Terraform?
- Instal·lant Terraform
- Conceptes bàsics de Terraform
- Primera configuració de Terraform
Mòdul 2: Llenguatge de configuració de Terraform
Mòdul 3: Gestió de l'estat
Mòdul 4: Mòduls de Terraform
Mòdul 5: Proveïment de recursos
- Conceptes bàsics de proveïment
- Proveïment de recursos AWS
- Proveïment de recursos Azure
- Proveïment de recursos GCP
Mòdul 6: Funcionalitats avançades de Terraform
Mòdul 7: Millors pràctiques de Terraform
- Organització del codi
- Control de versions
- Proves del codi de Terraform
- Millors pràctiques de seguretat
Mòdul 8: Terraform en CI/CD
- Integració de Terraform amb CI/CD
- Automatització de Terraform amb Jenkins
- Ús de Terraform amb GitHub Actions
- Terraform Cloud i Enterprise
