В цьому блозі ми розглянемо процес створення програми для інформаційної панелі погоди, яка отримує дані про погоду в реальному часі для кількох міст і зберігає їх безпечно на AWS S3. Ми окреслимо кроки, які ми виконали, труднощі, з якими стикнулися, а також потенційні проблеми, які цей проект покликаний вирішити. Я також поділюся тим, як успішно контейнеризував свій проект на основі Python для інформаційної панелі погоди за допомогою Docker.
Огляд
Інформація про погоду є важливою для планування щоденних справ, особливо в таких галузях, як сільське господарство, авіація та логістика. Однак управління та зберігання даних про погоду для довгострокового використання може бути складним. Цей проект створює рішення, поєднуючи оновлення погоди в реальному часі з OpenWeather API з можливостями хмарного зберігання AWS S3.
Програма для інформаційної панелі погоди:
- Отримує дані про погоду для заданих міст.
- Зберігає дані у форматі JSON в S3 бакеті AWS.
- Забезпечує розширювальну основу для подальшої аналітики та візуалізації.
Кроки виконання
1. Налаштування проекту
Ми почали з організації проекту у чітку структуру:
- Створили каталоги:
src/
для вихідного коду,tests/
для тестування, таdata/
для зберігання тимчасових файлів. - Ініціалізували Git-репозиторій і налаштували необхідні файли, такі як
.gitignore
,README.md
таrequirements.txt
. - Додали файл
.env
для безпечного зберігання чутливих змінних середовища, таких як API-ключ OpenWeather та ім’я бакету AWS. - Переконайтеся, що у вас встановлений Docker. Ви можете перевірити встановлення, виконавши команду:
docker --version
2. Налаштування середовища
Для керування залежностями та уникнення конфліктів ми налаштували віртуальне середовище Python і встановили необхідні пакунки:
pip install boto3 python-dotenv requests
Ми також налаштували облікові дані AWS за допомогою aws configure
, щоб встановити ключі доступу та регіони за замовчуванням.
3. Реалізація коду
Основний скрипт, weather_dashboard.py
, містить такі ключові функціональності:
- Отримання даних про погоду: За допомогою OpenWeather API скрипт отримує температуру, вологість та умови погоди для таких міст, як Філадельфія, Сіетл, Лагос та Абуджа.
- Інтеграція з AWS S3: Скрипт перевіряє, чи існує S3 бакет, і створює його, якщо це необхідно. Дані про погоду завантажуються як файли JSON з унікальним часовим штампом для кожного запису.
Ось короткий погляд на реалізацію:
# Отримання даних про погоду
def fetch_weather(self, city):
response = requests.get(base_url, params=params)
return response.json()
# Збереження даних у S3
def save_to_s3(self, weather_data, city):
self.s3_client.put_object(
Bucket=self.bucket_name,
Key=file_name,
Body=json.dumps(weather_data),
ContentType='application/json'
)
4. Тестування та валідація
Ми вручну запускали скрипт, щоб переконатися:
- Дані, отримані з OpenWeather API, є точними.
- Створення S3 бакету та завантаження даних проходять без проблем.
- Усі залежності коректно управляються у віртуальному середовищі.
5. Створення Dockerfile
Для контейнеризації проекту я створив файл Dockerfile
в кореневому каталозі проекту. Нижче наведено вміст цього файлу:
# Використовуємо офіційний Python-образ як базовий
FROM python:3.9-slim
# Встановлюємо робочу директорію в контейнері
WORKDIR /app# Копіюємо файл requirements до контейнера
COPY requirements.txt .# Встановлюємо залежності
RUN pip3 install --no-cache-dir -r requirements.txt# Копіюємо файли програми до контейнера
COPY .
# Визначаємо команду для запуску програми
CMD ["python", "src/weather_dashboard.py"]
Створення Docker-образу
Щоб створити Docker-образ, я виконав наступну команду:
docker build -t weather_dashboard .
Процес створення завершився успішно, і був згенерований Docker-образ:
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
weather_dashboard latest 3ddb3ba8637c Кілька секунд тому 215MB
6. Розгортання
Для виробничого середовища ми розглядали налаштування автоматизації за допомогою CI/CD pipeline, щоб забезпечити регулярне оновлення даних про погоду та можливість масштабування для додаткових функцій, таких як інформаційні панелі для візуалізації або сповіщення.
Проблеми, з якими стикнулися
- Управління залежностями: Наш перший спроба встановити залежності безпосередньо в системне середовище Python завершилась невдачею через обмеження "зовнішньо керованого середовища". Це було вирішено використанням віртуального середовища та параметра
--break-system-packages
. - Конфігурація S3 бакету: Забезпечення правильних дозволів для бакету та врахування вимог для створення бакетів в певних регіонах потребувало ретельного тестування.
- Обробка помилок: Важливо було обробляти помилки API, такі як обмеження частоти запитів або некоректні назви міст, щоб забезпечити надійність скрипта.
Проблеми, які вирішує цей проект
- Централізоване зберігання даних про погоду: Завдяки зберіганню даних про погоду в AWS S3, ми надаємо надійне та масштабоване рішення для історичного аналізу погоди.
- Доступність даних: Файли JSON можна використовувати та обробляти аналітиками даних, розробниками або в машинному навчанні.
- Підготовленість до автоматизації: Закладена основа може бути розширена для періодичного отримання даних, інтеграції з інструментами для візуалізації чи створення прогнозних моделей погоди.
Висновок
Цей проект демонструє, як можна комбінувати хмарні технології та API для вирішення реальних проблем. Враховуючи виклики з отриманням даних у реальному часі та їх безпечним зберіганням, ми створили гнучку систему, яка може служити різним цілям.
Сподіваємося, що це надихне вас на дослідження хмарних рішень для ваших проектів!
Що далі? Ми плануємо реалізувати інформаційну панель для візуалізації за допомогою таких інструментів, як AWS QuickSight або Tableau. Слідкуйте за оновленнями!
Перекладено з: Building a Weather Dashboard with AWS and OpenWeather API