กรณีศึกษา: การสร้างระบบแจ้งเตือน

Python เบื้องต้นสำหรับ AWS Boto

Maksim Pecherskiy

Data Engineer

ผลลัพธ์สุดท้าย

ผลลัพธ์สุดท้าย

ผลลัพธ์สุดท้าย

Python เบื้องต้นสำหรับ AWS Boto

ผลลัพธ์สุดท้าย

ผลลัพธ์สุดท้าย

Python เบื้องต้นสำหรับ AWS Boto

ผลลัพธ์สุดท้าย

ผลลัพธ์สุดท้าย

Python เบื้องต้นสำหรับ AWS Boto

ผลลัพธ์สุดท้าย

ผลลัพธ์สุดท้าย

Python เบื้องต้นสำหรับ AWS Boto

สร้างระบบแจ้งเตือน

ตั้งค่า Topic

  • สร้าง topic
  • ดาวน์โหลดรายชื่อผู้ติดต่อในรูปแบบ csv
  • สร้าง topic สำหรับแต่ละบริการ
  • สมัครสมาชิกให้ผู้ติดต่อในแต่ละ topic ที่เกี่ยวข้อง
Python เบื้องต้นสำหรับ AWS Boto

สร้างระบบแจ้งเตือน

ดึงข้อมูลสรุป

  • ดาวน์โหลดรายงานประจำเดือน
  • นับจำนวน Pothole
  • นับจำนวนการแจ้งทิ้งขยะผิดกฎหมาย

ส่งการแจ้งเตือน

  • ถ้า Pothole เกิน 100 รายการ ให้ส่งการแจ้งเตือน
  • ถ้าการทิ้งขยะผิดกฎหมายเกิน 30 รายการ ให้ส่งการแจ้งเตือน
Python เบื้องต้นสำหรับ AWS Boto

ตั้งค่า Topic

เริ่มต้น SNS client

sns = boto3.client('sns', 
                   region_name='us-east-1',
                   aws_access_key_id=AWS_KEY_ID, 
                   aws_secret_access_key=AWS_SECRET)

สร้าง topic และเก็บ ARN

trash_arn = sns.create_topic(Name="trash_notifications")['TopicArn']
streets_arn = sns.create_topic(Name="streets_notifications")['TopicArn']
Python เบื้องต้นสำหรับ AWS Boto

ตั้งค่า Topic

ตั้งค่า Topic

Python เบื้องต้นสำหรับ AWS Boto

สมัครสมาชิกผู้ใช้ใน Topic

contacts = pd.read_csv('http://gid-staging.contacts.csv')
Python เบื้องต้นสำหรับ AWS Boto

สมัครสมาชิกผู้ใช้ใน Topic

contacts.csv

Name Email Phone Department
John Smith [email protected] +11224567890 trash
Fanny Mae [email protected] +11234597890 trash
Janessa Goldsmith [email protected] +11534567890 streets
Evelyn Monroe [email protected] +11234067890 streets
Max Pe [email protected] +11234517890 streets
Python เบื้องต้นสำหรับ AWS Boto

สมัครสมาชิกผู้ใช้ใน Topic

สร้างเมธอด subscribe_user

def subscribe_user(user_row):

if user_row['Department'] == 'trash': sns.subscribe(TopicArn = trash_arn, Protocol='sms', Endpoint=str(user_row['Phone'])) sns.subscribe(TopicArn = trash_arn, Protocol='email', Endpoint=user_row['Email'])
else: sns.subscribe(TopicArn = streets_arn, Protocol='sms', Endpoint=str(user_row['Phone'])) sns.subscribe(TopicArn = streets_arn, Protocol='email', Endpoint=user_row['Email'])

นำเมธอด subscribe_user ไปใช้กับทุกแถว

contacts.apply(subscribe_user, axis=1)
Python เบื้องต้นสำหรับ AWS Boto

สมัครสมาชิกผู้ใช้ใน Topic

สมัครสมาชิกผู้ใช้ใน Topic

Python เบื้องต้นสำหรับ AWS Boto

ดึงข้อมูลสรุป

โหลดรายงานเดือนมกราคมเข้า DataFrame

df = pd.read_csv('http://gid-reports.2019/feb/final_report.csv')
Python เบื้องต้นสำหรับ AWS Boto

ดึงข้อมูลสรุป

service_name count
Illegal Dumping 2580
Potential Missed Collection 150
Pothole 1170
Traffic Sign - Maintain 210
Traffic Signal Head Turned 60
Traffic Signal Light Out 120
Python เบื้องต้นสำหรับ AWS Boto

ดึงข้อมูลสรุป

กำหนด index เพื่อเข้าถึงจำนวนตามชื่อบริการได้โดยตรง

df.set_index('service_name', inplace=True)

ดึงข้อมูลสรุป

trash_violations_count = df.at['Illegal Dumping', 'count']
streets_violations_count = df.at['Pothole', 'count']
Python เบื้องต้นสำหรับ AWS Boto

ส่งการแจ้งเตือน

if trash_violations_count > 100:

# Construct the message to send message = "Trash violations count is now {}".format(trash_violations_count)
# Send message sns.publish(TopicArn = trash_arn, Message = message, Subject = "Trash Alert")
Python เบื้องต้นสำหรับ AWS Boto

ส่งการแจ้งเตือน

if streets_violations_count > 30:

    # Construct the message to send
    message = "Streets violations count is now {}".format(streets_violations_count)

# Send message sns.publish(TopicArn = streets_arn, Message = message, Subject = "Streets Alert")
Python เบื้องต้นสำหรับ AWS Boto

ผลลัพธ์สุดท้าย

ผลลัพธ์สุดท้าย

Python เบื้องต้นสำหรับ AWS Boto

มาฝึกกันเถอะ!

Python เบื้องต้นสำหรับ AWS Boto

Preparing Video For Download...