写点什么

使用 Amazon CloudWatch Events 构建无服务器管道

  • 2019-09-30
  • 本文字数:2423 字

    阅读完需:约 8 分钟

使用 Amazon CloudWatch Events 构建无服务器管道

由 AWS 无服务器精英 Forrest Brazeal 撰写的客座博文。Forrest 是 Trek10, Inc. 的高级云架构师,Trek10 上 Think FaaS 无服务器播客的主持人,以及无服务器社区研讨会和活动的常驻演讲者。


事件与无服务器的关系就像烘豆与烧烤一样。无服务器的理念意即专注于提供业务价值的代码和配置。事实证明,在很多时候,这意味着处理事件:对应于外部世界发生事件的结构化数据。可以创建仅响应事件触发器的无服务器应用程序,而不是维护在轮询时占用资源的长时间运行的服务器任务。


在使用 AWS 中的事件时,我有很多选择:Amazon Kinesis 数据流、Amazon Simple Notification Service (SNS)、Amazon Simple Queue Service (SQS) 等,具体取决于我的要求。最近,我一直在使用一个名称中包含“event”字样的服务:Amazon CloudWatch Events。


CloudWatch Events:无服务器事件处理中保存最完好的密钥


最初知道 CloudWatch 是一项收集我的 Lambda 日志,并允许我按计划运行各项功能的服务。但 CloudWatch Events 还允许我使用 CloudWatch API 发布自己的自定义事件。它对 SNS 提供类似的定价和分发保证,并支持将大量 AWS 服务作为目标。


最重要的是,我甚至不必配置事件总线 — 因为它就在 CloudWatch 控制台中。现在,我可以使用 boto3 AWS SDK for Python 发布一个事件:


import boto3cw = boto3.client('cloudwatch')cw.put_events(    Entries=[        {            'Source': 'my.app.event',            'DetailType': 'MY_EVENT_TYPE',            'Detail': '{"my_data":"As a JSON string"}'        }    ])
复制代码


简而言之,CloudWatch Events 为我提供了一个完全托管的事件管道,支持任意数量的使用者,通过它我可以删除任何想删除的 JSON 字符串。这对于构建无服务器应用程序非常有用。

事件驱动架构实际操作

我每天在 Trek10 上为客户构建云原生解决方案。我经常将事件驱动架构当作一种将旧版系统迁移到无服务器的强大方法,使下游集成等操作更容易。以下是我最喜欢的几个模式:


• 绞杀遗留数据库


• 设计事件源应用程序

绞杀遗留数据库

“绞杀者模式”隐藏了包装 API 背后的遗留系统,同时逐渐将用户迁移到新界面。Trek10 之前曾写过这个。流式传输变更为云,因为事件是在关闭遗留数据库的同时打开报告和分析用例的一个极佳方式。下图显示了将遗留数据库写入事件。



此模式也可以以其他方式工作:我可以将新数据写入 CloudWatch Events,将其用于现代数据源,并创建第二个将数据同步回遗留系统的消费者。


##设计事件源应用程序


事件溯源仅仅意味着将系统状态中的变更视为事件,将它们发布在分类帐或总线上,以供不同的下游应用程序使用。


通过使用 CloudWatch Events 作为集中总线,可以对事件进行清理记录,如以下事件验证流程图所示。



验证功能确保只有符合应用程序标准的事件才会被标记为“有效”,并且提供给下游消费者使用。默认总线处理大量事件(记住,服务日志会传到这里!),因此设置仅与我关心的事件匹配的规则非常重要。


CloudWatch Events 通过提供单一总线来简化这些模式,但可以在其中应用筛选条件和订阅消费者,而无需预置或维护任何基础设施。而这才刚刚开始。

用例:使用 CloudWatch Events 进行多帐户事件处理

当我开始连接多个 AWS 账户时,CloudWatch Events 变得很有意思。通过使用过滤规则来选择转发哪些事件,在不同帐户中的 CloudWatch Event 总线之间建立信任关系变得轻而易举。


例如,想象一下大型企业 AnyCompany 的小部件处理系统。AnyCompany 有许多不同的开发团队,每个团队都使用自己的 AWS 账户。某些服务在检查仓库或在全国旅行时,会生成有关小部件的信息。另一些服务需要这些数据来运行报告或创新新产品。


假设服务 A 生成有关新小部件的信息,服务 B 希望实时查看有关小部件的聚合,而服务 C 需要有关小部件的历史数据以进行报告。完整的事件流可能如下图所示。



1.服务 A 使用以下事件正文将新的小部件事件发布到其 AWS 账户中的 CloudWatch Events:


{            'Source': 'cwi.servicea',            'DetailType': 'NEW_WIDGET',            'Detail': '{"widget_id":"abc123"}'}
复制代码


2.筛选规则将带 cwi.servicea 标记的事件转发到中心事件处理帐户。使用 CloudFormation,它们可以按如下方式定义规则:


CentralForwardingRule:    Type: AWS::Events::Rule    Properties:      描述:发送事件至中心账户的规则      EventPattern:        source:          - cwi.servicea      Targets:        - Arn: !Sub arn:aws:events:${CENTRAL_ACCOUNT_REGION}:${CENTRAL_ACCOUNT_ID}:event-bus/default          Id: CentralTarget          RoleArn: <IAM ROLE WITH ACCESS TO PUT CW EVENTS> 
复制代码


3.该事件根据其标准进行验证。


4.使用新的源 valid.cw.servicea 在中心事件总线上重新发布有效事件。这一点很重要,因为为避免无限循环,单个事件只能转发一次。


5.筛选规则将有效事件转发到服务 B 的 AWS 账户,在该账户中,它更新连接到 AWS AppSync API 的 DynamoDB 表。


6.第二条规则将同一事件转发到 Service C 帐户,在该帐户中,它通过 Kinesis Data Firehose 流向 Amazon S3 存储桶,以便使用 Amazon Athena 进行分析。


CloudWatch Events 在这里提供的是一个解耦系统,主要使用“即插即用”服务,但为未来的创新提供了灵活性。

充分利用云

我喜欢 CloudWatch Events 的最大原因是什么? 这是一个奇妙的原生云服务。除了观察 AWS 服务限制之外,几乎不需要代码,也没有任何操作职责。我甚至不需要部署任何项目就可以开始使用该服务。然而,在表面之下,我正在使用一个强大的 AWS 基础设施,它可以毫不费力地支持复杂的分布式应用程序。


这非常接近理想的无服务器应用程序。每次我制作事件驱动应用程序时,都会确保考虑 CloudWatch Events 可以带来什么。


本文转载自 AWS 技术博客。


原文链接:


https://amazonaws-china.com/cn/blogs/china/building-serverless-pipelines-with-amazon-cloudwatch-events/


2019-09-30 15:18855
用户头像

发布了 1865 篇内容, 共 133.0 次阅读, 收获喜欢 81 次。

关注

评论

发布
暂无评论
发现更多内容

区块链技术推动自然资源领域信息化发展

13828808769

区块链+ #区块链#

Hive相关的总结

大数据技术指南

hive 4月日更

架构实战营-模块1-作业

泄矢的呼啦圈

架构实战营

雄安区块链实验室副主任李军:把区块链植入数字雄安

CECBC

区块链

Redis split-brain 脑裂

escray

redis 学习 极客时间 Redis 核心技术与实战 4月日更

Linux chmod命令

一个大红包

4月日更

树莓派简介

IT蜗壳-Tango

IT蜗壳教学 4月日更

Kafka又出问题了!

冰河

kafka 消息队列 消息中间件 异步编程

区块链BaaS平台,创造不一样的服务

电微13828808271

区块链+

聪明人的训练(三)

Changing Lin

4月日更

Java一套拳法刷掉n个遍历树的问题 John 易筋 ARTS 打卡 Week 43

John(易筋)

ARTS活动

【死磕JVM】给同事讲了一遍GC后,他要去面试,年轻人,就是容易冲动!

牧小农

JVM 垃圾回收 垃圾收集 垃圾回收算法

制作颜色选择器(全)

空城机

JavaScript Vue 大前端 4月日更 颜色选择器

用 Sublime Text 编辑 Markdown

U2647

sublime-text markdown 4月日更

智慧公安重点人员管控系统搭建,助推公安智慧化发展

13828808769

区块链+ #区块链#

大数据计算生态之数据计算(一)

小舰

4月日更

重构: 自己挖的坑自己填

夏兮。

Java 重构 测试 单元测试

区块链BaaS平台+BI大数据系统

电微13828808271

区块链+

“圈粉”行业龙头 数字人民币搅动投资江湖

CECBC

数字人民币

不想写代码偷懒之配置化

顿晓

大前端 配置化开发 4月日更

区块链赋能文化旅游,推动旅游行业转型升级

13828808769

区块链 #区块链#

打完新冠疫苗后要注意的两件事

石云升

28天写作 新冠疫苗 4月日更

配置化开发是否可行?

顿晓

重构 配置化开发 4月日更

智慧党建系统搭建,干部管理平台开发

从小白程序员到大厂高级技术专家我看过哪些书籍?

冰河

程序员 程序人生 冰河 推荐书单

Kafka的再平衡机制

五分钟学大数据

kafka 4月日更

机器学习 | 数据缩放与转换方法(1)

披头

Python OpenCV 之图像乘除与像素的逻辑运算,图像处理取经之旅第 17 天

梦想橡皮擦

Python OpenCV 4月日更

重点人员可视化管理平台搭建,公安指挥调度平台

基于角色访问控制RBAC权限模型的动态资源访问权限管理实现

crudapi

spring security 权限 rbac crudapi 角色

架构训练营模块1作业-江哲

江哲

作业

使用 Amazon CloudWatch Events 构建无服务器管道_语言 & 开发_亚马逊云科技 (Amazon Web Services)_InfoQ精选文章