Вычисления и EC2 — Примеры
Пример 1 — Инстанс, подобранный под худшую неделю
Сервис отчётов загружен один час каждое утро, а в остальное время простаивает. Его запустили на самом большом размере общего назначения «на всякий случай», и так он проработал весь месяц. По измеренному пику ниже выберите размер с небольшим запасом и скажите, что этот выбор обязан оставить неизменным.
resource "aws_instance" "reports" {
ami = "<report-image>"
instance_type = "m5.4xlarge" # иллюстративно: 16 vCPU, 64 GB
subnet_id = "<app-subnet-a>"
}
Решение
resource "aws_instance" "reports" {
ami = "<report-image>"
instance_type = "t3.medium" # иллюстративно: 2 vCPU, 4 GB
subnet_id = "<app-subnet-a>"
}
Образ и подсеть не тронуты, поэтому замена идентична, а машина остаётся заменяемой; изменился только размер, и теперь он сидит чуть выше измеренного пика. Час в день — не ровная нагрузка, поэтому долгосрочный план здесь не тот инструмент, а меньший инстанс — правильный первый шаг. Обычная ошибка — оставить завышенную машину работать, потому что она уже есть: семейство и регион задают цену, и мощность, которой не требовало ни одно измерение, может стоить в несколько раз дороже.
Пример 2 — Сервер, который больше нельзя пересобрать
Рабочий процесс полгода патчили руками, и теперь он отличается от образа, из которого был собран, так что его замена поведёт себя иначе. Нагрузка выполняется часами на один вызов, что исключает верхние ступени лестницы управляемых сервисов. Превратите ручные изменения в то, что воспроизводит запуск.
# набрано руками на работающем сервере, месяц за месяцем, нигде не записано
install <runtime-version>
apply <config-edit>
install <security-update>
Решение
#!/usr/bin/env bash
# шаги сборки образа, хранятся в системе контроля версий и выполняются при сборке
set -euo pipefail
install <runtime-version>
copy <config-file> /etc/<service>/
install <security-update>
Теперь каждый ручной шаг — строка в сборке, поэтому машина, запущенная из образа, ведёт себя как протестированная и её можно уничтожить без церемоний. Нагрузка остаётся на ступени инстанса, потому что долго работающая задача превышает более короткие лимиты выше; обращение к функции обнаружилось бы как переделка, а не как правка конфигурации. Обычная ошибка — считать артефактом работающий сервер, а не образ.