Oxcart Télécharger
Menu

Développer pour AWS ECS, EKS, Fargate et Lambda en local sur Mac

Pour tester des workloads de conteneurs AWS sur un Mac à puce Apple, exécutez exactement les images que vous déployez : tâches ECS et Fargate sous forme de projet Compose, images de conteneurs Lambda avec le Runtime Interface Emulator intégré d'AWS, et API AWS via LocalStack. Oxcart accélère ce cycle, avec des conteneurs qui démarrent en 42 ms et des images amd64 exécutées via Rosetta.

Mis à jour

Ce qui tourne où

Services de conteneurs AWS et leurs équivalents locaux sur Oxcart
Service AWSÉquivalent localVotre workflow local
Tâche ECS, tâche FargateDocker Compose avec les images de la tâcheExécuter vos services ensemble avec des contrôles de santé et des ports publiés
Lambda (image de conteneur)Image de base Lambda avec Runtime Interface EmulatorInvoquer votre fonction en HTTP sur arm64 natif
S3 et autres API AWSLocalStackDévelopper localement les opérations sur les buckets et objets S3
EKSkubectl et k9s avec le vrai cluster ; kwok pour une API localeConstruire et tester en local, puis utiliser kubectl et k9s avec votre cluster

Les tâches ECS et Fargate sous forme de projet Compose

Une définition de tâche ECS est une liste de conteneurs avec images, environnement, correspondances de ports, contrôles de santé et ordre de démarrage. Compose décrit les mêmes éléments : la transposition est donc directe, avec un service par définition de conteneur.

Champs de la définition de tâche et équivalents Compose
Définition de tâchecompose.yaml
imageimage
environment, secretsenvironment, env_file (gardez les vrais secrets hors du fichier)
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

Nous avons vérifié ce modèle sur Oxcart avec Postgres 17 et un service nginx conditionné par service_healthy : up --wait s'est terminé avec les deux services sains et le port publié répondant sur localhost. Pour les images amd64 construites sur votre Mac, passez la même plateforme à l'exécution ; une image exclusivement amd64 construite localement n'est trouvée que si --platform linux/amd64 (ou platform: dans Compose) est défini.

Exécuter et invoquer une image de conteneur Lambda en local

  1. Écrivez le handler. Créez app.py avec une fonction handler(event, context) qui renvoie un dict, par exemple {"statusCode": 200, "body": "hello"}.
  2. Écrivez le Dockerfile. Partez d'une image de base AWS Lambda, qui inclut le Runtime Interface Emulator : FROM public.ecr.aws/lambda/python:3.13, puis COPY app.py ${LAMBDA_TASK_ROOT}/ et CMD ["app.handler"].
  3. Construisez l'image. Exécutez docker build -t my-lambda .. Ajoutez --platform linux/amd64 si votre fonction est configurée pour x86_64.
  4. Exécutez-la. Exécutez docker run -d -p 9000:8080 my-lambda. L'émulateur écoute sur le port 8080 dans le conteneur.
  5. Invoquez-la. Exécutez curl -XPOST localhost:9000/2015-03-31/functions/function/invocations -d '{}'. La réponse est la valeur renvoyée par votre handler, et docker logs affiche la ligne REPORT de Lambda avec la durée.

Dans notre exécution, la fonction a répondu {"statusCode": 200, "body": "hello from lambda on aarch64"}, et le journal du conteneur a affiché la ligne Lambda REPORT avec une durée de 19 ms. L'émulateur est celui d'AWS : « un proxy pour les API Runtime et Extensions de Lambda », qui expose le point d'accès /2015-03-31/functions/function/invocations.

Les API AWS avec LocalStack

LocalStack émule les API AWS dans un conteneur sur le port 4566. Sur Oxcart, nous avons exécuté l'image 4.9 et testé S3 de bout en bout :

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

Prenez connaissance de la licence avant de vous appuyer dessus. Depuis le 23 mars 2026, les dernières versions de LocalStack nécessitent un compte LocalStack et un jeton d'authentification ; sans LOCALSTACK_AUTH_TOKEN, la dernière image s'arrête avec « License activation failed ». L'offre gratuite Hobby de LocalStack est réservée à un usage non commercial ; ECS est disponible à partir de l'offre Base et EKS à partir de l'offre Ultimate.

Envoyer vers ECR et déployer

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 conserve le mot de passe du registre dans le Trousseau macOS, et non dans ~/.docker/config.json. L'envoi d'une image multiplateforme depuis Oxcart n'est pas pris en charge : envoyez un tag par architecture ou publiez les manifestes multiarchitectures depuis la CI.

EKS depuis votre Mac

aws eks update-kubeconfig --name my-cluster ajoute le cluster à votre kubeconfig pour utiliser kubectl et k9s depuis macOS. Développez et testez vos services localement avec Oxcart, puis déployez les mêmes images sur EKS. Pour tester localement les manifestes et contrôleurs, kwok fournit un vrai serveur API Kubernetes avec des nœuds simulés. Le guide Kubernetes sur Mac explique comment ces workflows s'articulent.

Pourquoi le cycle local en vaut la peine

Chaque modification testée localement évite un envoi, un déploiement et une recherche dans les journaux. Oxcart raccourcit ce cycle : 42 ms pour docker run --rm, 0.69 s pour créer et démarrer 20 conteneurs, et 77 ms pour les arrêter et les supprimer, les meilleurs résultats des trois environnements testés. Les connexions sortantes des conteneurs sont ouvertes par votre Mac : un VPN vers votre réseau AWS s'y applique donc aussi.

Questions

Comment tester une tâche ECS ou Fargate localement sur Mac ?

Exécutez les conteneurs de la tâche avec Docker Compose : un service par définition de conteneur, avec les mêmes image, environnement, correspondances de ports, contrôle de santé et dépendances. docker compose up -d --wait se termine lorsque chaque service doté d'un contrôle de santé est sain. Oxcart exécute la stack avec des dépendances basées sur les contrôles de santé et des ports publiés, pour tester les services ensemble avant le déploiement.

Puis-je exécuter localement des images de conteneurs AWS Lambda sur puce Apple ?

Oui. Les images de base AWS Lambda incluent le Runtime Interface Emulator. Sur Oxcart, nous avons construit une fonction Python 3.13 depuis public.ecr.aws/lambda/python:3.13, l'avons exécutée avec -p 9000:8080, puis invoquée avec curl : elle a répondu HTTP 200 nativement sur arm64.

LocalStack fonctionne-t-il sur Oxcart ?

Oui, sous forme de conteneur. Nous avons vérifié la création de buckets S3 et les opérations put, get et list sur localhost:4566 avec l'image LocalStack 4.9. Les versions actuelles de LocalStack nécessitent un compte LocalStack et un jeton d'authentification défini dans LOCALSTACK_AUTH_TOKEN ; sans lui, la dernière image s'arrête. LocalStack documente ECS à partir de l'offre Base et EKS à partir de l'offre Ultimate.

Comment envoyer une image vers Amazon ECR depuis un Mac ?

Connectez-vous avec aws ecr get-login-password --region REGION | docker login --username AWS --password-stdin ACCOUNT.dkr.ecr.REGION.amazonaws.com, puis ajoutez un tag et exécutez docker push. Sur Oxcart, docker login stocke le mot de passe dans le Trousseau macOS.

Dois-je construire des images amd64 ou arm64 pour Fargate ?

Alignez-vous sur la plateforme d'exécution de la définition de tâche. Si elle utilise ARM64, construisez des images arm64 natives sur votre Mac ; si elle utilise X86_64, construisez avec --platform linux/amd64. Oxcart exécute les images amd64 localement via Rosetta, pour tester exactement l'image que vous déployez.

Comment développer pour EKS sur mon Mac ?

Construisez et testez votre application et ses dépendances localement avec Oxcart, puis envoyez les images vers ECR. Utilisez kubectl et k9s sur le Mac pour travailler avec votre cluster EKS, et kwok sur Oxcart pour vérifier les manifestes avec une API Kubernetes locale. Voir le guide Kubernetes sur Mac.

Sources et méthode

  • Exemples testés avec Oxcart 0.1.2, Mac17,14, macOS 27.2, 2026-10-10 (Compose, image de base Lambda avec l'émulateur, S3 de LocalStack 4.9, Buildx).
  • Authentification LocalStack : https://blog.localstack.cloud/localstack-single-image-next-steps/ ; offres : 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 et 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. Vérifié le 2026-10-10.
  • Vitesse des conteneurs : Oxcart 0.1.2, 2026-10-10, Apple M5 Max, 8 CPU et 12 GiB, médianes de cinq échantillons ; les autres environnements ont été mesurés plus tôt le même jour sur le même Mac et avec le même dispositif de mesure, avec le client docker 29.4.

Essayez Oxcart avec vos propres projets

Gratuit pendant 60 jours. Puis $20 par personne et par version majeure, sans abonnement.

Apple silicon · macOS 26 ou ultérieur

À lire ensuite

Notes de version

Oxcart 0.1.4

Dernière version

Licences et améliorations.

  • Activation des licences par lien sécurisé envoyé par e-mail.
  • Gestion des licences et des Mac depuis Settings.
  • Vérification des licences hors ligne.
  • Améliorations des performances et de l’interface, et corrections de bugs.

Nécessite macOS 26.0 ou version ultérieure

Oxcart 0.1.3

Libération de mémoire au repos.

  • Libère la mémoire de la VM lorsqu’aucun conteneur ne s’exécute.
  • Conserve les conteneurs, images, volumes et réseaux.

Nécessite macOS 26.0 ou version ultérieure

Oxcart 0.1.2

Intégration des outils en ligne de commande.

  • Passez des outils Docker fournis avec Oxcart à une installation existante, et inversement.
  • Améliorations de l’interface.

Nécessite macOS 26.0 ou version ultérieure

Oxcart 0.1.1

Outils Docker inclus et gestion des agents.

  • Docker CLI 29.9, Compose 5.6 et Buildx 0.38 inclus.
  • Intégration des contextes Docker et identifiants sécurisés dans le Trousseau.
  • Connexions d’agents MCP avec autorisations et blocage par agent.

Nécessite macOS 26.0 ou version ultérieure

Oxcart 0.1.0

Conteneurs compatibles Docker pour Apple silicon.

  • Compatibilité avec Docker CLI, Compose et Buildx.
  • Configuration hors ligne avec les composants d’exécution inclus.
  • Ports organisés par projet et branche Git.
  • Intégration MCP avec accès en lecture seule par défaut.
  • Mises à jour automatiques vérifiées.

Nécessite macOS 26.0 ou version ultérieure