vaibhav343343/Serverless-Notification-System

GitHub: vaibhav343343/Serverless-Notification-System

基于 AWS EventBridge、Lambda 和 SNS 的无服务器事件驱动架构,实时监听 EC2 状态变更并推送告警通知。

Stars: 1 | Forks: 0

# 🚀 Serverless EC2 状态通知系统 [![Python](https://img.shields.io/badge/Python-3.9+-blue.svg)](https://www.python.org/) [![AWS](https://img.shields.io/badge/AWS-Serverless-orange.svg)](https://aws.amazon.com/) [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) 一个自动化、serverless 的事件驱动架构,用于监听 AWS EC2 实例状态变更,并通过 Amazon SNS 推送实时警报。 该项目显著**将事件响应时间从 10 多分钟缩短至 30 秒以内**,确保了基础设施变更的高可用性和快速响应。 ## 🌟 架构与工作流 1. **EC2 状态变更**:EC2 实例发生状态变更(例如:`pending`、`running`、`stopping`、`stopped`、`terminated`)。 2. **Amazon EventBridge**:自动捕获状态变更事件。 3. **AWS Lambda**:EventBridge 触发基于 Python 的 Lambda 函数,并传递事件 payload。 4. **Amazon SNS**:Lambda 函数解析事件,并将格式化的消息发布到 SNS topic。 5. **实时警报**:订阅者(Email、SMS、PagerDuty、Slack 等)会立即收到警报。 ## 🛠️ 技术栈 - **语言**:Python (boto3) - **计算**:AWS Lambda - **Event Bus**:Amazon EventBridge - **消息传递**:Amazon SNS (Simple Notification Service) - **监控**:Amazon CloudWatch ## 📋 前置条件 - 具有相应权限的 AWS 账户。 - 在本地配置好 AWS CLI。 - 将目标电子邮件/电话号码订阅到 AWS SNS Topic。 ## 🚀 设置与部署指南 ### 1. 创建 SNS Topic 1. 进入 AWS Management Console -> **SNS**。 2. 创建一个新的 **Standard Topic**(例如:`EC2-Alerts-Topic`)。 3. 为该 topic 创建一个 **Subscription**(Email 或 SMS),并通过您的电子邮件/电话确认订阅。 4. 记录下 **Topic ARN**。 ### 2. 部署 Lambda 函数 1. 进入 AWS Management Console -> **Lambda**。 2. 创建一个新函数: - **Runtime**:Python 3.9+ - **Architecture**:x86_64 或 arm64 3. 将 `src/ec2_state_notifier.py` 中的代码添加到 Lambda 代码编辑器中。 4. 在 **Configuration -> Environment variables** 下,添加: - Key:`SNS_TOPIC_ARN` - Value:`arn:aws:sns:REGION:ACCOUNT_ID:EC2-Alerts-Topic`(您的 topic ARN) 5. 在 **Configuration -> Permissions** 下,确保执行角色具有以下策略: - `AWSLambdaBasicExecutionRole`(用于 CloudWatch Logs) - 针对您的 SNS Topic 的 `sns:Publish` 访问权限。 ### 3. 配置 EventBridge Rule 1. 进入 AWS Management Console -> **Amazon EventBridge**。 2. 创建一个新 Rule: - **Rule type**:带有事件模式的 Rule。 - **Event source**:AWS events 或 EventBridge partner events。 - **Creation method**:自定义模式。 - **Event Pattern**: { "source": ["aws.ec2"], "detail-type": ["EC2 Instance State-change Notification"] } 3. 将 **Target** 设置为您在步骤 2 中创建的 **AWS Lambda 函数**。 ## 📂 项目结构 ``` . ├── src/ │ └── ec2_state_notifier.py # Python Lambda function logic ├── requirements.txt # Python dependencies (boto3) └── README.md # Project documentation ``` ## 👨‍💻 作者 **Vaibhav Sudrik** - **Email**:[vaibhavsudrik2005@gmail.com](mailto:vaibhavsudrik2005@gmail.com) - **GitHub**:[@vaibhav343343](https://github.com/vaibhav343343) ## 📄 许可证 该项目基于 [MIT License](LICENSE) 授权。
标签:AWS, DPI, Serverless, 事件驱动架构, 云运维, 监控告警, 自动化通知, 逆向工具