Hướng Dẫn Kết Nối AWS Lambda Với RDS MySQL Và Tích Hợp EventBridge Để Gửi Thông Báo Doanh Thu Chuyên mục Devops 2025-02-25 0 Lượt xem 0 Lượt thích 0 Bình luận
Giới Thiệu
AWS Lambda là một dịch vụ serverless mạnh mẽ giúp bạn chạy code mà không cần quản lý server. Trong bài viết này, chúng ta sẽ tìm hiểu cách sử dụng AWS Lambda để kết nối với cơ sở dữ liệu MySQL trên Amazon RDS, lấy dữ liệu doanh thu và gửi thông báo lên Slack. Ngoài ra, chúng ta sẽ sử dụng AWS EventBridge để tự động chạy Lambda vào các thời điểm cố định trong ngày.
1. Cấu Hình RDS MySQL
1.1. Tạo RDS MySQL
-
Vào AWS Console → RDS → Create database.
-
Chọn MySQL.
-
Ở mục Connectivity, chọn VPC phù hợp.
-
Public access: Để No (Vì Lambda kết nối từ VPC).
-
Security Group: Đảm bảo cho phép inbound từ Lambda.
-
Click Create database.
1.2. Cấu Hình Security Group Cho RDS
-
Vào EC2 → Security Groups.
-
Tạo một Security Group mới hoặc chỉnh sửa Security Group hiện tại.
-
Cho phép inbound MySQL/Aurora (3306) từ VPC của Lambda.
2. Viết Lambda Function Kết Nối RDS
2.1. Cấu Hình Lambda
-
Vào AWS Lambda → Create function.
-
Chọn Author from scratch.
-
Runtime: Chọn Python 3.x.
-
VPC: Chọn cùng VPC với RDS.
-
Security Groups: Chọn Security Group có quyền truy cập RDS.
-
Click Create function.
2.2. Viết Code Lambda
Cài Đặt Thư Viện Cần Thiết
Lambda không hỗ trợ sẵn pymysql và requests, nên bạn cần tạo một package và upload lên Lambda.
Chạy lệnh sau trên local:
mkdir lambda_package
cd lambda_package
pip install pymysql requests pytz -t .
zip -r lambda_function.zip .
Sau đó, upload lambda_function.zip lên Lambda.
Viết Code Kết Nối RDS và Gửi Slack
import os
import json
import pymysql
import requests
import pytz
from datetime import datetime
def get_db_connection():
return pymysql.connect(
host=os.getenv("DB_HOST"),
user=os.getenv("DB_USER"),
password=os.getenv("DB_PASSWORD"),
database=os.getenv("DB_NAME"),
port=int(os.getenv("DB_PORT", 3306)),
cursorclass=pymysql.cursors.DictCursor
)
def fetch_revenue_data():
jst = pytz.timezone('Asia/Tokyo')
now = datetime.now(jst)
current_hour = now.hour
query = """
SELECT SUM(price) AS total_revenue FROM revenue
WHERE h_status IN ('1', '3')
AND priceflag != ''
AND buydate >= CURDATE()
"""
conn = get_db_connection()
with conn.cursor() as cursor:
cursor.execute(query)
result = cursor.fetchone()
conn.close()
return result['total_revenue'] if result['total_revenue'] else 0
def send_to_slack(message):
webhook_url = os.getenv("SLACK_WEBHOOK_URL")
payload = {"text": message}
headers = {"Content-Type": "application/json"}
response = requests.post(webhook_url, data=json.dumps(payload), headers=headers)
if response.status_code != 200:
raise ValueError(f"Slack error {response.status_code}: {response.text}")
def lambda_handler(event, context):
total_revenue = fetch_revenue_data()
revenue_name = os.getenv("REVENUE_NAME", "モコム")
message = f"本日の現時点の売上です。\n{revenue_name}:{total_revenue:,}円"
print("Debug - Revenue Data:", message)
send_to_slack(message)
return {"statusCode": 200, "body": "Notification sent to Slack."}
3. Thiết Lập AWS EventBridge Để Tự Động Chạy Lambda
-
Vào AWS EventBridge → Rules → Create rule.
-
Name: TriggerLambdaRevenueNotification.
-
Event Source: Schedule.
-
Schedule pattern: Cron expression.
-
Nhập cron theo giờ Nhật Bản (JST):
-
cron(0 0 * * ? *) → 09:00 JST (00:00 UTC)
-
cron(0 3 * * ? *) → 12:00 JST (03:00 UTC)
-
cron(0 7 * * ? *) → 16:00 JST (07:00 UTC)
-
-
Chọn Target: Lambda function của bạn.
-
Click Create rule.
4. Kiểm Tra Và Debug
-
Kiểm tra kết nối RDS: Kiểm tra Security Group và VPC.
-
Kiểm tra Slack webhook: Kiểm tra URL webhook.
-
Xem logs trên CloudWatch: Vào AWS Lambda → Monitor → Logs.
Kết Luận
Bài viết này đã hướng dẫn bạn cách: ✅ Kết nối AWS Lambda với RDS MySQL. ✅ Viết code truy vấn dữ liệu doanh thu. ✅ Gửi thông báo tự động lên Slack. ✅ Sử dụng EventBridge để tự động hóa quá trình này.
Với cách làm này, bạn có thể tự động hóa thông báo doanh thu hàng ngày một cách hiệu quả! 🚀
Bình luận (0)