在 《函数计算本地运行与调试 - Fun Local 基本用法》 中,我们介绍了利用 Fun Local 本地运行、调试函数的方法。但如果仅仅这样简单的介绍,并不能展现 Fun Local 对函数计算开发的巨大效率的提升。
这一次,我们拿一个简单的场景来举例子——开发一个简单的爬虫函数(代码参考函数计算控制台模板),介绍如何以正确姿势,从零开始,开发一个自动伸缩、按调用次数收费的 serverless 爬虫应用。
开发步骤
我们将这个完整的应用拆分成多步,并且在每一步完成后,我们都会进行相应的运行验证。
1. 创建 Fun 项目
首先,我们创建一个名为 image-crawler 的目录作为项目的根。然后在该目录下创建一个名为 template.yml 的文件,内容为:
ROSTemplateFormatVersion: '2015-09-01'
Transform: 'Aliyun::Serverless-2018-04-03'
Resources:
localdemo:
Type: 'Aliyun::Serverless::Service'
Properties:
Description: 'local invoke demo'
image-crawler:
Type: 'Aliyun::Serverless::Function'
Properties:
Handler: index.handler
CodeUri: code/
Description: 'Hello world with python2.7!'
Runtime: python2.7
如果不了解 Fun 定义的 Serverless Application Model,可以参考 这里。
操作完成后,我们的项目目录结构如下:
.
└── template.yml
2. 编写 helloworld 函数代码
在根目录下创建一个名为 code 的目录,并在该目录下创建一个名为 index.py 的文件,内容为一个简单的 helloworld 函数:
def handler(event, context):
return 'hello world!'
在项目根目录下执行:
fun local invoke image-crawler
函数运行成功:
操作完成后,我们的项目目录结构如下:
.
├── code
│ └── index.py
└── template.yml
3. 事件触发函数运行
我们简单修改第 2 步的代码,将 event 打印到 log 中。
import logging
logger = logging.getLogger()
def handler(event, context):
logger.info("event: " + event)
return 'hello world!'
通过触发事件的方式运行函数,得到如