前言

首先介绍下在本文出现的几个比较重要的概念:

函数计算(Function Compute): 函数计算是一个事件驱动的服务,通过函数计算,用户无需管理服务器等运行情况,只需编写代码并上传。函数计算准备计算资源,并以弹性伸缩的方式运行用户代码,而用户只需根据实际代码运行所消耗的资源进行付费。函数计算更多信息参考。
Fun: Fun 是一个用于支持 Serverless 应用部署的工具,能帮助您便捷地管理函数计算、API 网关、日志服务等资源。它通过一个资源配置文件(template.yml),协助您进行开发、构建、部署操作。Fun 的更多文档参考。
fun install: fun install 是 fun 工具的一个子命令,用于安装 pip 和 apt 依赖,提供了命令行接口和 fun.yml 描述文件两种形式。

备注: 本文介绍的技巧需要 Fun 版本大于等于 2.9.3。

依赖工具

本项目是在 MacOS 下开发的,涉及到的工具是平台无关的,对于 Linux 和 Windows 桌面系统应该也同样适用。在开始本例之前请确保如下工具已经正确的安装,更新到最新版本,并进行正确的配置。

  • Docker
  • Fun
  • Fcli

Fun 和 Fcli 工具依赖于 docker 来模拟本地环境。

对于 MacOS 用户可以使用 homebrew 进行安装:

brew cask install docker
brew tap vangie/formula
brew install fun
brew install fcli

Windows 和 Linux 用户安装请参考:

  1. https://github.com/aliyun/fun/blob/master/docs/usage/installation.md
  2. https://github.com/aliyun/fcli/releases

安装好后,记得先执行 fun config 初始化一下配置。

初始化

使用 fun init 命令可以快捷的将本模板项目初始化到本地。

$ fun init vangie/puppeteer-example
? Please input oss bucket to upload chrome shell? chrome-headless
? Please select a region? cn-hangzhou
? Please input oss accessKeyId for upload? xxxxxxxxxxxKbBS
? Please input oss accessKeySecret for upload? xxxxxxxxxxxx5ZgM

上面会提示

  1. 输入一个 OSS 的 BUCKET,注意 OSS Bucket 是全球唯一的,上面的 chrome-headless 已经被占用了,请换一个新的名称或者一个已经创建好的(已经创建好的,请确保 region 一致)。
  2. 然后选择一个 OSS 的 Region,请保持和部署函数计算 Region 一致
  3. 输入一个具备 OSS 写权限的秘钥。

安装依赖

$ fun install
skip pulling image aliyunfc/runtime-nodejs8:build-1.2.0...
Task => [UNNAMED]=> apt-get update (if need)=> apt-get install -y -d -o=dir::cache=/code/.fun/tmp libnss3=> bash -c 'for f in $(ls /code/.fun/tmp/archives/*.deb); do dpkg -x $f /code/.fun/root; done;'=> bash -c 'rm -rf /code/.fun/tmp/archives'
Task => [UNNAMED]=> bash -c  'curl -L https://github.com/muxiangqiu/puppeteer-fc-starter-kit/raw/master/chrome/headless_shell.tar.gz --output headless_shell.tar.gz'
...

fun install 会执行 fun.yml 文件里的任务,这些任务会:

  1. 安装 puppeteer 依赖的 .so 文件;
  2. 将 puppeteer 依赖的 chrome headless 二进制文件上传到 OSS;
  3. 安装 npm 依赖。

部署

$ fun deploy
using region: cn-shanghai
using accountId: ***********4733
using accessKeyId: ***********KbBS
using timeout: 60Waiting for service puppeteer to be deployed...Waiting for function html2png to be deployed...Waiting for packaging function html2png code...package function html2png code donefunction html2png deploy success
service puppeteer deploy success

执行

$ fcli function invoke -s puppeteer -f html2png
The screenshot has been uploaded to http://chrome-headless.oss-cn-shanghai.aliyuncs.com/screenshot.png

打开上面的返回链接,看到截取出来的是全屏滚动的长图,考虑的篇幅下面只截取了部分:

如果想换一个网址,可以使用如下命令格式

fcli function invoke -s puppeteer -f html2png --event-str 'http://www.alibaba.com'

调试

如果需要在本地调试代码,可以使用如下命令

fun local invoke html2png <<<'http://www.alibaba.com'

原文链接
本文为云栖社区原创内容,未经允许不得转载。

开发函数计算的正确姿势——网页截图服务相关推荐

  1. 开发函数计算的正确姿势——轻松解决大依赖部署

    前言 首先介绍下在本文出现的几个比较重要的概念: 函数计算(Function Compute): 函数计算是一个事件驱动的服务,通过函数计算,用户无需管理服务器等运行情况,只需编写代码并上传.函数计算 ...

  2. 开发函数计算的正确姿势——支持 ES6 语法和 webpack 压缩

    为什么80%的码农都做不了架构师?>>>    首先介绍下在本文出现的几个比较重要的概念: 函数计算(Function Compute): 函数计算是一个事件驱动的服务,通过函数计算 ...

  3. 开发函数计算的正确姿势 —— 使用 Fun Local 本地运行与调试

    前言 首先介绍下在本文出现的几个比较重要的概念: 函数计算(Function Compute): 函数计算是一个事件驱动的服务,通过函数计算,用户无需管理服务器等运行情况,只需编写代码并上传.函数计算 ...

  4. 开发函数计算的正确姿势 —— 移植 next.js 服务端渲染框架

    为什么80%的码农都做不了架构师?>>>    首先介绍下在本文出现的几个比较重要的概念: 函数计算(Function Compute): 函数计算是一个事件驱动的服务,通过函数计算 ...

  5. aptitude安装出现依赖_开发函数计算的正确姿势——依赖安装方法一览

    1. 前言 首先介绍下在本文出现的几个比较重要的概念: 函数计算(Function Compute): 函数计算是一个事件驱动的服务,通过函数计算,用户无需管理服务器等运行情况,只需编写代码并上传.函 ...

  6. 开发函数计算的正确姿势 —— 爬虫

    2019独角兽企业重金招聘Python工程师标准>>> 在 <函数计算本地运行与调试 - Fun Local 基本用法> 中,我们介绍了利用 Fun Local 本地运行 ...

  7. 开发函数计算的正确姿势——运行 Selenium Java

    前言 首先介绍下在本文出现的几个比较重要的概念: 函数计算(Function Compute): 函数计算是一个事件驱动的服务,通过函数计算,用户无需管理服务器等运行情况,只需编写代码并上传.函数计算 ...

  8. 开发函数计算的正确姿势——使用交互模式安装依赖

    前言 首先介绍下在本文出现的几个比较重要的概念: 函数计算(Function Compute): 函数计算是一个事件驱动的服务,通过函数计算,用户无需管理服务器等运行情况,只需编写代码并上传.函数计算 ...

  9. 开发函数计算的正确姿势——借助 Ghostscript 将 PDF 转换成 JPG

    前言 首先介绍下在本文出现的几个比较重要的概念: 函数计算(Function Compute):函数计算是一个事件驱动的服务,通过函数计算,用户无需管理服务器等运行情况,只需编写代码并上传.函数计算准 ...

最新文章

  1. erlang 二进制
  2. php 之 数据访问 增删改查
  3. Android 新手常见的10个误区(下)
  4. Caffe官方教程翻译(5):Classification: Instant Recognition with Caffe
  5. 全球及中国抓紧器行业十四五发展态势及前景规划建议报告2021-2027年版
  6. mssql 为什么连接是sleeping 而不释放_什么是数据仓库,以及我为什么需要它?
  7. [UOJ #167]【UR #11】元旦老人与汉诺塔
  8. c语言欺凌,以下哪种行为属于“校园欺凌”?A取绰号B暴力殴打同学C恶意辱骂D企图教唆集体...
  9. [nvidia] CUDA_VISIBLE_DEVICES
  10. java的语法基础_JAVA语法基础1(入门手册)
  11. UVA1292-----Strategic game-----树形DP解决树上的最小点覆盖问题
  12. [Hadoop]-Yarn-调度器篇
  13. 卡方检验四格表怎么做_SPSS案例实践:2*2四格表卡方检验
  14. uniapp实现复制功能
  15. 数据库一对一、一对多、多对多关系
  16. phpstorm注册码 激活 授权码 License server
  17. 转1:Python字符编码详解
  18. 流量充值解决方案(附代码)
  19. Word图表的中英题注及引用
  20. javaio流_一文带你看懂JAVA IO流,史上最全面的IO教学啦

热门文章

  1. java 浏览器 爬虫_java 网络编程-爬虫+模拟浏览器
  2. 计算机二级java上机_计算机二级JAVA上机试题及答案
  3. 【文末有福利】炒鸡蛋竟然与无人驾驶有关?
  4. 为什么鞋带总是松开?罪魁祸首其实是…
  5. 一朵云重50万公斤,为什么掉不下来?
  6. AAAI 2019 四个杰出论文奖论文揭晓
  7. c语言程序设计臧,清华大学出版社-图书详情-《C程序设计基础(第2版)》
  8. 数据结构--赫夫曼树及其应用
  9. hanlp中文分词、提取摘要关键字、语句分析、智能推荐
  10. const与define之间的区别?