Puppeteer AWS Lambda’ya Nasıl Dağıtılır? (3 Yöntem Karşılaştırıldı)

Son güncelleme: August 11, 2026
Deploying a headless browser to serverless infrastructure
AI Özeti
Puppeteer için Lambda Layers, container image’lar ve ZIP paketlerini karşılaştıran; güncel paketleme, uyumluluk ve sorun giderme önerileri sunan bir dağıtım rehberi.

Chromium yaklaşık 280 MB yer kaplar. AWS Lambda’nın sıkıştırılmamış paket limiti ise 250 MB’tır. Daha önce npm install puppeteer yapıp bunu doğrudan Lambda’ya dağıtmaya çalıştıysanız, bu hesabın neden tutmadığını zaten biliyorsunuzdur — tutmaz.

Gece 2’de "Failed to launch the browser process" hatalarını ayıklamaya yeterince zaman harcadım; bu yüzden bu konunun tek bir yöntemi gösterip kalan iki seçeneği belirsiz bırakan başka bir anlatımı hak etmediğini düşünüyorum. Bu içerik tam olarak bunun için var: Layers, Container Images ve doğrudan ZIP yükleme arasındaki farklar; 2026 için güncel bir sürüm uyumluluk matrisi; ve istatistiksel olarak en çok karşınıza çıkma ihtimali olan beş hata için bir sorun giderme bölümü.

Puppeteer AWS Lambda’da Nedir ve Neden Kullanılır?

Puppeteer, Chrome DevTools Protocol üzerinden headless Chromium’u kontrol eden bir Node.js kütüphanesidir. Lambda ise AWS’nin sunucusuz işlem servisidir — kullanım başına ödeme yaparsınız, otomatik ölçeklenir ve sunucu yönetmezsiniz. İkisini birleştirdiğinizde, tek bir EC2 örneği bile kurmadan yüzlerce paralel çalışmayı destekleyebilen bir tarayıcı otomasyon altyapısı elde edersiniz.

Takımlar arasında kullanım alanları oldukça benzer: web scraping, ekran görüntüsü ve PDF üretimi, sentetik izleme, SEO için tek sayfalık uygulamaları önceden render etme ve otomatik UI testleri. Sorun yine aynı: Chromium’un boyutu ile Lambda’nın paket limitleri arasındaki uyumsuzluk. Bu yüzden kimse tam puppeteer paketini — kendi Chromium indirmesiyle birlikte — Lambda’ya koymaz. Bunun yerine, tarayıcı içermeyen puppeteer-core ile Lambda için optimize edilmiş bir Chromium ikilisi kullanılır; en yaygın seçenek @sparticuz/chromium’dur.

Bu tek değişiklik — puppeteer yerine puppeteer-core kullanmak — dağıtım konfigürasyonuna tek satır yazmadan önce boyut probleminin %80’ini çözer.

Layers, Container Image ve ZIP: Önce Hangi Yolu Seçeceğinize Karar Verin

Araştırırken beni en çok rahatsız eden şeylerden biri şuydu: mevcut rehberlerin neredeyse hepsi yalnızca tek bir dağıtım yöntemini anlatıyor. AWS SAM rehberleri Layers kullanıyor. CDK örnekleri Docker’dan gidiyor. Rastgele bir Substack yazısı ise S3 üzerinde barındırılan Chromium binary’siyle ham ZIP yöntemini anlatıyor. Kimse bunları yan yana koymuyor; bu da aslında ilk vermeniz gereken kararı — hangi dağıtım yöntemi benim için doğru? — tamamen atlıyor.

O yüzden bunu birlikte netleştirelim.

KriterLambda LayersContainer Image (Docker)Doğrudan ZIP Yükleme
Maksimum paket boyutu250 MB (tüm layer’lar sıkıştırılmamış halde)10 GB image250 MB sıkıştırılmamış
Dağıtım karmaşıklığıOrta (layer ARN yönetimi)Daha yüksek (Dockerfile + ECR push)En düşük (zipleyip yükleme)
Cold start etkisiOrtaBiraz daha yüksek (daha büyük image pull)Orta
Chromium güncelleme süreciLayer sürümünü yeniden yayınlamaImage’i yeniden build etmeZIP’i yeniden yükleme
Kimler için uygunHızlı prototipler, Serverless Framework kullanıcılarıProd ortamları, Docker CI kullanan ekiplerBasit, tek seferlik fonksiyonlar
IaC desteğiSAM, Serverless FrameworkCDK, SAM, TerraformKonsol, herhangi bir IaC

250 MB ve 10 GB sınırları doğrudan AWS Lambda kota dokümantasyonundan geliyor — bu rakamlar çok sık değişmiyor, ama dağıtım stratejinizi en baştan belirleyen kritik kısıt tam da bu.

Benim pratik yaklaşımım şöyle: prototip yapıyorsanız veya zaten Serverless Framework kullanıyorsanız Layers ile başlayın. Prod’a çıkıyorsanız ve ekibinizin Docker tabanlı CI/CD’si varsa Container Image seçin — 10 GB sınır size ciddi nefes alanı sağlar. Sadece ara sıra ekran görüntüsü alacak tek bir fonksiyona ihtiyacınız varsa, doğrudan ZIP en az uğraştıran seçenektir.

Üç yol da temelde aynı bağımlılık ikilisini kullanır: puppeteer-core + @sparticuz/chromium. Dağıtım yöntemi, ne paketlediğinizi değil, o paketi nasıl hazırladığınızı değiştirir.

Tarayıcı iş yükü için üç soyut paketleme seçeneği

2026 Sürüm Uyumluluk Matrisi (Tahmin Etmeyi Bırakın)

İnsanların aylarını alan kısım burası; saatlerini değil. Stack Overflow ve GitHub issue’larında en çok duyulan şikâyet "nasıl dağıtırım" değil — "çalışan dağıtımım neden npm güncellemesinden sonra sessizce bozuldu" sorusu. Nedeni neredeyse her zaman @sparticuz/chromium, puppeteer-core ve Node.js runtime arasındaki uyumsuzluktur.

Önce en önemli not: chrome-aws-lambda (orijinal alixaxel paketi) artık kullanılmıyor. Node 18+ sürümlerinde sorun çıkarıyor ve Chromium güncellemelerine ayak uyduramadı. Bir rehberde buna atıf görürseniz sekmeyi kapatın — güncel olmayan bir şey okuyorsunuz demektir. Güncel tüm rehberler sizi bunun yerine @sparticuz/chromium’a yönlendirmeli.

Sürüm eşleştirmesini göz kararı major numaralarla yapmak yerine bu uyumluluk kuralını kullanın:

BileşenSürüm kuralıDağıtımdan önce ne kontrol edilmeli
puppeteer-coreUygulamanızın ihtiyaç duyduğu Puppeteer sürümünü seçinO Puppeteer sürümünün desteklediği Chromium build’ini kontrol edin
@sparticuz/chromiumMajor sürümü Puppeteer’ın major sürümünü değil, Chromium major sürümünü takip ederPuppeteer destek tablosundaki Chromium build’iyle eşleştirin ve Sparticuz release notlarını okuyun
AWS Lambda Node.js runtimeHâlen desteklenen bir Lambda runtime kullanınHer runtime veya paket güncellemesinden sonra bir invocation testi çalıştırın
Mimarinpm paketi x64 binary’leri içerir; arm64 desteği Chromium v135 ile, arm64 layer veya remote pack üzerinden başlarLambda mimarisi, layer/pack artefaktı ve Chromium sürümü birebir aynı olmalı

Burada kasıtlı olarak sabit bir paket çifti vermiyorum; çünkü @sparticuz/chromium, Chromium’un yayın döngüsünü takip eder ve klasik semantik sürümleme mantığıyla çalışmaz. Önce resmî Puppeteer Chromium Support sayfasından seçtiğiniz Puppeteer sürümünün desteklediği Chromium major numarasını bulun, ardından @sparticuz/chromium’un o major sürümünü seçin. Son olarak, Sparticuz release notlarını okuyarak yama seviyesindeki kırılmalar ve mimari detaylarını kontrol edin. İki paket için de aynı major numarayı yalnızca bu eşleşmenin gerçekten doğrulandığından eminseniz kullanın.

Soyut sunucusuz tarayıcı dağıtım mimarisi

Lambda Layers ile Puppeteer AWS Lambda’ya Nasıl Dağıtılır?

Lambda Layer, Chromium’u fonksiyon kodunuzdan ayrı paketlemenizi sağlar. Böylece asıl handler dosyanız küçük kalır ve aynı Chromium layer’ını birden fazla fonksiyonda yeniden kullanabilirsiniz. Bu alandaki en yakın "hızlı başlangıç" çözümü budur.

Adım 1: puppeteer-core ve -min paketini kurun

Chromium dosyaları bir Lambda Layer içinde duruyorsa, fonksiyon paketini küçük tutmak için @sparticuz/chromium-min kullanın. Aşağıdaki yer tutucuları, yukarıda doğruladığınız uyumlu sürümlerle değiştirin:

npm install puppeteer-core@$PUPPETEER_VERSION \
  @sparticuz/chromium-min@$CHROMIUM_VERSION

puppeteer değil puppeteer-core kuruyorsunuz; çünkü bu paket otomatik tarayıcı indirmesini atlar. -min paketi başlatma yardımcılarını sağlar, layer ise /opt/chromium altında Brotli ile sıkıştırılmış Chromium dosyalarını sunar.

Adım 2: Bir Chromium Lambda Layer oluşturun veya referans verin

Resmî Sparticuz release’ine ekli mimariye özel layer arşivini kullanın ya da arşivi resmî repodan derleyin. x86_64 Lambda için belgelenmiş build şu şekildedir:

git clone --depth=1 https://github.com/sparticuz/chromium.git
cd chromium
make chromium.x64.zip

Bu işlem chromium.x64.zip üretir. Bunu S3’e yükleyin ve kullandığınız runtime ve mimariyle Lambda Layer olarak yayınlayın. arm64 için ilgili arm64 release artefaktını ya da build hedefini kullanın; x64 bir arşivi arm64 fonksiyona bağlamayın.

SAM kullanıyorsanız, layer ARN’sini template.yaml içinde doğrudan ekleyin:

Resources:
  PuppeteerFunction:
    Type: AWS::Serverless::Function
    Properties:
      Layers:
        - arn:aws:lambda:us-east-1:XXXXXXXXXXXX:layer:chromium-layer:1

Adım 3: Lambda Handler’ı yazın

Aşağıda bir URL’ye gidip sayfa başlığını döndüren çalışan bir handler örneği var:

import puppeteer from "puppeteer-core";
import chromium from "@sparticuz/chromium-min";

export const handler = async () => {
  const browser = await puppeteer.launch({
    args: puppeteer.defaultArgs({ args: chromium.args, headless: "shell" }),
    executablePath: await chromium.executablePath("/opt/chromium"),
    headless: "shell",
  });
  try {
    const page = await browser.newPage();
    await page.goto("https://example.com", { waitUntil: "domcontentloaded" });
    return { title: await page.title() };
  } finally {
    await browser.close();
  }
};

finally bloğuna dikkat edin. Tarayıcıyı her zaman burada kapatın — kapatmazsanız, sıcak Lambda ortamlarında biriken zombie browser süreçleri zamanla gerçek kodunuzla ilgisi olmayan garip bellek hatalarına yol açar.

Adım 4: Bellek, timeout ve mimariyi ayarlayın

Belleği en az 1024 MB yapın — basit bir ekran görüntüsü işi dışında 1536–2048 MB öneririm. Timeout’u en az 60 saniyeye ayarlayın. Özellikle arm64 desteğini kendi Chromium sürümünüz için doğrulamadıysanız mimariyi x86_64 olarak sabitleyin (bu sürümden sürüme değişebilir).

Adım 5: Dağıtın ve test edin

sam build && sam deploy --guided

Bir test event’i ile tetikleyin; ardından bir şey ters giderse hemen CloudWatch Logs’a bakın — aşağıdaki sorun giderme bölümündeki hataların %90’ı orada net şekilde görünür.

Container Image (Docker) ile Puppeteer AWS Lambda’ya Nasıl Dağıtılır?

Container image’lar, 250 MB sıkıştırılmamış paket derdini tamamen ortadan kaldırıp yerine 10 GB sınırı getirir. Özellikle ekibinizin CI hattında zaten Docker varsa, prod iş yükleri için genellikle daha doğru tercihtir.

Adım 1: Dockerfile oluşturun

Node.js için resmî bir AWS Lambda base image ile başlayın, bağımlılıkları kurun ve handler’ı tanımlayın:

FROM public.ecr.aws/lambda/nodejs:20

COPY package*.json ./
RUN npm install --production

COPY . .

CMD ["index.handler"]

Kullandığınız Chromium paketine göre birkaç paylaşımlı kütüphaneyi yum install ile eklemeniz gerekebilir (bunun detayını sorun giderme bölümünde anlatacağım) — @sparticuz/chromium, ihtiyacı olan şeylerin çoğunu zaten içerir; bu da tam Chrome’u elle kurmaya kıyasla süreci ciddi ölçüde kolaylaştırır.

Adım 2: Amazon ECR’ye build edip push edin

aws ecr create-repository --repository-name puppeteer-lambda
docker build -t puppeteer-lambda .
docker tag puppeteer-lambda:latest <account-id>.dkr.ecr.<region>.amazonaws.com/puppeteer-lambda:latest
aws ecr get-login-password | docker login --username AWS --password-stdin <account-id>.dkr.ecr.<region>.amazonaws.com
docker push <account-id>.dkr.ecr.<region>.amazonaws.com/puppeteer-lambda:latest

Image’i Lambda fonksiyonunuzla aynı bölgede tutun — farklı bölgeden çekilen image’lar gereksiz gecikme ekler.

Adım 3: Lambda fonksiyonunu container image’dan oluşturun

Fonksiyonunuzu CLI veya CDK ile ECR image URI’sine bağlayın; bellek (1536–2048 MB) ve timeout (60–120 saniye) ayarlarını da layer tabanlı kurulumda olduğu gibi yapın.

Adım 4: Dağıtın ve test edin

Bir test event’i ile çalıştırın ve çıktıyı doğrulayın. Layers’a göre temel fark: image pull daha büyük olduğu için cold start biraz artar, ama bağımlılıklar için çok daha fazla alan kazanırsınız.

Doğrudan ZIP Yükleme ile Puppeteer AWS Lambda’ya Nasıl Dağıtılır?

Bu, gösterişsiz seçenektir — yönetilecek layer yok, build edilecek Docker yok. Prototipler veya tam bir tarayıcı otomasyon platformuna dönüşmeyecek tek seferlik fonksiyonlar için idealdir.

Adım 1: Bağımlılıkları lokal olarak kurun

Kendi içinde çalışan bir ZIP için puppeteer-core + @sparticuz/chromium kullanın ve her iki sürümü de sabitleyin. Tam paket, sıkıştırılmış Chromium dosyalarını içerir ve runtime’da bunları /tmp içine çıkarır. @sparticuz/chromium-min paketini yalnızca bu dosyalar bir Lambda Layer veya hızlı bir remote pack URL’si ile ayrıca sağlanıyorsa kullanın; -min paketi Brotli dosyalarını kendi başına içermez.

Adım 2: Fonksiyonu paketleyip ZIP’leyin

npm install --production
zip -r function.zip . -x "*.git*"

Burada --production bayrağı önemli — geliştirme bağımlılıkları 250 MB kotanızı boş yere tüketir.

Adım 3: Lambda fonksiyonunu yükleyin ve yapılandırın

aws lambda update-function-code --function-name my-puppeteer-fn --zip-file fileb://function.zip

ZIP’iniz 50 MB’ı aşarsa bunu konsoldan ya da basit bir CLI çağrısıyla doğrudan yükleyemezsiniz — önce S3’e yükleyip S3 URI’sini kullanmanız gerekir. Bellek, timeout ve mimari ayarlarını diğer iki yöntemdeki gibi yapın.

Adım 4: Dağıtın ve test edin

Aynı çalıştırma ve log kontrol akışını kullanın. Tam paket kullanıyorsanız chromium.executablePath() için argüman vermeniz gerekmez. chromium-min kullanıyorsanız, layer yapısı için yukarıda gösterildiği gibi tam layer dizinini veya remote pack URL’sini verin; örneğin chromium.executablePath("/opt/chromium"). Remote pack, ilk cold start’a indirme işi ekler; bu yüzden dosyayı fonksiyona yakın bir yerde barındırın ve artefakt sürümüyle mimarisini doğrulayın.

Lambda’da Gerçekten İşe Yarayan puppeteer.launch() Argümanları

Herkesin kopyaladığı snippet bu olduğuna göre, doğru yapalım. Lambda’nın çalışma ortamında /dev/shm yoktur, GPU erişimi verilmez ve izinler kısıtlıdır — yani dizüstü bilgisayarınızda çalışan varsayılan puppeteer.launch() çağrısı burada çalışmaz, hatta doğrudan başarısız olur.

const viewport = {
  width: 1920,
  height: 1080,
  deviceScaleFactor: 1,
  isMobile: false,
  hasTouch: false,
  isLandscape: true,
};

const browser = await puppeteer.launch({
  args: await puppeteer.defaultArgs({ args: chromium.args, headless: "shell" }),
  executablePath: await chromium.executablePath(),
  headless: "shell",
  defaultViewport: viewport,
});

@sparticuz/chromium içindeki chromium.args dizisi, sunucusuz ortam için gerekli bayrakları zaten içerir — --no-sandbox, --disable-gpu, --disable-dev-shm-usage ve benzerleri. Bu paketi kendi bayrak listenizi sıfırdan yazmak yerine kullanmanın amacı da budur: Chromium’un ihtiyaçlarını sizin yerinize takip eder.

Tarayıcı ve bulut iş yükü sağlığı için sakin bir tanılama görünümü

Sorun Giderme: Her Geliştiricinin Karşılaştığı 5 Hata

Bulabildiğim hiçbir rehber düzgün bir sorun giderme bölümü içermiyor; bu biraz garip, çünkü bu yazıyı okuyorsanız büyük ihtimalle sebep tam olarak hatalar.

"Failed to launch the browser process"

Kök neden: eksik paylaşımlı kütüphaneler (libnss3.so, libatk vb.) veya yanlış bir executablePath.

Çözüm: @sparticuz/chromium, gerekli bağımlılıkların çoğunu paketler; bu yüzden kendi Chromium binary’nizi elle yönetmek yerine önerilir. Docker dağıtımında hâlâ aynı hatayı alıyorsanız, eksik kütüphaneleri Dockerfile içinde açıkça yum install ile ekleyin.

"Unzipped size must be smaller than 262144000 bytes"

Kök neden: Tam puppeteer paketini kurmuşsunuzdur; bu paket kendi Chromium indirmesini de içerir (~400 MB).

Çözüm: puppeteer-core + @sparticuz/chromium kombinasyonuna geçin. Gerçekten daha fazla alana ihtiyacınız varsa, Container Image yaklaşımına geçin; 10 GB sınırı sizi rahatlatır.

"Browser disconnected" veya browser.newPage() üzerinde timeout

Kök neden: Lambda belleği yetersizdir veya launch args içinde --disable-gpu gibi bayraklar eksiktir.

Çözüm: Belleği en az 1024 MB yapın (ben daha yükseğini öneririm — aşağıdaki benchmark bölümüne bakın) ve sadeleştirilmiş özel bir liste yerine chromium.args geçtiğinizden emin olun.

Çalışan Kodun Lambda Runtime Güncellemesinden Sonra Bozulması

Kök neden: AWS periyodik olarak alttaki runtime’ı yamalar; bu da paylaşımlı kütüphane sürümlerini veya Node.js patch sürümünü sessizce değiştirebilir.

Çözüm: @sparticuz/chromium sürümünü açıkça sabitleyin, fonksiyon konfigürasyonunda Node runtime sürümünü sabitleyin ve insanların sık atladığı kısmı da yapın: sadece bir şey bozulduğunda değil, her AWS runtime duyurusundan sonra yeniden test edin.

Yaklaşık 30 Saniye Sonra "Protocol error: Connection closed"

Kök neden: Lambda timeout’unuz, sayfanın gerçekten yüklenip render olması için gereken süreden kısadır.

Çözüm: Timeout’u 60–120 saniyeye çıkarın, page.setDefaultNavigationTimeout() değerini açıkça belirleyin ve devam etmeden önce tüm ağ isteklerinin bitmesini zorunlu kılmıyorsanız waitUntil: 'networkidle0' yerine waitUntil: 'domcontentloaded' kullanın.

Prod Ortamı İçin Sertleştirme: Bellek, Cold Start ve Maliyet

Birçok rehber size sadece "belleği artırın" der ve konuyu kapatır. Bu, uygulanabilir bir öneri değil — ölçek büyüdükçe gerçekten neyin değiştiğine bakalım.

Bellek ve Performans

Lambda, CPU’yu belleğe orantılı olarak ayırır; insanların kafasını karıştıran detay da budur. Daha fazla bellek yalnızca "daha fazla RAM" demek değildir — aynı zamanda daha hızlı CPU demektir ve bu da Chromium’un render süresini doğrudan azaltır. Pratikte, Puppeteer benchmark’ı yapan ekipler 512 MB’tan 1536–2048 MB bandına çıkınca belirgin hız artışı bildiriyor; ancak sizin gerçek rakamlarınız render ettiğiniz sayfalara çok bağlı olacaktır. Bu yazıyı okurken eskimiş olacak bir benchmark tablosu vermek yerine, kendi hedef sayfalarınıza karşı 512 MB, 1024 MB, 1536 MB ve 2048 MB testleri çalıştırın — on dakikalık bir egzersizle maliyet/performance dengenizin tam olarak nerede olduğunu görürsünüz.

Cold Start için Provisioned Concurrency

Düşük gecikmenin kritik olduğu bir şey yapıyorsanız — sentetik izleme, gerçek zamanlı ekran görüntüsü API’si — cold start sizin düşmanınızdır. Provisioned Concurrency, belirli sayıda çalışma ortamını sıcak ve hazır tutarak cold start cezasını ortadan kaldırır; karşılığında bu boş kapasitenin maliyetini ödersiniz. Gecikme, ham maliyet verimliliğinden daha önemliyse buna değer.

Maliyet Tasarrufu için arm64 (Graviton)

Graviton tabanlı Lambda fonksiyonları, x86_64 eşdeğerlerine göre yaklaşık %20 daha ucuz çalışır. Ancak bir uyarı var: @sparticuz/chromium arm64 desteği tarihsel olarak x86_64 kadar geniş değildi; bu yüzden prod ortamında Graviton’a geçmeden önce sabitlediğiniz sürüm için açık doğrulama yapın.

VPC ve VPC Olmayan Kurulum

Fonksiyonu bir VPC içine almak eskiden ciddi cold start gecikmesi eklerdi; AWS son yıllarda bu farkın büyük kısmını kapattı, ama sıfıra indirmedi. Sadece RDS veya ElastiCache gibi özel kaynaklara erişmesi gerçekten gerekiyorsa VPC kullanın — aksi halde kullanmayın.

Lambda’dan Tamamen Ne Zaman Çıkmalı?

Tarayıcı işleriniz düzenli olarak 15 dakikayı aşıyorsa, 10 GB’tan fazla belleğe ihtiyaç duyuyorsa veya istekler arasında kalıcı tarayıcı oturumları istiyorsa, Lambda artık size hizmet etmiyordur. ECS Fargate tam da bunun için tasarlandı: uzun süre çalışan, kaynakları ayarlanabilir, saniye bazlı ücretlendirilen işlem. Lambda; kısa, ani ve paralelleştirilebilir tarayıcı işleri için harikadır; ancak iş yükünüz kalıcı bir servise benzemeye başladığında yanlış araç olur.

Lambda’da Puppeteer Dağıtmak Ne Zaman Yanlış Yaklaşımdır?

Burada dürüst olmakta fayda var: "Puppeteer + Lambda" rehberlerine gelen geliştiricilerin önemli bir kısmı aslında tarayıcı otomasyonu değil, veri çıkarma problemi çözüyor. Gerçek ihtiyacınız web sayfalarından yapılandırılmış veri almaksa — ürün listeleri, iletişim bilgileri, sayfa içeriği — yukarıdaki tüm Chromium paketleme, sürüm sabitleme ve layer yönetimi aslında gereksiz bir yük olabilir.

Lambda + Puppeteer’da kalın eğer gerçekten tarayıcı kontrolüne ihtiyacınız varsa: özel form etkileşimleri, ekran görüntüsü/PDF akışları, sentetik izleme veya DOM’u programatik olarak manipüle ettiğiniz tarayıcı tabanlı testler.

Bir scraping API’sini değerlendirin eğer nihai hedefiniz, kendi yönettiğiniz bir tarayıcı oturumu değil de web sayfasından yapılandırılmış JSON almaksa. Thunderbit’in Open API’si, JavaScript render’ını, bot korumalarını ve CAPTCHA’ları tek bir HTTP çağrısının arkasında yönetir — POST /extract ile JSON Schema kullanarak yapılandırılmış veri alırsınız, POST /distill ile temiz Markdown elde edersiniz. Ayrıca, kendi tarayıcısını ayağa kaldırmadan iş akışının ortasında veri çekmesi gereken bir AI ajanı geliştiriyorsanız bir MCP sunucusu da var (thunderbit_extract, thunderbit_distill).

FaktörLambda + Puppeteer (Kendin Yap)Extraction API (ör. Thunderbit)
Kurulum süresiSaatler (paketleme, layer’lar, hata ayıklama)Dakikalar (API anahtarı + HTTP çağrısı)
BakımSürekli (sürüm sabitleme, runtime güncellemeleri)Sağlayıcı tarafından yönetilir
Bot korumasıManuel (stealth eklentileri, proxy’ler)Yerleşik
Çıktı formatıKendi parse ettiğiniz ham HTML/ekran görüntüleriŞemaya göre yapılandırılmış JSON
En uygun kullanımTam tarayıcı otomasyonu, test, özel akışlarVeri çıkarma, scraping, içerik içe aktarma

Bunu açık söyleyeyim: ürün sayfalarından JSON çekmek için saatlerce Chromium binary’si debug ediyorsanız, muhtemelen yanlış problemi çözüyorsunuz. Gerçekten bir tarayıcıyı kontrol etmeniz gerekiyorsa DIY Lambda yolunu saklayın — çıkarım için daha doğrudan bir yöntem var. Bu dengeyi belirli bir proje için tartıyorsanız, AI web scraper rehberimiz konuyu daha ayrıntılı ele alıyor; doğrudan önce çıkarım odaklı yaklaşımı denemek istiyorsanız Thunderbit Chrome Extension incelemeye değer.

Sonuç

Üç dağıtım yöntemi, tek bir ortak tema: sürümleri sabitleyin, Chromium’a rahat çalışacak kadar bellek verin ve dağıtım yöntemini ilk bulduğunuz rehbere göre değil, gerçek kısıtlarınıza göre seçin. Hızlı iterasyon için Layers, prod ölçeği için Container Images, basit tek seferlik işler için ZIP. Ve asıl yaptığınız şey tarayıcı otomasyonu değil de veri çıkarma ise, özel olarak tasarlanmış bir extraction API’si paketleme derdini tamamen ortadan kaldırabilir.

SSS

2026’da AWS Lambda üzerinde Puppeteer çalıştırılabilir mi? Evet — puppeteer-core ile @sparticuz/chromium birlikte kullanılarak, Layers, Container Image veya doğrudan ZIP ile dağıtılabilir. Tam puppeteer paketi ve artık desteği olmayan chrome-aws-lambda paketi güncel Lambda runtime’larında güvenilir şekilde çalışmaz.

AWS Lambda için maksimum paket boyutu nedir? AWS Lambda kotalarına göre, Layers ve ZIP dağıtımlarında sıkıştırılmamış 250 MB; Container Image dağıtımlarında ise 10 GB.

chrome-aws-lambda hâlâ güncelleniyor mu? Hayır. Orijinal chrome-aws-lambda paketi (alixaxel tarafından) artık kullanılmıyor ve Node 18+ sürümlerinde bozuluyor. Bunun yerine @sparticuz/chromium kullanın — şu anda aktif olarak sürdürülen standart budur.

Puppeteer AWS Lambda’da ne kadar bellek ister? 1024 MB pratik minimumdur; 1536–2048 MB ise performansın gerçekten rahatladığı aralıktır. 1024 MB’ın altında, Lambda’nın CPU tahsisini belleğe bağlaması nedeniyle belirgin yavaşlık bekleyin.

Puppeteer’ın Lambda’daki cold start süresini nasıl azaltırım? Belleği artırın (bu size daha fazla CPU da kazandırır), kullanım senaryonuz için gecikme kritikse Provisioned Concurrency düşünün ve dağıtım paketini olabildiğince hafif tutun — her ekstra bağımlılık, ek cold start süresi demektir.

Daha Fazla Bilgi

Ke
Ke
Thunderbit’ta CTO | Kıdemli Veri Bilimci ve ML Uzmanı Makine öğrenimi ve veri bilimi alanında yaklaşık on yıllık deneyime sahip olan Ke Shen, Columbia University mezunu ve Walmart Labs’te eski Kıdemli Veri Bilimci’dir. Python, R, Java ve İstatistik konularında derin ve meslektaşları tarafından tanınan uzmanlığıyla, karmaşık yapay zekâ algoritmalarını teoriden üretim düzeyinde mimariye taşıma konusunda sahada test edilmiş içgörüler paylaşır.
Topics
Puppeteer AWS LambdaSunucusuz tarayıcı otomasyonuHeadless Chromium
İçindekiler
Thunderbit · AI web veri ajanı

Herhangi bir sayfadan 1 tık içinde veri çıkar

250.000+ kullanıcı tarafından güveniliyor
ücretsiz plan mevcut
Web sayfasından tabloya
İhtiyacını anlat — Thunderbit’in AI Ajanı bunu çeker ve Excel, Google Sheets, Airtable veya Notion’a aktarır. Başlamak ücretsiz.
Chrome Store Rating
PRODUCT HUNT#1 Product of the Week