日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

使用AWS Lambda的CloudWatch事件通知

發布時間:2023/12/3 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用AWS Lambda的CloudWatch事件通知 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

CloudWatchEvents的主要用例是跟蹤整個AWS基礎架構中的更改。 當前,它支持在Auto Scaling組,EC2,EBS和其他各種事件中發出的事件。 為了對這些事件進行有意義的處理,我們需要一種消耗它們的方法。 AWS使用術語“ targets來指代任何想要消耗事件并支持AWS Lambda以及其他幾個東西的事物。

在本文中,我們將看到如何設置AWS Lambda函數以使用CloudWatch中的事件。 到本文結尾,我們將擁有一個AWS Lambda函數,該函數會將通知發布到Slack通道。 但是,由于該機制是通用的,因此您應該能夠根據用例對其進行自定義。 讓我們開始吧!

設置和一般信息

可以在這里找到本文的代碼存儲庫。 它具有兩個子目錄:

  • functions ,其中包含Lambda函數的源代碼。
  • terraform ,具有基礎結構配置。

要繼續,我們將需要:

  • 一個AWS用戶賬戶
  • 地貌
  • Python 3
  • Bash / Powershell /實用程序

AWS用戶賬戶和CLI配置

我們將需要一個具有以下IAM策略的AWS賬戶:

  • AWSLambdaFullAccess
  • IAMFullAccess

AWS CLI和terraform將使用標準AWS配置,并在AWS配置文件中設置適當的憑證。

請注意,嘗試演示可能需要付費。

地貌

我們將使用Terraform設置整個基礎架構,包括上傳Lambda函數。

Python 3

我們的Lambda函數將用Python 3編寫,并且我們將在用于部署和更新AWS基礎設施的腳本中使用Python。

Bash / Powershell /實用程序

如果您使用的是Linux / OS X,則需要bash來運行腳本。 對于Windows,您將需要powershell 。 在Linux / OS X上,我們將使用zip命令創建Lambda部署工件。

體系結構概述

我們將在本文中構建的解決方案的整體體系結構如下所示:

AWS CloudWatch event -> Lambda function invoked -> Notifications

我們將重點關注兩個事件:

  • EC2狀態更改事件:當AWS EC2實例更改狀態–啟動新的EC2實例或終止現有的EC2實例時,將發生此事件。
  • CloudWatch運行狀況 事件:當您的AWS賬戶中發生與運行狀況相關的基礎架構更改時,就會發生CloudWatch 運行狀況事件 。

要使CloudWatch事件自動觸發Lambda函數,我們需要設置cloudwatch rule 。 無論我們正在處理事件還是處理事件,接收事件的Lambda函數都將具有相同的基本結構。

我們將在Python 3.6中編寫Lambda函數,一個完全正常運行的函數如下所示:

def handler(event, context):print(event)

函數名稱是handler ,它帶有兩個參數: event和context 。 event對象具有觸發Lambda函數的事件的有效負載, context對象具有與特定事件相關的各種元數據 。

為了了解如何完成上述所有工作,我們將首先實現一個解決方案,該解決方案將在EC2實例更改狀態時調用Lambda函數。

演示:EC2實例運行通知

此通知的Lambda函數如下所示,并保存在文件main.py :

def handler(event, context):print(event)

每當調用它時,它將事件主體打印到標準輸出,該輸出將自動記錄到AWS CloudWatch日志中。 我們將討論如何盡快上載Lambda函數。 首先,讓我們簡要介紹一下要調用的Lambda函數的基礎結構設置。

可以在文件ec2_state_change.tf找到Terraform配置。 它定義了以下主要地形資源:

aws_cloudwatch_event_rule

這定義了我們希望調用lambda函數的規則。 EC2實例狀態更改的event_pattern定義為:

"source": [ "aws.ec2" ], "detail-type": [ "EC2 Instance State-change Notification" ]

aws_cloudwatch_event_target

接下來,我們定義使用此資源在事件發生時調用的內容。 關鍵參數是:

target_id = "InvokeLambda" arn = "${aws_lambda_function.ec2_state_change.arn}" }

arn參數為Lambda函數指定Amazon資源名稱。

aws_lambda_function

該資源注冊了lambda函數,并具有以下關鍵參數:

function_name = "ec2_state_change" role = "${aws_iam_role.ec2_state_change_lambda_iam.arn}" handler = "main.handler" runtime = "python3.6"s3_bucket = "aws-health-notif-demo-lambda-artifacts" s3_key = "ec2-state-change/src.zip" s3_object_version = "${var.ec2_state_change_handler_version}"

上面的function_name是AWS的標識符,與代碼中的函數名稱沒有任何關系。 由另一資源指定的Lambda函數的IAM角色具有默認的sts:AssumeRole策略和允許將函數日志推送到CloudWatch的策略。

該handler的格式為<python-module>.<function>并指定要調用的Python函數名稱。 runtime指定AWS Lambda運行時。

s3_bucket指定將存儲Lambda代碼的存儲區, s3_key是Lambda代碼的鍵名,而s3_object_version允許我們部署上述對象的特定版本。

ec2_state_change_cloudwatch

定義的最后一個關鍵資源允許CloudWatch調用我們的Lambda函數,并具有以下參數:

action = "lambda:InvokeFunction" function_name = "${aws_lambda_function.ec2_state_change.function_name}" principal = "events.amazonaws.com" source_arn = "${aws_cloudwatch_event_rule.ec2_state_change.arn}"

上載Lambda函數

正如我們在Lambda函數的配置中看到的那樣,Lambda函數的代碼將存在于S3中。 因此,在每次代碼更改后,我們將使用AWS CLI在S3中更新代碼,如下所示。 在Linux上,這看起來類似于:

# Create a .zip of src $ pushd src $ zip -r ../src.zip * $ popd$ aws s3 cp src.zip s3://aws-health-notif-demo-lambda-artifacts/ec2-state-change/src.zip

我們可以使上述執行成為連續集成管道的一部分。

部署最新版本的代碼

將代碼上傳到S3之后,我們可以運行terraform來更新Lambda函數,以使用新版本的代碼,如下所示:

$ version=$(aws s3api head-object --bucket aws-health-notif-demo-lambda-artifacts --key ec2-state-change/src.zip) $ version=$(echo $version | python -c 'import json,sys; obj=json.load(sys.stdin); print(obj["VersionId"])')# Deploy to demo environment $ pushd ../../terraform/environments/demo $ ./tf.bash cloudwatch_event_handlers apply -var ec2_state_change_handler_version=$version \-target=aws_lambda_function.ec2_state_change \-target=aws_lambda_permission.ec2_state_change_cloudwatch \-target=aws_cloudwatch_event_target.ec2_state_change \-target=aws_iam_role_policy.ec2_state_change_lambda_cloudwatch_logging $ popd

可以將上述兩個步驟封裝在一個腳本中,該腳本成為創建EC2狀態更改CloudWatch事件處理程序以及更新處理它的Lambda函數的單個入口點。

運行演示

要在AWS賬戶中設置上述Lambda函數和所有必要的基礎架構,我們只需要運行functions\ec2_state_change\deploy.bash或functions\ec2_state_change\deploy.ps1腳本即可。 完成后,如果您創建一個新的EC2實例或停止/終止現有實例,您將看到CloudWatch日志,如下所示:

[2018-07-04T09:46:18+10:00] (2018/07/03/[$LATEST]aa226226b6b24a0cae83a948dcc29b95) START RequestId: 4798542c-7f1b-11e8-8493-836165a23514 Version: $LATEST[2018-07-04T09:46:18+10:00] (2018/07/03/[$LATEST]aa226226b6b24a0cae83a948dcc29b95) {'version': '0', 'id': '73c10269-00a0-644d-b92b-820846bb19db', 'detail-type': 'EC2 Instance State-change Notification', 'source': 'aws.ec2', 'account': '033145145979', 'time': '2018-07-03T23:46:16Z', 'region': 'ap-southeast-2', 'resources': ['arn:aws:ec2:ap-southeast-2:033145145979:instance/i-0e1153ece20b77590'], 'detail': {'instance-id': 'i-0e1153ece20b77590', 'state': 'pending'}}[2018-07-04T09:46:18+10:00] (2018/07/03/[$LATEST]aa226226b6b24a0cae83a948dcc29b95) END RequestId: 4798542c-7f1b-11e8-8493-836165a23514

演示:AWS Health Events-> Slack

接下來,我們將編寫一個Lambda函數,它將AWS Health Health事件發布到您選擇的Slack通道。 首先,我們將為Slack頻道配置一個傳入的Webhook。 請查看此鏈接以開始如何為您的頻道添加一個。 如果按照設置進行操作,您將擁有一個類似于https://hooks.slack.com/services/string/<string>/<string>的webhook URL。 在此階段之后,我將假定我們具有此Webhook URL。

編寫Lambda函數

Lambda函數將如下所示:

import os import sys import jsonCWD = os.path.dirname(os.path.realpath(__file__)) sys.path.insert(0, os.path.join(CWD, "libs"))import requestsdef handler(event, context):WEBHOOK_URL = os.getenv("WEBHOOK_URL")if not WEBHOOK_URL:print("WEBHOOK_URL not defined or empty")return# see: https://docs.aws.amazon.com/AmazonCloudWatch/latest/events/EventTypes.html#health-event-types for event structure r = requests.post(WEBHOOK_URL,json = {'text': '*New AWS Health event* ```{0}```'.format(str(event))})print(r)

基礎架構配置

Lambda函數的基礎結構配置與我們先前的功能完全相同,除了aws_cloudwatch_event_rule定義event_pattern方式如下:

"source": [ "aws.health" ], "detail-type": [ "AWS Health Event" ]

部署Lambda函數

與上面的EC2狀態更改演示類似,要部署上述功能,我們將在functions/health_event目錄中運行部署腳本:

$ HEALTH_EVENT_WEBHOOK_URL="<your webhook url>" ./deploy.bash

除了部署Lambda函數之外,這還將創建必要的CloudWatch事件規則并設置目標。

一切完成后,您可以直接使用AWS CLI調用Lambda函數:

$ aws lambda invoke --invocation-type RequestResponse --function-name health_event --log-type Tail --payload '{"message":"hello"}' outfile.txt

您應該在配置的頻道中看到一條松弛消息:

松弛消息

摘要

在本文中,我們學習了如何將Lambda函數設置為CloudWatch事件的目標。 Slack通知演示有效,但可以通過以下兩種方式進行改進:

  • 可以使用AWS Secrets Manager靜態加密webhook URL。
  • 通過處理傳入消息,可以使通知更豐富。

本文使用的存儲庫位于此處 。

以下資源應有助于進一步了解:

  • CloudWatch活動
  • 在Python中編寫Lambda函數的指南
  • 適用于AWS的Terraform指南

翻譯自: https://www.javacodegeeks.com/2018/07/cloudwatch-event-notifications-aws.html

總結

以上是生活随笔為你收集整理的使用AWS Lambda的CloudWatch事件通知的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 亚洲国产无码久久 | 午夜视频福利在线 | 中文字幕在线观看的网站 | 烈性摔跤 | 日韩少妇一区 | 久久妇女 | 天堂久久网 | 性色视频 | 亚洲a视频在线观看 | 一区二区中文字幕在线观看 | 国产激情视频网站 | 青娱乐国产在线 | 91精品人妻一区二区三区蜜桃2 | 国产区一区二区三区 | 福利视频在线 | 韩国黄色精品 | 插插操操 | 男人天堂网在线视频 | 亚洲是色| jizz毛片 | 国产激情福利 | 人操人视频 | 羞羞动漫免费观看 | 99视频+国产日韩欧美 | 久久成人av | 国产一区二区三区免费观看 | 人成免费在线视频 | 欧美岛国国产 | 日本在线精品视频 | 999超碰 | 美女网站黄页 | 亚洲手机在线观看 | 欧美激情精品久久 | 精品乱码久久久久久中文字幕 | 欧美理伦| 天天精品 | 男女洗澡互摸私密部位视频 | 欧洲国产视频 | 精品国产伦一区二区三区 | 亚洲伦理一区二区 | 又嫩又硬又黄又爽的视频 | 中文日韩字幕 | 亚洲免费av一区二区 | 免费观看一区二区三区 | 免费黄色av | 性涩av| 黄色片在线看 | 国产一级aa大片毛片 | 免费看污片网站 | 91成人一区二区三区 | 美国一区二区 | 人妻久久久一区二区三区 | 黑人与亚洲人色ⅹvideos | 欧美暧暧视频 | 国产高清视频免费 | 天堂中文在线网 | 国产精品久久国产精品99 | 亚洲av无码不卡一区二区三区 | 日本中文字幕网站 | 日本69式三人交 | 久久一区二区视频 | 欧美特黄aaaaaa | 亚洲一区在线免费 | 破处视频在线观看 | 影音先锋三级 | 亚洲不卡中文字幕 | 日韩欧美xxx | 午夜不卡福利 | 久久丫精品 | 亚洲成人激情视频 | 午夜肉体高潮免费毛片 | 中文免费在线观看 | 免费看91| 长河落日电视连续剧免费观看01 | 欧美日韩三| 亚洲激情片 | 久操香蕉| 国产精品探花在线观看 | 成人在线观看一区 | 亚洲一区二区三区免费观看 | 国产男女视频在线观看 | 国产剧情在线观看 | 亚洲男人天堂 | 亚洲免费黄色网 | 国产深喉视频一区二区 | 国产免费自拍 | 国产日日操 | 越南毛茸茸的少妇 | 免费毛片一区二区三区久久久 | 国产午夜啪啪 | 在线观看国产成人 | 91精品国自产在线偷拍蜜桃 | 永久免费,视频 | 日韩黄色一级视频 | 嫩草视频在线观看免费 | 在线观看免费高清在线观看 | 日韩高清中文字幕 | 国产在线看一区 | 国产精品久久久久久免费免熟 |