Виклик DevOps на 30 днів | День 5 | Найкращі моменти NCAA

pic

DevOpsAllStarChallenge

Основні моменти гри NCAA

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

Ось план: ми знайдемо підсумки гри, обробимо їх, а потім переглянемо відео з підсумками гри. Для цього проекту ми використаємо Docker для контейнерів, S3 для зберігання та AWS MediaConvert для обробки і покращення відео з підсумками гри. Давайте розберемо основи цього простого проекту. Готові? Погнали!

Огляд Docker, S3 і Elemental MediaConvert 🎨👨🏾‍🎨🖌️
Docker має три основні компоненти: Dockerfile, Docker-образ і Docker-контейнер. Подумайте про Dockerfile як про рецепт — він містить інструкції для створення того, що нам потрібно. Docker-образ — це результат виконання цього рецепту, а Docker-контейнер — це запущена версія цього образу. Контейнери легкі, портативні та прості у масштабуванні на різних системах.

Уявіть Docker як набір інструментів художника. Ті самі пензлі, фарби та інструменти використовуються для кожного проекту. Аналогічно, Dockerfile (наш рецепт) визначає інструменти та налаштування, які нам потрібні, Docker-образ — це наш готовий набір, а Docker-контейнер — це робоча версія, яку можна взяти з собою.

Amazon S3 — це наше надійне рішення для зберігання. Тут ми будемо зберігати сирі дані, отримані з API. Подумайте про це як про місце, де ми зберігаємо залишки фарб та інструментів з попередніх робіт. У S3 ми можемо організувати дані в папки для зручного доступу. Тут будуть зберігатися та підготовлюватися дані з зовнішніх API для подальшого використання.

AWS Elemental MediaConvert діє як експерт з контролю якості. Точно так, як клієнт переглядає та коригує фарбування, щоб переконатися, що воно відповідає очікуванням, MediaConvert обробляє наші відео та зображення для досягнення чітких, високоякісних результатів. Воно дозволяє тонко налаштовувати роздільну здатність, формати та інше, щоб усе виглядало чудово.

Це будівельні блоки нашого проекту. Тепер давайте перейдемо до наших перших кодових файлів, fetch.py! 💻

Розбір коду: 💻

fetch.py 💻

pic

Вступ

Цей скрипт призначений для отримання підсумків матчів з баскетболу з зовнішнього API та безпечно зберігання їх у бакеті Amazon S3🪣. Він інтегрує процеси API, AWS-сервіси та Python для автоматизації обробки даних. Ось розбір основних компонентів і їх ролей у цьому робочому процесі. Цей скрипт отримає підсумки гри NCAA з нашого зовнішнього API RAPID API. Це рівень американського університетського баскетболу! 🏀. Це входить у безкоштовний рівень зовнішнього API RAPID API, який ми будемо використовувати. Досить пояснень, давайте зануримося!

Імпорти модулів і налаштування

json: Перетворює словники Python в формат JSON для збереження та обробки структурованих даних.

boto3: AWS SDK для Python, дозволяє взаємодіяти з сервісами AWS, такими як S3.

requests: Бібліотека для виконання HTTP-запитів, використовується тут для взаємодії з зовнішнім API.

config: Містить усі змінні для повторного використання, такі як облікові дані API, налаштування AWS та параметри, специфічні для ліги.

Ця настройка забезпечить простоту конфігурації скрипта та його хорошу масштабованість при змінах.

Огляд функцій

  1. fetch_highlights()
    Мета: Отримує підсумки гри з третього API.

Робочий процес:

Крок 1: Визначити параметри API, такі як дата, ліга та ліміт підсумків.

Крок 2: Додати заголовки автентифікації за допомогою RapidAPI ключа та хоста.

Крок 3: Виконати HTTP GET запит для отримання даних, гарантуючи, що тайм-аути запобігають зависанню з'єднань.

Крок 4: Проаналізувати JSON відповідь і повернути її.

Основні деталі:

Обробка помилок: Будь-які проблеми під час запиту, такі як тайм-аути або невірні відповіді, обробляються м’яко з інформативними повідомленнями про помилки.
Вихід: Повертає словник Python з підсумками, якщо все успішно, або None, якщо виникає помилка.
2.
savetos3(data, file_name)
Мета: Завантажує отримані підсумки до бакету S3🪣.

Робочий процес:

Крок 1: Використовуємо клієнт boto3 для взаємодії з сервісом S3.

Крок 2: Перевіряємо, чи існує цільовий бакет🪣. Якщо ні:
Створюємо бакет🪣.
Налаштовуємо для специфічних обмежень, таких як LocationConstraint в нестандартних регіонах AWS.

Крок 3: Сериалізуємо дані підсумків у формат JSON і зберігаємо їх у S3 за визначеним шляхом (highlights/.json).
Основні деталі:

Обробка помилок: Як створення бакета🪣, так і операції з завантаженням даних обгорнуті в обробку виключень для забезпечення надійності.
Вихід: Підтвердження успішного завантаження з повним шляхом S3 до збереженого файлу.

  1. process_highlights()
    Мета: Оркеструє процес отримання та збереження підсумків.

Робочий процес:

Крок 1: Починаємо з отримання підсумків за допомогою fetch_highlights().

Крок 2: Якщо отримання даних успішне, викликаємо savetos3() для завантаження підсумків.

Крок 3: Логуємо прогрес на кожному етапі для прозорості і усунення неполадок.
Ця функція виконує роль контрольного центру скрипта, оптимізуючи загальний робочий процес.

Запуск скрипта

Додавши:

if name == “main”:
process_highlights()
ми забезпечуємо виконання скрипта лише при прямому запуску, а не при імпорті в інший модуль. Це найкраща практика для багаторазових Python скриптів.

Чому це важливо

Цей скрипт демонструє:

Практичну інтеграцію API: Показує, як безпечно отримувати та обробляти зовнішні дані.
Автоматизацію AWS: Виділяє ключові функції AWS, такі як S3 і управління конфігурацією регіонів.
Резистентність до помилок: Створює стійкість до збоїв у робочих процесах, забезпечуючи безперебійну роботу в непередбачених умовах.

Отже, тепер ми маємо дані, збережені в бакеті S3🪣, але це лише у форматі JSON? Нам потрібно перетворити їх в один відеоформат! Давайте тепер подивимось на processonevideo.py.

processonevideo.py💻

pic

Завдання цього скрипта досить просте:

Він отримує файл (JSON) з S3, який містить URL-адреси відео.
Він вибирає перший URL відео, завантажує відео і завантажує його назад в S3 в інше місце.
Давайте розберемо це крок за кроком:

Імпорти (Інструменти, які ми будемо використовувати)
json: Це допомагає нам працювати з даними JSON — подумайте про це як про структурований спосіб обробки даних.

boto3: Це бібліотека Python, яку ми використовуємо для взаємодії з сервісами AWS, такими як S3.

requests: Це те, що ми будемо використовувати для завантаження відео з Інтернету, відправляючи HTTP-запити.

BytesIO: Це дозволяє нам працювати з файлами (як відео) в пам'яті без необхідності їх збереження на диску.

config.py: Це як файл налаштувань, де ми зберігаємо важливі змінні (наприклад, назви бакетів S3🪣 і шляхи до файлів).

Налаштування змінних
З config.py ми використовуємо:

S3BUCKETNAME: Місце, де зберігаються всі файли в S3.

AWS_REGION: Регіон, в якому знаходиться бакет🪣.

INPUT_KEY: Шлях до JSON файлу з URL-адресами відео.

OUTPUT_KEY: Місце, де ми збережемо оброблене відео.

Що робить функція processonevideo?
Ця функція виконує всі операції, від отримання JSON файлу до завантаження обробленого відео. Ось що відбувається:

Підключення до S3:
Починаємо з створення клієнта S3 (інструмент для взаємодії з S3) і налаштування регіону AWS.

Отримання JSON файлу:
Скрипт отримує JSON файл з S3 (використовуючи назву бакету🪣 і вхідний ключ) і читає його вміст. Подумайте про це як про завантаження списку завдань.

Витягування URL відео:
Він відкриває JSON файл, шукає перший URL відео і витягує його. Вам, можливо, доведеться налаштувати це залежно від структури вашого JSON файлу.

Завантаження відео:
Використовуючи requests, він відправляє HTTP запит до URL відео для отримання відео. Опція stream=True гарантує, що ми не перевантажимо пам'ять, завантажуючи все одразу.

Підготовка відео до завантаження:
Він зберігає вміст відео в пам'яті, використовуючи BytesIO.
Це схоже на те, щоб тримати відео в тимчасовому місці, не зберігаючи його на вашому комп'ютері.

Завантаження відео в S3:
Скрипт завантажує відео в вказаний бакет🪣 і шлях. Він також вказує тип файлу як "video/mp4", щоб AWS знало, з яким типом файлу ми працюємо.

Виведення успіху або помилок:
Якщо все працює, він виводить шлях S3, де відео було завантажено. Якщо щось пішло не так, виводиться помилка.

Останній рядок:
Ця частина:

if name == “main”:
processonevideo()
Це означає, що функція запускається тільки, якщо ви виконуєте цей файл безпосередньо.

Підсумок:
Отримуємо/завантажуємо JSON з S3 для отримання URL відео, завантажуємо відео і завантажуємо його назад в S3.
Все автоматизовано, і якщо щось не так, ви дізнаєтесь, що пішло не так.

mediaconvert_process.py 💻

pic

Спочатку ми імпортуємо нашу бібліотеку та налаштовуємо наші константи. Ви заміните ім’я бакету🪣 на ваш унікальний бакет🪣. У файлі README цього репозиторію ви знайдете bash-скрипт, необхідний для запуску MediaConvert.

У функції create_job ми ініціалізуємо наш клієнт MediaConvert, використовуючи Boto3, та вказуємо точку доступу MediaConvert для правильного регіону AWS. Ось чому нам потрібна URL-адреса в конфігурації!

У налаштуваннях завдання вам потрібно буде замінити ідентифікатор облікового запису в відповідному розділі. Налаштування завдання досить довгі, тому переконайтесь, що переглянули весь код. Якщо скріншоти не показують повних деталей, повний код знаходиться в цьому репозиторії.

Скрипт припускає IAM роль для MediaConvert, забезпечуючи необхідні дозволи для взаємодії з сервісами AWS. Вказано шляхи файлів S3 для входу та виходу, що вказують на бакет для обробки відео та місце для збереження обробленого відео.

Для виходів налаштування відео використовують кодек H.264 для стиснення відео, з бітрейтом, що контролює якість відео. Вищий бітрейт дає кращу якість. Налаштування звуку використовують кодек AAC, де бітрейт і частота дискретизації також впливають на якість звуку.

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

Коли ви запускаєте функцію create_job, вона надсилає налаштування завдання до MediaConvert, створюючи завдання з обробки відео та виводячи деталі, такі як статус і ID завдання. Обробка помилок також включена в кінці для фіксації проблем під час обробки.

Нарешті, скрипт вказує точку входу, щоб функція createjob запускалась при безпосередньому виконанні скрипта. Це завершує наш код mediaconvertprocess.py!

Наступний розбір коду вже скоро!

run_all.py 💻

pic

Цей скрипт run_all.py — це остаточний оркестратор, він об'єднує всі попередні скрипти в безперервний потік! Як круто, правда? Код дійсно потужний і захоплюючий! 😱🤯

Тепер давайте розберемо магію, що відбувається тут:

Логіка повторних спроб
Скрипт має вбудовану захисну мережу: логіку повторних спроб. Якщо будь-який скрипт не вдається — наприклад, якщо є затримка при створенні або знаходженні ресурсу — цей скрипт не просто зависає і не дає збій! 🚨 Він спробує ще раз перед тим, як кидати рушник. Ось це стійкість! 💪

Додавання затримок
Ми врахували потенційну повільність або затримки, додавши буферний час між скриптами. Це гарантує, що ресурси матимуть достатньо часу для стабілізації перед наступним етапом. Подумайте про це як про те, щоб код зробив перерву. 🧘‍♂️

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

Наприкінці ми розглянемо наш Dockerfile, який об'єднує все та виконує.

Dockerfile 💻

pic

Цей файл побудує наш контейнер. Перша лінія, FROM PYTHON 3.9 slim. Це вказує Docker використовувати легку версію Python 3.9 як основу для контейнера. Це в основному означає, що ми налаштовуємо палітру для майбутнього проекту. Це наше середовище Python. Нам фактично не потрібно створювати це самостійно, воно буде побудоване автоматично.

WORKDIR /app надає робочу директорію контейнера. Він встановлює /app як поточну робочу директорію всередині контейнера. Усі команди та файли будуть використовувати цю відносну директорію. Це як ваш організований стіл для фарбування, на якому всі інструменти акуратно розкладені.

COPY requirements.txt . копіює текстовий файл, який ми створюємо, з ім'ям requirements.txt з нашої локальної машини в робочу директорію контейнера. Потім він запустить PIP install, що встановить усі бібліотеки Python, необхідні в requirements.txt, всередині контейнера. Копіювання — це як копіювання технік фарбування для ваших проектів, а PIP install — як нанесення всіх необхідних шарів фарби для кожного завдання. Можливо, для домашнього проекту потрібно 2-3 шари! 🏡🎨🖼️ В файлі requirements.txt вказані файли/коди, які нам потрібні, а PIP install переконується, що ми отримуємо ці необхідні елементи.

Далі COPY fetch.py processonevideo.py mediaconvertprocess.py runall.py config.py . копіює всі наші Python скрипти в контейнер. Це, як покласти інструкції для фарбування на стіл перед початком роботи і розпочати роботу! 👨🏾‍🎨
RUN apt-get update && apt-get install -y awscli встановлює AWS CLI всередині контейнера для доступу до таких сервісів і ресурсів, як S3, MediaConvert тощо.

Це буде додавання нових пензлів і фарб для конкретного домашнього проекту в окремій кімнаті, над якою ви працюєте! 🖼️🏡 Нам потрібно взаємодіяти з сервісами AWS, правда? Для цього ми використовуємо AWS CLI.

Останній рядок коду ENTRYPOINT [“python”, “run_all.py”] встановлює команду за замовчуванням для запуску точки входу пайплайна python run all.py. Це встановлює run.py як команду за замовчуванням і python run all.py як команду, яку буде виконано при запуску контейнера. Скрипт run all виконує всі інші скрипти і запускає це автоматично. Це наш автоматизований маляр, який працює над проектами з усіма необхідними інструментами для виконання завдання! 🤖🦾🦿Цей Dockerfile бере всі наші скрипти та забезпечує автоматичне створення контейнера з усім необхідним для нас. Все, що нам потрібно для виконання завдання! 🎨🖼️

Отже, ми детально розібрали код! Тепер давайте перейдемо до наших передумов і побудуємо цей проект! 👷🏾‍♂️🧱🏡

Передумови ⚒️

Перш ніж перейти до скриптів, переконайтесь, що у вас є наступне:

Створіть акаунт на RapidAPI: 🏀
Вам знадобиться акаунт на RapidAPI для доступу до зображень та відео моментів гри. Для цього прикладу ми використовуємо моменти NCAA (американський коледж баскетбол), які доступні безкоштовно в базовому плані. Sports Highlights API — це кінцева точка, з якою ми будемо працювати.

pic

Перевірте, що передумови встановлені: 🛠️
Перевірте, чи встановлені наступні інструменти на вашій системі:

Docker: Повинен бути попередньо встановлений у більшості регіонів. Перевірте це, запустивши docker — version.

AWS CloudShell: Поставляється з попередньо встановленим AWS CLI. Перевірте це за допомогою команди aws — version.

Python3: Переконайтесь, що він встановлений, запустивши python3 — version.

pic

Отримайте ваш AWS Account ID ☁️🔑
Щоб отримати ваш AWS Account ID, увійдіть у консоль керування AWS.
Натисніть на ім'я вашого акаунта в правому верхньому куті, і ви побачите свій Account ID. Скопіюйте і збережіть цей ID у безпечному місці, тому що він знадобиться пізніше при оновленні коду в лабораторних роботах.

Отримання Access Keys та Secret Access Keys🔑
У панелі IAM перевірте під розділом Users ваші ключі доступу. Клацніть на основного користувача, що має облікові дані, перейдіть до Security Credentials і прокрутіть вниз до розділу Access Key. Якщо у вас немає секретного ключа доступу, вам потрібно буде створити його, оскільки пізніше він не буде доступний для отримання. Переконайтеся, що ви зберегли його в безпечному місці!🔑

Крок 1: Створення ролі/користувача IAM👨🏾‍💻

Ми створюємо роль/користувача IAM, який має відповідні дозволи для виконання процесів, необхідних для нашого проекту. Вони мають лише достатньо прав, щоб виконувати потрібні завдання. Не потрібен доступ рівня адміністратора. Залежно від вашої ролі на роботі, вам знадобляться правильні дозволи для виконання певних процесів відповідно до рівня доступу вашої ролі. Увійдіть в консоль AWS, в поле пошуку введіть IAM. Клацніть на Roles, потім Create role, щоб створити нову роль. Для цього випадку виберемо S3. Ми додамо цю політику довіри незабаром. Нам потрібно взаємодіяти не лише з S3. Натискаємо next. У розділі Add Permissions шукаємо AmazonS3FullAccess, MediaConvertFullAccess і AmazonEC2ContainerRegistryFullAccess, після чого натискаємо next. У розділі Role details введіть “HighlightProcessorRole” як ім'я. Це буде специфічно викликатися і використовуватися в самому скрипті. Вибираємо Create Role. Знайдіть роль у списку та клацніть на неї. У розділі Trust relationships натискаємо Edit і заміняємо політику довіри на таку: Edit the Trust Policy and replace it with this: IAMPolicies:

pic

Потім натискаємо Update Policy. Тепер давайте перейдемо до нашого CloudShell Terminal для наступних кроків!

Крок 2: Створення S3 Bucket🪣

Тепер нам потрібно створити S3 bucket🪣 і його вміст. Відкрийте CloudShell Terminal. Введіть цей код і переконайтесь, що ваш bucket унікальний. ‘aws s3api create-bucket — bucket rddrapids — region us-east-1’. Для перевірки введіть команду 'aws s3 ls'. Ви повинні побачити ваш bucket у списку. Продовжимо налаштовувати решту проекту!

pic

pic

Крок 3: Створення локальної папки та клонування репозиторію🗂️

Готові почати? Давайте налаштуємо ваше локальне середовище та розпочнемо проект!

1️⃣ Створіть нову папку
Запустіть термінал і створіть локальну папку для вашого проекту. Наприклад: mkdir -p “Day5-ncaa-folderplaceholder”. Тепер перейдіть у папку: cd “Day5-ncaa-folderplaceholder”

2️⃣ Клонуйте ваш репозиторій GitHub
Перейдіть на GitHub і створіть репозиторій, якщо ще не зробили цього: Create a New Repo.
Клонуйте ваш репозиторій на вашу локальну машину. Наприклад, мій репозиторій має назву DevOps-30-Day-Challenge: git clone https://github.com/username-placeholder/DevOps-30-Day-Challenge.git
Після клонування перейдіть до вашої проектної папки: cd DevOps-30-Day-Challenge

pic

3️⃣ Перевірте вашу структуру
Запустіть: ls

Переконайтесь, що ви бачите створені та клонуємо папки, наприклад Day5-ncaa-folderplaceholder.
Тепер ми побудуємо структуру файлів/папок локально та завантажимо її на GitHub.

Ваша папка повинна виглядати ось так, коли ви закінчите:

Day5-ncaa-gamehighlights
├── README.md
├── resources
│ ├── IAMPolicies
│ ├── ncaaprojectcleanup.sh
│ └── vpcsetup.sh
└── src
├── terraform/
├── .env
├── .gitignore
├── Dockerfile
├── config.py
├── fetch.py
├── mediaconvert
process.py
├── processonevideo.py
├── requirements.txt
└── run_all.py

Файли та їх призначення

Папка Resources
- IAMPolicies: Містить політики IAM, необхідні для проекту.

  • ncaaprojectcleanup.sh: Скрипт для очищення AWS ресурсів, що використовуються в проекті.
  • vpc_setup.sh: Скрипт для налаштування VPC для NCAA моментів гри.

Папка Source
- .env: Змінні середовища для проекту.

  • .gitignore: Файл ігнорування для Git, щоб запобігти відстеженню чутливих або непотрібних файлів.

- - Dockerfile: Конфігурація Docker для контейнеризації додатку.

  • config.py: Файл конфігурації для проекту.

- fetch.py: Скрипт для отримання даних про моменти гри NCAA.

- mediaconvert_process.py: Скрипт для обробки через AWS Elemental MediaConvert.

- processonevideo.py: Скрипт для обробки одного відео з моментом гри NCAA.

- requirements.txt: Залежності Python для проекту.

  • run_all.py: Основний скрипт для запуску всіх компонентів проекту.

Як запустити проект

  1. Клонувати репозиторій:
    ```bash
    git clone https://github.com/username-placeholder/DevOps-30-Day-Challenge.git
    cd DevOps-30-Day-Challenge/Day5-ncaa-folderplaceholder
    Налаштуйте середовище:
    Ви можете скопіювати всі файли .env, config.py тощо з мого репозиторію на GitHub.
    І скопіюйте їх у ваші віддалені файли/папки на GitHub. Комітніть зміни щодо всіх папок, файлів, Dockerfile тощо. Як тільки ви це зробите віддалено, поверніться на свою локальну машину і в головній директорії введіть git fetch. Потім виконайте git pull origin main. Це має завантажити всі зміни. Щоб переконатися, що ваша локальна машина оновлена, введіть git status.

pic

pic

pic

Це забезпечує, що ваше локальне середовище повністю оновлене з вашим віддаленим репозиторієм.
🎉 Ви готові! Готові приступити до наступних кроків? Давайте підтримувати цей ритм! 💪

Крок 4: Налаштування файлу .env 🗂️
Тепер час оновити файл .env всіма критично важливими деталями, які потрібні нашому проекту. Відкрийте ваш локальний репозиторій і перейдіть до папки src. Використайте команду:

nano .env
Це дозволить вам редагувати вміст файлу .env безпосередньо.
Тепер давайте налаштуємо це з вашими унікальними значеннями для заповнювачів нижче:

RAPIDAPI_KEY=yourrapidapikeyhere
**AWS
ACCESSKEYID=yourawsaccesskeyidhere
**AWS
SECRETACCESSKEY
=yourawssecretaccesskeyhere
**S3
BUCKETNAME**=yourS3bucketnamehere
**MEDIACONVERT
ENDPOINT=https://yourmediaconvertendpoint_here.amazonaws.com
**MEDIACONVERTROLEARN
=arn:aws:iam::youraccountid:role/HighlightProcessorRole

pic

pic

pic

Як заповнити ці значення:

RAPIDAPI_KEY: Створіть акаунт на RapidAPI, знайдіть "Sports Highlights". Підпишіться на API та отримайте свій ключ в розділі "Subscribe to Test".

pic

AWSACCESSKEY_ID та AWSSECRETACCESS_KEY: Ці ключі генеруються в вашій консолі AWS IAM. Переконайтеся, що вони зберігаються в безпеці.

S3BUCKETNAME: Використовуйте назву S3-бакету, який ви створили раніше. Для мене це rddrapids; для вас це буде унікальне ім’я.

MEDIACONVERT_ENDPOINT: Виконайте наступну команду, щоб знайти ваш endpoint:
aws mediaconvert describe-endpoints
Скопіюйте URL та вставте його сюди.

MEDIACONVERTROLEARN: Це ARN для ролі MediaConvert, яку ви створили раніше. Замініть youraccountid на ваш реальний AWS акаунт ID.

pic

Збережіть і закрийте файл .env, натиснувши CTRL+O для збереження та CTRL+X для виходу. Для забезпечення безпеки змінних середовища, обмежте доступ до файлу:

chmod 600 .env

Нарешті, переконайтеся, що Docker працює, бо ми зараз будуємо та запускаємо контейнер для цього проекту.

Крок 5: Створення та запуск Docker контейнера локально 🛠️
Ось де починається магія! 🚀 Давайте побудуємо та запустимо наш проект за допомогою Docker.

У вашій командній строкі побудуйте Docker контейнер:
docker build -t highlight-processor .
Слідкуйте, як Docker перетворює ваше зображення на контейнер. Якщо все налаштовано правильно, ви майже готові!

pic

Запустіть контейнер з файлом .env:
docker run — env-file .env highlight-processor
Це ініціює весь процес! Наше застосування:

Завантажить відео в S3 бакет.
Створить MediaConvert завдання для обробки відео.
Перевірка результатів 🎉
Перевіримо результати всієї нашої роботи:

Вміст S3 бакету: Перейдіть до вашого бакету і ви побачите ці папки:

highlights: Завантажте файл basketball_highlights.json, щоб побачити всі моменти гри (спробуйте переглянути його у VS Code).

pic

videos: Містить завантажене перше відео first_video.mp4.

pic

processed_videos: Містить остаточно оброблене відео! 🎥

Деталі MediaConvert завдання: В консолі AWS Management, знайдіть MediaConvert і перегляньте завдання, яке ми створили для first_video.mp4.

pic

Перегляньте відео: Завантажте оброблене відео і подивіться його. Насолоджуйтеся звуком, моментами гри та всіма покращеннями, які ми реалізували! Успіх! 🏀

pic

Що ми дізналися 💡
Використання Docker для контейнеризації та управління робочими процесами.
Використання сервісів AWS, таких як S3, MediaConvert та IAM.
Важливість мінімальних прав та безпечних практик в IAM.
Автоматизація обробки медіа та покращення якості.

Майбутні вдосконалення 🚀
Ось куди ми можемо рухатись з цим проектом далі:

Інфраструктура як код: Використовуйте Terraform для визначення всієї налаштування.
Масштабованість: Обробляйте кілька відео паралельно за допомогою MediaConvert.
Динамічні діапазони дат: Зробіть дати динамічними, наприклад, "останні 30 днів" замість жорстко закодованих міток часу.

DevOpsAllStarChallenge

Перекладено з: DevOps 30-Day Challenge | Day 5|NCAA GameHighlights

Leave a Reply

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