【HarmonyOS Next之旅】DevEco Studio使用指南(二十七) -> 开发云函数

目录

[1 -> 开发流程](#1 -> 开发流程)

[2 -> 创建并配置函数](#2 -> 创建并配置函数)

[2.1 -> 创建函数](#2.1 -> 创建函数)

[2.2 -> 配置函数](#2.2 -> 配置函数)

[3 -> 开发函数](#3 -> 开发函数)

[4 -> 调试函数](#4 -> 调试函数)

[4.1 -> 前提条件](#4.1 -> 前提条件)

[4.2 -> 通过本地调用方式调试函数](#4.2 -> 通过本地调用方式调试函数)

[4.3 -> 通过远程调用方式调试函数](#4.3 -> 通过远程调用方式调试函数)

[5 -> 部署函数](#5 -> 部署函数)


1 -> 开发流程

云函数是一项Serverless计算服务,可以根据函数的实际流量对函数进行弹性收缩。您只需聚焦业务逻辑,开发与上传业务模块相关的函数,云函数即可为您自动完成资源分配、代码部署、负载均衡等工作,既提高了开发和上线函数的速度,也保证了函数的高可用性。

使用DevEco Studio在端云一体。

云侧工程下开发云函数,总体流程如下。

  1. 创建并配置函数:可直接在DevEco Studio创建函数、为函数配置入口以及调用的触发器等。
  2. 开发函数:函数创建并配置完成后,便可以开始编写函数业务代码了。
  3. 调试函数:可以对函数进行调试,以测试函数代码运行是否正常。
  4. 部署函数:完成函数代码开发与调试后,可将函数部署到AGC云端,支持单个部署和批量部署。

说明

一般建议先将函数调试无误后再部署至云端,但某些业务场景下需要先部署函数才能进行调试。请根据实际业务需要操作。

2 -> 创建并配置函数

可直接在DevEco Studio创建函数、为函数配置调用的触发器等。

2.1 -> 创建函数

1. 右击"cloudfunctions"目录,选择"New > Cloud Function"。

2. 在"Select the Cloud Function Type"栏选择"Cloud Function",输入云函数名称(如"my-cloud-function"),点击"OK"。

函数名称长度2-63个字符,仅支持小写英文字母、数字、中划线(-),首字符必须为小写字母,结尾不能为中划线(-)。

"cloudfunctions"目录下生成新建的"my-cloud-function"函数目录,目录下主要包含如下文件:

  • 函数配置文件"function-config.json"
  • 函数入口文件"myCloudFunction.ts"
  • 依赖配置文件"package.json"

2.2 -> 配置函数

函数创建完毕后,您可在配置文件"function-config.json"的"triggers"下配置触发器,通过触发器暴露的触发条件来实现函数调用。

说明

"functionType"表示函数类型,"0"表示云函数,"1"表示云对象。"functionType"的值为创建时自动生成,不可手动修改,否则将导致云函数部署失败。

云函数当前仅支持HTTP触发器, "function-config.json"文件中已为您自动完成HTTP触发器配置。配置了HTTP触发器的函数被部署到云端后,您的应用即可通过Cloud Foundation Kit调用函数。

注意

如需在函数部署完成后更新触发器,先删除之前的触发器配置,再添加新的触发器配置,否则更新将不生效。

复制代码
{
  "type": "http",
  "properties": {
    "enableUrlDecode": true,
    "authFlag": "true",
    "authAlgor": "HDA-SYSTEM",
    "authType": "apigw-client"
  }
}
  • type:触发器类型,配置为"http"。
  • properties:触发器属性,属性参数如下表所示。

|---------------------|---------------------------------------------------------------------------------------------------------------------------------------------|
| 参数 | 说明 |
| enableUrlDecode | 通过HTTP触发器触发函数时,对于contentType为"application/x-www-form-urlencoded"的触发请求,是否使用URLDecoder对请求body进行解码再转发到函数中。 * true:启用。 * false:不启用。 |
| authFlag | 是否鉴权,默认为true。 |
| authAlgor | 鉴权算法,默认为HDA-SYSTEM。 |
| authType | HTTP触发器的认证类型。 * apigw-client:端侧网关认证,适用于来自APP客户端侧(即本地应用或者项目)的函数调用。 * cloudgw-client:云侧网关认证,适用于来自APP服务器侧(即云函数)的函数调用。 |

3 -> 开发函数

函数创建并配置完成后,您便可以开始编写函数业务代码了。

1. 打开函数入口文件,编写函数代码。

此处我们以函数"my-cloud-function"为例,构造一个用于返回时间戳的函数。

复制代码
/**
 * Describe the basic method of Cloud Functions
 */


let myHandler = function(event, context, callback, logger){
    // example of display environment variables
    let env1 = context.env.env1;


    // example of display logs
    logger.info("Test info log");
    logger.warn("Test warn log");
    logger.debug("Test debug log");
    logger.error("Test error log");


    logger.info("--------Start-------");
    try {
        let startTime = new Date().getTime();
        let endTime = startTime;
        let interval = 0;
        startTime = process.uptime() * 1000;


        // print input parameters and environment variables
        logger.info("request: " + JSON.stringify(event.request));
        logger.info("env1: " + env1);


        endTime = process.uptime() * 1000;
        interval = endTime - startTime;
        logger.info("intervalTime: " + interval);
        logger.info("--------Finished-------");


        let res = new context.HTTPResponse(context.env, {
            "res-type": "context.env",
            "faas-content-type": "json",
        }, "application/json", "200");
        res.body = {"intervalTime": interval};
        callback(res);
    } catch (error) {
        logger.error("--------Error-------");
        logger.error("error: " + error);
        callback(error);
    }
};


module.exports.myHandler = myHandler;

注意

云函数与云函数之间是相互独立的,部署至云侧时,只会部署所选云函数目录下的文件,不可在一个云函数中通过import '../anotherDirectory/xxx'的方式引入依赖。如果有多个云函数公共的配置,建议存储在云数据库中,通过云数据库Server API类查询出公共配置;也可以将多个云函数整合成一个云对象,将公共配置变成云对象的私有配置。

2. (可选)如函数存在依赖关系,可在"package.json"文件的"dependencies"下添加需要的依赖,然后点击右上角"Sync Now"。

说明

右击"package.json"文件,选择"Run 'npm install'"菜单,也可以实现依赖包安装。

所有安装的依赖包都会存储在当前函数的"node_modules"目录下。

4 -> 调试函数

函数开发完成后,您可以对函数进行调试,以验证函数代码运行是否正常。

目前DevEco Studio函数调试支持本地调用和远程调用,请根据实际场景选择使用:

  • 通过本地调用方式调试函数:在DevEco Studio调试本地开发好的函数。支持单个调试和批量调试,并支持Run和Debug两种模式,调试功能丰富,常在函数开发过程或问题定位过程中使用。
  • 通过远程调用方式调试函数:先将函数部署至AGC云端,然后直接在DevEco Studio调用云端函数。此方式主要用于测试函数在云端的运行情况、或补充测试因各种因素限制未能在本地调用方式中发现的问题。

4.1 -> 前提条件

  • 请确保已登录。
  • 如果您的工程有代码逻辑涉及云函数调用云数据库,需在调试前先将整个云工程部署到AGC云端,否则云端将没有相关数据及环境变量。

4.2 -> 通过本地调用方式调试函数

可在DevEco Studio调试本地开发好的函数,支持单个调试和批量调试,并支持Run和Debug两种模式。

  • 单个调试和批量调试流程相同,区别仅在于:单个调试是一次只为一个函数启动本地调试,之后只能调用该函数;批量调试是一次为"cloudfunctions"目录下所有函数启动本地调试、然后逐个调用各个函数。
  • Run模式和Debug模式的区别在于:Debug模式支持使用断点来追踪函数的运行情况,Run模式则不支持。

下文以Debug模式下调试单个函数"my-cloud-function"为例,介绍如何在DevEco Studio调试本地函数。

1. 右击"my-cloud-function"函数目录,选择"Debug 'my-cloud-function'"。

说明

  • 直接从当前路径下Debug,使用的是默认的Debug配置,您也可​​​​​​​自定义Debug配置。自定义Debug配置后再从此路径下Debug,将优先采用自定义Debug配置。
  • 如需批量调试多个函数,右击"cloudfunctions"目录,选择"Debug Cloud Functions",即可启动该目录下所有函数。如"cloudfunctions"目录下同时存在云函数和云对象,将会启动所有的云函数和云对象。

2. 在下方通知栏"cloudfunctions"窗口,查看调试日志。如果出现"Cloud Functions loaded successfully",表示函数成功加载到本地运行的HTTP Server中,并生成对应的Function URI。

3. 如需设置断点调试,在函数代码中选定要设置断点的有效代码行,在行号(如下图行15)后单击鼠标左键设置断点(如下图的红点)。

设置断点后,调试能够在断点处中断,并高亮显示该行。

4. 在菜单栏选择"View > Tool Windows > Cloud Functions Requestor",使用事件模拟器(Cloud Functions Requestor)触发函数调用。

5. 在弹出的"Cloud Functions Requestor"面板,配置触发事件参数。

  • Cloud Function:选择需要触发的云函数,此处以函数"my-cloud-function"为例。
  • Environment:选择函数调用环境。此处选择"Local",表示本地调用。
  • Event:输入事件参数,内容为JSON格式请求体数据。

6. (可选)点击"Save",可保存当前触发事件。

点击右上角

可展开保存的触发事件,后续可直接点击"Load"加载事件。对于不需要保存的触发事件,也可以点击"Delete"删除。

7. 点击"Trigger", 将会触发执行用户函数代码。执行结果将展示在"Result"框内,"cloudfunctions"窗口同时打印调试日志。

说明

"Result"框右侧的"Logs"面板仅供​​​​​​​通过远程调用方式调试函数时使用。

8. (可选)如​​​​​​​配置了环境变量,可将变量信息传入到函数执行环境中,用于函数运行时读取。

复制代码
logger.info(context.env.name);//name为环境变量名称

如下图,函数"my-cloud-function"配置了环境变量"env1",可成功访问环境变量"env1"的值"value1"。

9. 点击菜单栏

,可停止调试。

10. 根据调试结果修改函数代码后,点击

重新以Debug模式启动调试,直至没有问题。

11. 参考步骤5~10,完成其他函数的调试。

4.3 -> 通过远程调用方式调试函数

还可以将函数部署至AGC云端,然后在DevEco Studio调用云端函数,以测试函数在云端的运行情况、或补充测试因各种因素限制未能在本地调试中发现的问题。

1. 参考部署函数将需要调试的函数部署至AGC云端。

2. (可选)如函数代码涉及访问环境变量,需在AGC Portal函数列表中点击函数名称,为函数配置环境变量的值,供函数在运行时读取和使用。

3. 在菜单栏选择"View > Tool Windows > Cloud Functions Requestor",使用事件模拟器(Cloud Functions Requestor)触发函数调用。

4. 在弹出的"Cloud Functions Requestor"面板,配置触发事件参数。

  • Cloud Function:选择需要触发的云函数,此处依然以函数"my-cloud-function"为例。
  • Environment:选择函数调用环境。此处选择"Remote",表示远程调用。
  • Event:输入事件参数,内容为JSON格式请求体数据。

5. 点击"Trigger", 将会触发执行用户函数代码,执行结果将展示在"Result"框内。

6. 点击"Logs"页签,可查看打印的日志定位问题。修改函数代码、重新部署函数后再次执行远程调用,直至没有问题。

7. 参考步骤1~5,完成其他函数的调试。

5 -> 部署函数

完成函数代码开发后,您可将函数部署到AGC云端,支持单个部署和批量部署。

单个部署仅部署选中的函数,批量部署则会将整个"cloudfunctions"目录下的所有函数同时部署到AGC云端。

下文以部署单个函数"my-cloud-function"为例,介绍如何部署函数。

1. 右击"my-cloud-function"函数目录,选择"Deploy 'my-cloud-function'"。

说明

如需批量部署多个函数,右击"cloudfunctions"目录,选择"Deploy Cloud Functions"即可部署该目录下所有函数。如"cloudfunctions"目录下同时存在云函数和云对象,云函数和云对象将会被一起部署到AGC云端。

2. 可在底部状态栏右侧查看函数打包与部署进度。

耐心等待,直至出现"Deploy successfully"消息,表示当前函数已成功部署。

3. 在菜单栏选择"Tools > CloudDev"。

4. 在打开的CloudDev面板中,点击"Serverless > Cloud Functions"下的"Go to console",进入当前项目的云函数服务页面。

5. 查看到"my-cloud-function"函数已成功部署至AGC云端,函数名称与本地工程的函数目录名相同。

部署成功后,便可以从端侧调用云函数了。


感谢各位大佬支持!!!

互三啦!!!

相关推荐
lqj_本人1 小时前
鸿蒙OS&UniApp 实现自定义的侧边栏菜单组件#三方框架 #Uniapp
华为·uni-app·harmonyos
Vence08152 小时前
Flutter3.22适配运行鸿蒙系统问题记录
flutter·华为·harmonyos·鸿蒙
郑知鱼6 小时前
【拥抱鸿蒙】Flutter+Cursor轻松打造HarmonyOS应用(二)
flutter·华为·harmonyos·鸿蒙·cursor·移动端·鸿蒙next·ohos
xmweisi027 小时前
【华为战报】4月、5月 HCIP考试战报!
华为
二蛋和他的大花9 小时前
HarmonyOS运动开发:如何绘制运动速度轨迹
harmonyos
lqj_本人13 小时前
鸿蒙OS&UniApp 开发支持图片和视频的多媒体展示组件#三方框架 #Uniapp
uni-app·音视频·harmonyos
lqj_本人17 小时前
鸿蒙OS&UniApp 实现的数据可视化图表组件#三方框架 #Uniapp
信息可视化·uni-app·harmonyos
zero_orez61 天前
折半搜索【2024华为智联杯 K.时光】
算法·华为·深度优先
Junzeng_Kai1 天前
网络:华为S5720-52X-SI交换机重置console密码
网络·华为
lqj_本人1 天前
鸿蒙OS&UniApp 制作美观的文章列表展示组件#三方框架 #Uniapp
华为·uni-app·harmonyos