AWS EC2: виртуальные серверы
EC2 (Elastic Compute Cloud) — сервис виртуальных серверов AWS: выбираешь тип инстанса, операционную систему и запускаешь сервер в облаке за секунды.
Зачем нужно
EC2 — это полноценный Linux-сервер в облаке, которым разработчик управляет как своим VPS. В отличие от serverless, здесь есть полный контроль над окружением, возможность запускать Docker, настраивать systemd-сервисы и долгоживущие процессы. EC2 масштабируется от t3.micro (бесплатный tier) до сотен ядер.
Где используется
- Хостинг Node.js / Python backend API
- Запуск Docker-контейнеров (без Kubernetes)
- Self-hosted базы данных или Redis (когда RDS/ElastiCache дорог)
- Build-серверы, воркеры очередей
Основной контент
Запуск инстанса через AWS CLI
# Создать key pair для SSH
aws ec2 create-key-pair \
--key-name my-key \
--query 'KeyMaterial' \
--output text > my-key.pem
chmod 400 my-key.pem
# Запустить инстанс (Amazon Linux 2023, t3.micro)
aws ec2 run-instances \
--image-id ami-0c55b159cbfafe1f0 \
--instance-type t3.micro \
--key-name my-key \
--security-group-ids sg-xxxxxxxxx \
--subnet-id subnet-xxxxxxxxx \
--tag-specifications 'ResourceType=instance,Tags=[{Key=Name,Value=my-api}]'
# Получить публичный IP
aws ec2 describe-instances \
--filters "Name=tag:Name,Values=my-api" \
--query 'Reservations[*].Instances[*].PublicIpAddress' \
--output text
Подключение и базовая настройка
# SSH-подключение
ssh -i my-key.pem ec2-user@<PUBLIC_IP>
# Установка Node.js на Amazon Linux 2023
sudo dnf install -y nodejs npm
# Или через nvm
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
source ~/.bashrc
nvm install 20
nvm use 20
User Data — автоматическая настройка при запуске
# user-data.sh — выполняется при первом запуске инстанса
#!/bin/bash
dnf update -y
dnf install -y docker
systemctl start docker
systemctl enable docker
usermod -aG docker ec2-user
# Установка docker compose plugin
DOCKER_CONFIG=${DOCKER_CONFIG:-$HOME/.docker}
mkdir -p $DOCKER_CONFIG/cli-plugins
curl -SL https://github.com/docker/compose/releases/latest/download/docker-compose-linux-x86_64 \
-o $DOCKER_CONFIG/cli-plugins/docker-compose
chmod +x $DOCKER_CONFIG/cli-plugins/docker-compose
# Запуск с user-data
aws ec2 run-instances \
--user-data file://user-data.sh \
--image-id ami-0c55b159cbfafe1f0 \
--instance-type t3.micro \
--key-name my-key
Security Groups (правила firewall)
# Открыть порты 22 (SSH), 80 (HTTP), 443 (HTTPS)
aws ec2 authorize-security-group-ingress \
--group-id sg-xxxxxxxxx \
--protocol tcp --port 22 --cidr 0.0.0.0/0
aws ec2 authorize-security-group-ingress \
--group-id sg-xxxxxxxxx \
--protocol tcp --port 80 --cidr 0.0.0.0/0
aws ec2 authorize-security-group-ingress \
--group-id sg-xxxxxxxxx \
--protocol tcp --port 443 --cidr 0.0.0.0/0
Типы инстансов (для веб-разработчика)
| Тип | vCPU | RAM | Назначение |
|---|---|---|---|
| t3.micro | 2 | 1 GB | Free tier, маленький API |
| t3.small | 2 | 2 GB | Небольшой прод |
| t3.medium | 2 | 4 GB | Средняя нагрузка |
| c5.large | 2 | 4 GB | CPU-интенсивные задачи |
Частые ошибки
- Открывать порт 22 (SSH) для
0.0.0.0/0в продакшне — ограничь своим IP - Хранить секреты в User Data (они видны в консоли AWS) — используй AWS Secrets Manager
- Не использовать Elastic IP — публичный IP меняется при перезапуске
- Забыть остановить инстанс — EC2 тарифицируется за время работы
Связанные темы
- _MOC DevOps
- AWS -- обзор сервисов для веб-разработчика
- SSH -- подключение к серверу
- Что такое Docker
- Nginx -- базовая настройка