开发函数计算的正确姿势 —— Api 本地运行调试-阿里云开发者社区

开发者社区> 倚贤> 正文

开发函数计算的正确姿势 —— Api 本地运行调试

简介: 前言 首先介绍下在本文出现的几个比较重要的概念: __函数计算(Function Compute)__: 函数计算是一个事件驱动的服务,通过函数计算,用户无需管理服务器等运行情况,只需编写代码并上传。
+关注继续查看

前言

首先介绍下在本文出现的几个比较重要的概念:

__函数计算(Function Compute)__: 函数计算是一个事件驱动的服务,通过函数计算,用户无需管理服务器等运行情况,只需编写代码并上传。函数计算准备计算资源,并以弹性伸缩的方式运行用户代码,而用户只需根据实际代码运行所消耗的资源进行付费。函数计算更多信息 参考

__Fun__: Fun 是一个用于支持 Serverless 应用部署的工具,能帮助您便捷地管理函数计算、API 网关、日志服务等资源。它通过一个资源配置文件(template.yml),协助您进行开发、构建、部署操作。Fun 的更多文档 参考

__Fun Local__: Fun Local 作为 Fun 的一个子命令存在,可以直接通过 fun local 命令使用。Fun Local 工具可以将函数计算中的函数在本地完全模拟运行,并提供单步调试的功能,旨在弥补函数计算相对于传统应用开发体验上的短板,并为用户提供一种解决函数计算问题排查的新途径。

《开发函数计算的正确姿势》系列中,我们介绍过通过事件触发函数的本地运行调试以及 Http Trigger 触发函数的本地运行函数调试。而这一次,我们主要介绍通过 api 的方式本地调用调试运行函数。

备注: 本文介绍的技巧需要 Fun 版本大于等于 2.8.0。

Fun Local Start 命令格式

使用 fun local invoke -h 可以查看 fun local invoke 的帮助信息:

  Usage: fun local start [options]

    Allows you to run the Function Compute application locally for quick development & testing.
    It will start an http server locally to receive requests for http triggers and apis.
    It scans all functions in template.yml. If the resource type is HTTP, it will be registered to this http server, which can be triggered by the browser or some http tools.
    For other types of functions, they will be registered as apis, which can be called by sdk in each language or directly via api.

    Function Compute will look up the code by CodeUri in template.yml.
    For interpreted languages, such as node, python, php, the modified code will take effect immediately, without restarting the http server.
    For compiled languages ​​such as java, we recommend you set CodeUri to the compiled or packaged localtion.
    Once compiled or packaged result changed, the modified code will take effect without restarting the http server.

  Options:

    -d, --debug-port <port>      specify the sandboxed container starting in debug mode, and exposing this port on localhost
    -c, --config <ide/debugger>  output ide debug configuration. Options are vscode
    -h, --help                   output usage information

本地通过 api 触发函数运行

命令格式与 Http Trigger 一致,即:

fun local start [options]

其中 options 是可以省略的。

执行 fun local start 后,fun 会首先启动一个 http server,以提供 http 的服务。然后 fun 会扫描 template.yml 中描述的所有的函数,并将所有没有配置 Http Trigger 的函数,注册到 http server 中。注册成功后,就可以通过 InvokeFunction API 或者 SDK 进行调用了。

直接通过 API 访问需要进行签名,需要实现 签名认证。这里推荐使用 SDK 进行调用。

我们选择 《开发函数计算的正确姿势 —— 使用 Fun Local 本地运行与调试》 中的代码示例,代码托管在 github

首先,我们通过 fun local start 将服务运行起来,执行日志如下:

$ fun local start

api localdemo/php72 was registered
    url: http://localhost:8000/2016-08-15/services/localdemo/functions/php72/invocations/
api localdemo/python27 was registered
    url: http://localhost:8000/2016-08-15/services/localdemo/functions/python27/invocations/
api localdemo/python3 was registered
    url: http://localhost:8000/2016-08-15/services/localdemo/functions/python3/invocations/
api localdemo/nodejs6 was registered
    url: http://localhost:8000/2016-08-15/services/localdemo/functions/nodejs6/invocations/
api localdemo/nodejs8 was registered
    url: http://localhost:8000/2016-08-15/services/localdemo/functions/nodejs8/invocations/
api localdemo/java8 was registered
    url: http://localhost:8000/2016-08-15/services/localdemo/functions/java8/invocations/

function compute app listening on port 8000!

启动服务后,我们就可以通过 python sdk 进行调用了。

首先安装 fc pytohn sdk

pip install aliyun-fc2

然后编写代码:

import fc2

client = fc2.Client(endpoint='http://localhost:8000', accessKeyID='<your access key id>', accessKeySecret='your access key secret')

resp = client.invoke_function('localdemo', 'php72')

print resp.headers
print resp.data

注意: sdk 代码中配置的 accessKeyId、accessKeySecret 要求与 fun 配置一致,否则调用时,会导致签名认证失败。

执行效果如下图所示:

通过 api 单步调试函数

调试方法与 开发函数计算的正确姿势 —— Http Trigger 本地运行调试 中描述的一致,这里不再重复阐述。

本文作者:小默

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
新一代计算引擎亮相云栖大会 ——带你深度了解阿里巴巴计算平台
2018年9月19日至22日,在杭州云栖小镇,170余场前沿技术、产品及行业峰会,如火如荼地进行着。这次云栖大会的主题是“驱动数字中国”。作为阿里巴巴经济体新一代计算引擎的计算平台,深度参与了此次峰会。下面小编带大家一起回顾大会的精彩内容。
1599 0
开发指南—函数—拆分函数—DD
本文将介绍DD函数的使用方式。
18 0
intellij idea搭建ssh开发框架之绑定数据源
原文: intellij idea搭建ssh开发框架之绑定数据源 在intellij idea中绑定数据源并生成hibernate实体对象。
1231 0
机密计算: 一种基于硬件的、服务于应用和数据的可信执行计算形态
注:本文是对[机密计算联盟](https://confidentialcomputing.io/)发布的白皮书[Confidential Computing: Hardware-Based Trusted Execution for Applications and Data v1.2](https://confidentialcomputing.io/wp-content/uploads/sit
364 0
PHPpraffa也有了,一个PHP版本的阿里云函数计算与API网关的开发框架
发布了Python版本的函数计算与API网关的开发框架后,一直觉得对不起PHP,因为公司一直是用PHP的,我这弄了个Python,实在不该,对了,(Python版本说明点这里。 PHPpraffa是什么? PHPpraffa 是praffa的PHP版本。
1141 0
阿里云微服务消息队列MQTT管控API本地测试Quick Start
微消息队列MQTT版是阿里云推出的一款面向移动互联网以及物联网领域的轻量级消息中间件。如果说传统的消息队列中间件一般应用于微服务之间,那么适用于物联网的微消息队列MQTT版则实现了端与云之间的消息传递和真正意义上的万物互联。目前产品提供常用的云端API的功能调用,本文通过接口调用QuerySessionByClientId根据Client ID查询指定设备的连接信息。
80 0
开发函数计算的正确姿势———为 PHP 运行时添加自定义扩展
PHP 语言提供了一种扩展机制(Extension),通过 PHP 扩展可以增强语法、调用 C/C++ 实现的库函数以及优化执行性能。PHP 扩展是与平台相关的动态链接库,在 Linux 和 Mac 平台是 .so 文件,在 Windows 平台是 .dll 文件。由于函数计算的开发通常在 Mac 和 Windows 平台,而运行时是 Linux(Debain)环境,所以为函数计算 PHP 运行时添加扩展会遇到由于动态链接库平台相关而导致要么本地无法调试,要么远端无法运行的问题。本文介绍借助 Funcraft 工具提供的模拟环境进行 PHP 扩展的安装、本地运行调试以及构建发布。
386 0
iOS网络编程之七——本地用户凭证Cookie的应用
iOS网络编程之七——本地用户凭证Cookie的应用
9 0
QT刷屏函数
刷屏函数:          /qt/src/gui/painting/qdrawhelper_p.h的 inline void qt_rectcopy()函数的       ::memcpy(d, s, width * sizeof(T))语句。
780 0
+关注
倚贤
全栈工程师,从事了 12 年以 Java 语⾔为主的软件开发工作,热衷于整合框架与开发工具,关注 交互设计,喜欢写技术博客(http://codelife.me/),Linux拥趸,问题终结者。近期开始学习和关注 Elixir 函数语言,合作翻译了《Elixir 程序设计》。
35
文章
48
问答
来源圈子
更多
专注Serverless、微服务、函数计算等
+ 订阅
文章排行榜
最热
最新
相关电子书
更多
文娱运维技术
立即下载
《SaaS模式云原生数据仓库应用场景实践》
立即下载
《看见新力量:二》电子书
立即下载