当前位置: 首页 > news >正文

系统中间件与云虚拟化-serverless-基于阿里云函数计算的云工作流CloudFlow设计与体验

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 1. 实验系列
  • 2. 实验目的
  • 3. 实验要求
  • 4. 实验环境
    • 4.1 获取云工作流免费额度
    • 4.2 创建用于执行云工作流的角色
    • 4.3 开通事件总线EventBridge
  • 5. 核心步骤
    • 5.1 构建并部署数据上传接口
    • 5.2 创建云工作流
    • 5.3 配置执行工作流角色
    • 5.4 编排数据上报FC
    • 5.5 编排告警邮件发送FC
    • 5.6 编排选择步骤
    • 5.7 修改现有FC路由以适配云工作流调用
    • 5.8 云工作流测试
    • 5.9 模拟温湿度数据上报
  • 总结


前言

1. 实验系列

·Serverless & DevOps 系列

2. 实验目的

·理解并掌握阿里云CloudFlow的基本概念,及其与函数计算的可视化编排工具,能够按需设计CloudFlow,通
过编排多个函数计算的自动执行工作流,从而构建服务接口

3. 实验要求

本实验将设计并实现一个基于阿里云CloudFlow和FC的温湿度数据监控及告警模拟系统。系统要求在温湿度
数据上报超过预设阀值时,通过调用告警接口发送邮件通知管理员。具体任务如下:
1,构建并部署数据上报接口:实现一个新的FC,作为数据上报接口,通过HTTP接收模拟的温湿度数据。在该函
数中,对温湿度值进行判断:
。如果未超过预设的安全阈值,返回正常状态。
。如果超过预设阈值,则调用实验一中的告警FC,向管理员发送告警邮件。
2.编排云工作流:创建阿里云CloudFlow,并将数据上报FC和实验一中的告警FC进行编排,使它们按顺序执
行,实现自动化的数据监控和告警流程。
3.云工作流测试:
·创建一个HTTP形式的工作流调度,作为对外暴露数据上报入口。
。使用Apifox工具模拟边缘设备向云端上报温湿度数据,通过CloudFlow平台的可视化界面查看工作流的执
行情况,体验CloudFlow在编排FC时的可视化优势。

在这里插入图片描述

4. 实验环境

4.1 获取云工作流免费额度

购买链接

控制台

4.2 创建用于执行云工作流的角色

RAM访问控制台角色管理

点击创建角色

在这里插入图片描述

因为是给云工作流提供的角色,所以选云服务

在这里插入图片描述
然后进入角色详情页面,为其分配权限

一个是 AliyunFCFullAccess,用于管理函数计算,调用FC

AliyunFnFFullAccess
用于管理函数工作流,用于操作工作流
AliyunEventBridgeFullAccess管理事件总线,用于后续创建工作流调度
在这里插入图片描述

4.3 开通事件总线EventBridge

事件总线控制台

免费开通
然后对EventBridge授权,才可以接收事件

在这里插入图片描述
点击一键授权

5. 核心步骤

5.1 构建并部署数据上传接口

import datetimefrom sanic import Sanic
from sanic.response import jsonapp = Sanic("MyApp")#温度阈值
t_threshold = (25,28)
#湿度阈值
h_threshold = (30,33)# if t_out_flag or h_out_flag:
#     "status": 1
# else:
#     "status": 0@app.route("/upload",methods=["POST"])
async def data_upload(request):try:data = request.jsonsn = data.get("sn")temperature = data.get("temperature")humidity = data.get("humidity")if not all([sn,temperature,humidity]):return json({"error": "Missing sn, temperature, or humidity"}, status=400)#判断温湿度是否超过阈值#t_out_flag为true就表示超过了阈值t_out_flag = not (t_threshold[0]<=temperature<=t_threshold[1])h_out_flag = not (h_threshold[0]<=humidity<=h_threshold[1])email_body = generate_email_body(sn,temperature,humidity,t_threshold,h_threshold)res = {"status" : 1 if t_out_flag or h_out_flag else 0,"message" : "异常" if t_out_flag or h_out_flag else "正常","data" : {#需要自定义收件人邮箱"recipient":"zjdsxc12@qq.com","subject":"告知邮箱-温湿度异常","body":email_body}if t_out_flag or h_out_flag else True,}return json(res)except Exception as e:return json({"error": str(e)}, status=500)
if __name__ == "__main__":app.run(host="0.0.0.0",port=9000)# 作用是允许在字符串中直接嵌入变量或表达式,语法是用 {} 包裹变量名或计算式
def generate_email_body(sn,temperature,humidity,t_threshold,h_threshold):return (f"告警通知:\n\n"f"当前设备{sn}的温湿度数据超出正常范围。\n\n"f"设备温度:{temperature}°c\n"f"温度阈值:{t_threshold[0]}°c-{t_threshold[1]}°c\n\n"f"设备湿度:{humidity}%\n"f"湿度阈值:{h_threshold[0]}%-{h_threshold[1]}%\n\n"f"请尽快检查设备并采取相应措施。\n\n"f"时间:{datetime.datetime.now().isoformat()}")if __name__ == "__main__":app.run(host="0.0.0.0",port=9000)

FC函数列表创建函数fun-temperature-and-humidty-data-upload

和以前那个函数是一样的操作,记得关闭授权,记得导入自定义公共层

5.2 创建云工作流

云工作流控制台
地域要和FC控制台保持一致
点击创建工作流
采用空白画布,快速模式(因为耗时短)
在这里插入图片描述

5.3 配置执行工作流角色

在这里插入图片描述

点击右上角的工作流配置

在这里插入图片描述

点击保存,配置角色的原因是为了让工作流有角色的权限

5.4 编排数据上报FC

在这里插入图片描述

点这个,画布编辑

删除helloword
然后从左侧拖入InvokeFunction
在这里插入图片描述
然后给InvokeFunction进行配置

在这里插入图片描述
名字和FC函数名一样,函数调用选择同步调用

点击切换YAML编辑
添加一行或者修改

body.$: $Input.body

在这里插入图片描述

在这里插入图片描述

在点击输出配置
在这里插入图片描述

在这里插入图片描述

5.5 编排告警邮件发送FC

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

5.6 编排选择步骤

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
这样工作流就完成了

5.7 修改现有FC路由以适配云工作流调用

在这里插入图片描述

5.8 云工作流测试

在这里插入图片描述

返回工作流详情,点击创建

在这里插入图片描述

在这里插入图片描述

这里点击详情可以获取公网ip

5.9 模拟温湿度数据上报

在这里插入图片描述
注意url就是工作流详情里面的公网ip地址,不用+upload

在这里插入图片描述
在这里插入图片描述

这里显示这个就成功了

点击详情

在这里插入图片描述
绿色是实际运行步骤

注意有个错误点
在这里插入图片描述

这里应该改为int

在这里插入图片描述

我们再来观摩

在这里插入图片描述
上一个流的输出就是下一个流的输入

在这里插入图片描述

在这里插入图片描述
再次发送请求40度的了

在这里插入图片描述

邮件也来了

总结

http://www.dtcms.com/a/385889.html

相关文章:

  • springboot netty 客户端网络编程入门与实战
  • TCP/IP模型
  • 智慧用电安全管理系统的核心优势
  • flutter结合NestedScrollView+TabBar实现嵌套滚动
  • 基于定制开发开源AI智能名片S2B2C商城小程序的社群团购线上平台搭建研究
  • DEDECMS 小程序插件简介 2.0全新上线
  • 详解 Spring Boot 单元测试:@SpringBootTest 与 JUnit 依赖配置及环境注入
  • JMeter元件简介与JMeter测试计划
  • 陪诊小程序:让医疗关怀触手可及
  • n*n矩阵方程组Ax=b,使用Eigen矩阵库常用解法介绍
  • IvorySQL 4.6:DocumentDB+FerretDB 实现 MongoDB 兼容部署指南
  • UART,IIC,SPI总线(通信协议)
  • 记录一次小程序请求报错:600001
  • 光谱相机的新兴领域应用
  • GO学习记录十——发包
  • OpenLayers数据源集成 -- 章节十六:XML图层详解:OpenStreetMap数据的动态加载与智能样式渲染方案
  • vector 模拟实现 4 大痛点解析:从 memcpy 到模板嵌套的实战方案
  • tuple/dict/list 这三个数据类型在取值时候的区别
  • 用Python实现自动化的Web测试(Selenium)
  • Spring Boot 2.5.0 集成 Elasticsearch 7.12.0 实现 CRUD 完整指南(Windows 环境)
  • 第九章:使用Jmeter+Ant+Jenkins实现接口自动化测试持续集成
  • 使用IP的好处
  • 育碧确定《AC影》3月20日发售并分享系列游戏首发数据
  • 容器热升级机制在云服务器零停机部署中的实施规范
  • 贪心算法应用:时间序列分段(PAA)问题详解
  • 微信小程序开发教程(十五)
  • 语音DDS系统架构与实现方案:车机与手机语音助手的差异分析
  • 手机群控平台的工作效率
  • DBAPI免费版对比apiSQL免费版
  • node.js在vscode中npm等出现的一个问题