
# 对接函数工作流调用无服务器服务
函数工作流（FunctionGraph）是一款无服务器（Serverless）计算服务，无服务器计算是一种托管服务，服务提供商会实时为您分配充足的资源，而不需要预留专用的服务器或容量，真正按实际使用付费。
在华为云Astro轻应用中，通过配置FunctionGraph连接器，可实现华为云Astro轻应用与FunctionGraph对接，对接后可调用在函数工作流控制台开发的服务。例如，通过华为云Astro轻应用的服务编排，调用在函数工作流控制台上创建的函数。
 #### 前提条件
参考[快速创建第一个FunctionGraph函数](https://support.huaweicloud.com/qs-functiongraph/functiongraph_04_0101.html)中操作，创建一个函数"hello"，函数代码如下：
```
exports.handler = async (event, context) => {
    const result = {
        "greetings": event.name + ", hello"
    }
    return result;
}
```
#### 费用说明
应用对接FunctionGraph连接器后，FunctionGraph服务需要单独付费，具体收费标准请参见[华为云定价](https://www.huaweicloud.com/pricing/index.html)。**应用停用后，FunctionGraph服务仍将按照既定的计费规则继续计费。如果不再使用该服务，请按照[停止计费](https://support.huaweicloud.com/price-functiongraph/functiongraph_00_0016.html)中操作及时退订实例，避免产生额外的费用。**
 #### 创建FunctionGraph服务连接器
1. 参考[登录华为云Astro轻应用应用设计器](https://support.huaweicloud.com/usermanual-astrozero/astrozero_05_9004.html)中操作，进入应用设计器。
2. 在左侧导航栏中，选择"集成"。
3. 单击"连接器"中的" 连接器实例"，进入连接器实例页面。
4. 在左侧导航栏中，选择"HTTP \> FunctionGraph服务"。
5. 在右侧页面单击"+"，设置基本信息，单击"下一步"。 
   图1新建FunctionGraph服务连接器   
   ![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000002172533681.png "点击放大")
   表1新建FunctionGraph服务连接器参数说明 
   | 参数 | 说明                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
   |:---|:---|
   | 标签 | 新建连接器的标签，标签名用于在页面展示，创建后可修改。 取值范围：1\~64个字符。                                                                                                                                                                                                                                                                                                                                                                                     |
   | 名称 | 新建连接器的名称。命名要求如下： - 长度不能超过64个字符，包括前缀命名空间的长度。 名称前的内容为命名空间，在华为云Astro轻应用中为了避免不同租户间数据的重名，租户在首次创建应用时需要先定义一个命名空间。一个租户只能创建一个命名空间，创建后不支持修改。   - 必须以英文字母开头，只能由英文字母、数字或单下划线组成，且不能以下划线结尾。   |
   | 图标 | 新建连接器的图标。                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
   | 描述 | 根据实际需求，输入连接器的描述信息。 取值范围：1\~512个字符。                                                                                                                                                                                                                                                                                                                                                                                              |
      
   
   
6. 配置认证信息，单击"保存"。 
   图2认证信息   
   ![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000002172537185.png "点击放大")
   表2认证信息参数说明 
   | 参数     | 说明                                                                                                                                                                                                                                                                                                     |
   |:---|:---|
   | 账号所在地区 | 函数工作流服务所在的区域，可以跨区域，即函数工作流和华为云Astro轻应用可不在同一个区域。                                                                                                                                                                                                                                                         |
   | 鉴权方式   | 访问函数工作流的鉴权方式。 - 委托授权：通过创建委托，将函数工作流资源进行共享。  - AK/SK：通过IAM用户的访问密钥对（AK/SK）来进行鉴权。   |
   | 访问密钥ID | 配置为访问密钥对中"Access Key Id"对应的值。请参考[获取AK/SK](https://support.huaweicloud.com/devg-apisign/api-sign-provide-aksk.html)中操作，获取AK（Access Key ID）、SK（Secret Access Key），即访问密钥对。 "鉴权方式"设置为"AK/SK"时，才需要配置该参数。                                                                  |
   | 访问密钥   | 配置为访问密钥对中"Secret Access Key"对应的值。请参考[获取AK/SK](https://support.huaweicloud.com/devg-apisign/api-sign-provide-aksk.html)中操作，获取AK（Access Key ID）、SK（Secret Access Key），即访问密钥对。 "鉴权方式"设置为"AK/SK"时，才需要配置该参数。                                                             |
   | 打包当前配置 | 选中该选项后，应用打包时会将当前配置的连接器信息一并打包。例如，如果应用包发布到运行环境，当前配置默认会被同步到运行环境中。如果不勾选，则内容不会打包发布到运行环境，此时需要您参考[管理应用中的连接器](https://support.huaweicloud.com/usermanual-astrozero/astrozero_06_2020.html)中操作，创建对应的连接器。 默认为选中，对信息敏感的场景，建议不勾选。                                               |
      
   
   
7. 配置动作，即要调用的函数。
   
   1. 在"动作列表"页签，单击"新建"。
   
   2. 在"基本信息"中，选择要调用的函数，如[前提条件]中创建的"hello"，设置动作的标签和名称，单击"下一步"。
   
   3. 配置消息头入参，该示例场景不需要配置消息头入参，单击"下一步"，删除第一行参数。 若此接口没有消息头输入参数，则不需要配置参数，请删除第一行参数。若有消息头输入参数，且有多个，请单击"+ 新增"。
      表3消息头入参参数说明 
      | 参数   | 说明                                                                                                                                                                                                                                                                                                                                                                      |
      |:---|:---|
      | 标签   | 消息头输入参数的标签名，用于在页面展示。                                                                                                                                                                                                                                                                                                                                                    |
      | 名称   | 消息头输入参数在系统中的唯一标识，创建后不可修改。                                                                                                                                                                                                                                                                                                                                               |
      | 数据类型 | 消息头输入参数的数据类型。 - 数字：数字类型。  - 字符串：字符串类型。  - 布尔值：布尔类型，取值为"true"和"false"。   |
      | 默认值  | 参数的默认取值。                                                                                                                                                                                                                                                                                                                                                                |
      | 描述   | 消息头输入参数的描述信息。                                                                                                                                                                                                                                                                                                                                                           |
      | 默认值  | 消息头输入参数是否有默认值。勾选后，可在"默认值"中进行自定义。"数据类型"为"敏感文本"时，不允许设置默认值。                                                                                                                                                                                                                                                                                                                |
      | 必填   | 消息头输入参数是否为必填。                                                                                                                                                                                                                                                                                                                                                           |
      | 操作   | 单击![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000002172736317.png)或![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000002172617929.png "点击放大")，可复制或删除消息头输入参数。                                                                                                                                                           |
         
      
   
   4. 配置输入参数。 如[图3]所示，该示例场景需要设置字符串类型的入参"name"。若此接口没有输入参数，则不需要配置参数，删除第一行参数。若有输入参数，且有多个，请单击"+ 新增"，并定义输入参数的基本信息。
      页面上方"消息体格式"参数使用说明：当方法为"PUT"或"POST"时，该参数才会显示。当第三方入参为数组类型或者非JSON类型时，需要将"输入消息体方式"设置为"值"形式。
      例如，若设置"消息体格式"为"键-值"，假设定义了输入参数A、B、C，调用时消息体中传递了参数 {A: 1,B:2, C:3} ，此时被调用方收到的参数信息是 {A: 1,B:2, C:3}。若设置"输入消息体方式"为"值"，此时默认使用$in输入参数定义，调用时消息体中传递了参数{$in: \[1,2,3\] }，此时被调用方收到的参数信息为\[1,2,3\]。
      图3输入参数配置页面   
      ![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000002137378658.png "点击放大")
      表4输入参数参数说明 
      | 参数    | 说明                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
      |:---|:---|
      | 标签    | 输入参数的标签名，用于在页面显示。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
      | 名称    | 输入参数在系统中的唯一标识，创建后不可修改。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |
      | 参数位置  | 设置输入参数的位置，取值如下： - 消息体  - URL查询参数  - URL路径参数                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      |
      | 数据类型  | 设置输入参数的数据类型，取值如下： - 日期：日期类型，精度到天。  - 日期/时间：时间类型，精度到秒。  - 数字：数字类型。  - 字符串：字符串类型。  - 布尔值：布尔类型，取值为"true"和"false"。  - 全局结构体  - 键值对(Map)：Map集合类型。  - 对象：对象标识类型。  - 敏感文本，如姓名、手机号等。   |
      | 命名空间  | "数据类型"设置为"全局结构体"时，需要设置输入参数所属的命名空间。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
      | 元数据名称 | 当"结构体类型"为"对象"时，需要设置具体的对象。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
      | 描述    | 根据实际需求，在输入框中输入参数的描述信息。 取值范围：1\~255个字符。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
      | 默认值   | 设置输入参数的默认取值。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
      | 必填    | 输入参数是否设置为必填。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
      | 集合    | 输入参数是否设置为数组类型。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             |
      | 操作    | 单击![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000002137536782.png)或![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000002172736325.png "点击放大")，可复制或删除输入参数。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
         
      
   
   5. 配置输出参数，如[图4]所示，该示例场景需要设置字符串类型的出参"greetings"。
      若此接口没有输出参数，则不需要配置参数，请删除第一行参数。若有输出参数，且有多个参数，请单击"+ 新增"，并定义输出参数的基本信息。
      页面上方"消息体格式"参数使用说明：设置"输出消息体方式"为"值"后，系统会引入一个通用的出参变量"$out"，将body的内容存到"$out"中，作为出参。
      例如，若设置"消息体格式"为"键-值"，假设定义了输出参数A、B、C，调用后返回消息体中传递了参数 {A: 1,B:2, C:3} ，此时调用方收到的参数信息是 {A: 1,B:2, C:3}。若设置"输出消息体方式"为"值"，此时默认使用$out输出参数定义，调用业务接口返回消息体中传递了参数\[1,2,3\]，此时调用方收到的参数信息为{$out:\[1,2,3\]}。
      图4输出参数配置页面   
      ![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000002172617937.png "点击放大")
      表5输出参数说明 
      | 参数    | 说明                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
      |:---|:---|
      | 标签    | 输出参数的标签名，用于在页面显示。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
      | 名称    | 新建输出参数的名称，名称是输出参数在系统中的唯一标识。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
      | 参数位置  | 设置输出参数的位置，取值如下： - 消息头  - 消息体                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             |
      | 数据类型  | 设置输出参数的数据类型，取值如下： - 日期：日期类型，精度到天。  - 日期/时间：时间类型，精度到秒。  - 数字：数字类型。  - 字符串：字符串类型。  - 布尔值：布尔类型，取值为"true"和"false"。  - 全局结构体  - 键值对(Map)：Map集合类型。  - 对象：对象标识类型。   |
      | 命名空间  | "数据类型"设置为"全局结构体"时，需要设置输入参数所属的命名空间。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
      | 元数据名称 | 当"结构体类型"为"对象"时，需要设置具体的对象。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
      | 描述    | 根据实际需求，输入参数的描述信息。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
      | 集合    | 输出参数是否设置为数组类型。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      |
      | 操作    | 单击![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000002137378670.png)或![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000002137536790.png "点击放大")，可复制或删除输出参数。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
         
      
   
   6. 设置完成后，单击"保存"。
   
   7. 单击该动作所在行的![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000002172736333.png)，进行启用。
   
   
   
   
8. （可选）测试该函数。 
   1. 单击已创建的动作名称，进入动作详情页。
   
   2. 单击"测试"，设置如下输入参数，单击"测试"。
      ```
      {
      "name":"Lily"
      }
      ```
      返回[图5]中消息，说明函数执行成功。
      图5返回消息   
      ![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000002172617941.png) 
   
   
   
   
 
#### 在服务编排中调用连接器
在服务编排中，通过连接器图元调用在函数工作流控制台上，创建的函数。
1. 参考[创建空白华为云Astro轻应用服务编排](https://support.huaweicloud.com/usermanual-astrozero/astrozero_05_9131.html)中操作，创建一个空白服务编排。
2. 为服务编排设置入参和出参变量。 
   1. 在服务编排设计页面右侧，选择![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000002137378674.png)。
   
   2. 在全局上下文页面，单击"变量"后的加号。
   
   3. 新建入参变量"name"、出参变量"greetings"，变量类型为"文本"，如[图6]所示。
      图6新建变量   
      ![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000002206734165.png) 
   
   4. 单击![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000002172736341.png)，设置服务编排入参和出参。
      图7设置出入参   
      ![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000002172607345.png "点击放大") 
   
   
   
   
3. 在服务编排设计页面左侧，选择"连接器 \> FunctionGraph"中，拖拽[创建FunctionGraph服务连接器]中创建的连接器至画布中，并连接图元。
   
   图8连接图元   
   ![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000002137210244.png)
   
   
4. 设置动作参数。 
   图9设置动作参数   
   ![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000002137372016.png "点击放大")
   - 动作：调用[7]配置的具体动作。
   
   - 输入参数：设置接口的输入参数。在"目标"中选择参数，在"源"中拖入全局上下文中的对应变量。
   
   - 输出参数：设置接口的输出参数。在"源"中选择参数，在"目标"中拖入全局上下文中的对应变量。
   
   
   
   
5. 单击![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000002172617945.png)，保存服务编排。
6. 单击![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000002137378682.png)，设置输入参数，单击"运行"，运行服务编排。
   
   ```
   {
       "name": "Lily"
   }
   ```
   若输出如下结果，表示成功调用函数。
   ```
   {
       "interviewId": "002N000000pjDj5T7Djk",
       "outputs": {
           "greetings": "Lily, hello"
       }
   }
   ```
   
   
#### 脚本中调用连接器
在脚本中，调用已创建的连接器，实现调用在函数工作流控制台上创建的函数。
1. 参考[创建空白华为云Astro轻应用脚本](https://support.huaweicloud.com/usermanual-astrozero/astrozero_05_9162.html)中操作，创建一个空白脚本。
2. 在脚本编辑器中，输入如下脚本代码。 
   ```
   import { Decimal } from "decimal";
   import { Error } from "error";
   import * as connector from "connector";
   export class Input {
       @action.param({ type: "String", required: true, description: "name" })
       name: string;
   }
   export class Output {
       @action.param({ type: "String", required: true })
       greetings: String;
   }
   export class Functiongraph {
       @action.method({ input: "Input", output: "Output", description: "do a operation" })
       run(input: Input): Output {
           let output = new Output();
           let client = connector.newClient("functiongraph", "命名空间__FunctionGraph");
           let result = client.invoke("命名空间__hello", input);
           console.log(result);
           output.greetings = result.greetings;
           return output;
       }
   }
   ```
   其中，"*命名空间* *__* *FunctionGraph* "为连接器的名称，"*命名空间__* *hello*"为动作名称。
   
   
3. 单击脚本编辑器页面上方的![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000002137536810.png)，保存脚本。
4. 保存成功后，单击编辑器页面上方的![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000002172736357.png)，执行脚本。
5. 在页面底部"输入参数"页签，设置输入请求参数，单击测试窗口右上角的![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000002172617949.png)。
   
   ```
   {
       "name": "Lily"
   }
   ```
   若输出如下结果，表示成功调用函数。
   ```
   {
       "greetings": "Lily, hello"
   }
   ```
   
   
 
