本文介绍如何在事件总线EventBridge控制台添加API 网关类型的自定义事件源。
前提条件
步骤一:创建后端服务
-
登录API网关控制台,在左侧导航栏选择API 管理 > 后端服务。
-
在后端服务列表页面,单击右上角的创建后端服务,在弹出的对话框中填写后端服务名称,类型选择事件总线 EventBridge,然后单击确定。
-
在后端服务列表中找到您刚创建的后端服务,在右侧的操作栏中单击配置及关联的API。
-
在后端服务定义页面,单击线上页签,然后在基本信息区域单击创建。
-
在定义后端服务页面,区域选择创建好的自定义事件总线所在的地域,事件总线选择创建好的自定义事件总线名称,设置事件源名称和描述,单击发布。
步骤二:创建API分组
-
在左侧导航栏,选择API 管理 > 分组管理。
-
在分组列表页面,单击右上角的创建分组,选择实例,设置分组名称,然后单击确定。
选择实例类型为共享实例(VPC),设置BasePath为
/。重要网关的分组需要和前提条件中创建好的自定义事件总线处于同一地域。
步骤三:创建API并对其授权
-
在分组列表页面找到步骤二中创建成功的API分组,单击右侧操作列的API管理。
-
在API列表页面,单击创建API。
-
在基本信息配置向导页面,设置以下信息,然后单击下一步。
设置 分组(例如
test_EB)、API名称(例如testAPI)、安全认证(例如选择 阿里云APP)、AppCode认证(例如选择 允许AppCode认证 (Header & Query))、签名算法(例如选择 HMAC_SHA256)等参数,其中 API名称、安全认证和 AppCode认证为关键配置项。可按需勾选 API选项(防止重放攻击、禁止公网访问、允许上架云市场)并填写 描述,完成后单击 下一步。 -
在定义API请求配置向导页面,配置以下信息,然后单击下一步。
协议 勾选 HTTP 和 HTTPS;请求Path 填写
/test/eb/1,勾选 匹配所有子路径;HTTP Method 选择 GET;入参请求模式 选择 入参透传。说明本环节是定义事件总线如何请求您的API,需要确定的内容包括请求类型、协议、请求Path、HTTP Method、入参请求模式和入参定义。
-
在定义API后端服务配置向导页面,选择后端服务类型和后端服务,然后单击下一步。
本示例中,后端服务类型 选择 EventBridge,后端服务 选择 test_eb,后端超时 保持默认值
10000ms。 -
(可选)在定义返回结果配置向导页面,设置返回结果示例和失败返回结果示例,用于生成API帮助文档,然后单击创建。
-
-
API创建完成后,单击其右侧操作列的发布,将配置好的API发布至线上环境。
-
在API列表页面,单击目标API操作列的
图标,然后单击授权。 -
在授权面板,设置授权有效时间并添加需要授权的应用,然后单击确定。
选择授权环境(线上、预发或测试),在授权有效时间区域选择短期(指定到期日期)或长期,在应用搜索框中输入关键词后单击搜索,在结果列表中勾选目标应用并单击对应行的+添加按钮将其加入已选列表。
步骤五:调试API
-
在API列表页面,找到步骤三:创建API并对其授权中创建的API,在其右侧操作列,单击调试。
-
将调试环境选择为线上,验证方式选择为使用AppCode,设置请求参数,单击发送请求。
查看事件详情
-
登录事件总线EventBridge控制台,在左侧导航栏,单击事件总线。
-
在事件总线页面,单击目标自定义事件总线名称。
-
在左侧导航栏,单击事件追踪,设置查询方式为按事件范围查询或者按事件 ID 查询,单击查询。
-
单击目标事件ID操作列的事件详情,即可查看事件的具体内容。
查询到的事件详情如下所示:
{ "datacontenttype": "application/json", "aliyunaccountid": "1431999136******", "data": { "headers": { "Authorization": "APPCODE 0624849af6ab4020a272fe9f7b******", "Proxy-Uid": "X-Ca-e605e437-b65d-4e52-9f8c-515c55******", "X-Ca-Stage": "RELEASE", "User-Agent": "Apache-HttpClient/4.5.6 (Java/1.8.0_172)", "Accept-Encoding": "gzip,deflate", "Content-Type": "text/html" }, "path": "/test/eb/1", "pathParameters": {}, "method": "GET", "queryParameters": {} "body": "" }, "aliyunoriginalaccountid": "143199913******", "source": "time-source-ad2a0405-9a2a-4f86-87f1-c0ef89******", "type": "eventbridge:Events:ApiGateway", "aliyunpublishtime": "2024-11-14T07:11:33.287Z", "specversion": "1.0", "aliyuneventbusname": "ad2a0405-9a2a-4f86-87f1-c0ef89******", "id": "324213ab-cae5-4049-89a4-560ead******", "time": "2024-11-14T07:11:33.000Z", "aliyunregionid": "cn-hangzhou", "aliyunpublishaddr": "172.20.XX.XX" }CloudEvents规范中定义的参数解释,请参见事件概述。
data字段包含的参数解释如下表所示:
参数
类型
示例值
描述
headers
Map
{ "Authorization": "APPCODE b6e439f27045443ca58e9136ef20****", "X-Ca-Dashboard-Uid": "115964845466****", "X-Ca-Dashboard-Action": "DEBUG", "X-Ca-Stage": "RELEASE", "X-Ca-Dashboard-Role": "USER", "User-Agent": "Apache-HttpClient/4.5.6 (Java/1.8.0_172)", "Accept-Encoding": "gzip,deflate", "Content-Type": "text/html; charset=utf-8" }HTTP请求头。
path
String
/test/eb/1
HTTP请求路径。
pathParameters
Map
无
路径参数。
body
String/Map
无
HTTP请求消息正文。如果HTTP请求的Content-Type字段取值为application/json,消息正文将按照JSON进行解析,否则按照普通字符串解析。
method
String
GET
HTTP请求方法。
queryParameters
Map
无
HTTP请求的query参数去除token的内容。