开发者学堂课程【事件总线EventBridge生态集成课程:EventBridge API 端点:让服务集成触手可及】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/1235/detail/18405
EventBridge API 端点:让服务集成触手可及
2. Connection 访问合法性校验:API Key
API key 是其中最简单的授权认证方式,用户可以自定义 API访问的一个Key name 和 key value。eventbridge 会将其通过 http header的方式,传输到端进行认证,这种方式缺点也很明显,就是安全性不足,尤其是在一些非 HTTPS 的一些场景下,明文传输是容易引起一些安全问题的,但是对一些内部网络或者安全等级要求不高的场景下,这是一种非常容易理解,非常好用的方式。
3. Connection 访问合法性校验:Basic
Basic是一种被很多 saas 产品支持的一种轻量级的方案,尤其是在用户内部网络访问认证的一些场景下被用的很多,那在这种模式下 username 和 password 会被 base64 进行编码,然后加上 basic 空格前缀,作为 header value 一起发送到目标服务,目标服务端会进行解码并进行认证,如果认证通过,会响应 eventbridge 的一个请求,如果失败会直接打回。当然它存在缺点,就是它的安全性其实也是不足的,因为 base64很容易被解码,甚至它不需要解码,也可以直接复用。
4. Connection 访问合法性校验:OAuth 2
OAuth 2 其实是一种相对来说更加安全可靠的授权认证方式,尤其是在一些公网等一些非可信的网络,目前很多产品尤其网络上的一些不同产品之间的相互授权都会被采用,面对不同的场景 oauth2 有四种授权方式。
第一种授权码这种主要是用于后端的外部应用,隐藏式的授权是主要是适用一些应用,密码主要是用一些内部网络高度性的的两个应用。对客户端品质是用于那些没有全单的服务间的调用。
那对于 eventbridge 事件驱动场景适合的是客户端凭证,这种授权方式,那在这种模式上用户需要在 eventbridge 配置,获取客户端凭证所需要的一些信息,这里包括 oauth service 地址、client id、client secret,支持通过get和post两种方式去获取客户端凭证,当 eventbridge 拿到客户的凭证之后,会在每次推送事件到目标服务的时候带上这个凭证信息,并且在凭证到期之前会自动的更新获取最新的凭证,详细大家也可以参考 oauth 2 的官方定义。
5.API 端点:有效管理事件目标
有了刚才提到的 connection,eventbridge 就可以顺利的与目标服务进行连通了,但是为了访问最终的服务,其实还需要知道微服务 api 的具体定义,也就是刚才提到 api 端点,但是这里有一点需要注意的是 api 端点里只是定义了 API的原数据,具体的事件推送给目标端服务的时候,传递的一些参数以及每个参数传递什么内容是事件规则在选择 api 端点之后进行配置的时候定义的。可以这样去理解,api 端点是对 api 的描述,规则 api 端点则是对api 参数的每个值如何传递进行了定义。有的时候存在多个规则会往同一个目标服务 api 进行事件投递的场景,那如果这个时候没有 api 端点,一旦需要修改某一个API的参数,那需要修改所有的规则,这个是相当麻烦的,但是如果将这个目标服务的 api 定义成一个 api 端点,那只需要去修改 api 端点的一个配置,那么所有依赖这个 api 端点的规则都会同步自动更新,这里本质上是因为制定的事件的规则的目标,对api的依赖是一个引诱。
6.面向 API 端点的产品间集成
有了api端点,相当于是建了一条与微服务之间的一个快速通道,那就可以与事件中心轻松地对服务进行集成编排,可以将需要的事件实时同步给微服务,也可以通过事件的方式去驱动微服务的运行。尤其是对一些 saas 的服务,因为可能并没有二次开发能力去修改saas 服务里面的代码,这是非常困难的。但是一般 saas 服务都会暴露 API 可以通过 eventbridge 将事件通过 API 端点的方式推送给对应的 saas服务,这个是比较容易的。最后一起看一下api端点的应用场景。
四、应用场景案例
1.与内部微服务集成:将 OSS 事件推送到内部微服务
回到一开始的例子,如何将 oss 事件推送到用户内部的微服务。如果使用 api,首先得创建一个 connection,用来定义这个微服务所需要的连接信息,这里定义创建的 connection 名称为 Micro service connection,选择进程配置 api Key,api key name 选择 token,api key value选择 event bridge,点击确定,这样的话,连接配置就创建完了。
再创建一个 API端点,输入端点的名称,目标地址输入之前的web hook 作为模拟的后台微服务,Http method 选择post。Connection 选择刚刚创建的配置信息。点击确定。这样 api 端点的服务就已经创建完了。
然后回到 default 总线创建一个规则。筛选出需要推送的 oss 事件,将oss 事件推送到刚刚创建的API端点上。这里面可以设置 http 一些额外参数,设置 header 为加一个 source,Value选择能clut evenst的 source 字段,还可以再增加一个body,可以再增加一个Query 设置为固定值,value 也是固定值,这样规则就创建完了,那相比原先的HTTP这里可以看到可以去灵活的去设置 HTTP 参数,包括 header、body、Query,这样的有个好处是可以模拟所有 API方式,那这里可能会有一个疑问,就是如果规则中配置的参数和connection中默认的参数冲突了。因为它默认方式也会通过 http 等方式进行,那一旦冲突,那这个会被覆盖吗?这里是这样的,就是认为 connection 是连接是第一优先级的。所以当两边的参数冲突时会以 CONNECTION 的配置的参数为准。
先把 web hook 之前的记录删掉,让整个服务出一个待起伏的状态,再往 Oss 事件里面上传一个文件,文件上传成功,这里面看到 query 就是刚才设的字段,然后可以看到 haeder 里面有 token 信息,还有 source 字段 oss 以及body 完整地记录了 clut events 中的 data 信息。
2. 与 saas 服务集成:通过 event 集成 jenkins 触发构建部署
再来看一个例子,通过event去集成 jenkins服务,轻松的去触发jenkins 构建和部署,jenkins 大家已经很熟悉了很多公司都会通过Jenkins来去做实现代码的自动构建测试和部署,这里在demo上部署了 jenkins 服务,Jenkins api 默认支持 message 请求模式,所以在 jenkins 里面可以为自己的账号去申请一个 api token。
这里生成了一个密码串,回到event bridge里面创建一个jkenkins 的 connection,用户名输入 jenkins 账号名,密码就是刚才已经生成的密码串,点击确定,这样 jenkins 连接配置就创建完了。接着创建一个去触发 jenkins job构建的api。连接配置选择刚刚创建的conection,点击确定,创建完了。然后创建一个自定义事件总线,输入事件源名称,输入事件规则名称,默认可以过滤所有的事件,然后选择 api 端点,选择刚刚创建的api服务,这里同样可以设置一些对应的参数信息,然后点击创建,这样一个触发 jenkins构建部署规则就创建好了。
现在可以通过页面或者SDK往总线去发送一条事件,回到 jenkins 页面,看到 jenkins 收到了 eventbridge 事件,并且触发了一次构建部署。