本文介紹使用官方公用層的典型樣本。
使用說明
關於官方公用層的最新版本和使用說明,請參見awesome-layers。
樣本一:基於Node.js 16和Puppeteer實現網頁截圖樣本程式
Puppeteer是一個Node.js庫,提供進階的API並通過DevTools協議來控制Chrome(或Chromium)。通俗來講,Puppeteer是一個headless Chrome瀏覽器,支援實現很多自動化流程,例如網頁截圖或PDF產生、表單的自動認可、UI自動化測試、鍵盤輸入類比等。
本樣本使用Puppeteer完成一個網頁截圖樣本程式。
選擇使用內建運行時建立方式建立函數。
具體操作,請參見建立函數。在建立函數頁面,設定以下配置項,其餘配置項保持預設值即可。
請求處理常式類型選擇處理HTTP請求。
運行環境選擇Node.js 16。
記憶體規格選擇1 GB。
在函數詳情頁面,單擊函數代碼頁簽,編輯index.js檔案中的函數代碼,然後單擊部署代碼。
程式碼範例如下。
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); }) }); } module.exports.handler = function (request, response, context) { console.log('Node version is: ' + process.version); (async () => { 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 = request.queries['url']; if (!url) { url = 'https://www.serverless-devs.com'; } 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(); response.setStatusCode(200); response.setHeader('content-type', contentType); response.send(fs.readFileSync(path)) })().catch(err => { response.setStatusCode(500); response.setHeader('content-type', 'text/plain'); response.send(err.message); }); };上述範例程式碼解析如下。首先解析
query參數擷取需要截圖的URL地址(如果解析失敗則預設使用Serverless Devs官網首頁),然後使用Puppeteer對該網頁進行截圖,並儲存到運行執行個體的/tmp/example檔案夾中,最後將該路徑作為HTTP請求的返回體直接返回。為函數配置Puppeteer公用層。
具體操作,請參見通過控制台配置官方公用層。選擇官方公用層Puppeteer17x。
重要如果您使用的運行環境非Node.js 16,需添加環境變數。具體操作,請參見Nodejs-Puppeteer17x README。
在函數詳情頁面,單擊觸發器管理(URL)頁簽,在觸發器配置資訊列查看測試地址,然後單擊該測試地址,下載配置指令碼,執行指令碼後可以在瀏覽器中使用該測試地址進行測試。

重要使用測試地址測試前,請單擊該測試地址,然後在測試網域名稱使用方式面板,下載適用您本地作業系統的配置指令碼並執行指令碼。
樣本二:基於公用層快速實現.NET 6自訂運行時
選擇使用自訂運行時建立方式建立函數。
具體操作,請參見建立函數。在建立函數頁面,設定以下配置項,其餘配置項保持預設值即可。
請求處理常式類型選擇處理HTTP請求。
運行環境選擇.NET 6.0。
建立完成後,您可以在Web IDE介面查看範例程式碼Program.cs。

①:該樣本監聽了
0.0.0.0的9000連接埠。Custom Runtime啟動的服務一定要監聽0.0.0.0:CAPort或*:CAPort連接埠,不能監聽127.0.0.1或localhost。更多資訊,請參見Custom Runtime基本原理。②:添加路由/,直接返回字串
"Hello World!"。③:添加路由/invoke,該路由為使用事件請求處理常式的路徑。更多資訊,請參見事件請求處理常式(Event Handler)。
④:添加路由/initialize,該路由為函數初始化回調程式對應的路徑。該回調程式的方法會在樣本初始化時執行一次。更多資訊,請參見函數執行個體生命週期回調。
測試函數。
重要使用測試地址測試前,請單擊該測試地址,然後在測試網域名稱使用方式面板,下載適用您本地作業系統的配置指令碼並執行指令碼。
適用觸發器管理(URL)頁簽中的測試地址進行測試。此時,不添加任何PATH資訊。
執行結果如下所示。

添加/invoke路徑進行測試。該路由方法為
POST,支援直接使用curl -XPOST命令測試。執行結果如下所示。

添加/initialize路徑進行測試。
執行結果如下所示。
說明請先在函數配置頁面的執行個體生命週期回調地區,配置Initializer 回調程式。初始化回呼函數不需要主動調用,Function Compute平台會在執行個體啟動後自動調用該回調方法。