当前位置: 首页 > article >正文

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

目录

1 -> 开发流程

2 -> 创建并配置函数

2.1 -> 创建函数

2.2 -> 配置函数

3 -> 开发函数

4 -> 调试函数

4.1 -> 前提条件

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

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

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 variableslet env1 = context.env.env1;// example of display logslogger.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 variableslogger.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云端,函数名称与本地工程的函数目录名相同。

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


感谢各位大佬支持!!!

互三啦!!!

相关文章:

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

目录 1 -> 开发流程 2 -> 创建并配置函数 2.1 -> 创建函数 2.2 -> 配置函数 3 -> 开发函数 4 -> 调试函数 4.1 -> 前提条件 4.2 -> 通过本地调用方式调试函数 4.3 -> 通过远程调用方式调试函数 5 -> 部署函数 1 -> 开发流程 云函数…...

ansible中的inventory.ini 文件详解

1. 主机定义 主机是 Ansible 管理的最小单元,可以是 IP 或域名,支持直接定义或附加参数。 基础语法 # 直接定义主机(IP 或域名) 192.168.1.10 example.com# 定义主机并指定连接参数(如端口、用户等) web…...

基于AOD-Net与GAN的深度学习去雾算法开发

基于AOD-Net与GAN的深度学习去雾算法开发 1. 引言 1.1 图像去雾研究意义 大气散射现象导致的图像质量退化对计算机视觉应用产生严重影响… 2. 理论基础 2.1 大气散射物理模型 经典模型描述为: I ( x ) = J ( x ) t ( x...

Rust 学习笔记:闭包

Rust 学习笔记:闭包 Rust 学习笔记:闭包用闭包捕获环境闭包类型推断和注释捕获引用或移动所有权将捕获的值移出闭包和 Fn Traits Rust 学习笔记:闭包 Rust 的闭包是匿名函数,可以保存在变量中,也可以作为参数传递给其…...

c# 获取电脑 分辨率 及 DPI 设置

using System; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Runtime.InteropServices;/// <summary> /// 这个可以 /// </summary> class Program {static void Main(){//设置DPI感知try{SetProcessDpiAwareness(…...

基于频分复用导频的MMSE信道估计方法设计与仿真

基于频分复用导频的MMSE信道估计方法设计与仿真 摘要 本文详细研究了基于频分复用(FDM)导频的最小均方误差(MMSE)信道估计方法。首先介绍了无线通信系统中信道估计的基本原理和重要性,然后深入分析了频分复用导频结构的设计和MMSE估计算法的理论基础。我们使用Python实现了完…...

低代码开发模式下的应用交付效率优化:拖拽式交互机制研究

低代码开发平台凭借其可视化操作、快速构建、灵活扩展等核心特性&#xff0c;正在成为推动企业数字化转型的重要工具。 拖拽式开发&#xff0c;降低技术门槛 &#xff1a;图形化界面与模块化组件&#xff0c;用户无需编写复杂代码&#xff0c;只需通过简单的拖拽即可完成应用搭…...

STP配置

由于我们演示的是STP 但是华为交换机默认的都是MSTP所以要换到STP以下是方法 STP mode &#xff1f; 查看模式 STP mode stp 选择stp 换好了后配置交换机优先级 [SWA]stp priority 4096 Apr 15 2013 16:15:33-08:00 SWA DS/4/DATASYNC_CFGCHANGE:OID 1.3.6.1.4.1.2011.5…...

Linux操作系统 使用共享内存实现进程通信和同步

共享内存使用 //main.c #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <assert.h> #include <sys/shm.h> #include <string.h> int main() {int shmidshmget((key_t)1234,256,IPC_CREAT|0600);assert(shmid!-1);…...

如何优化微信小程序中渲染带有图片的列表(二进制流存储方式的图片存在本地数据库)

方法一&#xff1a;对列表的获取进行分页处理 实现方法&#xff1a; 前端请求&#xff08;需要向后端传两个参数&#xff0c;pageIndex是获取第几页是从0开始&#xff0c;pageSize是这一页需要获取多少个数据&#xff09; 后端接口实现&#xff08;因为这里是通过参数拼接请求…...

尝鲜纯血鸿蒙,华为国际版本暂时不支持升级。如mateX6 国际版?为什么不支持?什么时候支持?

一&#xff1a;mateX6 国际版支持鸿蒙吗&#xff1f; 不支持 二&#xff1a;华为国际版支持鸿蒙吗&#xff1f; 不支持 三&#xff1a;华为国际版什么时候支持&#xff1f; 2025年预期可以支持。请耐心等待。 三&#xff1a;国际版为什么不支持&#xff1f; EMUI 采用AO…...

《 PyTorch 2.3革新:torch.compile自动生成CUDA优化内核全解》

CUDA作为NVIDIA推出的并行计算平台和编程模型&#xff0c;为GPU计算提供了强大的支持&#xff0c;但手动优化CUDA代码不仅需要深厚的专业知识&#xff0c;而且过程繁琐、耗时费力&#xff0c;torch.compile的出现&#xff0c;犹如一道曙光&#xff0c;为解决这一困境带来了全新…...

OpenCV中的分水岭算法 (C/C++)

OpenCV中的分水岭算法 (C/C) &#x1f3de;️ 分水岭算法 (Watershed Algorithm) 是一种在图像处理和计算机视觉中广泛应用的图像分割方法。它特别适用于分离图像中相互接触或重叠的对象。其基本思想是将灰度图像看作一个地形景观&#xff0c;其中灰度值代表海拔高度。算法模拟…...

Kafka 客户端连接机制的一个典型陷阱

这是 Kafka 客户端连接机制的一个典型陷阱&#xff0c;你遇到的现象可以通过 Kafka bootstrap server 的连接策略和 broker 的 advertised.listeners 配置来精确解释。 &#x1f3af; 问题描述简化 ✅ 使用顺序为&#xff1a; 192.168.22.22:9092,192.168.22.23:9092,172.21.16…...

相机--RGB相机

教程 RGB--深度相机--激光雷达 RGB相机 原理&#xff1a; 仅捕获红&#xff08;R&#xff09;、绿&#xff08;G&#xff09;、蓝&#xff08;B&#xff09;三通道的彩色图像&#xff0c;输出2D像素矩阵&#xff0c;无深度信息。 核心作用&#xff1a; 2D视觉任务&#xff1…...

足球数据全解析:实时数据到高阶数据

一、实时数据 1.基础&#xff1a; 比分 & 时间&#xff1a;最基础也最容易出错&#xff0c;优秀的实时数据源&#xff0c;比分更新时间小于0.5秒 射门/射正&#xff1a;狂射20脚进攻猛&#xff1f;可能是"无效狂轰" 射正3次进2球效率逆天 控球率&#xff1a…...

[科研实践] VS Code (Copilot) + Overleaf (使用 Overleaf Workshop 插件)

科研圈写文档常用 Latex 环境&#xff0c;尤其是 Overleaf 它自带的 AI 润色工具 Writefull 太难用了。如果能用本地的 CoPilot / Cursor 结合 Overleaf&#xff0c;那肯定超高效&#xff01; 于是我们找到了 VS Code 里的 Overleaf Workshop 插件。这里已经安装好了&#xff0…...

人工智能100问☞第36问:什么是BERT?

目录 一、通俗解释 二、专业解析 三、权威参考 BERT是基于Transformer Encoder的双向语言预训练模型,具备强大的语义理解能力,是现代自然语言处理的重要基石。它是一套让机器像人一样“前后一起看”的语言理解技术,它让AI不光“读得快”,还“读得懂”。现在很多搜索引擎…...

从0开始学习R语言--Day12--泊松分布

今天我们来看一个很经典的回归模型&#xff1a;泊松分布。 泊松分布 我们一般会把泊松分布用于预测问题&#xff0c;比如想知道成年人每天接到的骚扰电话次数&#xff0c;医院每天的急诊病人等。但在一些方面&#xff0c;跟我们想的会有出入。例如你不能将其应用在预测下周你的…...

工控机安装lubuntu系统

工控机安装lubuntu系统指南手册 1. 准备 1个8G左右的U盘 下载Rufus&#xff1a; Index of /downloads 下载lubuntu系统镜像&#xff1a; NJU Mirror Downloads – Lubuntu 下载Ventoy工具&#xff1a; Releases ventoy/Ventoy GitHub 下载后&#xff0c;解压&#…...

视频监控汇聚平台EasyCVR安防小知识:如何通过视频融合平台解决信息孤岛问题?

一、项目背景与需求分析​ 随着数字化技术发展与网络带宽升级&#xff0c;视频技术应用场景不断拓展&#xff0c;视频监控、记录仪等多样化产品构建起庞大体系。但这些独立系统彼此割裂&#xff0c;形成信息孤岛。 在系统集成项目中&#xff0c;视频系统深度融合已成必然趋势…...

在大型中实施访问控制 语言模型

大家读完觉得有帮助记得关注&#xff01;&#xff01;&#xff01; 抽象 在企业设置中&#xff0c;组织数据是隔离的、孤立的 并受到精心设计的访问控制框架的精心保护。 如果 LLM 对 siloed data serve 请求进行微调&#xff0c;用于下游任务&#xff0c; 来自具有不同访问权限…...

Haption在危险、挑战性或受限环境中操作的情况提供了一种创新的遥操作解决方案

Haption Virtuose 6D TAO是一款拥有7个主动自由度的触觉设备&#xff0c;专为虚拟现实环境交互而设计。 它与Virtuose的一系列软件解决方案兼容&#xff0c;可让您直接在CAD软件中使用该设备进行装配仿真&#xff0c;并在3D游戏引擎中使用该设备&#xff0c;从而打造更加逼真的…...

html中使用nginx ssi插入html

1.使用方法 nginx配置&#xff1a; server {listen 80;server_name example.com;location / {root /var/www/html;index index.html;ssi on; # 开启 SSI 功能ssi_types text/html; # 指定哪些类型的文件启用 SSI&#xff0c;默认只有 text/html} }html内容&#xff1a; &l…...

行为型:状态模式

目录 1、核心思想 2、实现方式 2.1 模式结构 2.2 实现案例 3、优缺点分析 4、适用场景 5、注意事项 1、核心思想 目的&#xff1a;将状态相关逻辑封装到独立的类中&#xff0c;消除复杂的条件分支&#xff0c;状态的切换由具体状态类自身管理 举例&#xff1a; 1>…...

优雅草最新实战项目技术Discuz X3.5电子签约插件开发项目实施方案优雅草·卓伊凡

优雅草最新实战项目技术Discuz X3.5电子签约插件开发项目实施方案优雅草卓伊凡 一、项目概述 甲方需求&#xff1a;为现有Discuz X3.5系统集成电子签约功能&#xff0c;对接e签宝API&#xff0c;实现用户发起/签署合同、模板管理、签约记录查询等功能。 总预算&#xff1a;9,3…...

人工智能在智能金融中的创新应用与未来趋势

随着金融科技的快速发展&#xff0c;人工智能&#xff08;AI&#xff09;技术正在深刻改变金融服务的各个方面。从风险评估到投资决策&#xff0c;从客户服务到欺诈检测&#xff0c;AI的应用不仅提高了金融服务的效率和准确性&#xff0c;还为用户带来了更加个性化和便捷的体验…...

LeetCode:贪心算法

目录 一、分发饼干 二、摆动序列 三、最大子数组和 四、买卖股票的最佳时机II 五、跳跃游戏 六、跳跃游戏II 七、K次取反后最大化的数组和 八、加油站 九、分发糖果 十、柠檬水找零 十一、根据身高重建队列 十二、用最少数量的箭引爆气球 十三、无重叠区间 十四、…...

基于本地化大模型的智能编程助手全栈实践:从模型部署到IDE深度集成学习心得

近年来&#xff0c;随着ChatGPT、Copilot等AI编程工具的爆发式增长&#xff0c;开发者生产力获得了前所未有的提升。然而&#xff0c;云服务的延迟、隐私顾虑及API调用成本促使我探索一种更自主可控的方案&#xff1a;基于开源大模型构建本地化智能编程助手。本文将分享我构建本…...

实验设计与分析(第6版,Montgomery)第5章析因设计引导5.7节思考题5.8 R语言解题

本文是实验设计与分析&#xff08;第6版&#xff0c;Montgomery著&#xff0c;傅珏生译) 第5章析因设计引导5.7节思考题5.8 R语言解题。主要涉及方差分析&#xff0c;正态假设检验&#xff0c;残差分析&#xff0c;交互作用图。 (a) dataframe<-data.frame( Lightc(580,568…...