AWS Lambda'da Node.js SDK'sını kullanın

solvethree tarafından3 dk okuma

Node.js 22 veya sonraki bir sürümü kullanın ve resmî SDK'yı işleyicinizle birlikte paketleyin. İşlevin görev ve hata kimliklerini döndürmeye zamanı kalması için SDK'nın son süresini Lambda'nın kalan yürütme süresinden daha kısa ayarlayın.

Bu sayfada

SDK'yı paketleyin ve hedefi yapılandırın

  1. 1.

    Bağımlılığı yükleyin

    Temiz bir derleme dizininde bir npm paketi başlatın. https://solvethree.com/downloads/solvethree-sdk-0.1.0.tgz adresindeki resmî tarball arşivini npm ile yükleyin. Bu paket @solvethree/sdk içe aktarımını sağlar; npm kayıt defterinde yayımlanmış bir sürüm olduğunu varsaymayın.

  2. 2.

    Çalışma alanını ve hedefi yapılandırın

    SOLVETHREE_API_KEY, CAPTCHA_SITE ve SOLVETHREE_PROXY adlı özel Lambda ortam değişkenlerini ayarlayın. Bir çalışma alanı API anahtarı, tam URL yerine hedef ana makine adı ve bu görevin proxy'sini kullanın. Çalışma alanında bu site için zaten etkin bir profil bulunmalıdır; site profili kurulumuna bakın.

  3. 3.

    İşleyiciyi kaydedin ve paketleyin

    Aşağıdaki örneği index.mjs olarak kaydedin. index.mjs, paket meta verileri ve yüklenmiş node_modules dizini arşivin kökünde olacak şekilde bir ZIP oluşturun; bunları kapsayıcı bir proje dizininin içine koymayın. ZIP'e kimlik bilgileri eklemeyin.

  4. 4.

    Mevcut Lambda sürecinizle dağıtın

    Node.js 22 çalışma zamanını kullanın ve işleyiciyi index.handler olarak ayarlayın. Mantıksal iş için sabit bir requestId sağlayarak yetkili arka uç veya IAM akışınız üzerinden çağırın. Döndürülen çözüm verilerini gizli tutun.

Örnekte login eylemi kullanılır; dağıtmadan önce bunu hedefinizin beklediği eylemle değiştirin. Tek bir proxy gönderir ve varsayılan enterprise-v3 istek türünü kullanır. reCAPTCHA type veya url alanlarını eklemeyin.

SDK beklemesini çağrının süre bütçesiyle sınırlandırın

Lambda index.mjs · SDK’yı çağrının süre bütçesiyle sınırlama
import { Solvethree, SolvethreeError, TaskFailedError, ApiError } from '@solvethree/sdk';
const client = new Solvethree({ apiKey: process.env.SOLVETHREE_API_KEY });
export const handler = async (event, context) => {
  const timeoutMs = Math.min(180000, context.getRemainingTimeInMillis() - 1500);
  if (timeoutMs < 1000) throw new Error('Not enough execution time to start a task');
  // The caller supplies one stable ID for this logical job; Lambda retries must
  // reuse it. awsRequestId changes with invocations and is not that logical ID.
  if (!event.requestId) throw new Error('Provide a stable requestId');
  try {
    return await client.solve({
      site: process.env.CAPTCHA_SITE, action: 'login', proxy: process.env.SOLVETHREE_PROXY,
      requestId: event.requestId,
    }, { timeoutMs, signal: AbortSignal.timeout(timeoutMs) });
  } catch (error) {
    if (error instanceof TaskFailedError) return { status: 'failed', id: error.taskId, errorCode: error.errorCode };
    if (error instanceof ApiError) return { apiError: error.status, requestId: error.requestId };
    if (error instanceof SolvethreeError) return { interrupted: true, requestId: error.requestId, taskId: error.taskId };
    throw error;
  }
};
// Invoke through your authorized backend/IAM flow. The return value is private
// solution data; do not attach this handler to an unauthenticated public URL.

İşleyici, Lambda'nın kalan yürütme süresini okur, 1,500 milisaniye ayırır ve SDK beklemesini 180,000 milisaniyeyle sınırlandırır. Bu üst sınır bu örneğe aittir; evrensel bir Lambda yürütme sınırı değildir. Ayrılan süreden sonra bir saniyeden az zaman kalırsa işleyici başlamayı reddeder.

Hem SDK zaman aşımı hem de iptal sinyali hesaplanan son süreyi kullanır. solve, görevi bir kez oluşturur ve hazır olana veya bir hata oluşana kadar durumunu sorgular. Ayrılan süre, hata işlemenin kurtarma bilgilerini döndürmesine zaman tanır; ancak Lambda'nın zorla sonlandırılması yine de herhangi bir yanıt verilmesini engelleyebilir.

Çağıran taraf, çağrı yeniden denemelerinde event.requestId değerini korumalıdır. 1–64 ASCII harfi, rakam, alt çizgi veya kısa çizgi kullanın. awsRequestId kullanmayın: bu, mantıksal çözüm isteğini değil, bir çağrıyı tanımlar.

Başka bir çözümü körü körüne başlatmadan hataları işleyin

İşleyicinin dönüş değeri nasıl yorumlanır?
İşleyicinin dönüş değeri nasıl yorumlanır?
SonuçYapılması gereken
ready durumundaki bir görevÇözümünü kullanın. Yalnızca görev oluşturulması veya başarılı bir HTTP yanıtı yeterli değildir.
status: failedid ve errorCode değerlerini kaydedin. Hata mesajına ihtiyacınız varsa görevi alın, ancak başarısız olan bu görevin durumunu sorgulamayı bırakın.
apiErrorHTTP durumunu ve döndürülen istek kimliğini kaydedin. Bu, görevin son durumu olan bir başarısızlık değil, bir API isteği hatasıdır; aynı girdilerle yeniden denemeden önce nedenini inceleyin.
interrupted: trueKurtarma için döndürülen tüm taskId ve requestId değerlerini, çağıran tarafın ilk mantıksal istek kimliğiyle birlikte saklayın.

Doğrulama hataları ve beklenmeyen hatalar yeniden fırlatılır. İşleyici her istisnayı bir kesinti yanıtına dönüştürmez.

  1. 1.

    Varsa görev kimliğiyle kurtarın

    Mevcut görevi getTask ile alın. pending ve solving, görevin hâlâ çalıştığı anlamına gelir; yalnızca ready kullanılabilir bir çözüm içerir. Sonraki beklemeleri yeni çağrının kalan süre bütçesi içinde tutun.

  2. 2.

    Yoksa mantıksal istek kimliğiyle kurtarın

    Aynı görev isteğini, çağıranın özgün requestId değeriyle yeniden deneyin. Eşleşen girdiler mevcut görevi döndürür; farklı girdiler çakışmaya neden olur. Yapılandırma değişiklikleri sonrasında da dahil olmak üzere, kurtarma sırasında siteyi, eylemi ve proxy'yi değiştirmeyin.

Bağlantı zaman aşımı, görev oluşturmanın başarısız olduğunu kanıtlamaz. Yeni bir mantıksal istek kimliği atamadan önce mevcut görevi kurtarın. Temel işleyiş kuralları için görev sorgulama ve API hata işleme belgelerine bakın.

Aynı proxy ve döndürülen tarayıcı kimliğiyle gönderin

SDK, çözüm verilerini döndürür; bunları hedefe uygulamaz. Uygulamanız çözümü gönderirken yapılandırılmış proxy'yi ve döndürülen userAgent ile secChUa değerlerini kullanın. Bunların yerine ilgisiz bir tarayıcı kimliği veya hedef URL kullanmayın. Hazır bir görev, çözümün üretildiği anlamına gelir; hedefin sonraki isteği kabul ettiği anlamına gelmez.

İlk görevinizi çalıştırın.

$5 çalışma alanı kredisiyle başlayın.

Çalışma alanı oluşturun
AWS Lambda'da Node.js SDK'sını kullanın · solvethree