开发函数计算的正确姿势——网页截图服务
前言
首先介绍下在本文出现的几个比较重要的概念:
函数计算(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 用户安装请参考:
- https://github.com/aliyun/fun/blob/master/docs/usage/installation.md
- 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
上面会提示
- 输入一个 OSS 的 BUCKET,注意 OSS Bucket 是全球唯一的,上面的 chrome-headless 已经被占用了,请换一个新的名称或者一个已经创建好的(已经创建好的,请确保 region 一致)。
- 然后选择一个 OSS 的 Region,请保持和部署函数计算 Region 一致
- 输入一个具备 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 文件里的任务,这些任务会:
- 安装 puppeteer 依赖的 .so 文件;
- 将 puppeteer 依赖的 chrome headless 二进制文件上传到 OSS;
- 安装 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'
原文链接
本文为云栖社区原创内容,未经允许不得转载。
开发函数计算的正确姿势——网页截图服务相关推荐
- 开发函数计算的正确姿势——轻松解决大依赖部署
前言 首先介绍下在本文出现的几个比较重要的概念: 函数计算(Function Compute): 函数计算是一个事件驱动的服务,通过函数计算,用户无需管理服务器等运行情况,只需编写代码并上传.函数计算 ...
- 开发函数计算的正确姿势——支持 ES6 语法和 webpack 压缩
为什么80%的码农都做不了架构师?>>> 首先介绍下在本文出现的几个比较重要的概念: 函数计算(Function Compute): 函数计算是一个事件驱动的服务,通过函数计算 ...
- 开发函数计算的正确姿势 —— 使用 Fun Local 本地运行与调试
前言 首先介绍下在本文出现的几个比较重要的概念: 函数计算(Function Compute): 函数计算是一个事件驱动的服务,通过函数计算,用户无需管理服务器等运行情况,只需编写代码并上传.函数计算 ...
- 开发函数计算的正确姿势 —— 移植 next.js 服务端渲染框架
为什么80%的码农都做不了架构师?>>> 首先介绍下在本文出现的几个比较重要的概念: 函数计算(Function Compute): 函数计算是一个事件驱动的服务,通过函数计算 ...
- aptitude安装出现依赖_开发函数计算的正确姿势——依赖安装方法一览
1. 前言 首先介绍下在本文出现的几个比较重要的概念: 函数计算(Function Compute): 函数计算是一个事件驱动的服务,通过函数计算,用户无需管理服务器等运行情况,只需编写代码并上传.函 ...
- 开发函数计算的正确姿势 —— 爬虫
2019独角兽企业重金招聘Python工程师标准>>> 在 <函数计算本地运行与调试 - Fun Local 基本用法> 中,我们介绍了利用 Fun Local 本地运行 ...
- 开发函数计算的正确姿势——运行 Selenium Java
前言 首先介绍下在本文出现的几个比较重要的概念: 函数计算(Function Compute): 函数计算是一个事件驱动的服务,通过函数计算,用户无需管理服务器等运行情况,只需编写代码并上传.函数计算 ...
- 开发函数计算的正确姿势——使用交互模式安装依赖
前言 首先介绍下在本文出现的几个比较重要的概念: 函数计算(Function Compute): 函数计算是一个事件驱动的服务,通过函数计算,用户无需管理服务器等运行情况,只需编写代码并上传.函数计算 ...
- 开发函数计算的正确姿势——借助 Ghostscript 将 PDF 转换成 JPG
前言 首先介绍下在本文出现的几个比较重要的概念: 函数计算(Function Compute):函数计算是一个事件驱动的服务,通过函数计算,用户无需管理服务器等运行情况,只需编写代码并上传.函数计算准 ...
最新文章
- erlang 二进制
- php 之 数据访问 增删改查
- Android 新手常见的10个误区(下)
- Caffe官方教程翻译(5):Classification: Instant Recognition with Caffe
- 全球及中国抓紧器行业十四五发展态势及前景规划建议报告2021-2027年版
- mssql 为什么连接是sleeping 而不释放_什么是数据仓库,以及我为什么需要它?
- [UOJ #167]【UR #11】元旦老人与汉诺塔
- c语言欺凌,以下哪种行为属于“校园欺凌”?A取绰号B暴力殴打同学C恶意辱骂D企图教唆集体...
- [nvidia] CUDA_VISIBLE_DEVICES
- java的语法基础_JAVA语法基础1(入门手册)
- UVA1292-----Strategic game-----树形DP解决树上的最小点覆盖问题
- [Hadoop]-Yarn-调度器篇
- 卡方检验四格表怎么做_SPSS案例实践:2*2四格表卡方检验
- uniapp实现复制功能
- 数据库一对一、一对多、多对多关系
- phpstorm注册码 激活 授权码 License server
- 转1:Python字符编码详解
- 流量充值解决方案(附代码)
- Word图表的中英题注及引用
- javaio流_一文带你看懂JAVA IO流,史上最全面的IO教学啦