a Infraestructura de servidores
Una máquina que se enciende cuando alguien juega y se apaga cuando no.
Todo declarado en Terraform: la máquina, el disco, los respaldos a un bucket, la regla de apagado automático y un presupuesto que avisa por correo antes de que el mes venga cargado. El diseño no depende de que alguien se acuerde de apagar: el sistema lo hace y registra quién pidió qué.
Proyecto personal, para jugar con amigos. Se muestra el diseño y fragmentos del código, no un resultado de venta.
b Fragmentos reales: la máquina y su guardián de costos
Los dos archivos que hacen que esto exista sin que nadie se acuerde: el que crea la máquina, con cada decisión anotada al lado, y el que avisa antes de que el mes venga cargado. Nada se arma a mano en la consola: si el archivo está, la máquina existe. La referencia de costos de este proyecto (14-sep-2026, precios públicos de us-east-1): ~3 USD al mes con todo apagado, ~27 con 60 horas de juego y ~296 si quedara encendida todo el mes, que es justo lo que el apagado automático evita.
Lo que crea la máquina
# La máquina no se crea a mano en la consola:
# se declara acá y terraform la hace existir.
resource "aws_instance" "host" {
ami = data.aws_ami.ubuntu.id
instance_type = var.instance_type
# La subred se elige ordenada: sin sort() el orden no está
# garantizado, y mover la máquina de subred la reemplaza.
subnet_id = sort(data.aws_subnets.default_public.ids)[0]
# En el primer arranque la máquina se instala sola: el guion
# lee las llaves y el bucket desde SSM, no del repositorio.
user_data = templatefile("${path.module}/user-data.sh.tftpl", {
perfil = var.host_name
raiz = "/opt/minecraft"
})
# La IP pública se recibe al arrancar y se libera al apagar,
# así los meses sin jugar no pagan dirección.
associate_public_ip_address = true
# La AMI se mueve sola y la IP se libera al apagar. Si terraform
# las mira, cree que hay deriva y se lleva el servidor puesto:
# pasó de verdad, en un cambio de permisos.
lifecycle {
ignore_changes = [ami, associate_public_ip_address]
}
} Recortado de infra/terraform/main.tf del proyecto real. Las llaves, el correo de avisos y el nombre del host viven fuera del repositorio.
Lo que vigila el gasto
# El presupuesto vive en el repositorio, no en la consola:
# se recrea solo y se revisa antes de aplicar.
resource "aws_budgets_budget" "mes" {
name = "${var.project_name}-mensual"
limit_amount = tostring(var.presupuesto_mes_usd)
time_unit = "MONTHLY"
# Aviso temprano: al 70% del gasto real ya se ve
# que el mes viene cargado.
notification {
threshold = 70
threshold_type = "PERCENTAGE"
notification_type = "ACTUAL"
subscriber_email_addresses = [var.email_avisos]
}
# Aviso a tiempo de reaccionar: lo proyectado
# para el mes pasa el presupuesto.
notification {
threshold = 100
threshold_type = "PERCENTAGE"
notification_type = "FORECASTED"
subscriber_email_addresses = [var.email_avisos]
}
} Recortado de infra/terraform/budget.tf. El monto es una variable del ambiente: se cambia sin tocar el código.En pantalla angosta las líneas largas siguen abajo.
c Núcleo bancario de muestra
Cambiar un sistema de bancos sin romperlo.
Un diseño de núcleo para cooperativas y mutualistas medianas: qué garantías tiene que dar el libro antes de mover un saldo, qué se prueba y en qué orden, y cómo se agrega una funcionalidad nueva sin tocar lo que ya funciona. Se muestra el diseño, que es exactamente lo que se vende: el criterio.
En diseño. No hay software publicado de este proyecto todavía.