Lapisan publik resmi di Function Compute (FC) menyediakan runtime dan dependensi umum yang telah dikonfigurasi sebelumnya untuk bahasa pemrograman populer. Alih-alih menggabungkan dependensi dalam paket kode Anda, lampirkan lapisan tersebut ke fungsi Anda. Berbeda dengan lapisan kustom, lapisan publik resmi tidak memerlukan pengaturan lingkungan—runtime dan pustaka telah dipra-instal.
Keuntungan menggunakan lapisan publik resmi:
-
Paket penyebaran lebih kecil. Pisahkan dependensi dari arsip kode Anda.
-
Tanpa konfigurasi lingkungan. Runtime dan pustaka standar telah dipra-instal.
-
Dapat digunakan ulang di berbagai fungsi. Lampirkan lapisan yang sama ke fungsi mana pun dalam akun Anda.
-
Pembaruan independen. Perbarui kode fungsi tanpa menyentuh 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 halaman utama 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 Konfigurasi lapisan umum di Konsol Function Compute.
Langkah 4: Uji fungsi
Buat Pemicu HTTP. Pada kolom Configurations pemicu, salin URL Internet 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 perangkat 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 menggabungkan runtime .NET 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
Pada kolom Configurations pemicu, salin URL Internet Endpoint dan tempelkan langsung ke browser (tanpa akhiran path). Respons akan secara otomatis diunduh ke perangkat 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>/initialize
Gambar berikut menunjukkan hasil eksekusi.