EventBridge 特性介绍|以 IaC 的方式使用 EventBridge

简介:本文将重点介绍 EventBridge 和 IaC 的重点概念和特性,然后演示如何应用 IaC 理念自动化部署 EventBridge 来使用这些概念和特性。

作者:王川(弗丁)

引言

EventBridge 作为构建 EDA 架构的基础设施,通过一些核心概念和特性提供了灵活丰富的事件收集、处理和路由的能力。对于不少用户来说,通过控制台里的便捷的引导来使用 EventBridge 应该是最快的上手方式。此外,也有很多用户面临着大量的云产品的管理,使用控制台管理每一个资源的方式变成了沉重的手工操作负担。

为了解决这个问题,现在已经能够通过 OpenAPI、terraform 等方式将 EventBridge 的能力方便快捷的带给用户。本文将重点介绍 EventBridge 和 IaC 的重点概念和特性,然后演示如何应用 IaC 理念自动化部署 EventBridge 来使用这些概念和特性。

EventBridge 概述

事件驱动架构

事件驱动架构是一种松耦合、分布式的驱动架构,收集到某应用产生的事件后实时对事件采取必要的处理,紧接着路由至下游系统,无需等待系统响应。使用事件总线 EventBridge 可以构建各种简单或复杂的事件驱动架构,以标准化的 CloudEvents 1.0 协议连接云产品和应用、应用和应用等。

事件驱动架构体系架构具备以下三个能力:

  • 事件收集:负责收集各种应用发生的事件,如新建订单,退换货订单等其他状态变更;
  • 事件处理:对事件进行脱敏处理,并对事件进行初步的过滤和筛选;
  • 事件路由:分析事件内容并将事件路由分发至下游产品。

事件驱动架构具有以下优势:

  • 降低耦合降低事件生产者和订阅者的耦合性。事件生产者只需关注事件的发生,无需关注事件如何处理以及被分发给哪些订阅者;任何一个环节出现故障,都不会影响其他业务正常运行;
  • 异步执行:事件驱动架构适用于异步场景,即便是需求高峰期,收集各种来源的事件后保留在事件总线中,然后逐步分发传递事件,不会造成系统拥塞或资源过剩的情况;
  • 可扩展性:事件驱动架构中路由和过滤能力支持划分服务,便于扩展和路由分发;
  • 敏捷性:事件驱动架构支持与各种阿里云产品和应用集成,支持事件路由至任何系统服务,提供各种敏捷高效的部署方案。

使用 EventBridge 构建 EDA 架构

事件总线 EventBridge 是阿里云提供的一款无服务器事件总线服务。EventBridge 提供的几个核心概念,可以满足构建 EDA 架构的需要。

事件总线 EventBridge 支持以下事件源:

  • 阿里云官方事件源
  • 自定义事件源

事件总线 EventBridge 的事件总线包括以下类型:

  • 云服务专用事件总线:一个无需创建且不可修改的内置事件总线,用于接收您的阿里云官方事件源的事件;阿里云官方事件源的事件只能发布到云服务专用总线;
  • 自定义事件总线:需要您自行创建并管理的事件总线,用于接收自定义应用或存量消息数据的事件;自定义应用或存量消息数据的事件只能发布到自定义总线。

在 EventBridge 中,一个事件规则包含以下内容:

  • 事件模式:用于过滤事件并将事件路由到事件目标;
  • 事件目标:包括事件的转换和处理,负责消费事件。

EventBridge 提供了简洁的事件模式匹配语法,同时具备灵活的事件转换能力,后面将会通过演示来展示一些具体的例子。

此外,EventBridge 还提供了一些增强能力,这些能力使得 EDA 架构中流经的事件更加透明,具备了开箱即用的观测和分析能力:

  • 事件追踪:可以查看发布到事件总线 EventBridge 的事件内容和处理轨迹;
  • 事件分析:对发布到事件总线的各种事件进行查询分析处理和可视化图表展示,以便发现事件内在价值。

IaC 简介

在介绍完事件总线 EventBridge 的相关基础内容后,接下来一起了解下 IaC。在 DevOps 的实践中,IaC 是非常重要的部分,通过将基础设施代码化,版本化,便可以轻松的借助版本控制工具来提供 single source of truth、协调多人合作的变更、实施严格的 review、借助一些 CI/CD pipeline 工具(甚至 GitOps)来自动触发部署。软件系统的开发者仅付出很小的努力去描述需求,就可以在几分钟后得到所需的虚拟机、网络等云上的服务,极大的缩短了部署时间,同时还能够保证多个环境的配置一致性,通过减少人为操作也降低了引入错误的概率。

IaC的代码实践中一般有两种方式,命令式和声明式。

  • 命令式:顾名思义,需要明确发出每一个动作的指令,描述的是 How,比如“创建一台 xx 规格的 ECS”。代码需要对每一步动作的顺序仔细编排,处理各种可能的错误,尤其要注意处理好每次变更对已经存在的资源的影响,否则稍有不慎就可能造成服务中断。举例来说,作为开发者可以通过自己熟悉的编程语言调用阿里云的 OpenAPI 来管理资源,因为这些 API 是类似 Create、Describe、Delete 等操作,这就是一种命令式的 IaC 实践。
  • 声明式:意味着开发者仅描述自己的需求终态是什么样子,即描述 What,比如“一台 xx 规格的 ECS”。熟悉 Kubernetes 的同学应该对这个概念很熟悉了。IaC 工具可以通过描述资源之间的依赖关系自动编排顺序,如果有已经存在的资源,则比对期望的状态和实际状态的差异,并根据差异做出更新;如果不存在,需要进行创建。可以看出,声明式对开发者非常友好,极大的降低了开发者的心智负担。

IaC 带来的优势:

  • 降低成本:有效管理资源,并减少为此投入的人力;
  • 提升效率:加快资源交付和软件部署的速度;
  • 风险控制:
  • 减少错误;
  • 提高基础架构一致性;
  • 消除配置偏移

terraform 作为 IaC 领域的佼佼者,提供了强大的自动化管理基础设施的能力。生态丰富,很多云厂商都提供了官方插件,阿里云的大多数产品(包括 EventBridge)都对 terraform 做了很全面的支持,使得跨多云部署基础设施变得极其简单。既然是 IaC,terraform 提供了自己的语言 HCL(hashicorp configuration language),HCL 具有类似 json 的简洁的语法,通过声明式的资源描述,可以让开发者快速上手。

动手实践

准备工作

  • 安装 terraform cli 工具,可以参见 Terraform CLI Documentation | Terraform by HashiCorp 的内容。
  • 创建一个 tf 文件 terraform.tf,内容如下(需要替换<>内的值)
     
provider "alicloud" {access_key = "<your access key>"secret_key = "<your secret key>"region = "<region id>"
}

案例1:通过钉钉监控云上资源变化

假设一个用户使用了很多云上的资源作为生产环境,需要感知线上资源的变更操作,一个可行的方案是利用 EventBridge 将来自于 ActionTrail 的审计事件投递到用户的钉钉。

首先根据钉钉官方文档创建一个机器人,记下 webhook url 和加签的秘钥,接下来会用到。

创建一个 tf 文件 1_actiontrail2dingding.tf,内容如下(需要替换<>内的值)

# 案例1:通过钉钉监控云上资源变化
# 目标:
# - 熟悉部署使用EventBridge的default总线
# - 熟悉EventBridge的事件模式匹配
# - 熟悉EventBridge的事件转换配置# 声明一个default总线上的规则
resource "alicloud_event_bridge_rule" "audit_notify" {# default总线默认存在,所以这里可以直接使用event_bus_name = "default"rule_name      = "audit_notify"description    = "demo"# 通过后缀匹配的方式过滤来自所有云产品事件源的ActionTrail:ApiCall事件# 其他更多模式匹配的介绍可以查阅文档:https://help.aliyun.com/document_detail/181432.htmlfilter_pattern = jsonencode({"type" : [{"suffix" : ":ActionTrail:ApiCall"}]})targets {target_id = "test-target"endpoint  = "<your dingtalk bot webhook url>"# type的取值可以查阅文档:https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/event_bridge_rule#typetype      = "acs.dingtalk"# 每个事件目标都有一组对应的param_list,具体可以查阅文档:https://help.aliyun.com/document_detail/185887.html# 每一个param的form关系到事件转换的配置,可以查阅文档:https://help.aliyun.com/document_detail/181429.htmlparam_list {resource_key = "URL"form         = "CONSTANT"value        = "<your dingtalk bot webhook url>"}param_list {resource_key = "SecretKey"form         = "CONSTANT"value        = "<your dingtalk bot secret key>"}# 这里展示了TEMPLATE类型的事件转换描述# value是使用jsonpath引用事件内容的字典,template则是模板内容,EventBridge最终会根据这两者结合事件本身渲染出这个参数的值param_list {resource_key = "Body"form         = "TEMPLATE"value        = jsonencode({"source": "$.source","type": "$.type""region": "$.data.acsRegion","accountId" : "$.data.userIdentity.accountId","eventName" : "$.data.eventName",})template = jsonencode({"msgtype" : "text","text" : {"content": "来自 $${source} 的 $${type} 审计事件:$${accountId} 在 $${region} 执行了 $${eventName} 操作"}})}}
}

在命令行窗口依次执行命令:

  • 初始化 terraform init
  • 预览变更 terraform plan
  • 应用变更 terraform apply

在云产品控制台进行操作,这里以 KMS 为例

钉钉上收到消息通知

在 EventBridge 控制台查看事件轨迹

案例 2:自定义总线触发 FunctionCompute

假设一个用户的应用会产生一些事件,其中一个链路是通过 FunctionCompute 对这些事件进行弹性的处理。那么就可以通过 EventBridge 的自定义事件源和函数计算事件目标来实现这个方案。

创建一个模拟对事件进行处理的 python 脚本文件 src/index.py,内容如下:

# -*- coding: utf-8 -*-
import loggingdef handler(event, context):logger = logging.getLogger()logger.info('evt: ' + str(event))return str(event)

创建一个 tf 文件 2_trigger_function.tf,内容如下(需要替换<>内的值)

# 案例2:自定义总线触发FunctionCompute
# 目标:
# - 熟悉部署使用EventBridge的自定义总线
# - 熟悉"自定义应用"事件源配置
# - 熟悉“FunctionCompute”事件目标配置# 由于用户自己产生的事件需要投递到自定义总线,这里声明一个叫demo_event_bus的自定义总线
resource "alicloud_event_bridge_event_bus" "demo_event_bus" {event_bus_name = "demo_event_bus"description    = "demo"
}# 声明一个在demo_event_bus总线上的自定义事件源,用于通过sdk或者控制台向EventBridge投递事件
resource "alicloud_event_bridge_event_source" "demo_event_source" {event_bus_name         = alicloud_event_bridge_event_bus.demo_event_bus.event_bus_nameevent_source_name      = "demo_event_source"description            = "demo"linked_external_source = false
}# 声明一个叫fc_service的函数计算服务,publish=true意味着会立即部署上传的函数代码。
resource "alicloud_fc_service" "fc_service" {name        = "eb-fc-service"description = "demo"publish     = true
}# 将前面准备的python脚本文件打包成zip用于部署到函数计算
data "archive_file" "code" {type        = "zip"source_file = "${path.module}/src/index.py"output_path = "${path.module}/code.zip"
}# 声明一个fc_service服务中的函数,其中filename引用了上面描述的zip包,会将这个代码包上传。
resource "alicloud_fc_function" "fc_function" {service     = alicloud_fc_service.fc_service.namename        = "eb-fc-function"description = "demo"filename    = data.archive_file.code.output_pathmemory_size = "128"runtime     = "python3"handler     = "index.handler"
}# 声明一个在demo_event_bus总线上的规则
resource "alicloud_event_bridge_rule" "demo_rule" {event_bus_name = alicloud_event_bridge_event_bus.demo_event_bus.event_bus_namerule_name      = "demo_rule"description    = "demo"# 通过匹配source过滤来自于前面创建的自定义事件源的事件filter_pattern = jsonencode({"source" : ["${alicloud_event_bridge_event_source.demo_event_source.id}"]})targets {target_id = "demo-fc-target"# type的取值可以查阅文档:https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/event_bridge_rule#typetype      = "acs.fc.function"endpoint  = "acs:fc:<region id>:<your account id>:services/${alicloud_fc_service.fc_service.name}.LATEST/functions/${alicloud_fc_function.fc_function.name}"param_list {resource_key = "serviceName"form         = "CONSTANT"value        = alicloud_fc_service.fc_service.name}param_list {resource_key = "functionName"form         = "CONSTANT"value        = alicloud_fc_function.fc_function.name}param_list {resource_key = "Qualifier"form         = "CONSTANT"value        = "LATEST"}# 注意form=ORIGINAL意味着每次投递事件都会将事件的原始内容作为这个参数的值param_list {resource_key = "Body"form         = "ORIGINAL"}}
}

在命令行窗口依次执行命令

  • 初始化 terraform init
  • 预览变更 terraform plan
  • 应用变更 terraform apply

在控制台模拟自定义事件源发布事件

在 FunctionCompute 的控制台页面查看函数调用日志

在 EventBridge 控制台查看事件轨迹

总结

EventBridge 作为构建 EDA 架构的基础设施,通过一些核心概念和特性提供了灵活丰富的事件收集、处理和路由的能力,并支持通过 OpenAPI、terraform 等方式将这些能力方便快捷的带给用户。本文介绍了 EventBridge 和 IaC 的重点概念和特性,然后演示了如何应用 IaC 理念自动化部署 EventBridge 来使用这些概念和特性。

期待大家可以发掘更多利用 EventBridge 快速搭建 EDA 架构的 idea,并使用 terraform 快捷的将这些 idea 变为现实。

相关链接

[1] 阿里云 terraform 文档

Terraform - 帮助中心 - 阿里云

[2] terraform registry 文档

Terraform Registry

[3] 钉钉官方文档

自定义机器人接入 - 钉钉开放平台

原文链接

本文为阿里云原创内容,未经允许不得转载。 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/511069.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何使用 Serverless Devs 部署静态网站到函数计算(上)

简介&#xff1a;部署个静态网站到函数计算~ 前言 公司经常有一些网站需要发布上线&#xff0c;对比了几款不同的产品后&#xff0c;决定使用阿里云的函数计算&#xff08;FC)来托管构建出来的静态网站。 FC 弹性实例自带的500 Mb 存储空间对静态网站来说简直是太充足了 。 函…

盛邦安全创始人权晓文入选IDC中国CSO名人堂十大人物

在近日举办的IDC 2022 CSO全球网络安全峰会&#xff08;中国站&#xff09;上&#xff0c;盛邦安全入选API领域推荐厂商&#xff0c;盛邦安全创始人权晓文入选“中国CSO名人堂&#xff08;十大人物&#xff09;”&#xff0c;展现了盛邦安全在网络安全创新方面的不断进取和突出…

硬核调试实操 | 手把手带你实现 Serverless 断点调试

简介&#xff1a;本文将借助 Serverless Devs 工具&#xff0c;对函数计算 (FC&#xff09;应用的断点调试步骤进行详细指导&#xff0c;手把手带你实现 Serverless 的断点调试&#xff0c;并从以下四个方面为你厘清“硬核调试”的脉络步骤&#xff0c;干货满满。 导读&#x…

兑现 Service Mesh 的新价值:精确控制“爆炸半径”

简介&#xff1a;本文分享了阿里云内部所沉淀的全链路流量打标与路由的能力&#xff0c;做出服务网格技术新体验的同时&#xff0c;很好地兑现了服务网格的新价值。 作者&#xff1a;至简 软件是以持续迭代的方式去不断演进的。某种程度上&#xff0c;我们并不担心软件不完善…

15M安装包就能玩《原神》,带你了解云游戏背后的技术秘密

简介&#xff1a;对于大多数玩家来说&#xff0c;云游戏已经不是一个陌生的概念&#xff0c;它经常和秒玩、不吃设备、大屏临场感、上手门槛低、真香等字眼一起出现在评论留言区。的确&#xff0c;对于既想尝试高品质游戏大作又不想一直卷装备的玩家来说&#xff0c;云游戏做到…

ref绑定dom的三种写法

1、字符串形式 这种字符出串写法因为效率不好&#xff0c;所以不推荐使用 语法 标签上使用ref"name" 进行绑定 方法中this.refs.name拿到dom <input ref"input1" type"text" placeholder"点击按钮弹出内容" /> <button onC…

一文看懂边缘云在广电行业的应用

简介&#xff1a;随着中国广电的5G布局在不断加速&#xff0c;各地广电运营商均已开展面向边缘云建设和业务探索。边缘云作为5G网络架构中关键一环&#xff0c;具有广覆盖、低时延、大带宽的技术特点&#xff0c;是打通智慧广电建设的“经脉”&#xff0c;对未来开展4K/8K超高清…

2022 互联网中秋月饼大赏,腾讯送火腿,字节寓意圆满,你最钟爱哪款呢?(文末有抽奖)...

整理 | 梦依丹出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09;配图来自视觉中国又是一年花好处&#xff0c;人月中秋两团圆&#xff01;今年的中秋&#xff0c;你是在家乡还是在他乡度过呢&#xff1f;无论在何处&#xff0c;只要心在一起&#xff0c;多远都不是距…

宜搭小技巧|自动计算日期时长,3个公式帮你敲定

简介&#xff1a;使用「时间函数」实现日期时长自动计算功能&#xff0c;让表单填写更轻松。 上一期&#xff0c;我们学会了如何巧用日期组件保证时间填写不出错。 今天&#xff0c;宜小搭要出差&#xff0c;由于公司要根据出差时长发放补贴&#xff0c;但手动计算出差天数太…

构造函数、实例、原型对象、继承

一、构造函数与原型对象之间的关系&#xff1a; 有一个Star构造函数&#xff0c;每一个构造函数里面都有一个原型对象&#xff0c;是通过构造函数的prototype指向这个原型对象的 同样在这个原型对象里面也有一个属性叫constructor&#xff0c;它又指回了构造函数 可以把构造函…

从中心走向边缘——深度解析云原生边缘计算落地痛点

简介&#xff1a;边缘计算平台的建设&#xff0c;以 Kubernetes 为核心的云原生技术体系&#xff0c;无疑是当前最佳的选择与建设路径&#xff1b;但是云原生体系庞大&#xff0c;组件复杂&#xff0c;将体系下沉至边缘会面临很大的挑战与困难&#xff0c;同时充满巨大的机遇及…

5G+元宇宙创新应用来了,第五届“绽放杯”5G 应用征集大赛云 XR 专题赛落下帷幕...

2022“云 XR 年度十大标杆案例”诞生&#xff01;8 月 31 日&#xff0c;第五届“绽放杯”5G 应用征集大赛云 XR 专题赛决赛在浙江杭州举办&#xff0c;经全天激烈角逐&#xff0c;“中国历代绘画大系 5G 云 XR 应用”等 10 个优秀项目脱颖而出荣获一等奖&#xff0c;并将经组委…

阿里云资深专家李国强:云原生的一些趋势和新方向

简介&#xff1a;云原生不仅仅是技术&#xff0c;更重要的是云原生技术需要和云计算进行结合&#xff0c;帮助用户构建云原生架构的应用。 2021 年 11 月 26 日&#xff0c;阿里云用户组&#xff08;AUG&#xff09;第 3 期活动在广州顺利举行。具有丰富的容器、微服务等领域经…

从建好到用好,阿里云原生微服务生态的演进

简介&#xff1a;随着微服务技术的成熟&#xff0c;微服务核心架构分层愈加清晰&#xff0c;技术标准化和产业化正在形成&#xff0c;服务治理成为用好、管好服务的必选项&#xff0c;服务网格则成为多语言微服务架构下的技术趋势&#xff0c;阿里云原生微服务生态的演进恰好映…

韵达基于云原生的业务中台建设 | 实战派

简介&#xff1a;本文将为大家分享韵达业务中台基于云原生的建设过程。主要分为三部分&#xff0c;第一部分是 IT 信息的发展规划&#xff0c;第二部分是韵达业务中台建设的详细过程&#xff0c;第三部分是对应云原生技术的支撑。 本文将为大家分享韵达业务中台基于云原生的建…

阿里云PolarDB开源数据库社区与 Tapdata 联合共建开放数据技术生态

简介&#xff1a;近日&#xff0c;阿里云PolarDB开源数据库社区宣布将与 Tapdata 联合共建开放数据技术生态。 近日&#xff0c;阿里云PolarDB开源数据库社区宣布将与 Tapdata 联合共建开放数据技术生态。在此之际&#xff0c;一直专注实时数据服务平台的 Tapdata &#xff0c…

要打造一款稳定顺滑、火遍全球的游戏?云将成为你的坚实后盾

简介&#xff1a;游戏上云&#xff0c;就选阿里云 从简单的棋牌游戏&#xff0c;到大型的角色扮演游戏&#xff0c;各式各样的游戏已经成为了互联网文娱产业的丰富内容生态。 游戏天然是一种线上内容消费&#xff0c;出海有着天然的优势&#xff0c;像《原神》等优质国产游戏…

阿里达摩院发布并开源“通义”大模型,AI底座之上促场景创新

2022 WAIC带上&#xff0c;达摩院发布并开源“通义”大模型&#xff0c;在国内率先构建了AI统一底座&#xff0c;在业界首次实现模态表示、任务表示、模型结构的统一。 9月2日&#xff0c;阿里巴巴达摩院主办世界人工智能大会“大规模预训练模型”主题论坛。会上&#xff0c;达…

EventBridge 与 FC 一站式深度集成解析

简介&#xff1a;本篇文章通过对 EventBridge 与 FC 一站式深度集成解析和集成场景的介绍&#xff0c;旨在帮助大家更好的了解面对丰富的事件时&#xff0c;如何使用 EventBridge 与 FC 的一站式集成方案&#xff0c;快速基于事件驱动&#xff08;EDA&#xff09;架构建云上业务…

react实现页面多个模块的切换

前言 这是做的一个多模块切换的一个案例&#xff0c;也是第一会这样大量的使用表单&#xff0c;大概有7&#xff0c;8个模块&#xff0c;这里用其中的一个模块来做展示 以下三张图片对应的就是三个模块了 这是第一个展示面这是第二个编辑页 这是呈现数据的页面 实现过程 …