三分钟学会如何在函数计算中使用 puppeteer
摘要:?使用 puppeteer 結合函數計算,可以快速的構建彈性的服務完成各種功能,包括:生成網頁截圖或者 PDF、高級爬蟲,可以爬取大量異步渲染內容的網頁、模擬鍵盤輸入、表單自動提交、登錄網頁等,實現 UI 自動化測試和捕獲站點的時間線,以便追蹤你的網站,幫助分析網站性能問題
簡介
使用 puppeteer 結合函數計算,可以快速的構建彈性的服務完成各種功能,包括:
- 生成網頁截圖或者 PDF
- 高級爬蟲,可以爬取大量異步渲染內容的網頁
- 模擬鍵盤輸入、表單自動提交、登錄網頁等,實現 UI 自動化測試
- 捕獲站點的時間線,以便追蹤你的網站,幫助分析網站性能問題
接下來,將基于一個腳手架項目開發我們自己 puppeteer 項目。
下載項目
>>> git clone -o starter-kit https://github.com/awesome-fc/puppeteer-fc-starter-kit.git your_project_name項目結構
├── lib ? ? ? ? ? ? ? ? ? ? ? ? chrome headless 依賴的共享庫,打包的時候,拷貝到打包項目的根目錄下 ├── chrome │ ├── buildChrome.sh ? ?編譯 chrome headless shell 腳本,基于它,可以編譯最新的版本 │ └── headless_shell.tar.gz ? 編譯后的 chrome headless 二進制打包文件 ├── src │ ├── index.js ? ?函數調用入口文件,函數 handler 為 index.handler,您的業務代碼寫在這里 │ └── starter-kit │ ├── config.js ? ?通過環境變量,獲取相關配置屬性,如:chrome 執行目錄和安裝目錄等配置 │ ├── local.js 本地測試操作 chrome headless 的 API 是否正確,通過執行命令:npm run local │ └── setup.js 安裝 chrome headless 相關邏輯代碼,如:基于 OSS 安裝或者本地目錄安裝 ├── package.json └── package.zip ? ? 輸出函數計算打包文件,通過命令:npm run package 或 npm run package-nochrome如何寫業務代碼
index.js 文件
const setup = require('./starter-kit/setup');exports.handler = async (event, context, callback) => {const browser = await setup.getBrowser(context);exports.run(browser).then((result) => callback(null, result)).catch((err) => callback(err)); };exports.run = async (browser) => {// 實現您自己的業務代碼// 下面是一個示例代碼,需要替換成您自己的業務代碼// 示例實現了對固定網頁截圖并返回圖片的功能const page = await browser.newPage();await page.goto('https://fc.console.aliyun.com');return page.screenshot({clip: {x: 200,y: 60,width: 780,height: 450,},}); };本地測試
執行命令:?npm run local?。測試您操作 chrome headless 的相關 api 是否正確運行。
編譯打包
包含 chrome headless
執行命令:npm run package?。命令會將 chrome headless 文件一起打包進項目,放在項目根目錄,函數執行的時候,默認將 chrome headless 安裝到?/tmp?目錄。
不包含 chrome headless
執行命令:npm run package-nochrome?。命令不會將 chrome headless 文件一起打包進項目,你需要額外將 chrome-headless 上傳到 OSS,通過環境變量告訴函數如何從 OSS 下載并安裝,默認將 chrome headless 安裝到?/tmp?目錄。為函數計算設置環境變量:
- CHROME_BUCKET(必填): chrome headless 上傳到 OSS 的 bucket
- CHROME_REGION(必填): chrome headless 上傳到 OSS 的 region
- CHROME_KEY(必填): chrome headless 上傳到 OSS 的 key。 默認值:?headless_shell.tar.gz
部署
編譯打包輸出的文件:package.zip,通過函數計算控制臺或者 fcli 命令工具上傳已打包文件。fcli 上傳已打包文件命令:
# 在相應 service 目錄下 >>> mkf myFunction -h index.handler -f package.zip -t nodejs8 # 代碼在本地的 package.zip 中為什么要使用函數計算
函數計算是一個相對較新的事物,可能大部分開發人員或架構師對它很陌生。微服務架構是當下很流行的一種系統架構,微服務架構有沒有不夠完美的地方?答案是肯定的。基于微服務架構,我們需要考慮使用什么微服務框架來架構系統、需要多少臺服務器、如何有效減輕運維負擔等一些列問題。另外,按照《福布斯》雜志的統計,在商業和企業數據中心的典型服務器僅提供 5%~15% 的平均最大處理能力的輸出。這無疑是一種資源的巨大浪費。
有沒有辦法解決上面的不足?答案也是肯定的,阿里云函數計算就是在這樣的背景下應運而生的。如果把云計算理解成一個執行環境,那么,在這個環境里,函數(即業務邏輯的載體)+ 數據(即跟業務相關的輸入與輸出)就是應用的核心,有了函數、數據、事件這三者,其它任何代碼和框架,無非是整個應用的膠水和UI罷了。那么,最理想的情況就是用最少的時間寫膠水,將更多的時間投入到核心應用的開發中,甚至,徹底實現整個軟件棧的微服務化。函數計算就是這里的膠水。
開發效率
| 采購服務器等基礎設施 | 需要 | 不需要 |
| 管理服務器等基礎設施 | 需要 | 不需要 |
| 開發業務服務模塊 | 需要 | 需要 |
| 部署業務服務模塊 | 需要 | 需要,但是很簡單,提供了很多工具 |
| 通過 nginx 搭建反向代理、https 和負載均衡 | 需要 | 不需要,通過阿里云 API 網關或函數 HTTP 觸發器可以實現 |
| 搭建相關日志服務 | 需要 | 不需要,通過日志開關開啟日志服務 |
| 配置安全訪問規則 | 需要 | 不需要,自帶基礎安全訪問配置,API 網關提供更多的配置 |
| 運維負擔 | 重 | 輕 |
| 開發效率 | 低 | 高,通常幾天就能完成 |
可靠性
| 峰值壓力 | 當峰值壓力突增時,計算資源擴容不及時容易導致服務過載 | 彈性伸縮,面對峰值壓力 |
| 錯誤處理 | 需要自行處理服務器宕機,進程崩潰等問題 | 無需處理服務器等故障,函數計算實現基礎設施的容錯 |
| 項目架構 | 基礎設施管理比較復雜 | 系統架構經過大量項目的驗證和長時間的打磨,相對穩定可靠很多 |
成本
| 采購服務器等基礎設施成本 | 成本高,利用率低 | 無 |
| 代碼開發成本 | 成本高,包含基礎架構代碼和業務代碼 | 成本低,只需關注業務代碼開發 |
| 函數計算成本 | 無 | 成本低,按需付費,每月還有一定免額 |
| 運維成本 | 成本高,難度大 | 成本低,難度很小,甚至可以不需要專門的運維人員 |
| 集成阿里云其他產品成本,如 OSS 和RDS 等 | 成本高 | 成本低,提供對阿里云其他產品無縫集成 |
安全
| 身份認證和訪問控制 | 需自行實現 | 除非您顯式的允許匿名調用函數,函數計算將對每一個 API 調用進行身份驗證。只有獲得您的顯式授權(借助于阿里云訪問控制服務,RAM),您的函數才可以訪問其他云服務資源或者被其他用戶/云服務調用。借助阿里云 API 網關,您也可以使用 OpenID 等機制對函數調用進行身份驗證 |
| 操作追蹤和審計 | 需自行實現 | 需自行實現 |
| 數據安全 | 需自行實現 | 通過使用訪問控制授權和函數計算環境變量等功能,您不必再將訪問憑證等敏感信息保存在代碼中。所有您借助函數計算服務持久化保存的數據,包括代碼、環境變量等等,都被加密存儲。系統在運行代碼之前,將對代碼進行完整性檢測 |
| 運行時安全 | 需自行實現 | 每個函數都在獨立的、隔離的環境中被執行。函數計算提供與阿里云彈性計算(ECS)相同的隔離強度。函數計算會周期性的重置運行時環境,并自動更新操作系統以及運行時依賴軟件的安全補丁 |
| 異常響應 | 需自行實現 | 函數計算允許您設置資源使用的上限,確保您的費用消耗可控。同時,函數計算提供函數調用次數,流控次數,錯誤率等指標。借助云監控,您可以為相關指標設置監控報警,快速響應異常情況 |
總結
函數計算有如下優勢:
- 無需采購和管理服務器等基礎設施
- 專注業務邏輯的開發
- 提供日志查詢、性能監控、報警等功能快速排查故障
- 以事件驅動的方式觸發應用響應用戶請求
- 毫秒級別彈性伸縮,快速實現底層擴容以應對峰值壓力
- 按需付費。只需為實際使用的計算資源付費,適合有明顯波峰波谷的用戶訪問場景
原文鏈接
本文為云棲社區原創內容,未經允許不得轉載。
總結
以上是生活随笔為你收集整理的三分钟学会如何在函数计算中使用 puppeteer的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 让你久等了!《码出高效:Java 开发手
- 下一篇: 【人脸识别终结者】多伦多大学反人脸识别,