All Products
Search
Document Center

Function Compute:Contoh penggunaan lapisan publik

Last Updated:Apr 01, 2026

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.

ParameterNilai
Jenis fungsiEvent Function
RuntimeNode.js 16
Kapasitas Memori1024 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.

image

Langkah 4: Uji fungsi

Buat Pemicu HTTP. Di kolom Configurations pemicu, salin URL Public 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 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.

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

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.

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