vaibhav343343/Serverless-Notification-System
GitHub: vaibhav343343/Serverless-Notification-System
基于 AWS EventBridge、Lambda 和 SNS 的无服务器事件驱动架构,实时监听 EC2 状态变更并推送告警通知。
Stars: 1 | Forks: 0
# 🚀 Serverless EC2 状态通知系统
[](https://www.python.org/)
[](https://aws.amazon.com/)
[](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, 事件驱动架构, 云运维, 监控告警, 自动化通知, 逆向工具