aws(学习笔记第三十二课) 深入使用cdk(API Gateway + event bridge)

文章目录

  • aws(学习笔记第三十二课) 深入使用cdk
  • 学习内容:
    • 1. 使用`aws API Gateway`+`lambda`
      • 1.1. 以前的练习
      • 1.2. 使用`cdk`创建`API Gateway` + `lambda`
      • 1.3. 确认`cdk`创建`API Gateway` + `lambda`
    • 2. 使用`event bridge`练习`producer`和`consumer`
      • 2.1. 代码链接
      • 2.2. 开始练习
      • 2.3. 代码部署的确认
      • 2.4. 对部署进行测试

aws(学习笔记第三十二课) 深入使用cdk

  • 使用cdk生成aws API Gateway+lambda以及eventbridge等等

学习内容:

  • 使用aws API Gateway+lambda
  • 使用event bridge练习producerconsumer

1. 使用aws API Gateway+lambda

1.1. 以前的练习

  • 以前的例子
    API Gateway + lambda这个例子中已经使用了手动创建,使用练习了aws API Gateway+lambda
  • 使用cdk来创建
    这里,采用cdk的方式来创建API Gateway + lambda
    代码链接 api-cors-lambda

1.2. 使用cdk创建API Gateway + lambda

  • 整体架构
    在这里插入图片描述
  • 代码解析
    • 创建lambda函数
      	   base_lambda = _lambda.Function(self, 'ApiCorsLambda',handler='lambda-handler.handler',runtime=_lambda.Runtime.PYTHON_3_12,code=_lambda.Code.from_asset('lambda'))
      
      注意,这里没有创建VPC,因为这里不需要显示的创建VPC
      在这里插入图片描述
      • 创建API并且添加resource

                base_api = _apigw.RestApi(self, 'ApiGatewayWithCors',rest_api_name='ApiGatewayWithCors')example_entity = base_api.root.add_resource('example',default_cors_preflight_options=_apigw.CorsOptions(allow_methods=['GET', 'OPTIONS'],allow_origins=_apigw.Cors.ALL_ORIGINS)
        

        在这里插入图片描述

      • 创建LambdaIntegrationAPIlambda进行绑定

              example_entity_lambda_integration = _apigw.LambdaIntegration(base_lambda,proxy=False,integration_responses=[_apigw.IntegrationResponse(status_code="200",response_parameters={'method.response.header.Access-Control-Allow-Origin': "'*'"})])
        

        在这里插入图片描述

      • API加入method

              example_entity.add_method('GET', example_entity_lambda_integration,method_responses=[_apigw.MethodResponse(status_code="200",response_parameters={'method.response.header.Access-Control-Allow-Origin': True})])
        

        在这里插入图片描述

1.3. 确认cdk创建API Gateway + lambda

  • 执行创建的cdk
    	cdk --require-approval never deploy
    
  • 查看创建的结果
    • lambda创建结果
      在这里插入图片描述

    • API创建结果
      在这里插入图片描述

    • 确认API的调用URL
      在这里插入图片描述

    • 访问API的调用URL
      之后不要忘记cdk destroy
      在这里插入图片描述

2. 使用event bridge练习producerconsumer

2.1. 代码链接

api-eventbridge-lambda的代码链接
这里主要练习使用eventbridge,进行producerconsumer的练习。

2.2. 开始练习

  • 整体架构
    在这里插入图片描述
  • 代码解析
    • 生成producer

      			        ## Producer Lambda#event_producer_lambda = _lambda.Function(self, "eventProducerLambda",runtime=_lambda.Runtime.PYTHON_3_12,handler="event_producer_lambda.lambda_handler",code=_lambda.Code.from_asset("lambda"))event_policy = iam.PolicyStatement(effect=iam.Effect.ALLOW, resources=['*'], actions=['events:PutEvents'])event_producer_lambda.add_to_role_policy(event_policy)
      

      这里,producer被赋予权限putEvents,因为之后要向eventbridge进行putEvents操作。
      在这里插入图片描述

    • producer的处理代码

      	def lambda_handler(event, context):eventbridge_client = boto3.client('events')request_body = event["body"]if request_body is None:request_body = ""# Structure of EventBridge Eventeventbridge_event = {'Time': datetime.datetime.now(),'Source': 'com.mycompany.myapp','Detail': request_body,'DetailType': 'service_status'}logger.info(eventbridge_event)# Send event to EventBridgeresponse = eventbridge_client.put_events(Entries=[eventbridge_event])logger.info(response)# Returns success reponse to API Gatewayreturn {"statusCode": 200,"body": json.dumps({"result": "from Producer"}),}
      

      这里,使用了boto3这个python package,AWS ‌Boto3‌ 是亚马逊云服务(AWS)官方提供的 Python SDK,主要用于通过代码与 AWS 服务进行交互和管理。这里使用boto3eventbridge进行putEvents

    • consumer1consumer2

      			        ## Approved Consumer1#event_consumer1_lambda = _lambda.Function(self, "eventConsumer1Lambda",runtime=_lambda.Runtime.PYTHON_3_8,handler="event_consumer_lambda.lambda_handler",code=_lambda.Code.from_asset("lambda"))event_consumer1_rule = events.Rule(self, 'eventConsumer1LambdaRule',description='Approved Transactions',event_pattern=events.EventPattern(source=['com.mycompany.myapp']))event_consumer1_rule.add_target(targets.LambdaFunction(handler=event_consumer1_lambda))## Approved Consumer2#event_consumer2_lambda = _lambda.Function(self, "eventConsumer2Lambda",runtime=_lambda.Runtime.PYTHON_3_8,handler="event_consumer_lambda.lambda_handler",code=_lambda.Code.from_asset("lambda"))event_consumer2_rule = events.Rule(self, 'eventConsumer2LambdaRule',description='Approved Transactions',event_pattern=events.EventPattern(source=['com.mycompany.myapp']))event_consumer2_rule.add_target(targets.LambdaFunction(handler=event_consumer2_lambda))
      

      consumer1consumer2类似,就是接受到了eventbridgeevent之后,进行log输出。

      			def lambda_handler(event, context):logger.info(event)return {"statusCode": 200,"body": json.dumps({"result": "testing..."}),}
      

      在这里插入图片描述

    • consumer3使用kinesisfirehoseevent进行接受,并保存到S3 bucket

      	        ## Approved Consumer3## Create S3 bucket for KinesisFirehose destinationingest_bucket = s3.Bucket(self, 'test-ngest-bucket')# Create a Role for KinesisFirehosefirehose_role = iam.Role(self, 'myRole',assumed_by=iam.ServicePrincipal('firehose.amazonaws.com'))# Create and attach policy that gives permissions to write in to the S3 bucket.iam.Policy(self, 's3_attr',policy_name='s3kinesis',statements=[iam.PolicyStatement(actions=['s3:*'],resources=['arn:aws:s3:::' + ingest_bucket.bucket_name + '/*'])],# resources=['*'])],roles=[firehose_role],)event_consumer3_kinesisfirehose = _firehose.CfnDeliveryStream(self, "consumer3-firehose",s3_destination_configuration=_firehose.CfnDeliveryStream.S3DestinationConfigurationProperty(bucket_arn=ingest_bucket.bucket_arn,buffering_hints=_firehose.CfnDeliveryStream.BufferingHintsProperty(interval_in_seconds=60),compression_format="UNCOMPRESSED",role_arn=firehose_role.role_arn))event_consumer3_rule = events.Rule(self, 'eventConsumer3KinesisRule',description='Approved Transactions',event_pattern=events.EventPattern(source=['com.mycompany.myapp']))event_consumer3_rule.add_target(targets.KinesisFirehoseStream(stream=event_consumer3_kinesisfirehose))
      

      在这里插入图片描述

    • producer通过API Gateway进行公开

      	        # defines an API Gateway REST API resource backed by our "atm_producer_lambda" function.api = api_gw.LambdaRestApi(self, 'SampleAPI-EventBridge-Multi-Consumer',handler=event_producer_lambda,proxy=False)items = api.root.add_resource("items")items.add_method("POST")  # POST /items
      

2.3. 代码部署的确认

接下来进行cdk deploy来确认执行效果。

  • 一个producer与两个consumer,都是lambda
    在这里插入图片描述
  • 第三个consumer,一个kinesisFireHose
    在这里插入图片描述
  • APIproducer
    在这里插入图片描述

2.4. 对部署进行测试

  • API进行测试调用
    返回了正常的结果。这里,需要对请求正文request body一定要设定参数这里设置如下。
    {"item1":"123","item2":"234"}
    
    使用API调用,之后启动producerlamdba,向eventbridge进行putEvents
    在这里插入图片描述
  • consumer1consumer2进行确认
    在这里插入图片描述
  • consumer3进行确认
    这里主要是对S3 bucket进行确认。可以看到,
    producer -> event -> eventbridge -> consumer3 -> kinesis firehose -> S3 bucket
    最后cdk destroy

在这里插入图片描述

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

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

相关文章

城市霓虹灯夜景拍照后期Lr调色教程,手机滤镜PS+Lightroom预设下载!

调色教程 在城市霓虹灯夜景拍摄中,由于现场光线复杂等因素,照片可能无法完全呈现出当时的视觉感受。通过 Lr 调色,可以弥补拍摄时的不足。例如,运用基本调整面板中的曝光、对比度、阴影等工具,可以处理出画面的整体明暗…

自然语言处理:文本分类

介绍 大家好,我这个热衷于分享知识的博主又来啦!之前我们一起深入探讨了自然语言处理领域中非常重要的两个方法:朴素贝叶斯和逻辑斯谛回归。在探索的过程中,我们剖析了朴素贝叶斯如何基于概率原理和特征条件独立假设,…

PDFMathTranslate安装使用

PDF全文翻译!!!! PDFMathTranslate安装使用 它是个啥 PDFMathTranslate 可能是一个用于 PDF 文件的数学公式翻译 工具。它可能包含以下功能: 提取 PDF 内的数学公式 将数学公式转换成 LaTeX 代码 翻译数学公式的内…

【由技及道】量子构建交响曲:Jenkinsfile流水线的十一维编程艺术【人工智障AI2077的开发日志008】

摘要:当代码提交触发时空涟漪,当构建流水线穿越量子维度——欢迎来到自动化构建的终极形态。本文将揭示如何用Jenkinsfile编写量子构建乐章,让每次代码提交都成为跨维度交响乐的音符。 动机:构建系统的量子哲学 “主人啊&#xff…

K8S高可用集群-小白学习之二进制部署(ansible+shell)

一.K8S高可用集群配置概述 序言:本文从一个小白的视角进行K8S的研究和部署,采用二进制的方式是为了更清楚了分解部署流程及了解这个集群是怎么运作的,加上ansible+shell是方便在这个过程中,遇到了问题,我们可以不断的快速重复部署来测试和研究问题的所在点,本文的架构图…

【自学笔记】R语言基础知识点总览-持续更新

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 R语言基础知识点总览1. R语言简介2. R语言安装与环境配置3. R语言基础语法3.1 数据类型3.2 向量与矩阵3.3 数据框与列表 4. 控制结构4.1 条件语句4.2 循环结构 5. 函…

【编译器】VSCODE搭建ESP32-C3

【编译器】VSCODE搭建ESP32-C3 文章目录 [TOC](文章目录) 前言一、下载配置二、编译三、烧录四、参考资料总结 前言 使用工具: 1. 提示:以下是本篇文章正文内容,下面案例可供参考 一、下载配置 安装IDF,打开例程 二、编译 三…

通义千问本地配置并实现微调

通义千问本地配置并实现微调 最小Qwen模型大小942mb from modelscope import snapshot_download model_dir = snapshot_download(“qwen/Qwen2.5-0.5B”, cache_dir=“./models2.5”) Qwen2.5-0.5B:942MB from modelscope import snapshot_download model_dir = snapshot_d…

Magento2根据图片文件包导入产品图片

图片包给的图片文件是子产品的图片&#xff0c;如下图&#xff1a;A104255是主产品的sku <?php/*** 根据图片包导入产品图片&#xff0c;包含子产品和主产品* 子产品是作为主图&#xff0c;主产品是作为附加图片*/use Magento\Framework\App\Bootstrap;include(../app/boot…

力扣146 - LRU缓存

视频讲解 哈希 双向链表 为什么要用双向链表&#xff1f; 快速删除节点&#xff08;O(1&#xff09;&#xff09; 如果是单链表的话&#xff0c;删除一个节点时&#xff0c;需要从头遍历&#xff0c;找到前驱节点&#xff0c;才能修改 prev->next&#xff0c;导致 O(n)…

考研408

是否需要考研&#xff1f; 考研前期准备 目标院校 每年9月10月才会公布 考试时长3小时 数据结构 1.时间复杂度选择题计算 2.顺序表链表特点;指针、结构体语法&#xff0c;链表结点定义&#xff0c;链表头结点与头指针,常见的五种链 表&#xff0c;链表的插入删除操作;顺…

nodejs使用WebSocket实现聊天效果

在nodejs中使用WebSocket实现聊天效果&#xff08;简易实现&#xff09; 安装 npm i ws 实现 创建 server.js /*** 创建一个 WebSocket 服务器&#xff0c;监听指定端口&#xff0c;并处理客户端连接和消息。** param {Object} WebSocket - 引入的 WebSocket 模块&#xff0c…

Web网页制作(静态网页):千年之恋

一、是用的PyCharm来写的代码 二、代码中所用到的知识点&#xff08;无 js&#xff09; 这段HTML代码展示了一个简单的注册页面&#xff0c;包含了多个HTML元素和CSS样式的应用。 这段HTML代码展示了一个典型的注册页面&#xff0c;包含了常见的HTML元素和表单控件。通过CSS样…

操作系统知识点23

1.实时操作系统的主要设计目标&#xff1a;在严格时间氛围内对外部请求做出反应。 2.当用户程序正在处理器上运行时&#xff0c;若此刻取到了一条特权指令&#xff0c;则处理器将停止执行该指令&#xff0c;并产生一个“非法操作”的事件 3.某网络监控系统中。多个被授权的用…

CSS—网格布局Grid

网格布局grid 提供了带有行和列的基于网格的布局系统&#xff0c;无需使用浮动和定位。 当 HTML 元素的 display 属性设置为 grid 或 inline-grid 时&#xff0c;它就会成为网格容器。 更多布局模式可以参考之前的博客&#xff1a; ​​​​​​CSS—flex布局、过渡transit…

如何将本地已有的仓库上传到gitee (使用UGit)

1、登录Gitee。 2、点击个人头像旁边的加号&#xff0c;选择新建仓库&#xff1a; 3、填写仓库相关信息 4、复制Gitee仓库的地址 5、绑定我们的本地仓库与远程仓库 6、将本地仓库发布&#xff08;推送&#xff09;到远程仓库&#xff1a; 注意到此处报错&#xff0c;有关于…

【JAVA面试题】Spring、Spring MVC、Spring Boot、Spring Cloud的区别与联系

在Java生态中&#xff0c;Spring框架及其衍生技术&#xff08;如Spring MVC、Spring Boot、Spring Cloud&#xff09;是开发企业级应用的核心工具。它们在功能、定位和使用场景上各有侧重&#xff0c;但又紧密联系。本文将详细解析它们的区别与联系&#xff0c;帮助你在面试中更…

【Linux系统编程】初识系统编程

目录 一、什么是系统编程1. 系统编程的定义2. 系统编程的特点3. 系统编程的应用领域4. 系统编程的核心概念5. 系统编程的工具和技术 二、操作系统四大基本功能1. 进程管理&#xff08;Process Management&#xff09;2. 内存管理&#xff08;Memory Management&#xff09;3. 文…

Web基础:HTML快速入门

HTML基础语法 HTML&#xff08;超文本标记语言&#xff09; 是用于创建网页内容的 标记语言&#xff0c;通过定义页面的 结构和内容 来告诉浏览器如何呈现网页。 超文本&#xff08;Hypertext&#xff09; 是一种通过 链接&#xff08;Hyperlinks&#xff09; 将不同文本、图像…

Linux基本操作指令3

1、wget: 这是一个用于从网络上下载文件的命令行工具。它支持 HTTP、HTTPS 和 FTP 协议。 wget http://download.qt.io/archive/qt/5.12/5.12.9/qt-opensource-linux-x64-5.12.9.run 2、下载完成后&#xff0c;你可以通过以下命令使文件可执行并运行安装程序&#xff1a; ch…