本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
转载自夜明的孤行灯
本文链接地址: https://www.huangyunkun.com/2018/04/02/function-compute-from-aliyun/
之前用过AWS的Lambda,当时感觉确实很新鲜,能够省一些费用,但是管理上又有一些复杂。
阿里云现在也提供了类似的功能,叫函数计算,目前价格比较优惠,每个月前100万次调用免费。
触发器包括对象存储,API网关,日志服务,表格存储,定时触发器等。如果是配合API网关使用的话,每G的费用大概0.72-0.8元之间,总的来说是非常适合一些特定适用场景。
这里分享一个我自己的个人应用场景。
用了小米路由器之后经常下载一些电影,但是手机上操作有点复杂,一般是百度搜索一下下载地址,可能是磁力链接,也可能是迅雷下载链接;找到链接以后需要到打开小米路由器的APP,添加下载。我期待的场景是输入关键字,然后返回一个链接,点开直接下载。
这个场景真的适合函数计算,因为要做的事情无非就是发送请求到电影网站,然后抓取一下链接,然后调用小米远程下载的API生成一个链接。(这个链接在微信中打开会自动连接到小米的小程序)
函数计算
阿里云的函数计算提供了java,node和python运行环境。从AWS Lambda的经验中了解到Java启动原因可能不太适合serverless的使用。这次直接用node开工了。
use strict'; module.exports.handler = function(event, context, callback) { callback(null, 'hello world'); };
这个是我们需要实现的函数,event包含了调用器的输入,比如API网关的请求头和传参情况,它的类型是Buffer。一定要注意类型。。。不然要跳进坑里。
context是函数计算自己的一些信息,比如AK和id什么的。
callback接受两个参数,第一个是error,第二个是要返回的值。callback是必须调用的,不然就是超时。
API网关和函数计算
API网关作为触发器输入的event结构如下
{ "path":"api request path", "httpMethod":"request method name", "headers":{all headers,including system headers}, "queryParameters":{query parameters}, "pathParameters":{path parameters}, "body":"string of request payload", "isBase64Encoded":"true|false, indicate if the body is Base64-encode" }
注意输入类型是Buffer,所以要取参数的话要使用
JSON.parse(event.toString()).queryParameters.value
返回结构如下
{ "isBase64Encoded":true|false, "statusCode":httpStatusCode, "headers":{response headers}, "body":"..." }
实际使用中感觉只有body和status是必须的,其他可以在API网关配置中解决掉。
代码例子
因为依赖使用了request和cheerio,所以代码使用打包上传。包括node modules目录就行了。代码没啥特别的,看一下相关界面和配置吧。
代码也可以在线修改
API网关配置的时候需要授权一下
也需要定义必要参数
本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
转载自夜明的孤行灯
本文链接地址: https://www.huangyunkun.com/2018/04/02/function-compute-from-aliyun/