Oxcart Baixar
Menu

Desenvolva para AWS ECS, EKS, Fargate e Lambda localmente no Mac

Para testar cargas de contêineres AWS em um Mac com Apple silicon, execute exatamente as imagens que vai implantar: tarefas ECS e Fargate como projeto Compose, imagens de contêiner Lambda com o Runtime Interface Emulator incluído pela AWS e APIs AWS pelo LocalStack. O Oxcart mantém esse ciclo rápido, com contêineres iniciando em 42 ms e imagens amd64 rodando pelo Rosetta.

Atualizado

O que roda onde

Serviços de contêineres AWS e seus equivalentes locais no Oxcart
Serviço AWSEquivalente localSeu fluxo local
Tarefa ECS, tarefa FargateDocker Compose com as imagens da tarefaExecute seus serviços juntos, com healthchecks e portas publicadas
Lambda (imagem de contêiner)Imagem-base Lambda com Runtime Interface EmulatorInvoque sua função por HTTP em arm64 nativo
S3 e outras APIs AWSLocalStackDesenvolva operações de buckets e objetos S3 localmente
EKSkubectl e k9s no cluster real; kwok para uma API localCompile e teste localmente, depois use kubectl e k9s no seu cluster

Tarefas ECS e Fargate como projeto Compose

Uma definição de tarefa ECS é uma lista de contêineres com imagens, ambiente, mapeamentos de portas, verificações de saúde e ordem de início. O Compose descreve as mesmas coisas, então a conversão é direta: um serviço por definição de contêiner.

Campos da definição de tarefa e equivalentes no Compose
Definição de tarefacompose.yaml
imageimage
environment, secretsenvironment, env_file (mantenha segredos reais fora do arquivo)
portMappingsports
healthCheckhealthcheck
dependsOn com HEALTHYdepends_on com condition: service_healthy
runtimePlatform.cpuArchitectureplatform: linux/amd64 ou 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 esse padrão no Oxcart com Postgres 17 e um serviço nginx condicionado a service_healthy: up --wait retornou com ambos saudáveis e a porta publicada respondendo em localhost. Para imagens amd64 compiladas no Mac, informe a mesma plataforma ao executá-las; uma imagem local exclusiva de amd64 só é encontrada com --platform linux/amd64 (ou platform: no Compose).

Execute e invoque uma imagem de contêiner Lambda localmente

  1. Escreva o handler. Crie app.py com uma função handler(event, context) que retorne um dicionário, por exemplo {"statusCode": 200, "body": "hello"}.
  2. Escreva o Dockerfile. Comece com uma imagem-base AWS Lambda, que inclui o Runtime Interface Emulator: FROM public.ecr.aws/lambda/python:3.13, depois COPY app.py ${LAMBDA_TASK_ROOT}/ e CMD ["app.handler"].
  3. Compile a imagem. Execute docker build -t my-lambda .. Adicione --platform linux/amd64 se a função estiver configurada para x86_64.
  4. Execute. Execute docker run -d -p 9000:8080 my-lambda. O emulador escuta na porta 8080 dentro do contêiner.
  5. Invoque. Execute curl -XPOST localhost:9000/2015-03-31/functions/function/invocations -d '{}'. A resposta é o valor retornado pelo handler, e docker logs mostra a linha REPORT do Lambda com a duração.

Na nossa execução, a função respondeu {"statusCode": 200, "body": "hello from lambda on aarch64"}, e o log do contêiner mostrou a linha Lambda REPORT com duração de 19 ms. O emulador é da própria AWS: “um proxy para as APIs Runtime e Extensions do Lambda” que disponibiliza o endpoint /2015-03-31/functions/function/invocations.

APIs AWS com LocalStack

O LocalStack emula APIs AWS em um contêiner na porta 4566. No Oxcart, executamos a imagem 4.9 e exercitamos o S3 de ponta a ponta:

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

Conheça o licenciamento antes de adotar. Desde 23 de março de 2026, as versões mais recentes do LocalStack exigem uma conta LocalStack e um token de autenticação; sem LOCALSTACK_AUTH_TOKEN, a imagem mais recente encerra com “License activation failed”. O plano gratuito Hobby do LocalStack é para uso não comercial; ECS está disponível a partir do plano Base e EKS a partir do Ultimate.

Envie ao ECR e implante

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

O Oxcart mantém a senha do registro nas Chaves do macOS, não em ~/.docker/config.json. Enviar uma imagem multiplataforma pelo Oxcart não é suportado: envie uma tag por arquitetura ou publique manifestos multi-arquitetura pelo CI.

EKS a partir do Mac

aws eks update-kubeconfig --name my-cluster adiciona o cluster ao kubeconfig para você usar kubectl e k9s pelo macOS. Desenvolva e teste os serviços localmente com Oxcart e depois implante as mesmas imagens no EKS. Para testar manifestos e controllers localmente, o kwok fornece um servidor de API Kubernetes real com nós simulados. O guia Kubernetes no Mac explica como esses fluxos se complementam.

Por que vale a pena testar localmente

Cada alteração testada localmente evita um push, uma implantação e uma busca nos logs. O Oxcart encurta esse ciclo: 42 ms para docker run --rm, 0.69 s para criar e iniciar 20 contêineres e 77 ms para pará-los e removê-los, o mais rápido dos três ambientes testados. As conexões de saída dos contêineres são abertas pelo Mac, então uma VPN para sua rede AWS também se aplica a elas.

Perguntas

Como testo uma tarefa ECS ou Fargate localmente no Mac?

Execute os contêineres da tarefa com Docker Compose: um serviço por definição de contêiner, com a mesma imagem, ambiente, mapeamentos de portas, healthcheck e dependências. docker compose up -d --wait retorna quando todos os serviços com healthcheck estão saudáveis. O Oxcart executa a stack com dependências de healthcheck e portas publicadas, para testar os serviços juntos antes da implantação.

Posso executar imagens de contêiner AWS Lambda localmente no Apple silicon?

Sim. As imagens-base AWS Lambda incluem o Runtime Interface Emulator. No Oxcart, compilamos uma função Python 3.13 a partir de public.ecr.aws/lambda/python:3.13, executamos com -p 9000:8080 e invocamos com curl: ela respondeu HTTP 200 nativamente em arm64.

O LocalStack funciona no Oxcart?

Sim, como contêiner. Verificamos criação de bucket, put, get e list de S3 em localhost:4566 com a imagem LocalStack 4.9. As versões atuais precisam de conta LocalStack e token de autenticação em LOCALSTACK_AUTH_TOKEN; sem ele, a imagem mais recente encerra. O LocalStack documenta ECS a partir do plano Base e EKS a partir do Ultimate.

Como envio uma imagem ao Amazon ECR pelo Mac?

Entre com aws ecr get-login-password --region REGION | docker login --username AWS --password-stdin ACCOUNT.dkr.ecr.REGION.amazonaws.com, depois adicione uma tag e use docker push. No Oxcart, docker login armazena a senha nas Chaves do macOS.

Devo compilar imagens amd64 ou arm64 para o Fargate?

Use a plataforma de execução da definição de tarefa. Se usa ARM64, compile imagens arm64 nativas no Mac; se usa X86_64, compile com --platform linux/amd64. O Oxcart executa imagens amd64 localmente pelo Rosetta, para testar exatamente a imagem que vai implantar.

Como desenvolvo para EKS no Mac?

Compile e teste seu app e suas dependências localmente com Oxcart, depois envie as imagens ao ECR. Use kubectl e k9s no Mac para trabalhar com seu cluster EKS e kwok no Oxcart para verificar manifestos em uma API Kubernetes local. Consulte o guia Kubernetes no Mac.

Fontes e método

  • Exemplos testados com Oxcart 0.1.2, Mac17,14, macOS 27.2, 2026-10-10 (Compose, imagem-base Lambda com emulador, S3 do LocalStack 4.9, Buildx).
  • Autenticação do LocalStack: https://blog.localstack.cloud/localstack-single-image-next-steps/; planos: 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 e 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. Verificados em 2026-10-10.
  • Velocidade dos contêineres: Oxcart 0.1.2, 2026-10-10, Apple M5 Max, 8 CPUs e 12 GiB, medianas de cinco amostras; os outros ambientes foram medidos mais cedo no mesmo dia, no mesmo Mac e com a mesma estrutura de testes, usando o cliente docker 29.4.

Experimente Oxcart nos seus projetos

Grátis por 60 dias. Depois, $20 por usuário, por versão principal: sem assinatura.

Apple silicon · macOS 26 ou posterior

Leia a seguir

Notas da versão

Oxcart 0.1.4

Versão mais recente

Licenciamento e melhorias.

  • Ativação da licença por link seguro enviado por e-mail.
  • Gerenciamento de licenças e Macs a partir de Settings.
  • Verificação de licenças offline.
  • Melhorias de desempenho, ajustes na interface e correções de bugs.

Requer macOS 26.0 ou posterior

Oxcart 0.1.3

Liberação de memória durante a inatividade.

  • Libera a memória da VM quando nenhum contêiner está em execução.
  • Preserva contêineres, imagens, volumes e redes.

Requer macOS 26.0 ou posterior

Oxcart 0.1.2

Integração de ferramentas de linha de comando.

  • Alterne entre as ferramentas Docker incluídas no Oxcart e uma instalação existente.
  • Ajustes na interface.

Requer macOS 26.0 ou posterior

Oxcart 0.1.1

Ferramentas Docker incluídas e controles para agentes.

  • Docker CLI 29.9, Compose 5.6 e Buildx 0.38 incluídos.
  • Integração com contextos Docker e credenciais protegidas no Acesso às Chaves.
  • Conexões de agentes via MCP com permissões e bloqueio por agente.

Requer macOS 26.0 ou posterior

Oxcart 0.1.0

Contêineres compatíveis com Docker para Apple silicon.

  • Compatibilidade com Docker CLI, Compose e Buildx.
  • Configuração offline com os componentes de execução incluídos.
  • Portas organizadas por projeto e branch do Git.
  • Integração MCP com acesso somente leitura por padrão.
  • Atualizações automáticas verificadas.

Requer macOS 26.0 ou posterior