Oxcart Descargar
Menú

Desarrollar para AWS ECS, EKS, Fargate y Lambda en local desde un Mac

Para probar cargas de trabajo de contenedores AWS en un Mac con chip de Apple, ejecuta exactamente las imágenes que vas a desplegar: tareas ECS y Fargate como un proyecto Compose, imágenes de contenedor Lambda con el Runtime Interface Emulator integrado de AWS y API de AWS mediante LocalStack. Oxcart mantiene rápido ese ciclo, con contenedores que arrancan en 42 ms e imágenes amd64 que se ejecutan mediante Rosetta.

Actualizado

Qué se ejecuta y dónde

Servicios de contenedores AWS y sus equivalentes locales en Oxcart
Servicio AWSEquivalente localTu flujo de trabajo local
Tarea ECS, tarea FargateDocker Compose con las imágenes de la tareaEjecutar tus servicios juntos con comprobaciones de salud y puertos publicados
Lambda (imagen de contenedor)Imagen base de Lambda con Runtime Interface EmulatorInvocar tu función por HTTP en arm64 nativo
S3 y otras API de AWSLocalStackDesarrollar en local operaciones con buckets y objetos S3
EKSkubectl y k9s contra el clúster real; kwok para una API localCompilar y probar en local, después usar kubectl y k9s con tu clúster

Tareas ECS y Fargate como un proyecto Compose

Una definición de tarea ECS es una lista de contenedores con imágenes, entorno, asignaciones de puertos, comprobaciones de salud y orden de arranque. Compose describe lo mismo, así que la correspondencia es directa: un servicio por definición de contenedor.

Campos de la definición de tarea y sus equivalentes en Compose
Definición de tareacompose.yaml
imageimage
environment, secretsenvironment, env_file (mantén los secretos reales fuera del archivo)
portMappingsports
healthCheckhealthcheck
dependsOn with HEALTHYdepends_on with condition: service_healthy
runtimePlatform.cpuArchitectureplatform: linux/amd64 or linux/arm64
services:
  api:
    image: ACCOUNT.dkr.ecr.us-east-1.amazonaws.com/api:1.4.0
    platform: linux/amd64          # match the task's cpuArchitecture
    environment:
      DATABASE_URL: postgres://postgres:dev@db:5432/app
    ports: ["8080:8080"]
    depends_on:
      db:
        condition: service_healthy
  db:
    image: postgres:17-alpine
    environment:
      POSTGRES_PASSWORD: dev
      POSTGRES_DB: app
    healthcheck:
      test: ["CMD", "pg_isready", "-U", "postgres"]
      interval: 2s
      retries: 30
docker compose up -d --wait     # returns when db is healthy and api has started
curl localhost:8080/health
docker compose down -v

Verificamos este patrón en Oxcart con Postgres 17 y un servicio nginx condicionado por service_healthy: up --wait terminó con ambos saludables y el puerto publicado respondiendo en localhost. Para imágenes amd64 compiladas en tu Mac, pasa la misma plataforma al ejecutarlas; una imagen local solo para amd64 únicamente se encuentra cuando se establece --platform linux/amd64 (o platform: en Compose).

Ejecutar e invocar una imagen de contenedor Lambda en local

  1. Escribe el handler. Crea app.py con una función handler(event, context) que devuelva un dict, por ejemplo {"statusCode": 200, "body": "hello"}.
  2. Escribe el Dockerfile. Parte de una imagen base de AWS Lambda, que incluye el Runtime Interface Emulator: FROM public.ecr.aws/lambda/python:3.13, después COPY app.py ${LAMBDA_TASK_ROOT}/ y CMD ["app.handler"].
  3. Compila la imagen. Ejecuta docker build -t my-lambda .. Añade --platform linux/amd64 si tu función está configurada para x86_64.
  4. Ejecútala. Ejecuta docker run -d -p 9000:8080 my-lambda. El emulador escucha en el puerto 8080 dentro del contenedor.
  5. Invócala. Ejecuta curl -XPOST localhost:9000/2015-03-31/functions/function/invocations -d '{}'. La respuesta es el valor que devuelve tu handler, y docker logs muestra la línea REPORT de Lambda con la duración.

En nuestra ejecución, la función respondió {"statusCode": 200, "body": "hello from lambda on aarch64"}, y el registro del contenedor mostró la línea REPORT de Lambda con una duración de 19 ms. El emulador es el de AWS: «un proxy para las API Runtime y Extensions de Lambda» que expone el endpoint /2015-03-31/functions/function/invocations.

API de AWS con LocalStack

LocalStack emula las API de AWS en un contenedor en el puerto 4566. En Oxcart ejecutamos la imagen 4.9 y probamos S3 de principio a fin:

docker run -d --name localstack -p 4566:4566 localstack/localstack:4.9
curl -s localhost:4566/_localstack/health          # s3, lambda, dynamodb… "available"
curl -X PUT localhost:4566/my-bucket               # create a bucket
curl -X PUT --data-binary hello localhost:4566/my-bucket/hello.txt
curl localhost:4566/my-bucket/hello.txt            # hello

Conoce la licencia antes de basar tu trabajo en ella. Desde el 23 de marzo de 2026, las últimas versiones de LocalStack requieren una cuenta LocalStack y un token de autenticación; sin LOCALSTACK_AUTH_TOKEN, la imagen más reciente termina con «License activation failed». El plan gratuito Hobby de LocalStack es para uso no comercial; ECS está disponible desde el plan Base y EKS desde Ultimate.

Enviar a ECR y desplegar

aws ecr get-login-password --region us-east-1 \
  | docker login --username AWS --password-stdin ACCOUNT.dkr.ecr.us-east-1.amazonaws.com
docker buildx build --platform linux/amd64 --load -t ACCOUNT.dkr.ecr.us-east-1.amazonaws.com/api:1.4.0 .
docker push ACCOUNT.dkr.ecr.us-east-1.amazonaws.com/api:1.4.0

Oxcart guarda la contraseña del registro en el Llavero de macOS, no en ~/.docker/config.json. No se admite enviar una imagen multiplataforma desde Oxcart: envía una etiqueta por arquitectura o publica manifiestos multi-arquitectura desde la CI.

EKS desde tu Mac

aws eks update-kubeconfig --name my-cluster añade el clúster a tu kubeconfig para que puedas usar kubectl y k9s desde macOS. Desarrolla y prueba tus servicios en local con Oxcart y después despliega las mismas imágenes en EKS. Para probar manifiestos y controladores en local, kwok proporciona un servidor de API Kubernetes real con nodos simulados. La guía de Kubernetes en Mac explica cómo encajan estos flujos de trabajo.

Por qué merece la pena el ciclo local

Cada cambio que pruebas en local evita un envío, un despliegue y una búsqueda en los registros. Oxcart acorta ese ciclo: 42 ms para docker run --rm, 0.69 s para crear e iniciar 20 contenedores y 77 ms para detenerlos y eliminarlos, los mejores resultados de los tres entornos que probamos. Tu Mac abre las conexiones salientes de los contenedores, así que una VPN hacia tu red AWS también se aplica a ellas.

Preguntas

¿Cómo pruebo una tarea ECS o Fargate en local desde un Mac?

Ejecuta los contenedores de la tarea con Docker Compose: un servicio por definición de contenedor, con la misma imagen, entorno, asignaciones de puertos, comprobación de salud y dependencias. docker compose up -d --wait termina cuando todos los servicios con comprobación de salud están saludables. Oxcart ejecuta los servicios con dependencias de comprobaciones de salud y puertos publicados, para que puedas probarlos juntos antes del despliegue.

¿Puedo ejecutar imágenes de contenedor AWS Lambda en local en equipos con chip de Apple?

Sí. Las imágenes base de AWS Lambda incluyen el Runtime Interface Emulator. En Oxcart compilamos una función Python 3.13 a partir de public.ecr.aws/lambda/python:3.13, la ejecutamos con -p 9000:8080 y la invocamos con curl: respondió HTTP 200 de forma nativa en arm64.

¿LocalStack funciona en Oxcart?

Sí, como contenedor. Verificamos la creación de buckets S3 y las operaciones put, get y list contra localhost:4566 con la imagen LocalStack 4.9. Las versiones actuales de LocalStack necesitan una cuenta LocalStack y un token de autenticación establecido como LOCALSTACK_AUTH_TOKEN; sin él, la imagen más reciente termina. LocalStack documenta ECS desde el plan Base y EKS desde Ultimate.

¿Cómo envío una imagen a Amazon ECR desde un Mac?

Inicia sesión con aws ecr get-login-password --region REGION | docker login --username AWS --password-stdin ACCOUNT.dkr.ecr.REGION.amazonaws.com, después añade una etiqueta y ejecuta docker push. En Oxcart, docker login guarda la contraseña en el Llavero de macOS.

¿Debo compilar imágenes amd64 o arm64 para Fargate?

Haz que coincidan con la plataforma de ejecución de la definición de tarea. Si usa ARM64, compila imágenes arm64 nativas en tu Mac; si usa X86_64, compila con --platform linux/amd64. Oxcart ejecuta imágenes amd64 en local mediante Rosetta para que puedas probar exactamente la imagen que despliegas.

¿Cómo desarrollo para EKS en mi Mac?

Compila y prueba tu app y sus dependencias en local con Oxcart y después envía las imágenes a ECR. Usa kubectl y k9s en el Mac para trabajar con tu clúster EKS, y kwok en Oxcart para comprobar manifiestos contra una API Kubernetes local. Consulta la guía de Kubernetes en Mac.

Fuentes y método

  • Ejemplos probados con Oxcart 0.1.2, Mac17,14, macOS 27.2, 2026-10-10 (Compose, imagen base de Lambda con el emulador, S3 de LocalStack 4.9 y Buildx).
  • Autenticación de LocalStack: https://blog.localstack.cloud/localstack-single-image-next-steps/; planes: https://localstack.cloud/pricing/; ECS: https://docs.localstack.cloud/aws/services/ecs/; EKS: https://docs.localstack.cloud/aws/services/eks/.
  • Lambda Runtime Interface Emulator: https://github.com/aws/aws-lambda-runtime-interface-emulator. AWS SAM CLI y Docker: https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/install-docker.html. ECS Local Container Endpoints: https://github.com/awslabs/amazon-ecs-local-container-endpoints. Comprobado el 2026-10-10.
  • Velocidad de los contenedores: Oxcart 0.1.2, 2026-10-10, Apple M5 Max, 8 CPU y 12 GiB, medianas de cinco muestras; los otros entornos se midieron antes ese mismo día en el mismo Mac, con el mismo sistema de medición y el cliente docker 29.4.

Prueba Oxcart con tus propios proyectos

Gratis durante 60 días. Después, $20 por persona y por versión principal, sin suscripción.

Apple silicon · macOS 26 o posterior

Sigue leyendo

Notas de la versión

Oxcart 0.1.4

Última versión

Licencias y mejoras.

  • Activación de licencias mediante un enlace seguro enviado por correo electrónico.
  • Gestión de licencias y Mac desde Settings.
  • Verificación de licencias sin conexión.
  • Mejoras de rendimiento, ajustes de la interfaz y correcciones de errores.

Requiere macOS 26.0 o posterior

Oxcart 0.1.3

Recuperación de memoria en reposo.

  • Recupera memoria de la VM cuando no hay contenedores en ejecución.
  • Conserva los contenedores, las imágenes, los volúmenes y las redes.

Requiere macOS 26.0 o posterior

Oxcart 0.1.2

Integración de herramientas de línea de comandos.

  • Alterna entre las herramientas Docker incluidas con Oxcart y una instalación existente.
  • Ajustes de la interfaz.

Requiere macOS 26.0 o posterior

Oxcart 0.1.1

Herramientas Docker incluidas y controles para agentes.

  • Docker CLI 29.9, Compose 5.6 y Buildx 0.38 incluidos.
  • Integración con contextos de Docker y credenciales seguras en el Llavero.
  • Conexiones de agentes MCP con permisos y bloqueo por agente.

Requiere macOS 26.0 o posterior

Oxcart 0.1.0

Contenedores compatibles con Docker para Apple silicon.

  • Compatibilidad con Docker CLI, Compose y Buildx.
  • Configuración sin conexión con los componentes de ejecución incluidos.
  • Puertos organizados por proyecto y rama de Git.
  • Integración MCP con acceso de solo lectura de forma predeterminada.
  • Actualizaciones automáticas verificadas.

Requiere macOS 26.0 o posterior