sábado, 29 de marzo de 2025

CD de terraform con github actions en AWS


Ya he mostrado dos formas de realizar un CD de terraform con Jenkins que puedes encontrar [aquí](https://www.ahioros.info/2024/12/pipeline-cd-en-jenkins-para-terraform.html) y [aquí](https://www.ahioros.info/2024/12/pipeline-cd-en-jenkins-para-terraform_12.html).

Ahora vamos a realizar lo mismo pero con GitHub Actions. El código está [aquí](https://github.com/ahioros/terraform-aws-eks) como ya debes saber los actions van dentro de la carpeta .github/workflows.

El video lo puedes ver aquí de este tutorial:




El action.yaml contiene lo siguiente:

```yaml
name: workflow-aws-terraform
on:
  workflow_dispatch:
    inputs:
      action:
        required: true
        default: "apply"
        description: "Select the action"
        type: choice
        options:
          - "apply"
          - "destroy"
  push:
    branches:
      - master
      #  pull_request:
      #    branches:
      #      - main

jobs:
  CD:
    runs-on: self-hosted

    steps:
      - name: Checkout
        uses: actions/checkout@v4.1.0

      - name: Configure AWS credentials
        uses: aws-actions/configure-aws-credentials@v4
        with:
          aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID  }}
          aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY  }}
          aws-region: us-east-1

      - name: Install Terraform
        uses: little-core-labs/install-terraform@v2.0.0
        with:
          version: 1.9.8

      - name: Terraform apply
        run: |
          terraform init
          terraform plan -var="config_key=config.json"
          terraform ${{ github.event.inputs.action  }} -var="config_key=config.json" -auto-approve

      - name: kubectl setup
        uses: teknatha136/actions-kubectl@main
      - run: |
          if [[ ${{ github.event.inputs.action  }} == 'apply' ]]; then
            ./kubebin/kubectl --kubeconfig ./template/kubeconfig.yaml get all -A
          else
            echo "Skipping kubectl test"
          fi
```

**Nota:** Ojo el código debes modificarlo agregando la configuración de backend de AWS para que guarde el tfstate en un S3, de lo contrario cuando quieras ejecutarlo con la opción `destroy` no lo hará, porque no encuentra el tfstate.

Recuerda configurar las credenciales de AWS en settings -> Secrets and variables -> Actions -> Repository secrets.

Como se muestra a continuación:
En el pipeline la última parte donde ejecuto el comando kubectl pasándo el kubeconfig no es la forma segura, pero lo estoy haciendo así para que tengas una idea de qué es lo que hace, [aquí](https://github.com/marketplace/actions/kubectl-cli-action) te dejo la documentación.

En el siguiente post hablaré sobre los terraform modules, vamos a reusar código y poder levantar infraestructura más rápido por que el tiempo es dinero.

No hay comentarios.: