fixcomap/agustin

Disponible para proyectos remotos · Málaga, EspañaAvailable for remote projects · Málaga, Spain

Agustín Prieto

DevOps Engineer · SRE · Multi-cloud & Kubernetes

Ingeniero DevOps y SRE con diez años de trayectoria en IT, seis de ellos diseñando, automatizando y operando plataformas en Azure, AWS y GCP. Especializado en Kubernetes y OpenShift, integración y entrega continua (GitHub Actions, Jenkins, GitLab CI), infraestructura como código (Terraform, Ansible) y observabilidad (Grafana, Elastic). DevOps and SRE engineer with ten years in IT, six of them designing, automating and operating platforms on Azure, AWS and GCP. Specialised in Kubernetes and OpenShift, continuous integration and delivery (GitHub Actions, Jenkins, GitLab CI), infrastructure as code (Terraform, Ansible) and observability (Grafana, Elastic).

  • 10años en ITyears in IT
  • 6años DevOps / SREyears DevOps / SRE
  • 3clouds: Azure · AWS · GCP
  • 2países: Argentina · Españacountries: Argentina · Spain
Agustín Prieto
$ kubectl get pods -n api
NAME            READY   STATUS    RESTARTS   AGE
api-7d9f4-x2kq  1/1     Running   0          3m
api-7d9f4-p8ns  1/1     Running   0          3m
api-7d9f4-m1vc  1/1     Running   0          3m
$ kubectl rollout status deploy/api -n api
deployment "api" successfully rolled out
$ tofu plan -detailed-exitcode
No changes. Your infrastructure matches the configuration.

01 De un commit a producciónFrom a commit to production

Recorrido completo de un cambio de código, desde el commit hasta su operación en producción, con las herramientas que intervienen en cada fase. Es el modelo de entrega que implanto en cualquier equipo: automatizado de extremo a extremo, con identidades de mínimo privilegio y sin intervención manual sobre los entornos. El punto que recorre el diagrama representa el commit. The full journey of a code change, from commit to production operations, with the tools involved at each stage. It is the delivery model I put in place in any team: automated end to end, with least-privilege identities and no manual intervention on the environments. The dot moving across the diagram represents the commit.

  1. gitCommitfeature/* · pre-commit
  2. CIPull requestGitHub Actions · CodeQL · trivy · plan
  3. ✓RevisiónReview1 aprobación · rulesets1 approval · rulesets
  4. imgBuildDocker · SBOM · cosign
  5. IaCInfraestructuraInfrastructureOpenTofu · OIDC
  6. k8sRolloutKubernetes · Cloud Run
  7. 200En producciónIn productionsmoke test · dominiosmoke test · domain
  8. obsOperaciónOperationsGrafana · alertas · driftGrafana · alerts · drift
$ git commit -m "feat(api): endpoint /orders" && git push
✓ pre-commit · gitleaks: sin secretosno secrets
$ gh pr create --base develop   #142
✓ lint ✓ tests ✓ CodeQL ✓ trivy ✓ tofu plan: 2 to add, 0 to destroy
✓ review: aprobada por agustinprieto97 · merge → mainreview: approved by agustinprieto97 · merge → main
$ docker build · syft · cosign sign --yes sha256:9f3c…
✓ imagen firmada · registry: api:v1.4.0image signed · registry: api:v1.4.0
$ tofu apply   (OIDC · identidadidentity: gh-deployer)
✓ Apply complete! 2 added, 0 changed, 0 destroyed
$ kubectl rollout status deploy/api
✓ 3/3 ready · healthcheck OK
$ curl -sI https://app.fixcomap.com/orders | head -1
HTTP/2 200 · tag v1.4.0
✓ grafana: p95 118 ms · errores 0,0 % · alertas: ninguna · drift: limpiografana: p95 118 ms · errors 0.0% · alerts: none · drift: clean

02 ExperienciaExperience

  1. may 2024 — actualidadMay 2024 — present

    DevOps Engineer · agap2 EspañaSpain

    Diseño y mantenimiento de un sistema de CI/CD centralizado (Bitbucket Pipelines, GitHub Actions, Jenkins) para despliegue y pruebas automatizadas. Administración y optimización de la infraestructura en Microsoft Azure (AKS, Blob Storage, Enterprise Applications, WebApps). Despliegue y orquestación de aplicaciones contenerizadas en Kubernetes; observabilidad con Grafana y Elastic.Design and maintenance of a centralised CI/CD system (Bitbucket Pipelines, GitHub Actions, Jenkins) for automated deployment and testing. Administration and optimisation of Microsoft Azure infrastructure (AKS, Blob Storage, Enterprise Applications, WebApps). Deployment and orchestration of containerised applications on Kubernetes; observability with Grafana and Elastic.

    • Kubernetes
    • Azure
    • GitHub Actions
    • Bitbucket Pipelines
    • Jenkins
    • Docker
    • Grafana
    • Elastic
  2. abr 2023 — feb 2024Apr 2023 — Feb 2024

    DevOps Engineer · Talan Málaga

    Administración de servicios en Azure y AWS, implantación de pipelines de Ansible para la gestión de post-configuración y automatización de operaciones con Python y Terraform.Administration of Azure and AWS services, implementation of Ansible pipelines for post-configuration management, and operational automation with Python and Terraform.

    • Azure
    • AWS
    • Terraform
    • Ansible
    • Python
    • Grafana
  3. may 2022 — jun 2023May 2022 — Jun 2023

    DevOps Engineer · OTG — Open Technologies Group São Paulo, Brasil · remotoSão Paulo, Brazil · remote

    Construcción y mantenimiento del servidor GitLab y de los pipelines de CI/CD con Jenkins (Groovy) y Docker; gestión de la infraestructura con Ansible y monitorización con Grafana en entornos Linux y Windows.Build and maintenance of the GitLab server and CI/CD pipelines with Jenkins (Groovy) and Docker; infrastructure management with Ansible and Grafana monitoring across Linux and Windows environments.

    • GitLab CI
    • Jenkins
    • Groovy
    • Docker Swarm
    • Ansible
  4. nov 2021 — may 2022Nov 2021 — May 2022

    DevOps Engineer · SRE · Contabilium Argentina

    Orquestación de pipelines de Jenkins en Groovy, administración de Azure Cloud Services y automatización de tareas con Bash, Python y PowerShell.Orchestration of Jenkins pipelines in Groovy, administration of Azure Cloud Services and task automation with Bash, Python and PowerShell.

    • Jenkins
    • Azure
    • Bash
    • Python
    • PowerShell
  5. may 2020 — nov 2021May 2020 — Nov 2021

    DevOps Engineer · ICBC Argentina bancabanking

    Orquestación de pipelines de Ansible, administración de la plataforma OpenShift e implantación del stack ELK y Grafana para la monitorización integral. Integración continua con GitLab CI.Orchestration of Ansible pipelines, administration of the OpenShift platform and implementation of the ELK and Grafana stack for end-to-end monitoring. Continuous integration with GitLab CI.

    • OpenShift
    • Ansible
    • ELK
    • GitLab CI
    • Docker Swarm
  6. 2019 — 2020

    System Administrator · DevOps Consultant Global Hitss · Thomson Reuters · Magnético

    Administración de sistemas y consultoría DevOps en proyectos de corta duración en Buenos Aires.Systems administration and DevOps consulting on short-term engagements in Buenos Aires.

  7. nov 2015 — mar 2019Nov 2015 — Mar 2019

    Help Desk Technician · FixComAp Buenos Aires

    Inicio de la trayectoria profesional y origen del nombre de la marca.The start of the professional journey and the origin of the brand name.

03 Stack

Cloud

  • Azure · AKS, WebApps, Blob, Entra ID
  • AWS · EC2, S3, RDS, KMS, CloudWatch
  • GCP · Cloud Run, WIF, Artifact Registry, Secret Manager

ContenedoresContainers

  • Kubernetes
  • OpenShift
  • Docker
  • Docker Swarm
  • distroless

CI/CD

  • GitHub Actions
  • GitLab CI
  • Jenkins · Groovy
  • Bitbucket Pipelines
  • Azure DevOps
  • TeamCity
  • Renovate

IaC y automatizaciónIaC & automation

  • Terraform · OpenTofu
  • Ansible
  • Python
  • Bash
  • PowerShell
  • Go

ObservabilidadObservability

  • Grafana
  • OpenTelemetry
  • Prometheus
  • Elastic · ELK
  • Zabbix
  • Cloud Monitoring

Seguridad en el pipelinePipeline security

  • OIDC · WIF
  • cosign
  • trivy
  • checkov · tflint
  • gitleaks
  • CodeQL
  • Cloudflare Access

AplicacionesApplications

  • Go
  • Node · Express
  • React · Vite
  • PostgreSQL · Neon
  • PWA

04 Caso realCase study: fixcomap/platform

Una plataforma interna, operativa y de código abierto, que construí junto a mi hermano para fixcomap: infraestructura en Google Cloud y Cloudflare gestionada con OpenTofu, un catálogo de proyectos y un único pipeline que usan todos los repositorios. Dar de alta una aplicación nueva es añadir un fichero YAML; esta misma página se publica a través de ella. Coste de explotación mensual: el dominio. An internal, working, open-source platform I built with my brother for fixcomap: Google Cloud and Cloudflare infrastructure managed with OpenTofu, a project catalogue and a single pipeline shared by every repository. Onboarding a new application means adding one YAML file; this very page is published through it. Monthly operating cost: the domain.

RepositoriosRepositories

  • florindario
  • jjpachangas
  • plantilla
  • reservas
  • web
  • agustin
  • elias
  • docs

ci.yml idéntico en todosidentical everywhere

fixcomap/platform

catalog/<app>.yamltipo, dominios, migraciones, secretostype, domains, migrations, secrets
cicd.ymlrouter: static o webapprouter: static or webapp
checks obligatoriosrequired checkslint · tests · Postgres · CodeQL · trivy · gitleaks
infra/identidad por app, secretos, DNS, monitoreoper-app identity, secrets, DNS, monitoring

DestinosTargets

Cloudflare Pagessitios y fronts · Access en devsites and fronts · Access on dev
Cloud RunAPIs · imagen firmada con cosignAPIs · cosign-signed image
Neon Postgresmigraciones antes de cada deploymigrations before every deploy
Grafana · Cloud MonitoringOpenTelemetry, SLOs, uptimeOpenTelemetry, SLOs, uptime
  1. feature/* → PR checks, nada se despliegachecks, nothing deploys
  2. develop entorno de desarrollo privadoprivate development environment
  3. release/* → main producción con aprobaciónproduction with approval
  4. hotfix/* back-merge a developback-merged to develop

El catálogo como única fuenteThe catalogue as single source of truth

Cada proyecto se describe en catalog/<repo>.yaml: tipo, dominios, front, migraciones y secretos. El pipeline, los dominios, el monitoreo y los permisos se derivan de ahí; un repositorio sin entrada no despliega nada.Each project is described in catalog/<repo>.yaml: type, domains, front end, migrations and secrets. Pipeline, domains, monitoring and permissions are all derived from it; a repository without an entry deploys nothing.

catalog/ →

Un pipeline versionado para todosOne versioned pipeline for everyone

Los repositorios no mantienen pipeline propio: fijan [email protected] y un router decide si es un sitio estático o una webapp. Una mejora llega a cada proyecto de forma controlada, con una PR de una línea.Repositories keep no pipeline of their own: they pin [email protected] and a router decides whether it is a static site or a web app. An improvement reaches each project in a controlled way, through a one-line PR.

cicd.yml →

Una identidad por aplicaciónOne identity per application

GitHub Actions entra en Google Cloud por OIDC, sin claves. Cada webapp despliega con su propia cuenta <app>-deployer, que solo alcanza sus servicios, su estado y sus secretos; los cambios de IAM se aplican tras revisar el plan.GitHub Actions reaches Google Cloud through OIDC, with no keys. Each web app deploys with its own <app>-deployer account, scoped to its own services, state and secrets; IAM changes are applied only after the plan is reviewed.

wif.tf →

Gitflow protegido, sin excepcionesProtected gitflow, no exceptions

Rulesets en main y develop: PR obligatoria, rama al día y check cicd / ok en verde. Releases y hotfixes versionados con back-merge, y producción detrás de un environment con aprobación humana.Rulesets on main and develop: mandatory PR, up-to-date branch and a green cicd / ok check. Versioned releases and hotfixes with back-merges, and production behind an environment with human approval.

CONTRIBUTING →

Entornos de desarrollo privadosPrivate development environments

Cada push a develop publica un entorno real, protegido con Cloudflare Access y restringido también en la propia API a una lista de cuentas. Se prueba con datos de verdad antes de abrir la release.Every push to develop publishes a real environment, protected by Cloudflare Access and also restricted to an allow-list inside the API itself. Changes are tested against real data before a release is cut.

README →

Operación como códigoOperations as code

Plan nocturno que abre una incidencia ante cualquier deriva, control de coste en cada PR, backups diarios con una identidad que escribe pero no borra, y monitoreo y alertas generados desde el catálogo.A nightly plan that opens an issue on any drift, cost control on every PR, daily backups with an identity that can write but not delete, and monitoring and alerts generated from the catalogue.

drift.yml →

05 Estándar de seguridad y calidadSecurity & quality standard

Lo que se exige a todas las aplicaciones, sin excepciones. Se define una vez en la plataforma y llega a toda la organización: si una mejora no se puede aplicar a todas, no se aplica a ninguna. What every application must meet, no exceptions. It is defined once in the platform and reaches the whole organisation: if an improvement cannot apply to every app, it applies to none.

En cada pull requestOn every pull request

  • CodeQL obligatorio en los rulesets: una alerta nueva bloquea el mergeCodeQL required by rulesets: a new alert blocks the merge
  • gitleaks, trivy (código, IaC e imágenes), checkov, tflint y actionlintgitleaks, trivy (code, IaC and images), checkov, tflint and actionlint
  • Lint y tests obligatorios en cada paquete; un paquete sin ellos no pasaMandatory lint and tests in every package; a package without them fails

Tests contra una base realTests against a real database

  • El pipeline levanta un Postgres efímero y aplica las migracionesThe pipeline spins up an ephemeral Postgres and applies the migrations
  • Tests de integración que recorren la API de verdad: altas, permisos, conflictosIntegration tests that drive the real API: sign-ups, permissions, conflicts
  • Pasarelas externas simuladas: webhook de pago con firma válida e inválida, reembolsosSimulated third parties: payment webhook with valid and invalid signatures, refunds

En cada APIIn every API

  • Defensa CSRF por Origin y escrituras solo en JSONCSRF defence by Origin and JSON-only writes
  • Límite de peticiones por IP; con registro abierto, también por usuario y con suspensión automáticaPer-IP rate limits; with open sign-up, also per user with automatic suspension
  • Sesiones en cookies httpOnly, Secure y SameSite; en la base, solo su hashhttpOnly, Secure, SameSite session cookies; only their hash is stored

Cadena de suministroSupply chain

  • Actions fijadas por SHA y lista cerrada de Actions permitidasActions pinned by SHA and a closed allow-list of Actions
  • Imágenes firmadas con cosign (keyless) y analizadas con trivy antes de desplegarImages signed with cosign (keyless) and scanned with trivy before deploying
  • Dependencias al día con Renovate; secretos solo en Secret ManagerDependencies kept current with Renovate; secrets only in Secret Manager

06 ProyectosProjects

Aplicaciones reales que corren sobre la plataforma, con usuarios de verdad. Cada una pasa por el mismo pipeline, el mismo estándar y el mismo camino a producción. Real applications running on the platform, with real users. Each one goes through the same pipeline, the same standard and the same path to production.

Florindario

en producciónin production

Calendario de trabajo para horarios rotativos: semanas tipo que se aplican a meses enteros, horas por semana y por mes, horas extra, vacaciones en días hábiles o naturales y sueldo estimado.A work calendar for rotating shifts: template weeks applied to whole months, hours per week and month, overtime, holidays counted in working or calendar days, and an estimated payslip.

  • App instalable que funciona sin conexión (service worker, solo lectura)Installable app that works offline (service worker, read-only)
  • Exporta a calendario (.ics) y PDF generados en el servidor con enlaces firmados de 5 minutos, para que funcione también en iPhoneExports to calendar (.ics) and PDF, generated server-side through 5-minute signed links so it also works on iPhone
  • Cuentas abiertas con protección automática ante abusoOpen sign-up with automatic abuse protection
  • React
  • Node · Express
  • Postgres
  • PWA
  • Cloud Run
florindario.fixcomap.com →

JJ Pachangas

en producciónin production

Organizar partidos con amigos: se crea la pachanga, se comparte el link por WhatsApp y la gente se anota con su nombre, sin cuenta. Titulares y suplentes por orden de llegada.Organising pickup games: create a match, share the link on WhatsApp and people sign up with just their name, no account. Starters and substitutes in order of arrival.

  • Equipos con color de camiseta y desafíos entre dos grupos, cada uno con su capitánTeams with shirt colours and challenges between two groups, each with its own captain
  • Bajas y gestión del capitán con códigos secretos: en la base, solo su hashDrop-outs and captain access through secret codes; only their hash is stored
  • Las pachangas se borran solas un día después de jugarseMatches delete themselves one day after being played
  • React
  • Node · Express
  • Postgres
  • Cloud Run
jjpachangas.fixcomap.com →

Plantilla

en producciónin production

Gestión de un equipo de fútbol para sus entrenadores: pasar lista en cada entreno, gestionar la plantilla y generar la imagen de convocados para el grupo.Football team management for its coaches: take attendance at every training session, manage the squad and generate the call-up image for the group chat.

  • Informe de jugadores en PDF generado en el servidorPlayer report as a server-generated PDF
  • Go sin framework, imagen distroless y trazas con OpenTelemetryFramework-free Go, distroless image and OpenTelemetry tracing
  • Tests de integración con -race contra Postgres en cada PRIntegration tests with -race against Postgres on every PR
  • Go
  • Postgres
  • OpenTelemetry
  • Cloud Run
fixcomap/plantilla →

07 Certificaciones e idiomasCertifications & languages

CertificacionesCertifications

  • Red Hat DO380 · OpenShift Administration III: Scaling Kubernetes Deployments in the Enterprise
  • Red Hat DO447 · Advanced Automation: Ansible Best Practices
  • AWS · Storage Gateway Deep Dive: Amazon S3 File Gateway
  • Docker · de principiante a expertofrom beginner to expert
  • Técnico en hardware de PCPC hardware technician

IdiomasLanguages

  • Español · nativoSpanish · native
  • Inglés · profesional · B2English · professional · B2

08 ContactoContact

Abierto a proyectos de ingeniería de plataforma, migraciones a Kubernetes y cloud, CI/CD y observabilidad, en remoto o en Málaga.Open to platform engineering projects, Kubernetes and cloud migrations, CI/CD and observability, remote or in Málaga.