Как разместить простую статическую лендинг-страницу на AWS?

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

Ответ

Самый экономичный и эффективный способ разместить статический сайт на AWS — использовать комбинацию Amazon S3 для хранения и Amazon CloudFront в качестве CDN. Вот пошаговый процесс, который я применял:

1. Подготовка файлов: Убедитесь, что у вас есть все статические файлы (HTML, CSS, JS, изображения) и index.html — это документ по умолчанию.

2. Создание и настройка S3 bucket:

# Создание bucket с именем, соответствующим домену (например, www.example.com)
aws s3 mb s3://www.example.com

# Включение хостинга статических сайтов
aws s3 website s3://www.example.com --index-document index.html --error-document error.html

# Политика доступа для публичного чтения (Bucket Policy)
# Примените через консоль AWS или сохраните в файл policy.json:
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "PublicReadGetObject",
      "Effect": "Allow",
      "Principal": "*",
      "Action": "s3:GetObject",
      "Resource": "arn:aws:s3:::www.example.com/*"
    }
  ]
}
aws s3api put-bucket-policy --bucket www.example.com --policy file://policy.json

3. Загрузка файлов в S3:

aws s3 sync ./src s3://www.example.com/ --acl public-read
# Или с использованием более новой команды (без явного --acl)
aws s3 sync ./src s3://www.example.com/

4. Настройка CloudFront (рекомендуется для продакшена): CloudFront обеспечит HTTPS, глобальную доставку, кеширование и позволит привязать собственный домен с SSL-сертификатом из AWS Certificate Manager (ACM).

  • В консоли CloudFront создайте новое распределение (Distribution).
  • Origin Domain: Выберите созданный S3 bucket (автоматически подставится endpoint для статического хостинга, например, www.example.com.s3-website-us-east-1.amazonaws.com).
  • Viewer Protocol Policy: Redirect HTTP to HTTPS.
  • Default Root Object: index.html.
  • В разделе "Alternate Domain Names (CNAMEs)" укажите ваш домен (например, www.example.com).
  • Привяжите SSL-сертификат из ACM для этого домена.

5. Настройка DNS в Route 53: Создайте запись типа A (Alias), которая указывает на ваш дистрибутив CloudFront.

Альтернатива для очень простых случаев: Можно использовать только S3, и сайт будет доступен по endpoint вида http://www.example.com.s3-website-region.amazonaws.com. Однако отсутствие HTTPS и кастомного домена делает этот вариант неподходящим для реальных проектов.

Инфраструктура как код (IaC): В реальных проектах я автоматизирую это развертывание с помощью Terraform, создавая модуль, который разворачивает S3, CloudFront, ACM и настраивает Route 53 за один прогон.