Skip to content

调试小试牛刀

通过 "初识 Serverless Devs" 的 hello world 的实践, 小明已经掌握的 python 的函数部署和调用的基本流程, 现在可以进入具体的业务逻辑代码开发了, 因此非常有必要了解本地如何调试函数代码。

在上文中工程目录 start-fc3-python 上,我们可以通过 local 指令来完成本地调试。

⚠️ 注意:该命令对 Docker 有所依赖,所以在使用该命令时,需要先进行 Docker 安装,版本 >= 19.03。

⚠️ 注意:第一次调试,可能会涉及 runtime 镜像的拉取,请耐心等待。

第一次本地调试

$ s local invoke -e "{\"key\": \"val\"}"  Steps for [local] of [hello-world-app]
====================
[2024-02-27 15:16:27][INFO][hello_world] Local baseDir is: /Users/xl/tmp/x/start-fc3-python

3.0.0: Pulling from aliyunfc/runtime-python3.9
...

FunctionCompute python3 runtime inited.
FC Invoke Start RequestId: 3f75a769-fa21-42dc-a56a-17e209b6a7c7
2024-02-27T07:16:30.548Z 3f75a769-fa21-42dc-a56a-17e209b6a7c7 [INFO] b'{"key":"val"}\n'
FC Invoke End RequestId: 3f75a769-fa21-42dc-a56a-17e209b6a7c7
{"key":"val"}


RequestId: 3f75a769-fa21-42dc-a56a-17e209b6a7c7      Billed Duration: 64 ms      Memory Size: 128 MB     Max Memory Used: 14 MB


✔ [hello_world] completed (3.49s)

🚀  Result for [local] of [hello-world-app]
====================

A complete log of this run can be found in: /Users/xl/.s/logs/0227151626

从上面打印的日志中, 可以看出 logger.info(event) 执行打印了 event, 并且将 event 作为了函数的返回值

# -*- coding: utf-8 -*-

import logging


def handler(event, context):
    logger = logging.getLogger()
    logger.info(event)
    return event

模拟触发器事件 event

小明有一个业务函数,是需要配置 OSS 触发器的, 因此他调试函数的时候, 需要模拟 OSS 触发器事件格式, 因此他在本地创建了一个 oss.json 的文件, 文件内容参考oss-event-template

s invoke -f oss.json

s.yaml 配置 OSS 触发器请参考fc3 完整示例

Tips:

在进行调用时,如果需要指定相对应的事件,例如 oss 的事件,cdn 的事件......这些事件的格式,可以参考 event-template

此时,可以利用该路径的模板(可以额外进行修改)触发函数,例如:s invoke --event-file event-template/oss.json

更多

有关更多的本地调试技巧请参考 local指令