DevOps & Scaling

AWS Lambda + CaptchaAI: Sunucusuz CAPTCHA Çözümü

AWS Lambda, CAPTCHA çözümünü sunucuları yönetmeden gerçekleştirir. Yalnızca çözerken ödeme yapın, otomatik olarak ölçeklendirin ve API Gateway, SQS veya Step Functions ile entegre olun.


Lambda İşleyicisi

# lambda_function.py
import json
import os
import time
import urllib.request
import urllib.parse


def lambda_handler(event, context):
    """AWS Lambda handler for CaptchaAI solving."""
    api_key = os.environ["CAPTCHAAI_KEY"]

    # Parse input
    body = json.loads(event.get("body", "{}")) if isinstance(event.get("body"), str) else event

    method = body.get("method", "userrecaptcha")
    params = body.get("params", {})

    try:
        token = solve_captcha(api_key, method, params)
        return {
            "statusCode": 200,
            "body": json.dumps({"token": token}),
        }
    except Exception as e:
        return {
            "statusCode": 500,
            "body": json.dumps({"error": str(e)}),
        }


def solve_captcha(api_key, method, params, timeout=90):
    """Solve CAPTCHA using CaptchaAI API."""
    # Submit task
    submit_data = urllib.parse.urlencode({
        "key": api_key,
        "method": method,
        "json": 1,
        **params,
    }).encode()

    req = urllib.request.Request(
        "https://ocr.captchaai.com/in.php",
        data=submit_data,
    )
    with urllib.request.urlopen(req, timeout=30) as resp:
        result = json.loads(resp.read())

    if result.get("status") != 1:
        raise RuntimeError(f"Submit error: {result.get('request')}")

    task_id = result["request"]

    # Poll for result
    start = time.time()
    while time.time() - start < timeout:
        time.sleep(5)
        poll_url = (
            f"https://ocr.captchaai.com/res.php"
            f"?key={api_key}&action=get&id={task_id}&json=1"
        )
        with urllib.request.urlopen(poll_url, timeout=15) as resp:
            data = json.loads(resp.read())

        if data["request"] != "CAPCHA_NOT_READY":
            if data.get("status") == 1:
                return data["request"]
            raise RuntimeError(f"Solve error: {data['request']}")

    raise TimeoutError("Solve timeout")

Secrets Manager ile API Anahtarını Güvenli Hale Getirin

import json
import boto3


def get_api_key():
    """Retrieve CaptchaAI key from AWS Secrets Manager."""
    client = boto3.client("secretsmanager")
    response = client.get_secret_value(SecretId="captchaai/api-key")
    secret = json.loads(response["SecretString"])
    return secret["api_key"]

Sırrı saklayın:

aws secretsmanager create-secret \
  --name captchaai/api-key \
  --secret-string '{"api_key":"YOUR_API_KEY"}'

SAM Şablonu (Kod Olarak Altyapı)

# template.yaml
AWSTemplateFormatVersion: "2010-09-09"
Transform: AWS::Serverless-2016-10-31

Globals:
  Function:
    Timeout: 120
    MemorySize: 256
    Runtime: python3.11

Resources:
  CaptchaSolverFunction:
    Type: AWS::Serverless::Function
    Properties:
      Handler: lambda_function.lambda_handler
      Environment:
        Variables:
          CAPTCHAAI_KEY: !Sub "{{resolve:secretsmanager:captchaai/api-key:SecretString:api_key}}"
      Events:
        SolveApi:
          Type: Api
          Properties:
            Path: /solve
            Method: post
      Policies:

        - AWSSecretsManagerGetSecretValuePolicy:
            SecretArn: !Sub "arn:aws:secretsmanager:${AWS::Region}:${AWS::AccountId}:secret:captchaai/api-key-*"

Outputs:
  SolveApiUrl:
    Value: !Sub "https://${ServerlessRestApi}.execute-api.${AWS::Region}.amazonaws.com/Prod/solve"

Dağıt

# Build and deploy
sam build
sam deploy --guided

# Test
curl -X POST https://YOUR_API_ID.execute-api.us-east-1.amazonaws.com/Prod/solve \
  -H "Content-Type: application/json" \
  -d '{
    "method": "userrecaptcha",
    "params": {
      "googlekey": "SITE_KEY",
      "pageurl": "https://example.com"
    }
  }'

SQS ile Tetiklenen Toplu İşleme

CAPTCHA görevlerini SQS kuyruğundan işleyin:

import json
import os
import time
import urllib.request
import urllib.parse


def sqs_handler(event, context):
    """Process CAPTCHA tasks from SQS queue."""
    api_key = os.environ["CAPTCHAAI_KEY"]
    results = []

    for record in event["Records"]:
        task = json.loads(record["body"])
        try:
            token = solve_captcha(
                api_key,
                task["method"],
                task["params"],
            )
            results.append({
                "task_id": task.get("id"),
                "status": "success",
                "token": token[:50],
            })
        except Exception as e:
            results.append({
                "task_id": task.get("id"),
                "status": "error",
                "error": str(e),
            })

    return {"results": results}

Lambda'da Dikkat Edilmesi Gerekenler

Faktör Değer
Maksimum zaman aşımı 15 dakika (çoğu CAPTCHA için 2 dakikaya ayarlanmıştır)
Bellek 256 MB yeterli (yoğun işlem yok)
Eşzamanlılık Varsayılan 1000 eşzamanlı (gerekirse artış isteyin)
Soğuk başlatma Python için ~500ms (çözüm süresine karşı ihmal edilebilir)
Maliyet ~Çözüm başına 0,0001$ (yalnızca hesaplama)
Bağımlılıklar Lambda katmanlarından tanılamak için urllib (yerleşik) kullanın

Sorun giderme

Sorun Sebep Düzeltme
İşlev zaman aşımına uğradı Lambda zaman aşımı < çözüm süresi Zaman aşımını 120 saniyeden fazla olarak ayarlayın
İzin gizli olarak reddedildi Eksik IAM politikası SecretsManager okuma politikasını ekleyin
Soğuk başlatma gecikmeyi artırır Seyrek çağrılar Sağlanan eşzamanlılığı kullan
İstekler için içe aktarma hatası Lambda'da paketlenmemiştir urllib.request (yerleşik) kullanın veya katman ekleyin

SSS

Lambda, CAPTCHA çözümü için uygun maliyetli midir?

Evet. Çağrı başına ~0,0001 ABD doları (256 MB, 60 saniye) ile Lambda, CaptchaAI API ücretinin üzerine ihmal edilebilir bir maliyet ekler. Boşta kalma süresi boyunca sunucu maliyetlerinden kaçınırsınız.

Lambda'nın 15 dakikalık molası ne olacak?

Çoğu CAPTCHA 10-60 saniyede çözülür. Lambda zaman aşımınızı 120 saniyeye ayarlayın. reCAPTCHA Enterprise gibi karmaşık türler için 180 saniyeyi kullanın.

İstek kitaplığı için Lambda katmanlarını kullanabilir miyim?

Evet, ancak urllib.request (yerleşik), CaptchaAI'nin basit HTTP API'si için iyi çalışıyor. Bu, katman yönetimini tamamen ortadan kaldırır.


İlgili Kılavuzlar


Sunucusuz geçiş yapın —CaptchaAI anahtarınızı alınBugün.

Bu makale için yorumlar devre dışı bırakılmıştır.

İlgili Yazılar

DevOps & Scaling AWS SNS ve CaptchaAI ile Olay Odaklı CAPTCHA Çözümü Oluşturma
Üretimdeki Captcha AI iş akışlarına yönelik mimari kararları, işletim hususlarını ve otomasyon modellerini içeren AWS SNS ve Captcha AI ile Olay Odaklı CAPTCHA...

Üretimdeki Captcha AI iş akışlarına yönelik mimari kararları, işletim hususlarını ve otomasyon modellerini içe...

Apr 22, 2026
DevOps & Scaling CAPTCHA Çözme Altyapısı için Mavi-Yeşil Dağıtım
Üretimdeki Captcha AI iş akışlarına yönelik mimari kararları, işletim hususlarını ve otomasyon modellerini içeren CAPTCHA Çözme Altyapısı için Mavi-Yeşil Dağıtı...

Üretimdeki Captcha AI iş akışlarına yönelik mimari kararları, işletim hususlarını ve otomasyon modellerini içe...

Apr 27, 2026
DevOps & Scaling Azure İşlevleri + CaptchaAI: Bulut Entegrasyonu
Azure İşlevleri + Captcha AI: Bulut Entegrasyonu için Dev Ops kılavuzu, üretimdeki Captcha AI iş akışlarına yönelik mimari kararları, işletim hususlarını ve oto...

Azure İşlevleri + Captcha AI: Bulut Entegrasyonu için Dev Ops kılavuzu, üretimdeki Captcha AI iş akışlarına yö...

Apr 23, 2026