Tutorial de uso de KV y Postgres en Fly.io con Go o Python

·

·

Introducción

En este extenso tutorial aprenderás a desplegar y manejar bases de datos KV (Key-Value) y PostgreSQL en Fly.io, utilizando dos lenguajes populares: Go y Python. El objetivo es ofrecer una guía paso a paso, con ejemplos, buenas prácticas y enlaces de referencia para que puedas dominar este flujo de trabajo en un entorno de producción.

¿Por qué Fly.io

  • Despliegue global: Instancias cerca de tus usuarios.
  • Integración sencilla: CLI intuitiva y autoconfiguración.
  • Servicios gestionados: KV y Postgres nativos sin infra extra.

1. Requisitos Previos

2. Configuración de Fly.io

  1. Login: flyctl auth login.
  2. Crear una app:
    flyctl apps create nombre-de-tu-app --region iad
  3. Inicializar y elegir: En tu proyecto local, ejecuta:
    flyctl init

    Completa con el nombre de la app y elige Go o Python.

3. KV en Fly.io

3.1 ¿Qué es Fly.io KV

Fly.io KV es un almacén de datos Key-Value distribuido y replicado, especialmente útil para sesiones, cachés y configuraciones. Con baja latencia y alta disponibilidad.

3.2 Creación y uso de KV

  1. Crear un espacio:
    flyctl kv create mi-kv-ns
  2. Listar espacios: flyctl kv lists
  3. Subir esquema:
    flyctl kv migrate mi-kv-ns --auto

3.3 Ejemplo en Go

import (
    context
    github.com/superfly/flyctl/api // Ejemplo
)
func main() {
    client := api.NewKVClient(mi-kv-ns)
    ctx := context.Background()
    // Set
    err := client.Put(ctx, clave1, []byte(valor1))
    // Get
    valor, err := client.Get(ctx, clave1)
    fmt.Println(string(valor))
}

3.4 Ejemplo en Python

from flyio_kv import KVClient

client = KVClient(mi-kv-ns)
# Set
client.put(clave1, bvalor1)
# Get
valor = client.get(clave1)
print(valor.decode())

4. PostgreSQL en Fly.io

4.1 ¿Por qué Postgres en Fly

PostgreSQL es una base de datos relacional avanzada. Fly.io la ofrece como servicio gestionado con backups automáticos y replicas.

4.2 Provisionar Postgres

  1. Crear base:
    flyctl postgres create --name mi-postgres --region iad
  2. Obtener credenciales:
    flyctl postgres attach --postgresmi-postgres --app nombre-de-tu-app

4.3 Variables de entorno

Variable Descripción
DATABASE_URL Cadena de conexión completa.
PGSSLMODE Requerido: require para conexiones seguras.

4.4 Ejemplo en Go

import (
    database/sql
    _ github.com/lib/pq
)
func main() {
    dsn := os.Getenv(DATABASE_URL)
    db, err := sql.Open(postgres, dsn)
    // Insertar
    _, err = db.Exec(CREATE TABLE IF NOT EXISTS users(id SERIAL PRIMARY KEY, name TEXT))
    _, err = db.Exec(INSERT INTO users(name) VALUES(1), Alice)
    // Consultar
    rows, _ := db.Query(SELECT id,name FROM users)
    for rows.Next() {
      var id int var name string
      rows.Scan(id, name)
      fmt.Println(id, name)
    }
}

4.5 Ejemplo en Python

import os
import psycopg2

dsn = os.getenv(DATABASE_URL)
conn = psycopg2.connect(dsn)
cur = conn.cursor()
cur.execute(CREATE TABLE IF NOT EXISTS users(id SERIAL PRIMARY KEY, name TEXT))
cur.execute(INSERT INTO users(name) VALUES(%s), (Alice,))
conn.commit()

cur.execute(SELECT id,name FROM users)
for row in cur.fetchall():
    print(row)
cur.close()
conn.close()

5. Buenas Prácticas y Consejos

  • Entornos: Usa flyctl config para diferenciar staging y production.
  • Backups: Programa snapshots regulares de Postgres.
  • Manejo de errores: Valida retornos de client.Get y consultas SQL.
  • Variables sensibles: No las incluyas en repositorio usa flyctl secrets.
  • Escalabilidad: KV para datos ligeros y Postgres para transacciones complejas.

6. Enlaces y Recursos

Conclusión

Hemos cubierto desde la configuración inicial en Fly.io hasta ejemplos de Go y Python para usar KV y PostgreSQL. Con estas herramientas y buenas prácticas podrás desplegar aplicaciones distribuidas, resilientes y de baja latencia. ¡Manos a la obra y feliz despliegue!



Leave a Reply

Your email address will not be published. Required fields are marked *