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
push
a 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@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 é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_ID
iAWS_SECRET_ACCESS_KEY
per 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.yml
seguint els passos anteriors. - Feu un
push
a la brancamain
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.
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