Tüm Ürünler
Search
Belge Merkezi

Function Compute:Herkese açık katmanların kullanım örnekleri

Son Güncelleme:Oct 08, 2026

Function Compute (FC) içindeki resmi herkese açık katmanlar, popüler programlama dilleri için önceden yapılandırılmış çalışma zamanlarını ve yaygın bağımlılıkları içerir. Bağımlılıkları kod paketinize eklemek yerine işlevinize bir katman ekleyin. Özel katmanlara kıyasla resmi herkese açık katmanlar ortam kurulumu gerektirmez; çalışma zamanları ve kitaplıklar önceden yüklenmiştir.

Resmi herkese açık katmanları kullanmanın nedenleri:

  • Daha küçük dağıtım paketleri. Bağımlılıkları kod arşivinizin dışında tutun.

  • Sıfır ortam yapılandırması. Standart çalışma zamanları ve kitaplıklar önceden yüklenmiştir.

  • İşlevler arasında yeniden kullanım. Aynı katmanı hesabınızdaki herhangi bir işleve ekleyin.

  • Bağımsız güncellemeler. İşlev kodunu bağımlılıklarına dokunmadan güncelleyin.

En son katman sürümleri ve kullanım talimatları için bkz. awesome-layers.

Örnek 1: Node.js 16 ve Puppeteer ile web sayfası ekran görüntülerini yakalama

Puppeteer, Chrome veya Chromium aracılığıyla tarayıcı görevlerini otomatikleştirir: ekran görüntüsü alma, PDF oluşturma, form gönderme, kullanıcı arayüzü testleri çalıştırma ve klavye girişi simülasyonu. Node.js üzerinde headless bir tarayıcı olarak çalışır.

Bu örnekte, herhangi bir URL'nin tam sayfa ekran görüntüsünü alan ve görüntüyü PNG olarak döndüren bir işlev oluşturulur.

Steps overview: Bir olay işlevi oluşturun → İşlev kodunu ekleyin → Puppeteer herkese açık katmanını ekleyin → İşlevi test edin.

Adım 1: Bir olay işlevi oluşturun

Create Function sayfasında aşağıdaki parametreleri ayarlayın ve diğer tüm ayarlar için varsayılan değerleri koruyun. Ayrıntılar için bkz. Olay işlevi oluşturma.

Parametre Değer
İşlev türü Event Function
Çalışma zamanı Node.js 16
Bellek Kapasitesi 1024 MB

Adım 2: İşlev kodunu ekleyin

İşlev ayrıntıları sayfasında Code sekmesine tıklayın, index.js dosyasının içeriğini aşağıdaki kodla değiştirin ve ardından Deploy öğesine tıklayın.

const fs = require('fs');
const puppeteer = require('puppeteer');

function autoScroll(page) {
  return page.evaluate(() => {
      return new Promise((resolve, reject) => {
          var totalHeight = 0;
          var distance = 100;
          var timer = setInterval(() => {
              var scrollHeight = document.body.scrollHeight;
              window.scrollBy(0, distance);
              totalHeight += distance;
              if (totalHeight >= scrollHeight) {
                  clearInterval(timer);
                  resolve();
              }
          }, 100);
      })
  });
}

exports.handler = async (event, context, callback) => {
  console.log('Node version is: ' + process.version);

  try {
    const browser = await puppeteer.launch({
        headless: true,
        args: [
            '--disable-gpu',
            '--disable-dev-shm-usage',
            '--disable-setuid-sandbox',
            '--no-first-run',
            '--no-zygote',
            '--no-sandbox'
        ]
    });

    // 1. Read the target URL from the query string; fall back to the Serverless Devs homepage
    let url = 'https://www.serverless-devs.com';
    if (event.queryStringParameters && event.queryStringParameters.url) {
        url = event.queryStringParameters.url;
    }
    if (!url.startsWith('https://') && !url.startsWith('http://')) {
        url = 'http://' + url;
    }

    const page = await browser.newPage();
    await page.emulateTimezone('Asia/Shanghai');
    await page.goto(url, { waitUntil: 'networkidle2' });
    await page.setViewport({ width: 1200, height: 800 });

    // 2. Scroll the full page before taking the screenshot
    await autoScroll(page);

    // 3. Save a full-page PNG screenshot to /tmp/example
    let path = '/tmp/example';
    let contentType = 'image/png';
    await page.screenshot({ path: path, fullPage: true, type: 'png' });

    await browser.close();

    const screenshot = fs.readFileSync(path);

    // 4. Return the screenshot as a base64-encoded HTTP response body
    const response = {
        statusCode: 200,
        headers: {
            'Content-Type': contentType
        },
        body: screenshot.toString('base64'),
        isBase64Encoded: true
    };

    callback(null, response);
  } catch (err) {
    const errorResponse = {
        statusCode: 500,
        headers: {
            'Content-Type': 'text/plain'
        },
        body: err.message
    };
    callback(null, errorResponse);
  }
};

Adım 3: Puppeteer herkese açık katmanını ekleyin

İşlevinize Puppeteer17x resmi herkese açık katmanını ekleyin. Adım adım talimatlar için bkz. Function Compute konsolunda ortak katmanları yapılandırma.

image

Adım 4: İşlevi test edin

Bir HTTP tetikleyicisi oluşturun. Tetikleyicinin Configurations sütununda Internet Endpoint URL'sini kopyalayın ve bir tarayıcıya yapıştırın. Talimatlar için bkz. Tetikleyici oluşturma.

image

Serverless Devs web sitesinin tam sayfa PNG ekran görüntüsü yakalanır ve otomatik olarak yerel makinenize indirilir.

Örnek 2: Herkese açık katmanlarla .NET 6 özel çalışma zamanını çalıştırma

Bu örnek, .NET çalışma zamanını kod paketinize eklemeden bir .NET 6 web işlevini çalıştırmak için resmi bir herkese açık katmanın nasıl kullanılacağını gösterir.

Steps overview: Bir web işlevi oluşturun → İşlevi test edin.

Adım 1: Bir web işlevi oluşturun

Create Function sayfasında parametreleri aşağıda gösterildiği gibi yapılandırın ve diğer tüm ayarlar için varsayılan değerleri koruyun. Ayrıntılar için bkz. Web işlevi oluşturma.

image

İşlev oluşturulduktan sonra WebIDE'de Program.cs örnek dosyasını açın:

program.cs

Örnek kod dört temel davranışı yapılandırır:

  • ① Sunucu 0.0.0.0:9000 adresini dinler. Özel çalışma zamanı hizmetleri 0.0.0.0:CAPort veya *:CAPort adreslerini dinlemelidir — 127.0.0.1 veya localhost değil. Ayrıntılar için bkz. Principles.

  • ② / rotası "Hello World! " dizesini döndürür.

  • ③ /invoke rotası işlev çağrılarını işler. Ayrıntılar için bkz. Web işlevleri.

  • ④ /initialize rotası, örnek başlatma sırasında bir kez çalışan Initializer yaşam döngüsü kancasına eşlenir. Ayrıntılar için bkz. Lifecycle hooks for function instances.

Adım 2: İşlevi test edin

Kök rotayı test edin

Tetikleyicinin Configurations sütununda Internet Endpoint URL'sini kopyalayın ve doğrudan bir tarayıcıya yapıştırın (yol soneki olmadan). Yanıt otomatik olarak yerel makinenize indirilir.

image

Invoke ve initialize rotalarını test edin

Genel uç noktaya /invoke veya /initialize ekleyin ve bir POST isteği gönderin:

curl -XPOST <public-endpoint>/invoke
curl -XPOST <public-endpoint>/initialize

Aşağıdaki şekil yürütme sonucunu gösterir.

image