全部产品
Search
文档中心

Function Compute:Contoh penggunaan lapisan publik resmi

更新时间:Jul 02, 2025

Dalam beberapa skenario umum, Anda dapat menggunakan lapisan publik resmi yang disediakan oleh Function Compute untuk mengurangi ukuran paket kode Anda. Dibandingkan dengan lapisan kustom, lapisan publik resmi dari Function Compute lebih mudah digunakan karena runtime standar dan paket dependensi umum telah diatur sebelumnya untuk berbagai bahasa pemrograman. Anda tidak perlu khawatir tentang konfigurasi lingkungan dasar, cukup pilih lapisan publik yang sesuai dan ikat ke fungsi Anda. Topik ini memberikan contoh cara menggunakan lapisan publik resmi.

Catatan penggunaan

Untuk melihat versi terbaru dan petunjuk penggunaan lapisan publik resmi, lihat awesome-layers.

Contoh 1: Tangkap tangkapan layar halaman web berdasarkan Node.js 16 dan Puppeteer

Puppeteer dapat mengontrol Chrome (atau Chromium) untuk mengimplementasikan berbagai proses otomatis seperti penangkapan layar halaman web, pembuatan PDF, pengiriman formulir otomatis, pengujian UI otomatis, dan simulasi input keyboard. Pada dasarnya, Puppeteer mengimplementasikan browser Chrome tanpa kepala berbasis Node.js.

Dalam contoh ini, Puppeteer digunakan untuk menangkap tangkapan layar halaman web.

  1. Buat fungsi acara.

    Di halaman Create Function, konfigurasikan parameter berikut dan gunakan nilai default untuk parameter lainnya. Untuk informasi lebih lanjut, lihat Buat Fungsi Acara.

    • Pilih Event Function sebagai tipe fungsi.

    • Runtime: Pilih Node.js 16 dari daftar drop-down.

    • Atur Memory Capacity menjadi 1.024 MB.

  2. Edit kode fungsi. Di halaman detail fungsi, klik tab Code, edit kode fungsi di file index.js, lalu klik Deploy.

    Berikut adalah contoh kode sampel:

    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('Versi Node adalah: ' + 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'
            ]
        });
    
        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 });
        await autoScroll(page);
    
        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);
    
        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);
      }
    };

    Deskripsi:

    1. Parsing parameter query untuk mendapatkan URL snapshot. Jika parsing gagal, halaman utama Serverless Devs akan digunakan secara otomatis.

    2. Gunakan Puppeteer untuk menangkap layar halaman web. Simpan tangkapan layar ke folder /tmp/example instance yang sedang berjalan, lalu kembalikan jalur tersebut sebagai badan balasan permintaan HTTP.

  3. Konfigurasikan lapisan publik Puppeteer untuk fungsi tersebut.

    Untuk informasi lebih lanjut, lihat Konfigurasikan Lapisan Umum di Konsol Function Compute. Pilih lapisan publik resmi Puppeteer17x.

    image

  4. Buat pemicu HTTP. Di kolom Configurations pemicu, lihat dan salin nilai dari Public Endpoint. Kemudian, tempelkan titik akhir di browser untuk melakukan tes.

    Untuk informasi lebih lanjut tentang cara membuat pemicu HTTP, lihat Buat Pemicu.

    image

    Setelah pengujian, tangkapan layar (format PNG) halaman web Serverless Devs ditangkap dan diunduh secara otomatis ke mesin lokal Anda.

Contoh 2: Implementasikan runtime kustom .NET 6 berdasarkan lapisan publik

  1. Buat fungsi web.

    Di halaman Create Function, konfigurasikan parameter seperti yang ditunjukkan pada gambar berikut. Pertahankan nilai default untuk parameter lainnya. Untuk informasi lebih lanjut, lihat Buat Fungsi Web.

    image

    Setelah fungsi dibuat, Anda dapat melihat kode sampel Program.cs di WebIDE. Deskripsi:program.cs

    • ①: Fungsi ini mendengarkan port 9000 di 0.0.0.0. Layanan yang dimulai oleh runtime kustom harus mendengarkan di 0.0.0.0:CAPort atau *:CAPort, tetapi tidak dapat mendengarkan di 127.0.0.1 atau localhost. Untuk informasi lebih lanjut, lihat Prinsip-prinsip.

    • ②: Tambahkan rute / dan langsung kembalikan string "Hello World!".

    • ③: Tambahkan rute /invoke yang menggunakan jalur penanganan acara. Untuk informasi lebih lanjut, lihat Fungsi Web.

    • ④: Tambahkan rute /initialize, yaitu jalur yang sesuai dengan panggilan balik Initializer dari fungsi. Panggilan balik Initializer dieksekusi sekali selama inisialisasi program sampel. Untuk informasi lebih lanjut, lihat Hook Siklus Hidup untuk Instance Fungsi.

  2. Uji fungsi tersebut.

    1. Di kolom Konfigurasi pemicu, lihat dan salin nilai dari Public Endpoint. Kemudian, tempelkan titik akhir di browser untuk melakukan tes. Dalam kasus ini, tidak ada informasi jalur yang ditambahkan.

      image

      Setelah eksekusi selesai, lampiran diunduh secara otomatis ke mesin lokal Anda.

    2. Gunakan curl untuk menambahkan jalur /invoke atau /initialize ke titik akhir publik yang diperoleh pada langkah sebelumnya. Metode routing adalah POST. Anda dapat menjalankan perintah curl -XPOST untuk melakukan tes.

      Gambar berikut menunjukkan hasil eksekusi.

      image