Размещение статического сайта в S3 и перенаправление субдомена
Важно: домен, купленный в AWS, платный. За создание Hosted Zone и хранение в S3 взимаются отдельные сборы.
К чему готовиться
- Нужен аккаунт AWS и домен, купленный в AWS. Если домен зарегистрирован вне AWS, шаги по делегированию NS записей будут другими.
- Понимание базовых понятий: S3 bucket и Route 53.
- S3 поддерживает только статические сайты. Серверные языки (PHP, ASP.NET и т. п.) не работают.
Что мы сделаем
- Войдём в AWS Console.
- Настроим S3 Bucket для статического хостинга.
- Создадим запись в Route 53, чтобы субдомен указывал на S3 website endpoint.
Вход в AWS
Перейдите на страницу входа в AWS и авторизуйтесь.

После успешного входа вы увидите консоль управления AWS.

Настройка S3 Bucket
- В верхней части консоли в строке поиска введите «S3» и откройте сервис.
- На дашборде будут перечислены все ваши бакеты из всех регионов. Бакет для статического хоста должен иметь имя, совпадающее с доменом или субдоменом, например kops.devopslee.com.

- Сделайте бакет общедоступным. Перейдите в вкладку «Permissions», нажмите “Edit” под “Block public access” и снимите все четыре галочки, затем сохраните изменения.

- Добавьте политику бакета, которая разрешает публичное чтение объектов. Пример политики — замените your-s3-bucket-name-here на имя вашего бакета:
{
"Version": "2012-10-17",
"Id": "Policy1548223592786",
"Statement": [
{
"Sid": "Stmt1548223591553",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::your-s3-bucket-name-here/*"
}
]
}Примечание: политика разрешает публичный доступ только для чтения объектов внутри бакета. Следите, чтобы вы не делали бакет публичным для операций записи.

- Во вкладке «Properties» включите статический хостинг. Укажите индексный документ, например index.html, и (при необходимости) документ для ошибок, например error.html.

- Загрузите ваши файлы сайта в корень бакета. Можно использовать консоль, CLI или автоматически в CI/CD. Пример загрузки index.html:

Ниже приведён минимальный пример index.html, который можно использовать для теста:
Тестовый статический сайт
Статический сайт на S3
Если вы видите эту страницу, S3 и Route 53 настроены корректно.
Создание записи в Route 53
- Введите в строку поиска консоли «Route 53» и откройте сервис.
- Если вы создаёте субдомен, добавьте Hosted Zone для субдомена или создайте запись внутри основной Hosted Zone.

- Создайте запись (Record Set) для субдомена. Переключите Alias на «Yes», тип — A (IPv4). В параметре “Alias target” выберите “S3 website endpoint” и укажите ваш бакет.

- Убедитесь, что в основной Hosted Zone есть NS-запись для вашего субдомена, если вы создали отдельную Hosted Zone.

- Подождите распространения DNS. Обычно это занимает секунды—минуты, но может доходить до TTL записи.

После этого откройте субдомен в браузере. Если всё настроено корректно, вы увидите загруженную страницу.
Критерии приёмки
- Субдомен открывается и возвращает index.html с S3.
- HTTP статус 200 для главной страницы.
- Публичные ресурсы (CSS/JS/изображения) загружаются без 403.
- При использовании отдельных Hosted Zone — NS-запись делегирована в основной Hosted Zone.
Когда этот способ не сработает
- Если сайт требует серверной логики (формы с серверной обработкой, динамический рендеринг) — S3 не подойдёт.
- Если вам обязательно нужен HTTPS для root/субдомена, привязка S3 website endpoint напрямую не даст сертификат. Решение — поставить CloudFront с сертификатом ACM или разместить сайт в другом сервисе.
Альтернативные подходы
- CloudFront + S3 origin для поддержки HTTPS и ускорения доставки.
- Amazon Amplify для CI/CD, хостинга статичных SPA и автоматического получения HTTPS.
- Elastic Beanstalk / EC2 / ECS для динамических приложений.
Быстрые правила-эмпирики
- Имя бакета = домен/субдомен.
- Для HTTPS используйте CloudFront перед S3.
- Для SPA (React/Vue) укажите index.html как документ ошибок, чтобы обрабатывать маршруты клиентской стороны.
Контрольный чеклист для деплоя (роль-ориентированный)
- Разработчик: подготовил статические файлы, проверил локально.
- DevOps: создал бакет с именем домена, включил статический хостинг, загрузил файлы.
- Сетевой инженер: настроил Route 53 запись Alias –> S3 website endpoint, проверил NS-записи.
- QA: проверил доступность страницы, проверки URL и статических ресурсов.
Мини-методология внедрения
- Подготовьте и протестируйте сайт локально.
- Создайте бакет с именем домена.
- Включите статический хостинг, загрузите файлы.
- Разрешите публичный доступ и настройте политику чтения.
- Настройте Route 53 Alias-запись на S3 website endpoint.
- Тестируйте из разных сетей и очистите кэш DNS при необходимости.
Decision tree для выбора архитектуры
flowchart TD
A[Нужен статический сайт?] -->|Да| B{Нужен HTTPS на домене?}
A -->|Нет| Z[Используйте сервер/контейнер]
B -->|Нет| C[S3 website endpoint]
B -->|Да| D[CloudFront + S3 origin + ACM SSL]
C --> E[Route53 Alias -> S3]
D --> F[Route53 Alias -> CloudFront]Меры безопасности и приватность
- Ограничьте публичные права только к операции GetObject.
- Не храните секреты в публичных файлах.
- Для приватного контента используйте подписанные URL (pre-signed URLs) или защиту на уровне CloudFront.
Советы по миграции и совместимости
- Если домен не на AWS, получите NS-записи Hosted Zone и добавьте их у регистратора.
- Для SPA настройте обработку 404 на выдачу index.html.
- Для больших сайтов рассмотрите передачу ресурсов в S3 + CloudFront для кэширования и снижения задержки.
Заключение
Вы узнали, как разместить статический сайт в S3 и направить субдомен туда через Route 53. Этот способ прост и экономичен для сайтов без серверной логики. Для HTTPS и производительности рекомендуется добавлять CloudFront. После настройки убедитесь, что имя бакета совпадает с доменом и что публичный доступ настроен корректно.
Короткая контрольная заметка: если нужен HTTPS — добавляйте CloudFront; если нужен сервер — выбирайте другой сервис.
Ключевые ресурсы и примечания:
- Документация AWS по S3 Static Website Hosting
- Документация AWS по Route 53
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента