本文介绍通过fun local start的相关命令运行不同函数的命令格式和操作步骤。

重要 本文介绍的内容后期将不再维护。如果您的函数计算资源是使用Funcraft管理的,建议您将资源迁移至Serverless Devs管理。

关于如何将函数计算的相关资源从Funcraft迁移到Serverless Devs进行管理的详细操作,请参见从Funcraft迁移到Serverless Devs

关于Serverless Devs的详细信息,请参见什么是Serverless Devs

关于如何使用Serverless Devs调试函数,请参见使用s local的相关命令调试函数端云联调简介

由此带来的不便,敬请谅解!

命令格式

运行本地HTTP函数的命令格式如下,option可以省略。
fun local start [option]

通过浏览器运行HTTP触发器函数

执行以下命令后,Funcraft会启动一个HTTP Server提供HTTP服务。然后扫描template.yml文件中所有配置了HTTP触发器的函数,将函数注册到HTTP Server中。
fun local start
预期输出。http_trigger
说明 您可以在预期输出中查看所有HTTP触发器的信息。通过浏览器打开任意一个URL,即可成功触发HTTP触发器函数的运行。
以下是一个访问Node.js HTTP触发器的操作流程,与其他语言类型的运行环境一致。fun_local_start_eg

成功运行HTTP触发器函数后,您可以执行相关操作调试函数。具体操作,请参见通过VSCode调试本地HTTP触发器函数

通过API运行事件函数

通过API成功启动运行函数后,即可通过Python SDK调试函数了。关于如何通过API启动运行函数的相关操作,请参见通过API运行事件函数

执行fun local start命令后,Funcraft会启动一个HTTP Server提供HTTP服务,然后扫描template.yml文件中所有的函数,并将所有没有配置HTTP触发器的函数注册到HTTP Server中。注册成功后,您就可以通过InvokeFunction或SDK进行调用。详细信息,请参见InvokeFunctionSDK列表
说明 为保证API的安全调用,在调用API时阿里云会对每个API请求通过签名(Signature)进行身份验证。详细信息,请参见签名认证。如果您不想手动计算签名认证,可以通过SDK进行认证,SDK中已经实现了签名算法并对API进行签名。具体信息,请参见SDK列表
执行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!

通过API调试事件函数

下文以Python为例,介绍如何通过Python SDK调试事件函数。

  1. 按需选择以下操作,安装依赖。
    • 执行以下命令,安装依赖:
      pip install aliyun-fc2
    • 登录GitHub下载依赖。详细信息,请参见Python
  2. 创建一个.py文件,然后编写代码,本示例以文件invoke.py为例。
    import fc2
    import os
    
    # 阿里云账号AccessKey拥有所有API的访问权限,建议您使用RAM用户进行API访问或日常运维。
    # 建议不要把AccessKey ID和AccessKey Secret保存到工程代码里,否则可能导致AccessKey泄露,威胁您账号下所有资源的安全。
    # 本示例以将AccessKeyID和AccessKeySecret保存在环境变量中实现身份验证为例。
    # 运行本示例前请先在本地环境中设置环境变量ALIBABA_CLOUD_ACCESS_KEY_ID和ALIBABA_CLOUD_ACCESS_KEY_SECRET。
    # 在FC Runtime运行环境下,配置执行权限后,ALIBABA_CLOUD_ACCESS_KEY_ID和ALIBABA_CLOUD_ACCESS_KEY_SECRET环境变量会自动被设置。
    accessKeyID=os.getenv('ALIBABA_CLOUD_ACCESS_KEY_ID')
    accessKeySecret=os.getenv('ALIBABA_CLOUD_ACCESS_KEY_SECRET')
    
    client = fc2.Client(endpoint='http://localhost:8000', accessKeyID, accessKeySecret)
    
    resp = client.invoke_function('localdemo', 'php72')
    
    print resp.headers
    print resp.data
    说明 SDK代码中配置的阿里云账号(主账号)、AccessKey Secret需和Funcraft配置一致,否则在调用时,会导致签名认证的失败。
  3. 执行以下命令执行代码文件并调试函数。
    python invoke.py
    输出示例:apivscodefc
说明 在本地运行、调试HTTP触发器函数时,支持热加载。当通过fun local start启动本地服务后,即使修改了代码,也无需重启本地服务,可以直接刷新网页或者重新触发函数即可运行调试变更后的函数。