Можно ли разместить веб-сайт на Amazon S3 Bucket?

«Можно ли разместить веб-сайт на Amazon S3 Bucket?» — вопрос из категории Облачные платформы, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Да, Amazon S3 — это популярное и экономичное решение для хостинга статических сайтов в DevOps-практике AWS.

Как это работает: Вы загружаете статические файлы (HTML, CSS, JS, изображения) в S3-бакет и настраиваете его как хост статического веб-сайта.

Пошаговая настройка (через AWS CLI):

  1. Создайте и настройте бакет:
    # Создаём бакет (имя должно соответствовать DNS, если будет использоваться своё доменное имя)
    aws s3 mb s3://my-static-demo-site
    # Включаем хостинг веб-сайта
    aws s3 website s3://my-static-demo-site --index-document index.html --error-document error.html
  2. Настройте политику доступа (Bucket Policy):
    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Sid": "PublicReadGetObject",
                "Effect": "Allow",
                "Principal": "*",
                "Action": "s3:GetObject",
                "Resource": "arn:aws:s3:::my-static-demo-site/*"
            }
        ]
    }

    Примените: aws s3api put-bucket-policy --bucket my-static-demo-site --policy file://policy.json

  3. Загрузите файлы:
    aws s3 sync ./build/ s3://my-static-demo-site/ --acl public-read

Типичная DevOps-архитектура для production: S3 сам по себе не обеспечивает HTTPS и не идеален для глобальной доставки. Поэтому его комбинируют с другими сервисами:

  • Amazon CloudFront (CDN): Распределяет контент по миру, предоставляет SSL/TLS сертификат (через AWS Certificate Manager), кэширует данные и защищает от DDoS.
  • Route 53: Для использования своего доменного имени (например, demo.example.com).
  • CodePipeline / GitHub Actions: Для автоматического деплоя нового кода в S3 при пуше в репозиторий.

Ограничение: S3 подходит только для статического контента. Для динамических сайтов используется связка S3 (frontend) + API Gateway + Lambda (backend) или традиционные серверы (EC2, ECS).