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.pswp.cn/news/897384.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/897384.shtml
英文地址,請注明出處:http://en.pswp.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…