Автоматизація щоденних нагадувань про цілі за допомогою AWS Lambda та EventBridge

текст перекладу
Залишатися мотивованим кожного дня є критично важливим для досягнення довгострокових цілей. Цей проект автоматизації призначений для надсилання щоденних нагадувань про цілі разом з мотиваційними цитатами, щоб допомогти вам почати день з позитивним настроєм. Використовуючи AWS Lambda, Amazon EventBridge і Amazon SNS, цей проект допомагає вам залишатися на шляху та отримувати натхнення протягом вашої подорожі.

Огляд проекту

Ця конфігурація автоматизує наступне:

  1. Щоденний тригер: Автоматично викликає функцію Lambda щодня о 8:00 ранку.
  2. Обробка цілей: Отримує випадкову ціль із S3 бакету та поєднує її з мотиваційною цитатою.
  3. Доставка повідомлень: Надсилає ціль і цитату через електронну пошту за допомогою Amazon SNS.

Це щоденне нагадування не лише допомагає зосередитися, але й дає мотиваційний поштовх для початку дня з енергією та метою.

pic

Успішно отримано електронний лист після тестування функції Lambda.

Архітектура

Рішення складається з:

  1. S3 бакет: Зберігає CSV файл (2025-goals.csv) зі списком цілей.
  2. Lambda функція: Обробляє CSV файл, вибирає випадкову ціль, поєднує її з мотиваційною цитатою і надсилає повідомлення.
  3. Amazon SNS: Доставляє електронні повідомлення.
  4. Amazon EventBridge: Викликає функцію Lambda щодня о 8:00 ранку.

Кроки реалізації

1. Створіть S3 бакет

  1. Перейдіть до S3 Console в AWS.
  2. Клікніть Create Bucket.
  3. Назвіть свій бакет (наприклад, 2025-goals-project) та налаштуйте його за потребою.
  4. Завантажте CSV файл (2025-goals.csv) у наступному форматі:
Goals  
Certified Cloud Practitioner preparation  
CICD Topic for DevOps  
Jenkins  
Github Actions  
Terraform  
Kubernetes  
CloudFormation  
Python for Devops and Cloud

pic

Завантажено csv файл у бакет.

2. Налаштування Amazon SNS

  1. Перейдіть до SNS Console в AWS.
  2. Створіть тему:
  • Назва: 2025-goal-reminder
  • Тип: Standard topic.
  1. Додайте підписку на електронну пошту:
  • Протокол: Email.
  • Кінцева точка: Ваша електронна адреса.
  1. Підтвердьте підписку:
  • Перевірте свою електронну пошту для підтвердження та активуйте підписку.

pic

Підписано на електронну пошту для отримання повідомлень.

3. Розгортання функції Lambda

  1. Перейдіть до Lambda Console в AWS.
  2. Створіть нову функцію Lambda:
  • Рuntime: Python 3.12.
  • Назва: 2025-Goal-reminder.
    3.
    текст перекладу
    Важливо залишатися мотивованим щодня, щоб досягти довгострокових цілей. Цей проект автоматизації призначений для надсилання щоденних нагадувань про цілі з мотиваційними цитатами, щоб допомогти вам розпочати день з позитивним настроєм. Використовуючи AWS Lambda, Amazon EventBridge і Amazon SNS, цей проект допоможе вам залишатися на шляху та отримувати натхнення протягом вашої подорожі.

Огляд проекту

Ця конфігурація автоматизує наступне:

  1. Щоденний тригер: Автоматично викликає функцію Lambda щодня о 8:00 ранку.
  2. Обробка цілей: Отримує випадкову ціль із S3 бакету та поєднує її з мотиваційною цитатою.
  3. Доставка повідомлень: Надсилає ціль і цитату через електронну пошту за допомогою Amazon SNS.

Це щоденне нагадування не тільки допомагає залишатися зосередженим, але й дає мотиваційний поштовх для початку дня з енергією та метою.

pic

Успішно отримано електронний лист після тестування функції Lambda.

Архітектура

Рішення складається з:

  1. S3 бакет: Зберігає CSV файл (2025-goals.csv) зі списком цілей.
  2. Lambda функція: Обробляє CSV файл, вибирає випадкову ціль, поєднує її з мотиваційною цитатою та надсилає повідомлення.
  3. Amazon SNS: Доставляє електронні повідомлення.
  4. Amazon EventBridge: Викликає функцію Lambda щодня о 8:00 ранку.

Кроки реалізації

1. Створіть S3 бакет

  1. Перейдіть до S3 Console в AWS.
  2. Клікніть Create Bucket.
  3. Назвіть свій бакет (наприклад, 2025-goals-project) і налаштуйте його за потребою.
  4. Завантажте CSV файл (2025-goals.csv) у наступному форматі:
Goals  
Certified Cloud Practitioner preparation  
CICD Topic for DevOps  
Jenkins  
Github Actions  
Terraform  
Kubernetes  
CloudFormation  
Python for Devops and Cloud

pic

Завантажено csv файл у бакет.

2. Налаштування Amazon SNS

  1. Перейдіть до SNS Console в AWS.
  2. Створіть тему:
  • Назва: 2025-goal-reminder
  • Тип: Standard topic.
  1. Додайте підписку на електронну пошту:
  • Протокол: Email.
  • Кінцева точка: Ваша електронна адреса.
  1. Підтвердьте підписку:
  • Перевірте свою електронну пошту для підтвердження та активуйте підписку.

pic

Підписано на електронну пошту для отримання повідомлень.

3. Розгортання функції Lambda

  1. Перейдіть до Lambda Console в AWS.
  2. Створіть нову функцію Lambda:
  • Рuntime: Python 3.12.
  • Назва: 2025-Goal-reminder.

4. Додайте код:

import boto3
import csv
import random   

# AWS clients   
s3 = boto3.client('s3')   
sns = boto3.client('sns')   

# S3 Bucket and File   
BUCKET_NAME = '2025-goals-bucket'   
FILE_NAME = '2025-goals.csv'   

# SNS Topic ARN   
SNS_TOPIC_ARN = "arn:aws:sns:us-east-1:590183653672:2025-goal-reminder"   

# Predefined Motivational Lines   
MOTIVATIONAL_LINES = ["Believe in yourself and take the first step!", "Stay consistent and greatness will follow.", "Small steps every day lead to big results.", "Your hard work today will pay off tomorrow.", "You've got this-one goal at a time!"]   

def lambda_handler(event, context):   
  try:   
    # Fetch the file from S3   
    response = s3.get_object(Bucket=BUCKET_NAME, Key=FILE_NAME)   
    lines = response['Body'].read().decode('utf-8-sig').splitlines()   
    # Read the goals from the CSV file   
    csv_reader = csv.DictReader(lines)   
    goals = [row['Goals'] for row in csv_reader]   
    # Select a random goal   
    selected_goal = random.choice(goals)   
    # Generate a motivational line   
    motivation = random.choice(MOTIVATIONAL_LINES)   
    # Publish to SNSnMotivation: {motivation}", Subject="Your Motivational Goal for Today")   
    return {"statusCode": 200, "body": "Goal and motivation sent successfully!"}   
  except KeyError as e:   
    return {"statusCode": 400, "body": f"Error: CSV file header is incorrect. Got {str(e)}"}   
  except Exception as e:   
    return {"statusCode": 500, "body": f"An unexpected error occurred: {str(e)}"}

5. Додайте змінні середовища:

  • BUCKET_NAME: 2025-goals-project.
  • FILE_NAME: 2025-goals.csv.
  • SNS_TOPIC_ARN: ARN вашої SNS теми.

6. Додайте дозволи:

  • Прикріпіть AWSLambdaBasicExecutionRole.
  • Додайте дозволи s3:GetObject та sns:Publish.

7. Тестуйте функцію:

  • Використовуйте приклад події для виклику функції та перевірте, чи надсилається електронна пошта.

pic

Показано, як EventBridge викликає функцію Lambda на основі запланованої події.

4. Автоматизація за допомогою EventBridge

  1. Перейдіть до EventBridge Console.
  2. Створіть нове правило:
  • Назва: DailyGoalReminder.
  • Тип: Schedule.
  1. Встановіть вираз для розкладу:
  • Використовуйте cron(0 8 * * ? *) для запуску щодня о 8:00 ранку UTC.
  1. Додайте ціль:
  • Тип цілі: AWS Lambda function.
  • Виберіть вашу Lambda функцію.
  1. Збережіть правило та протестуйте вручну.

pic

Налаштовано правило EventBridge для планування завдань щодня з 12 січня 2025 року по 21 січня 2025 року.

AWS Оцінка витрат

  1. Lambda: Безкоштовний рівень включає 1 мільйон запитів та 400,000 GB-секунд на місяць.
  2. S3: Безкоштовний рівень включає 5 ГБ зберігання та 20,000 GET запитів на місяць.
  3. SNS: Електронні листи безкоштовні; SMS повідомлення (якщо використовуються) можуть бути платними.
  4. EventBridge: Безкоштовний рівень включає 1 мільйон подій на місяць.

Для цього проекту використання, ймовірно, залишатиметься в межах безкоштовного рівня AWS.

Висновок

Цей проект демонструє, як служби AWS можуть автоматизувати щоденні нагадування, щоб допомогти вам залишатися мотивованими та досягати своїх цілей. Завдяки мінімальним налаштуванням та ефективному використанню таких служб, як Lambda, S3, SNS і EventBridge, ви можете створити безперебійну систему для управління завданнями та мотивацією.

Перекладено з: Automating Daily Goal Reminders Using AWS Lambda and EventBridge

Leave a Reply

Your email address will not be published. Required fields are marked *