У Льоні сьогодні

Запуск локальних скриптів на ECS за допомогою ngrok

В продовження теми з запуском скриптів на ECS, сьогодні винайшов ще більш зручний спосіб. Задача була схожа: зробити бенчмарк, який можливо запустити тільки з середовища ECS. Проблема така сама: на ECS можна запускати тільки готові контейнери Docker. Бенчмарк потребує послідовного налагодження та експериментування. Якщо підходити до цього нормальним шляхом — тобто комітити код, запускати скрипт деплою та очікувати, доки GitHub Actions та AWS CodeDeploy зроблять своє діло — то власне запустити скрипт вдасться раз хвилин в десять. Всякий фокус втрачається.

Тепер в мене є кращий спосіб: скрипт завантажується в контейнер ECS з локального компʼютера. Ніякої попередньої підготовки сервісу для цього не потрібно.

  • На своїй машині запускаємо HTTP сервер з теки: python -m http.server 7777. Цю команду взагалі варто запамʼятати, бо це найпростіший спосіб роздати файли за HTTP.

  • В іншому терміналі запускаємо ngrok: ngrok http 7777. Таким чином отримуємо доступ до нашого сервісу з інтернету. Ngrok теж треба знати, зазвичай він використовується для отримання тестових вебхуків на локальний додаток. Або ж можна подивитись свій вебдодаток з телефону, наприклад.

  • Тепер я можу запускати свіжий скрипт на ECS, замінив команду запуску одним рядком wget -O benchmark https://ab-cd-ef.ngrok-free.app/benchmark && chmod +x benchmark && ./benchmark. Для цього у нас є утиліта ecs_run.

  • Коли закінчив роботу, просто зупиняю сервер та ngrok та жодного “хвосту” в публічному доступі не залишається.

Найкраще це працює з Go, оскільки там все компілюється в єдиний файл, та не треба окремо завантажувати залежності. Проте й в інтерпретованих мовах залежності змінюються не так часто, тому підхід працює.