
# 使用API网关服务（APIG专享版）触发器
本节介绍如何通过函数工作流控制台创建APIG触发器，实现使用API调用函数运行。
#### APIG专享版触发器触发事件说明
APIG专享版触发器是FunctionGraph与[APIG(API Gateway)](https://support.huaweicloud.com/productdesc-apig/apig_0080101651.html)结合使用的一种方式，支持通过HTTPS或HTTP协议调用FunctionGraph函数。通过APIG的自定义REST API和终端节点，可以将特定的API操作（如GET、POST、PUT等）映射到对应的FunctionGraph函数。当用户向APIG终端节点发送HTTPS请求时，APIG会自动触发相应的FunctionGraph函数，从而实现API请求与函数的无缝对接。
APIG专享版触发器的示例事件
- APIG触发器会按照以下事件格式触发函数，具体参数解释参考[表1]。
  ```
  {
      "body": "",
      "requestContext": {
          "apiId": "bc1dcffd-aa35-474d-897c-d53425a4c08e",
          "requestId": "11cdcdcf33949dc6d722640a13091c77",
          "stage": "RELEASE"
      },
      "queryStringParameters": {
          "responseType": "html"
      },
      "httpMethod": "GET",
      "pathParameters": {},
      "headers": {
          "accept-language": "zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2",
          "accept-encoding": "gzip, deflate, br",
          "x-forwarded-port": "443",
          "x-forwarded-for": "103.218.216.98",
          "accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
          "upgrade-insecure-requests": "1",
          "host": "50eedf92-c9ad-4ac0-827e-d7c11415d4f1.apigw.region.cloud.com",
          "x-forwarded-proto": "https",
          "pragma": "no-cache",
          "cache-control": "no-cache",
          "x-real-ip": "103.218.216.98",
          "user-agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:57.0) Gecko/20100101 Firefox/57.0"
      },
      "path": "/apig-event-template",
      "isBase64Encoded": true
  }
  ```
   表1APIG示例事件参数说明 
  | 参数                    | 类型      | 描述                                                                             |
  |:---|:---|:---|
  | body                  | String  | 记录实际请求转换为String字符串后的内容。                                                        |
  | requestContext        | Map     | 请求来源的API网关的配置信息、请求标识、认证信息、来源信息。                                                |
  | httpMethod            | String  | 记录实际请求的HTTP方法。                                                                 |
  | queryStringParameters | Map     | 记录在API网关中配置过的Query参数以及实际取值。                                                    |
  | pathParameters        | Map     | 记录在API网关中配置过的Path参数以及实际取值。                                                     |
  | headers               | Map     | 记录实际请求的完整Header内容。                                                             |
  | path                  | String  | 记录实际请求的完整的Path信息。                                                              |
  | isBase64Encoded       | Boolean | 默认为true，true表示APIG传递给FunctionGraph的请求体body已经进行Base64编码，需要先对body内容Base64解码后再处理。 |
     
  
 
#### 操作视频
本视频介绍如何在函数中配置APIG专享版触发器，并验证函数执行。
因产品功能演进，操作界面可能存在差异，相关视频仅供参考，具体以实际环境为准。
<video controls="controls" preload="none" id="object48646481189" class="idp-external-video" src="https://res-video.hc-cdn.com/cloudbu-site/china/zh-cn/support/functiongraph-video/1759028171191707185.mp4" title="使用APIG专享版触发器" poster="https://support.huaweicloud.com/usermanual-functiongraph/zh-cn_image_0000002501395166.jpg" height="300.0000" width="400.0000"></video>
 #### 约束与限制
- APIG专享版触发器支持使用的区域和具体运行时函数请以控制台展示为准。
- APIG专享版触发器创建以后，不能停用，只能删除。
- FunctionGraph函数对来自APIG调用的返回结果进行了封装，**APIG触发器要求函数的返回结果中必须包含isBase64Encoded(boolean)、statusCode(int)、headers(Map)和body(String)，即函数的返回结果中必须按以下示例结构返回字符串才可以正确返回。**
  ```
  {
      "isBase64Encoded": true|false,
      "statusCode": httpStatusCode,
      "headers": {"headerName":"headerValue",...},
      "body": "..."
  }
  ```
  isBase64Encoded的值默认为true，表示APIG传递给FunctionGraph的请求体body已经进行Base64编码，需要先对body内容Base64解码后再处理。
  
- APIG专享版触发器调用的请求正文有效负载大小为4M。
 
#### 前提条件
- 已创建APIG专享版实例，创建过程请参见[创建APIG实例](https://support.huaweicloud.com/usermanual-apig/apig_03_0037.html)。
  - 如需[在公网调用函数](https://support.huaweicloud.com/usermanual-functiongraph/functiongraph_01_0222.html#functiongraph_01_0222__section465417382214)，请在创建APIG实例时开启公网并配置所需带宽。
  
  - 如生产环境中[配置函数访问VPC内资源](https://support.huaweicloud.com/usermanual-functiongraph/functiongraph_01_0222.html#functiongraph_01_0222__section923421213196)，请在创建APIG实例时选择与函数相同的VPC环境。
   
- 已创建API分组，此处以"APIGroup_test"分组为例，创建过程请参见[创建API分组](https://support.huaweicloud.com/usermanual-apig/apig-ug-180307015.html)。
 
#### 创建APIG专享版触发器
1. 登录[函数工作流控制台](https://console.huaweicloud.com/functiongraph/?locale=zh-cn)，在左侧的导航栏选择"函数 \> 函数列表"。
2. 单击右上方的"创建函数"，进入"创建函数"页面。
3. 选择"创建空白函数"，配置以下函数信息，其他参数保持默认即可。 
   - 函数名称：输入自定义的函数名称，例如：apig_demo。
   
   - 企业项目：选择"default"。
   
   - 委托：选择"未使用任何委托"。
   
   - 运行时语言：选择"Python 3.12"。
   
   
   
   
4. 单击"创建函数"，完成函数创建并进入函数详情页。
5. 在"代码"页签下，复制以下代码至代码编辑区并单击"部署代码"。 
   ```
   # -*- coding:utf-8 -*-
   import json
   def handler (event, context):
       body = "<html><title>Functiongraph Demo</title><body><p>Hello, FunctionGraph!</p></body></html>"
       print(body)
       return {
           "statusCode":200,
           "body":body,
           "headers": {
               "Content-Type": "text/html",
           },        
           "isBase64Encoded": False
       }
   ```
   
   
6. 如[图1]所示选择"设置 \> 触发器"，单击"创建触发器"，弹出"创建触发器"对话框。
   
   图1创建触发器   
   ![](https://support.huaweicloud.com/usermanual-functiongraph/zh-cn_image_0000002082254022.png "点击放大")
   
   
7. 参考[表2]配置触发器参数。
   
    表2APIG专享版触发器参数说明 
   | 参数       | 说明                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       | 取值样例             |
   |:---|:---|:---|
   | 触发器类型    | 选择"API网关服务（APIG专享版）"。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    | API网关服务（APIG专享版） |
   | 实例       | 选择APIG实例。若无实例，可单击"创建实例"完成创建。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             | apig-fg          |
   | API名称    | 填写专享版APIG触发器的名称。 支持汉字，英文，数字，下划线，且只能以英文和汉字开头，3-64字符。 关于API更多配置信息的介绍请参考[创建API](https://support.huaweicloud.com/usermanual-apig/apig_03_0010.html)。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         | API_apig         |
   | 分组       | 选择API分组。API分组相当于一个API集合，API提供方以API分组为单位，管理分组内的所有API。 若未创建分组，可单击"创建分组"完成创建。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        | APIGroup_test    |
   | 发布环境     | 选择API的发布环境。API可以同时提供给不同的场景调用，如生产、测试或开发，选择"RELEASE"，才能调用。 若未创建环境，可单击"创建发布环境"完成创建。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  | RELEASE          |
   | 安全认证     | 选择API的安全认证方式。 API认证方式有以下三种： - App： 采用Appkey\&Appsecret认证，安全级别高，推荐使用，详情请参见[APP认证](https://support.huaweicloud.com/devg-apig/apig-dev-180307002.html)。  - IAM： IAM认证，只允许IAM用户能访问，安全级别中等，详情请参见[IAM认证](https://support.huaweicloud.com/devg-apig/apig-dev-180307020.html)。  - None： 无认证模式，所有用户均可访问。   **示例中"安全认证"选择"None"，生产环境强烈建议开启APP认证或IAM认证。** | None             |
   | 请求协议     | 选择API的请求协议。 API的请求协议支持以下类型： - HTTP：数据在传输过程中不被加密。  - HTTPS：数据在传输过程中被加密。传输重要或敏感数据时推荐使用HTTPS。  - HTTP\&HTTPS：此选项允许API同时支持HTTP和HTTPS两种协议。                                                                                                                                                                                               | HTTPS            |
   | 请求路径     | 填写API的请求路径。 请求路径是API访问地址的一部分，用于指定资源的唯一标识或层级结构。 **请求路径中的字母区分大小写。**以斜杠(/)开头，不超过512个字符。请求路径可以包含请求参数，请求参数使用{}标识，例如/a/{b}，也可以通过配置"+"号做前缀匹配，例如：/a/{b+}。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            | /ttest           |
   | 匹配模式     | 选择API的匹配模式。 匹配模式定义了如何匹配API请求的URL，API网关支持两种匹配模式： - 绝对匹配：绝对匹配要求请求路径必须与定义的路径完全一致。  - 前缀匹配：前缀匹配允许请求路径以定义的路径为前缀。                                                                                                                                                                                                                                                                                                               | 前缀匹配             |
   | 请求方法     | 选择API的请求方法。 支持的请求方法：GET、POST、DELETE、PUT、PATCH、HEAD、OPTIONS、ANY。 其中ANY表示该API支持任意请求方法。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       | ANY              |
   | 后端超时(毫秒) | 设置API的后端超时时间，单位为毫秒，设置范围为1\~60000毫秒。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      | 5000             |
      
   
   
8. 单击"确定"，完成触发器的创建。
 
#### 调用函数
1. 如[图2]所示复制APIG触发器的调用URL，打开任意浏览器，在地址栏中输入调用地址并访问。
   
   图2复制APIG调用URL   
   ![](https://support.huaweicloud.com/usermanual-functiongraph/zh-cn_image_0000002377248286.png "点击放大")
   
   
   
2. 函数执行完毕，得到返回结果，如[图3]所示。
   
   图3返回结果   
   ![](https://support.huaweicloud.com/usermanual-functiongraph/zh-cn_image_0000002117778633.png "点击放大")
   
   
 
#### 查看函数运行结果
1. 返回函数工作流控制台，在左侧的导航栏选择"函数 \> 函数列表"。
2. 单击函数名称，单击进入函数详情页。
3. 选择"监控 \> 日志"，查询[函数运行日志](https://support.huaweicloud.com/usermanual-functiongraph/functiongraph_01_1834.html)。
 
#### 相关文档
- 除使用控制台外，函数工作流支持通过API的方式管理函数触发器，详情请参见[函数触发器API](https://support.huaweicloud.com/api-functiongraph/FunctionTriggers.html)。
- 使用APIG触发器常见问题：[函数如何获取APIG触发器中的请求路径或请求参数？](https://support.huaweicloud.com/functiongraph_faq/functiongraph_03_0860.html)
- 在FunctionGraph中使用APIG专享版触发器的最佳实践：
  - [使用FunctionGraph部署AI绘画Stable Diffusion应用](https://support.huaweicloud.com/bestpractice-functiongraph/functiongraph_05_1151.html)
  
  - [使用FunctionGraph部署DeepSeek-R1蒸馏模型](https://support.huaweicloud.com/bestpractice-functiongraph/functiongraph_05_1215.html)
  
  - [使用FunctionGraph部署AI绘画ComfyUI/ComfyUI+FLUX应用](https://support.huaweicloud.com/bestpractice-functiongraph/functiongraph_05_1193.html)
  
  - [使用FunctionGraph部署AI对话ChatGLM3应用](https://support.huaweicloud.com/bestpractice-functiongraph/functiongraph_05_1203.html)
   
 
