All Products
Search
Document Center

Function Compute:Contoh penggunaan lapisan publik

Last Updated:Sep 05, 2026

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.

image

Langkah 4: Uji fungsi

Buat Pemicu HTTP. Pada kolom Configurations pemicu, salin URL Internet Endpoint dan tempelkan ke browser. Untuk petunjuknya, lihat Buat pemicu.

image

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.

image

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

program.cs

Kode contoh ini mengatur empat perilaku utama:

  • Server mendengarkan pada 0.0.0.0:9000. Layanan runtime kustom harus mendengarkan pada 0.0.0.0:CAPort atau *:CAPort — bukan pada 127.0.0.1 atau localhost. Untuk detailnya, lihat Prinsip.

  • Rute / mengembalikan string "Hello World! ".

  • Rute /invoke menangani pemanggilan fungsi. Untuk detailnya, lihat Fungsi web.

  • Rute /initialize dipetakan 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.

image

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.

image