Oxcart Скачать
Меню

Локальная разработка для AWS ECS, EKS, Fargate и Lambda на Mac

Чтобы тестировать контейнерные задачи AWS на Mac с Apple silicon, запускайте те же образы, которые развёртываете: задачи ECS и Fargate как проект Compose, образы Lambda со встроенным Runtime Interface Emulator от AWS, а API AWS — через LocalStack. Oxcart ускоряет этот цикл: контейнеры запускаются за 42 ms, а образы amd64 работают через Rosetta.

Обновлено

Что где работает

Контейнерные сервисы AWS и их локальные аналоги в Oxcart
Сервис AWSЛокальный аналогЛокальный рабочий процесс
Задача ECS, задача FargateDocker Compose с образами задачиЗапускайте сервисы вместе с проверками состояния и опубликованными портами
Lambda (контейнерный образ)Базовый образ Lambda с Runtime Interface EmulatorВызывайте функцию по HTTP нативно на arm64
S3 и другие API AWSLocalStackРазрабатывайте операции с бакетами и объектами S3 локально
EKSkubectl и k9s для реального кластера; kwok для локального APIСобирайте и тестируйте локально, затем используйте kubectl и k9s с вашим кластером

Задачи ECS и Fargate как проект Compose

Определение задачи ECS — список контейнеров с образами, окружением, сопоставлениями портов, проверками состояния и порядком запуска. Compose описывает то же самое, поэтому преобразование прямое: один сервис на определение контейнера.

Поля определения задачи и их аналоги в Compose
Определение задачиcompose.yaml
imageimage
environment, secretsenvironment, env_file (не храните настоящие секреты в файле)
portMappingsports
healthCheckhealthcheck
dependsOn с HEALTHYdepends_on с condition: service_healthy
runtimePlatform.cpuArchitectureplatform: linux/amd64 или 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

Мы проверили этот подход в Oxcart с Postgres 17 и сервисом nginx, ожидающим service_healthy: up --wait завершился, когда оба сервиса были готовы, а опубликованный порт отвечал на localhost. Для образов amd64, собранных на Mac, указывайте ту же платформу при запуске; локально собранный образ только для amd64 находится лишь с --platform linux/amd64 (или platform: в Compose).

Запустите и вызовите контейнерный образ Lambda локально

  1. Напишите обработчик. Создайте app.py с функцией handler(event, context), возвращающей словарь, например {"statusCode": 200, "body": "hello"}.
  2. Напишите Dockerfile. Начните с базового образа AWS Lambda, включающего Runtime Interface Emulator: FROM public.ecr.aws/lambda/python:3.13, затем COPY app.py ${LAMBDA_TASK_ROOT}/ и CMD ["app.handler"].
  3. Соберите образ. Выполните docker build -t my-lambda .. Добавьте --platform linux/amd64, если функция настроена для x86_64.
  4. Запустите. Выполните docker run -d -p 9000:8080 my-lambda. Эмулятор слушает на порту 8080 внутри контейнера.
  5. Вызовите. Выполните curl -XPOST localhost:9000/2015-03-31/functions/function/invocations -d '{}'. Ответ — возвращаемое значение обработчика, а docker logs показывает строку Lambda REPORT с длительностью.

В нашем запуске функция ответила {"statusCode": 200, "body": "hello from lambda on aarch64"}, а лог контейнера показал строку Lambda REPORT с длительностью 19 ms. Эмулятор выпускает сама AWS: «прокси для API Runtime и Extensions Lambda», который создаёт конечную точку /2015-03-31/functions/function/invocations.

API AWS через LocalStack

LocalStack эмулирует API AWS в одном контейнере на порту 4566. В Oxcart мы запустили образ 4.9 и проверили полный цикл работы с S3:

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

Изучите лицензию перед использованием. С 23 марта 2026 года последние версии LocalStack требуют аккаунт LocalStack и токен аутентификации; без LOCALSTACK_AUTH_TOKEN актуальный образ завершается с «License activation failed». Бесплатный план Hobby предназначен для некоммерческого использования; ECS доступен начиная с Base, EKS — с Ultimate.

Отправьте в ECR и разверните

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 хранит пароль реестра в Связке ключей macOS, а не в ~/.docker/config.json. Отправка мультиплатформенного образа из Oxcart не поддерживается: отправляйте тег для каждой архитектуры или публикуйте мультиархитектурные манифесты через CI.

EKS с вашего Mac

aws eks update-kubeconfig --name my-cluster добавляет кластер в kubeconfig для работы с kubectl и k9s из macOS. Разрабатывайте и тестируйте сервисы локально в Oxcart, затем развёртывайте те же образы в EKS. Для локальной проверки манифестов и контроллеров kwok предоставляет настоящий API-сервер Kubernetes с имитацией узлов. Руководство по Kubernetes на Mac объясняет, как эти процессы сочетаются.

Почему локальный цикл полезен

Каждое изменение, проверенное локально, избавляет от push, развёртывания и поиска по логам. Oxcart сокращает цикл: 42 ms для docker run --rm, 0.69 s на создание и запуск 20 контейнеров и 77 ms на их остановку и удаление — лучший результат из трёх протестированных сред. Исходящие соединения контейнеров открывает Mac, поэтому VPN в вашу сеть AWS действует и для них.

Вопросы

Как локально проверить задачу ECS или Fargate на Mac?

Запускайте контейнеры задачи через Docker Compose: один сервис на определение контейнера с тем же образом, окружением, портами, проверкой состояния и зависимостями. docker compose up -d --wait завершается после готовности всех сервисов с проверками состояния. Oxcart запускает стек с зависимостями от проверок и опубликованными портами, чтобы проверить сервисы вместе до развёртывания.

Можно ли запускать контейнерные образы AWS Lambda локально на Apple silicon?

Да. Базовые образы AWS Lambda включают Runtime Interface Emulator. В Oxcart мы собрали функцию Python 3.13 из public.ecr.aws/lambda/python:3.13, запустили с -p 9000:8080 и вызвали через curl: она ответила HTTP 200 нативно на arm64.

Работает ли LocalStack в Oxcart?

Да, как контейнер. Мы проверили создание бакета, put, get и list S3 на localhost:4566 с образом LocalStack 4.9. Актуальным версиям нужны аккаунт LocalStack и токен в LOCALSTACK_AUTH_TOKEN; без него последний образ завершается. Согласно документации LocalStack, ECS доступен с Base, EKS — с Ultimate.

Как отправить образ в Amazon ECR с Mac?

Войдите через aws ecr get-login-password --region REGION | docker login --username AWS --password-stdin ACCOUNT.dkr.ecr.REGION.amazonaws.com, затем назначьте тег и выполните docker push. В Oxcart docker login хранит пароль в Связке ключей macOS.

Какие образы собирать для Fargate: amd64 или arm64?

Ориентируйтесь на платформу в определении задачи. Для ARM64 собирайте нативные образы arm64 на Mac; для X86_64 — с --platform linux/amd64. Oxcart запускает образы amd64 локально через Rosetta, позволяя проверить именно тот образ, который будет развёрнут.

Как разрабатывать для EKS на Mac?

Собирайте и проверяйте приложение с зависимостями локально в Oxcart, затем отправляйте образы в ECR. Используйте kubectl и k9s на Mac для работы с кластером EKS, а kwok в Oxcart — для проверки манифестов на локальном Kubernetes API. См. руководство по Kubernetes на Mac.

Источники и методика

  • Примеры проверены с Oxcart 0.1.2, Mac17,14, macOS 27.2, 2026-10-10 (Compose, базовый образ Lambda с эмулятором, S3 LocalStack 4.9, Buildx).
  • Аутентификация LocalStack: https://blog.localstack.cloud/localstack-single-image-next-steps/; планы: 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 и 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. Проверено 2026-10-10.
  • Скорость контейнеров: Oxcart 0.1.2, 2026-10-10, Apple M5 Max, 8 CPU и 12 GiB, медианы пяти замеров; остальные среды измерены ранее в тот же день на том же Mac и тем же набором тестов с клиентом docker 29.4.

Попробуйте Oxcart на своих проектах

Бесплатно на 60 дней. Затем $20 за пользователя и основную версию — без подписки.

Apple silicon · macOS 26 или новее

Читайте дальше

История версий

Oxcart 0.1.4

Последняя версия

Лицензирование и улучшения.

  • Активация лицензии по защищённой ссылке из электронного письма.
  • Управление лицензией и компьютерами Mac из Settings.
  • Проверка лицензии без интернета.
  • Повышение производительности, доработка интерфейса и исправление ошибок.

Требуется macOS 26.0 или новее

Oxcart 0.1.3

Освобождение памяти при простое.

  • Освобождает память ВМ, когда нет работающих контейнеров.
  • Сохраняет контейнеры, образы, тома и сети.

Требуется macOS 26.0 или новее

Oxcart 0.1.2

Интеграция инструментов командной строки.

  • Переключайтесь между инструментами Docker из комплекта Oxcart и уже установленными.
  • Доработка интерфейса.

Требуется macOS 26.0 или новее

Oxcart 0.1.1

Инструменты Docker в комплекте и управление агентами.

  • В комплект входят Docker CLI 29.9, Compose 5.6 и Buildx 0.38.
  • Интеграция с контекстами Docker и безопасное хранение учётных данных в Связке ключей.
  • Подключение агентов через MCP с отдельными разрешениями и блокировкой для каждого агента.

Требуется macOS 26.0 или новее

Oxcart 0.1.0

Docker-совместимые контейнеры для Apple silicon.

  • Совместимость с Docker CLI, Compose и Buildx.
  • Настройка без интернета: компоненты среды выполнения входят в комплект.
  • Порты упорядочены по проектам и веткам Git.
  • Интеграция с MCP с доступом только для чтения по умолчанию.
  • Автоматические обновления с проверкой подлинности.

Требуется macOS 26.0 или новее