Lapisan publik resmi di Function Compute (FC) menyediakan runtime dan dependensi umum yang telah dikonfigurasi sebelumnya untuk bahasa pemrograman populer. Alih-alih memasukkan dependensi ke dalam paket kode Anda, lampirkan lapisan tersebut ke fungsi Anda. Berbeda dengan lapisan kustom, lapisan publik resmi tidak memerlukan penyiapan lingkungan—runtime dan pustaka telah dipra-instal.
Mengapa menggunakan lapisan publik resmi:
Paket penyebaran lebih kecil. Dependensi dipisahkan dari arsip kode Anda.
Tidak perlu konfigurasi lingkungan. Runtime dan pustaka standar telah dipra-instal.
Dapat digunakan ulang di berbagai fungsi. Lapisan yang sama dapat dilampirkan ke fungsi mana pun dalam akun Anda.
Pembaruan independen. Kode fungsi dapat diperbarui tanpa mengubah dependensinya.
Untuk versi lapisan terbaru dan petunjuk penggunaannya, lihat awesome-layers.
Contoh 1: Tangkap tangkapan layar halaman web dengan Node.js 16 dan Puppeteer
Puppeteer mengotomatiskan tugas browser melalui Chrome atau Chromium, seperti menangkap tangkapan layar, membuat PDF, mengirim formulir, menjalankan pengujian UI, dan mensimulasikan input keyboard. Puppeteer berjalan sebagai browser headless pada Node.js.
Contoh ini membuat fungsi yang mengambil tangkapan layar seluruh halaman dari URL apa pun dan mengembalikan gambar tersebut dalam format PNG.
Steps overview: Buat fungsi event → Tambahkan kode fungsi → Lampirkan lapisan publik Puppeteer → Uji fungsi.
Langkah 1: Buat fungsi event
Pada halaman Create Function, atur parameter berikut dan gunakan nilai default untuk semua parameter lainnya. Untuk detailnya, lihat Buat fungsi event.
| Parameter | Nilai |
|---|---|
| Jenis fungsi | Event Function |
| Runtime | Node.js 16 |
| Kapasitas Memori | 1024 MB |
Langkah 2: Tambahkan kode fungsi
Pada halaman detail fungsi, klik tab Code, ganti isi file index.js dengan kode berikut, lalu klik Deploy.
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. Baca URL target dari string kueri; jika tidak ada, gunakan homepage Serverless Devs
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. Gulir seluruh halaman sebelum mengambil tangkapan layar
await autoScroll(page);
// 3. Simpan tangkapan layar PNG seluruh halaman ke /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. Kembalikan tangkapan layar sebagai badan respons HTTP yang dikodekan Base64
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);
}
};Langkah 3: Lampirkan lapisan publik Puppeteer
Lampirkan lapisan publik resmi Puppeteer17x ke fungsi Anda. Untuk petunjuk langkah demi langkah, lihat Konfigurasikan lapisan umum di Konsol Function Compute.

Langkah 4: Uji fungsi
Buat Pemicu HTTP. Di kolom Configurations pemicu, salin URL Public Endpoint dan tempelkan ke browser. Untuk petunjuknya, lihat Buat pemicu.

Tangkapan layar PNG seluruh halaman dari situs web Serverless Devs akan diambil dan secara otomatis diunduh ke mesin lokal Anda.
Contoh 2: Jalankan runtime kustom .NET 6 dengan lapisan publik
Contoh ini menunjukkan cara menggunakan lapisan publik resmi untuk menjalankan fungsi web .NET 6 tanpa memasukkan runtime .NET ke dalam paket kode Anda.
Steps overview: Buat fungsi web → Uji fungsi.
Langkah 1: Buat fungsi web
Pada halaman Create Function, konfigurasikan parameter seperti yang ditunjukkan di bawah ini dan gunakan nilai default untuk semua parameter lainnya. Untuk detailnya, lihat Buat fungsi web.

Setelah fungsi dibuat, buka file contoh Program.cs di WebIDE:

Kode contoh ini mengatur empat perilaku utama:
① Server mendengarkan pada
0.0.0.0:9000. Layanan runtime kustom harus mendengarkan pada0.0.0.0:CAPortatau*:CAPort— bukan pada127.0.0.1ataulocalhost. Untuk detailnya, lihat Prinsip.② Rute
/mengembalikan string"Hello World! ".③ Rute
/invokemenangani pemanggilan fungsi. Untuk detailnya, lihat Fungsi web.④ Rute
/initializedipetakan ke kait siklus hidup Initializer, yang dijalankan sekali saat startup instans. Untuk detailnya, lihat Kait siklus hidup untuk instans fungsi.
Langkah 2: Uji fungsi
Uji rute root
Di kolom Configurations pemicu, salin URL Public Endpoint dan tempelkan langsung ke browser (tanpa akhiran path). Respons akan secara otomatis diunduh ke mesin lokal Anda.

Uji rute invoke dan initialize
Tambahkan /invoke atau /initialize ke titik akhir publik dan kirim permintaan POST:
curl -XPOST <public-endpoint>/invoke
curl -XPOST <public-endpoint>/initializeGambar berikut menunjukkan hasil eksekusi.
