# 创建函数

## 创建函数

开通云函数服务后，首先需要在AGC中创建函数，并添加函数执行的代码。

1. 登录[AppGallery Connect](https://developer.huawei.com/consumer/cn/service/josp/agc/index.html)，点击"开发与服务"。

2. 在项目列表中点击需要创建云函数的项目。

3. 在左侧导航栏选择"云开发（Serverless） > 云函数"，进入云函数主界面。

4. 选择"函数"页签，点击"创建函数"。

   ![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/70/v3/9i-s4yEQQdmMfMGHUfoFag/zh-cn_image_0000002809010941.png?HW-CC-KV=V1&HW-CC-Date=20261102T125431Z&HW-CC-Expire=31536000000&HW-CC-Sign=41AA40768212D9F0C7FBFB7E9CE58D537EDB911F1C40FB0A30539004E934F15B)
5. 页面右侧抽屉式滑出"创建函数"窗口，按照"函数配置 -> 触发器 -> 函数代码 -> 层配置"引导顺序配置函数。

   ![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/d8/v3/v8eyc3ESRiqGIBpyUOvy_w/zh-cn_image_0000002809050855.png?HW-CC-KV=V1&HW-CC-Date=20261102T125431Z&HW-CC-Expire=31536000000&HW-CC-Sign=32FD8AC9BE06DB3E3DCC40F062583CCAE71BA42BF08B0A1F2737FD73E396495E)

## 函数配置

1. 在"函数配置"页面，配置"函数名称"、"触发方式"、"超时时长"等函数信息。

   ![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/a2/v3/B-q2b26BQ02QIJBgZlNh7A/zh-cn_image_0000002779851290.png?HW-CC-KV=V1&HW-CC-Date=20261102T125431Z&HW-CC-Expire=31536000000&HW-CC-Sign=7AA2AF923D81491EF823E007C3ED62B519DEA46D8D072E29BDB86A667590F615)

   |配置项|**说明**|
   |:---|:------------------------------------------------------------------------------------------------------------------|
   |函数名称|函数的名称。|
   |描述|函数的描述信息。|
   |触发方式|**请配置为"事件调用"。** "事件调用"表示通过触发器方式调用函数。|
   |超时时长|函数最大运行时长，超过该时长，则默认函数执行失败，单位为s，取值范围为1~1800。不同调用方式下，函数最大运行时长不同： - "同步"调用方式时，函数最大运行时长为55s。 - "异步"调用方式时，函数最大运行时长为1800s。|
   |实例并发|函数请求并发量上限，单位为个，取值范围为1~10000。|
   |环境变量|key-value形式，可以将需要的变量配置信息传入函数执行环境中，用于函数在运行时读取和使用。|

2. （可选）可根据需要添加环境变量，支持**表单格式** 和**JSON格式**两种编辑方式。添加完成后，还可以点击"JSON格式导出"，导出以"函数名称.json"格式命名的环境变量文件，以备后续使用。

   > 说明
   > * 环境变量的key值具有唯一性，且"PROJECT_CREDENTIAL"和"AGC_"为系统级环境变量标识，不允许添加以其命名或以其为前缀的环境变量。
   >
   > * 环境变量总数不超过1000个。

   * 表单格式编辑

     点击"新增变量"，输入key和value值，如下图中所示，env1为环境变量的key值，test为value值。点击![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/bf/v3/l3mlLBw5Td-C0Vx-BazqSA/zh-cn_image_0000002779691322.png?HW-CC-KV=V1&HW-CC-Date=20261102T125431Z&HW-CC-Expire=31536000000&HW-CC-Sign=A3E54BB03AEA3F4F5B9214F7BAEDE18F369D337BD4A60212151E5350AEB0599F)可将变量删除。

     ![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/09/v3/ntqp3QjJTZ2QfYXkXQniZA/zh-cn_image_0000002809010943.png?HW-CC-KV=V1&HW-CC-Date=20261102T125431Z&HW-CC-Expire=31536000000&HW-CC-Sign=CCA7CB9AE904D275FF63521FA0CAAC8EF6E39DAFC14416438D2462536C7E5AC1)
   * JSON格式编辑

     选中"JSON格式编辑"，在文本框中以key-value键值对JSON格式添加环境变量。当添加的环境变量比较多时，为了方便核对，可点击"format"对变量进行格式化排列。

     ![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/5/v3/xjZVLUbKQK6gRKYysgUkzQ/zh-cn_image_0000002809050857.png?HW-CC-KV=V1&HW-CC-Date=20261102T125431Z&HW-CC-Expire=31536000000&HW-CC-Sign=29BDE3B5EAEE2E5ABC0A872720D382FBCB14A6F56C8ABB92E7A53BB0CDF71F22)
3. "函数配置"页面配置完成后点击"下一步"。

## 触发器

进入"触发器"页面，可基于函数触发场景配置需要的触发器，本场景下添加HTTP触发器。"触发器类型"和"请求方式"保持默认选择，并配置"认证类型"，配置完成后点击"下一步"。

![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/cb/v3/BahnFPI6QsSdyQ9FNuuykw/zh-cn_image_0000002779851292.png?HW-CC-KV=V1&HW-CC-Date=20261102T125431Z&HW-CC-Expire=31536000000&HW-CC-Sign=3F593F69F8EE49F33388C062A2EBA2229692C492EE5579DC376C422AC3BC5326)

|参数|说明|
|:-------|:---------------------------------------------------------------------------------------------------------------------------|
|触发器类型|HTTP触发器。|
|请求方式|HTTP触发器目前仅支持POST请求方式。|
|认证类型|HTTP触发器的认证类型。 - API客户端鉴权（Client适用）：端侧网关认证，适用于来自APP客户端侧（即本地应用或者项目）的函数调用。 - API客户端鉴权（Server适用）：云侧网关认证，适用于来自APP服务器侧（即云函数）的函数调用。|
|启用decode|通过HTTP触发器触发函数时，对于contentType为"application/x-www-form-urlencoded"的触发请求，是否使用URLDecoder对请求body进行解码再传入到函数中。|

## 函数代码

进入"函数代码"页面，配置"运行环境"、"内存配置"、"代码输入类型"等信息，配置完成后点击"下一步"。

![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/70/v3/lQqeb7pDTxy3VIER5SeUeg/zh-cn_image_0000002779691324.png?HW-CC-KV=V1&HW-CC-Date=20261102T125431Z&HW-CC-Expire=31536000000&HW-CC-Sign=1BC6894D052FC7899DEBBBF35153591F0F1BE36DBFC4F94637F5F816338ECEF1)

|配置项|**说明**|
|:-----|:----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|运行环境|函数容器的运行环境。请选择nodejs 20.x/latest，其中latest表示使用最新版本。|
|内存配置|函数容器所占有的内存大小，单位为MB，取值范围：500，1000，2000，4000。|
|代码输入类型|包括"在线编辑"与"*.zip文件"两种方式，默认值为"在线编辑"。 选择"*.zip文件"方式部署云函数时，入口方法文件的编写方法请参见[入口方法](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/cloudfoundation-develop-function-nodejs#入口方法)。|
|函数入口|包括入口文件名称和入口方法名称，通过"."连接。例如handler.myHandler，其中handler为入口文件名称，myHandler为入口方法名称。 nodejs运行环境下入口文件必须放置在函数部署包的根目录下，具体请参见[准备函数部署包](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/cloudfoundation-develop-function-nodejs#准备函数部署包)。|
|代码文件|用于在线编辑函数代码或上传函数部署包。 - "代码输入类型"配置项选择"在线编辑"时，可在创建函数界面集成的WebIDE区域在线编辑函数代码。WebIDE的详细使用方法见下文。 - "代码输入类型"配置项选择"*.zip文件"时，点击![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/ab/v3/U7iC1UjiRPaDoaSt-fCXMw/zh-cn_image_0000002809010945.png?HW-CC-KV=V1&HW-CC-Date=20261102T125431Z&HW-CC-Expire=31536000000&HW-CC-Sign=659F0415B1BDBE3D2EF383E9DB4D43E5C98CCF213E50FC1E8D4F7E39473249EA)即可上传函数部署包，也可直接拖曳zip文件至虚线框内。|

**WebIDE**

当"代码输入类型"配置项选择"在线编辑"时，创建函数界面中集成了WebIDE功能，支持在线编辑函数代码。
> 说明
>
> 如果在函数实例已经运行的情况下进行函数代码或配置更新，AGC后台会滚动更新函数实例，请耐心等待10-20s。

WebIDE从左至右分两个部分：目录树、代码编辑器和最大化，如下图所示。编辑完成后平台会生成部署包并上传。

![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/52/v3/5fDLJTg9QI6qrKKQ_debhQ/zh-cn_image_0000002809050859.png?HW-CC-KV=V1&HW-CC-Date=20261102T125431Z&HW-CC-Expire=31536000000&HW-CC-Sign=7D46FFB2DC15D687F6AEE2F7D509FABA4018D1D9381339DE728A35F6A3A66D8D)

|组成|说明|
|:--|:------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|目录树|目录树支持如下能力： - 新增文件夹：选中一个文件或文件夹，点击右上角新增文件夹按钮"![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/f6/v3/8PQfj2ivSBi69O1Qtg4weQ/zh-cn_image_0000002779851294.png?HW-CC-KV=V1&HW-CC-Date=20261102T125431Z&HW-CC-Expire=31536000000&HW-CC-Sign=A8E2C5AE32895967579308EB4B20C2C4456FF942F6C970F661BE70D04EAB6768)"。若选中的是文件夹，则新增一个子文件夹。若选中的是文件，则新增一个同级文件夹。 - 新增文件：选中一个文件或文件夹，点击右上角新增文件按钮"![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/25/v3/7OYKrn8uSLKFqyJKtYukgQ/zh-cn_image_0000002779691326.png?HW-CC-KV=V1&HW-CC-Date=20261102T125431Z&HW-CC-Expire=31536000000&HW-CC-Sign=2E97E8FF2DC1B5BB45E1CF7948E961B9198EFD62EC5DD3315BF84B3CB19E9B3A)"。若选中的是文件夹，则新增一个子文件。若选中的是文件，则新增一个同级文件。 - 删除文件：选中一个文件或文件夹，点击右侧删除按钮"![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/1c/v3/ySDvsBqTRku8tOQoJekSkQ/zh-cn_image_0000002809010947.png?HW-CC-KV=V1&HW-CC-Date=20261102T125431Z&HW-CC-Expire=31536000000&HW-CC-Sign=336880001437D5692292FE9CB86E372E74AA9E99D81C0591218EBDF45B2D15A6)"，删除文件或文件夹。不允许删除根目录。 - 重命名：双击文件或文件夹，输入新名称（仅支持字母、数字、下划线和中划线），完毕后按Enter键完成重命名。|
|编辑器|编辑器具有如下能力： - 语法高亮：按照node.js语法高亮显示代码。 - 语法校验：语法有错误时会给出错误提示。 - 代码提示：输出代码自动给出相关代码提示。 - 代码填充：选择后系统代码可自动填充。 - 格式化：快捷键Ctrl+Shift+B。 - 支持快捷键操作：Ctrl+v, Ctrl+c, Ctrl+z, Ctrl+x, Ctrl+f, Ctrl+/等。|
|最大化|点击最大化按钮![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/4f/v3/5nEjeaalRW6b20orqbR7OQ/zh-cn_image_0000002809050861.png?HW-CC-KV=V1&HW-CC-Date=20261102T125431Z&HW-CC-Expire=31536000000&HW-CC-Sign=451B13D9E307003AC35A13D8964854D09456E5163B30211A44A725E489CDB282)，可以最大化在线编辑区，再次点击![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/61/v3/ru3r1nqLRyKjyeVI3vMjOQ/zh-cn_image_0000002779851296.png?HW-CC-KV=V1&HW-CC-Date=20261102T125431Z&HW-CC-Expire=31536000000&HW-CC-Sign=7613EC17ACA402B3B66AAD69800D65EB388D299A5FEEDE92377887978E5E702C)按钮或按ESC键退出最大化。|

## 层配置

层可以提供公共依赖库的发布与部署能力。开发者可以将函数依赖的公共库和相关依赖项提炼到层，通过为函数绑定层，便可以在函数中使用库，而不必将库包含在函数的代码包中，从而达到缩小函数代码包体积与缩短函数部署时间的效果，也避免了使用函数代码安装和打包依赖项时可能出现的错误。详细的层管理功能，请参见[层管理](https://developer.huawei.com/consumer/cn/doc/AppGallery-connect-Guides/agc-cloud-function-layer-0000001517762624)。

如果尚未创建层，可跳过下述步骤，直接点击页面底部的"创建"完成函数定义，后续创建层之后可在函数详情页再进行层配置，为函数绑定层。如果在创建函数之前已创建层，可按照下述步骤进行操作。

1. 进入"层配置"页面，点击"绑定层"。

   ![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/b5/v3/y5X9T7a8T2mx7FYynG9IZw/zh-cn_image_0000002779691328.png?HW-CC-KV=V1&HW-CC-Date=20261102T125431Z&HW-CC-Expire=31536000000&HW-CC-Sign=79545B3D37E5AA1206ECC6C62EAFBB80EE65D40EC6DF51ACBEE18657F71807CC)
2. 在右侧弹出的"绑定层"界面中，下拉框选择"层名称"和"版本"，"层范围"等信息根据层的配置将被自动填充，完成层绑定后点击"确定"。一个函数最多可以绑定5个层。

   > 说明
   >
   > 选择层时，层的兼容运行时需与函数运行环境相符，系统会自动完成过滤。如果无匹配的层，请参考[创建层](https://developer.huawei.com/consumer/cn/doc/AppGallery-connect-Guides/agc-cloud-function-layer-0000001517762624#section11358162018572)创建相同运行环境的层后再进行绑定。

   ![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/bd/v3/jhkcTHgES0O7epMG9w0-7g/zh-cn_image_0000002809010949.png?HW-CC-KV=V1&HW-CC-Date=20261102T125431Z&HW-CC-Expire=31536000000&HW-CC-Sign=361692123A9E07F20007A24D2BCB04300C954DEA8AD40D0ED403E02920AB479A)

   |参数|说明|
   |:----|:-----------------------|
   |层名称|层的名称。重复时自动在同名的层中创建一个新版本。|
   |版本|存在多个层版本时，选择函数绑定的层版本。|
   |层范围|层的共享范围。 - 项目内共享 - 团队内共享|
   |兼容运行时|层使用的语言环境。请选择"nodejs"。|
   |层描述|层的附加说明，长度不超过1024位。|

3. 返回到"层配置"界面，绑定成功的层将展示在层列表中。如果需要解除层与函数的绑定关系，点击"解绑"即可。

   ![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/53/v3/E-i7QO7fTf69ZnQ4JSc2eQ/zh-cn_image_0000002809050863.png?HW-CC-KV=V1&HW-CC-Date=20261102T125431Z&HW-CC-Expire=31536000000&HW-CC-Sign=58BB9D13C3CD088F7226741AA8AF1023363144DCCE56EF0031AF436F50843F53)
4. 按照"函数配置 -> 触发器 -> 函数代码 -> 层配置"顺序配置过程中，如果需要修改前面步骤中的配置，可点击"上一步"进行回退，配置完成后点击"创建"提交函数定义。

## 更多信息

函数配置完成后，可以[修改函数高级配置](https://developer.huawei.com/consumer/cn/doc/AppGallery-connect-Guides/modify-function-advanced-config-0000001734287937)。

