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.

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.

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.

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

Örnek kod dört temel davranışı yapılandırır:
① Sunucu
0.0.0.0:9000adresini dinler. Özel çalışma zamanı hizmetleri0.0.0.0:CAPortveya*:CAPortadreslerini dinlemelidir —127.0.0.1veyalocalhostdeğil. Ayrıntılar için bkz. Principles.②
/rotası"Hello World! "dizesini döndürür.③
/invokerotası işlev çağrılarını işler. Ayrıntılar için bkz. Web işlevleri.④
/initializerotası, ö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.

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.
