
# 自定义事件发送流程
本章节介绍自定义事件发送的整个流程。
将自定义事件源产生的自定义事件发送到事件网格，事件规则对自定义事件进行过滤和转换，通过转换后的事件触发事件目标（即函数工作流服务中的函数）。
#### 前提条件
- 已[开通事件网格服务并授权](https://support.huaweicloud.com/qs-eg/eg-qs-001.html)。
- 已获取函数工作流的权限。
 
#### 步骤一：创建自定义通道
1. 登录事件网格控制台。
2. 在左侧导航栏选择"事件通道"，进入"事件通道"页面。
3. 单击"创建事件通道"，弹出"创建事件通道"对话框。
4. 在"通道名称"中输入"channel"，单击"确定"，完成自定义事件通道的创建。
   
   通道创建成功后，在"自定义事件通道"区域查看创建的自定义事件通道，并记录事件通道ID。
   图1事件通道ID   
   ![](https://support.huaweicloud.com/qs-eg/zh-cn_image_0000001334468833.png)
   
   
 
#### 步骤二：创建自定义事件源
1. 登录事件网格控制台。
2. 在左侧导航栏选择"事件总线 \> 事件源"，进入"事件源"页面。
3. 右上角单击"自定义事件源"，弹出"创建自定义事件源"对话框。
4. 参考[图2]，填写自定义事件源的配置信息。
   
   - 事件源类型：下拉框选择。
   
   - 事件源名称：自定义，例如输入"egsdk-source"。
   
   - 描述：自定义。
   
   
   图2创建自定义事件源   
   ![](https://support.huaweicloud.com/qs-eg/zh-cn_image_0000001271023173.png "点击放大")
   
   
5. 单击"确定"，完成自定义事件源的创建。 
   创建成功后，在"自定义事件源"页签，查看创建的事件源。
   
   
 
 #### 步骤三：创建云服务事件目标（创建函数）
1. 登录函数工作流控制台。
2. 在左侧导航栏选择"函数 \> 函数列表"，进入函数列表页面。
3. 单击"创建函数"，进入"创建空白函数"页面。
4. 参考[图3]，设置函数参数。关于函数参数的详细介绍，请参考[创建函数](https://support.huaweicloud.com/usermanual-functiongraph/functiongraph_01_1441.html)。
   
   - 函数类型：选择"事件函数"
   
   - 区域：选择业务区域
   
   - 函数名称：输入"test"
   
   - 委托名称：选择"未使用任何委托"
   
   - 运行时语言：选择"Python 2.7"
   
   
   图3创建函数   
   ![](https://support.huaweicloud.com/qs-eg/zh-cn_image_0000001508299069.png "点击放大")
   
   
5. 单击"创建函数"，完成函数的创建。
6. 在函数详情页的"代码"页签中，输入如下代码，单击"部署"。 
   ```
   # -*- coding:utf-8 -*-
   import json
   def handler (event, context):
       print(json.dumps(event))
       return {
           "statusCode": 200,
           "isBase64Encoded": False,
           "body": json.dumps(event),
           "headers": {
               "Content-Type": "application/json"
           }
       }
   ```
   
   
 #### 步骤四：创建事件订阅
事件订阅将事件源、通道和事件目标绑定在一起，通过事件规则将事件源发出的事件路由到事件目标。
1. 登录事件网格控制台。
2. 在左侧导航栏选择"事件订阅"，进入"事件订阅"页面。
3. 单击"创建事件订阅"，进入订阅详情页。
4. 单击订阅名称旁的![](https://support.huaweicloud.com/qs-eg/zh-cn_image_0000001498429870.png)，弹出"修改订阅"弹窗。
5. 在"订阅名称"中输入"CustomEvent"，单击"确定"，回到订阅详情页。
6. 配置事件源。 
   1. 单击"事件源"，参考[图4]，设置事件源参数。
      表1自定义事件源参数说明 
      | 参数名称 | 说明                                                                                |
      |:---|:---|
      | 通道   | 在下拉列表中选择一个已创建的自定义事件通道。                                                            |
      | 事件源  | 输入或选择一个已关联自定义事件通道（即"通道配置"中选择的自定义通道）的自定义事件源。                                       |
      | 过滤规则 | 输入事件过滤规则。 事件源产生的事件与过滤规则进行匹配，匹配成功后事件才会被路由到与过滤规则关联的事件目标。 |
         
      过滤规则：保存默认，并记录**values** 值，如[图4]所示的"egsdk-source"。
      图4配置事件源参数   
      ![](https://support.huaweicloud.com/qs-eg/zh-cn_image_0000001281970022.png "点击放大") 
   
   2. 单击"确定"，完成事件源的配置。
   
   
   
   
7. 配置事件目标。 
   1. 单击"事件目标"，参考[图5]，设置事件目标参数。
      - 选择提供方：选择"云服务"
      
      - 事件目标：选择"FunctionGraph（函数计算）"
      
      - 函数：选择[步骤三]中创建的"test"函数
      
      - 版本：选择"latest"
      
      - 委托：选择已创建的委托。
      
      - 类型：选择"透传"
      
      
      图5配置事件目标参数   
      ![](https://support.huaweicloud.com/qs-eg/zh-cn_image_0000001497331330.png "点击放大") 
   
   2. 单击"确定"，完成事件目标的配置。
   
   
   
   
8. 单击"保存"，完成事件订阅的配置。
 
#### 步骤五：发送自定义事件
1. 配置自定义事件，具体请参考[CloudEvents SDK](https://support.huaweicloud.com/sdkreference-eg/eg-sdk-002.html)。
   
   修改发布事件示例代码中如下参数：
   - NAME：IAM用户名。
   
   - PASSWORD：IAM 用户密码。
   
   - DOMAIN_NAME：IAM domain用户名。
   
   - IAM_ENDPOINT：IAM的终端节点，您可以从[地区和终端节点](https://developer.huaweicloud.com/endpoint?IAM)中查询服务的终端节点。
   
   - PROJECT_ID：即项目ID，参考[API凭证](https://support.huaweicloud.com/usermanual-ca/ca_01_0002.html)，获取项目ID。
   
   - CHANNEL_ID：修改为[步骤一]中记录的通道ID。
   
   - ENDPOINT：事件网格[访问端点](https://support.huaweicloud.com/usermanual-eg/eg-ug-034.html)，如"华北-北京四"区域，公网访问端点值为"events.cn-north-4.myhuaweicloud.com"。
   
   - SOURCE：即事件源名称，修改为[步骤四：创建事件订阅]中配置事件源时记录的"Filter"中"values"值。
     ![](https://support.huaweicloud.com/qs-eg/zh-cn_image_0000001299138241.png "点击放大")
     
   
   - TIME：修改事件产生的时间。
   
   - DATA：根据实际情况修改，事件内容遵循[CloudEvents 1.0](https://github.com/cloudevents/spec/blob/v1.0/spec.md?spm=a2c4g.11186623.0.0.72ed6804nSzmU7&file=spec.md)规范。
   
   
   
   
2. 运行发布事件的main函数。
 
#### 步骤六：查看结果
1. 登录函数工作流控制台。
2. 在左侧导航栏选择"函数 \> 函数列表"，进入函数列表页面。
3. 单击函数名称"test"，进入函数详情页。
4. 在"监控"页签，查看调用次数、运行时间等。 
   图6监控视图   
   ![](https://support.huaweicloud.com/qs-eg/zh-cn_image_0000001210990308.png "点击放大")
   
   
 
