Ne nerede çalışır
| AWS servisi | Yerel karşılık | Yerel iş akışınız |
|---|---|---|
| ECS görevi, Fargate görevi | Görevin imajlarıyla Docker Compose | Servislerinizi sağlık denetimleri ve yayınlanan portlarla birlikte çalıştırın |
| Lambda (konteyner imajı) | Runtime Interface Emulator içeren Lambda temel imajı | İşlevinizi yerel arm64 üzerinde HTTP ile çağırın |
| S3 ve diğer AWS API'ları | LocalStack | S3 kova ve nesne işlemlerini yerelde geliştirin |
| EKS | Gerçek kümeye karşı kubectl ve k9s; yerel API için kwok | Yerelde derleyip test edin, ardından kümenizle kubectl ve k9s kullanın |
Compose projesi olarak ECS ve Fargate görevleri
ECS görev tanımı; imajlar, ortam, port eşlemeleri, sağlık denetimleri ve başlatma sırasıyla konteyner listesidir. Compose aynı şeyleri tanımlar, dolayısıyla dönüşüm doğrudandır: konteyner tanımı başına bir servis.
| Görev tanımı | compose.yaml |
|---|---|
image | image |
environment, secrets | environment, env_file (gerçek gizli bilgileri dosyanın dışında tutun) |
portMappings | ports |
healthCheck | healthcheck |
HEALTHY ile dependsOn | condition: service_healthy ile depends_on |
runtimePlatform.cpuArchitecture | platform: linux/amd64 veya 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 Bu düzeni Oxcart'ta Postgres 17 ve service_healthy bekleyen nginx servisiyle doğruladık: up --wait, ikisi sağlıklıyken ve yayınlanan port localhost üzerinde yanıt verirken döndü. Mac'te derlenen amd64 imajlarını çalıştırırken aynı platformu geçin; yerelde derlenmiş yalnızca amd64 imajı ancak --platform linux/amd64 (veya Compose'da platform:) ayarlandığında bulunur.
Lambda konteyner imajını yerelde çalıştırıp çağırın
- İşleyiciyi yazın. Sözlük döndüren
handler(event, context)işleviyleapp.pyoluşturun; örneğin{"statusCode": 200, "body": "hello"}. - Dockerfile'ı yazın. Runtime Interface Emulator içeren AWS Lambda temel imajıyla başlayın:
FROM public.ecr.aws/lambda/python:3.13, ardındanCOPY app.py ${LAMBDA_TASK_ROOT}/veCMD ["app.handler"]. - İmajı derleyin.
docker build -t my-lambda .çalıştırın. İşleviniz x86_64 için yapılandırıldıysa--platform linux/amd64ekleyin. - Çalıştırın.
docker run -d -p 9000:8080 my-lambdaçalıştırın. Emülatör konteynerin içinde 8080 portunu dinler. - Çağırın.
curl -XPOST localhost:9000/2015-03-31/functions/function/invocations -d '{}'çalıştırın. Yanıt, işleyicinizin dönüş değeridir;docker logssüreyi içeren Lambda REPORT satırını gösterir.
Çalıştırmamızda işlev {"statusCode": 200, "body": "hello from lambda on aarch64"} yanıtını verdi; konteyner logu 19 ms süreyle Lambda REPORT satırını gösterdi. Emülatör AWS'nin kendisine aittir: /2015-03-31/functions/function/invocations uç noktasını sunan “Lambda Runtime ve Extensions API'ları için proxy”.
LocalStack ile AWS API'ları
LocalStack, AWS API'larını 4566 portunda tek konteynerde emüle eder. Oxcart'ta 4.9 imajını çalıştırıp S3'ü uçtan uca denedik:
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 Kullanmaya başlamadan lisanslamayı öğrenin. 23 Mart 2026'dan beri en yeni LocalStack sürümleri LocalStack hesabı ve kimlik doğrulama token'ı gerektirir; LOCALSTACK_AUTH_TOKEN olmadan en yeni imaj “License activation failed” ile kapanır. LocalStack'in ücretsiz Hobby planı ticari olmayan kullanım içindir; ECS Base planından, EKS Ultimate planından itibaren sunulur.
ECR'a gönderin ve dağıtın
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 kayıt deposu parolasını ~/.docker/config.json yerine macOS Anahtar Zinciri'nde tutar. Oxcart'tan çok platformlu imaj gönderimi desteklenmez: mimari başına etiket gönderin veya çok mimarili manifestleri CI üzerinden yayınlayın.
Mac'inizden EKS
aws eks update-kubeconfig --name my-cluster, macOS'tan kubectl ve k9s kullanabilmeniz için kümeyi kubeconfig'inize ekler. Servislerinizi Oxcart ile yerelde geliştirip test edin, ardından aynı imajları EKS'ye dağıtın. Yerel manifest ve controller testleri için kwok, simüle edilmiş düğümlerle gerçek Kubernetes API sunucusu sağlar. Mac'te Kubernetes rehberi bu akışların nasıl birleştiğini açıklar.
Yerel döngü neden değerlidir
Yerelde test ettiğiniz her değişiklik bir push, dağıtım ve log aramasını atlar. Oxcart döngüyü kısaltır: docker run --rm için 42 ms, 20 konteyneri oluşturup başlatmak için 0.69 s, durdurup kaldırmak için 77 ms; test ettiğimiz üç çalışma zamanı arasında en hızlısıydı. Konteynerlerin dış bağlantılarını Mac'iniz açar; AWS ağınıza bağlanan VPN bunlara da uygulanır.
Sorular
Mac'te ECS veya Fargate görevini yerelde nasıl test ederim?
Görevin konteynerlerini Docker Compose ile çalıştırın: aynı imaj, ortam, port eşlemeleri, sağlık denetimi ve bağımlılıklarla konteyner tanımı başına bir servis. docker compose up -d --wait, sağlık denetimli tüm servisler sağlıklı olduğunda döner. Oxcart yığını sağlık denetimi bağımlılıkları ve yayınlanan portlarla çalıştırır; servisleri dağıtımdan önce birlikte deneyebilirsiniz.
AWS Lambda konteyner imajlarını Apple silicon üzerinde yerelde çalıştırabilir miyim?
Evet. AWS Lambda temel imajları Runtime Interface Emulator içerir. Oxcart'ta public.ecr.aws/lambda/python:3.13 üzerinden Python 3.13 işlevi derledik, -p 9000:8080 ile çalıştırıp curl ile çağırdık: arm64 üzerinde yerel olarak HTTP 200 yanıtı verdi.
LocalStack Oxcart'ta çalışır mı?
Evet, konteyner olarak. LocalStack 4.9 imajıyla localhost:4566 üzerinde S3 kova oluşturma, put, get ve list işlemlerini doğruladık. Güncel sürümler LocalStack hesabı ve LOCALSTACK_AUTH_TOKEN olarak ayarlanan kimlik doğrulama token'ı gerektirir; yoksa en yeni imaj kapanır. LocalStack, ECS'yi Base, EKS'yi Ultimate planından itibaren belgeler.
Mac'ten Amazon ECR'a nasıl imaj gönderirim?
aws ecr get-login-password --region REGION | docker login --username AWS --password-stdin ACCOUNT.dkr.ecr.REGION.amazonaws.com ile oturum açın, etiketleyin ve docker push çalıştırın. Oxcart'ta docker login parolayı macOS Anahtar Zinciri'nde saklar.
Fargate için amd64 mü arm64 mü derlemeliyim?
Görev tanımının çalışma zamanı platformuyla eşleştirin. ARM64 kullanıyorsa Mac'te yerel arm64 imajları derleyin; X86_64 kullanıyorsa --platform linux/amd64 ile derleyin. Oxcart amd64 imajlarını Rosetta üzerinden yerelde çalıştırır; dağıtacağınız imajın aynısını test edebilirsiniz.
Mac'imde EKS için nasıl geliştiririm?
Oxcart ile uygulamanızı ve bağımlılıklarını yerelde derleyip test edin, imajları ECR'a gönderin. EKS kümeniz için Mac'te kubectl ve k9s, manifestleri yerel Kubernetes API'a karşı denetlemek için Oxcart'ta kwok kullanın. Mac'te Kubernetes rehberine bakın.
Kaynaklar ve yöntem
- Örnekler Oxcart 0.1.2, Mac17,14, macOS 27.2 ile 2026-10-10 tarihinde test edildi (Compose, emülatörlü Lambda temel imajı, LocalStack 4.9 S3, Buildx).
- LocalStack kimlik doğrulaması: https://blog.localstack.cloud/localstack-single-image-next-steps/; planlar: 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 ve 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. Kontrol tarihi 2026-10-10.
- Konteyner hızı: Oxcart 0.1.2, 2026-10-10, Apple M5 Max, 8 CPU ve 12 GiB, beş örneğin medyanları; diğer çalışma zamanları aynı günün daha erken saatlerinde, aynı Mac ve test düzeneğinde docker 29.4 istemcisiyle ölçüldü.