阿里云的函数计算

本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

转载自夜明的孤行灯

本文链接地址: 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/

发表评论