← Назад к вопросам

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

1.6 Junior🔥 171 комментариев
#Облачные технологии

Комментарии (1)

🐱
deepseek-v3.2PrepBro AI5 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Размещение статического лендинга на AWS: Полное руководство

Для размещения простой статической лендинг-страницы на AWS существует несколько эффективных подходов. Я подробно рассмотрю наиболее оптимальные варианты, их архитектуру и практическую реализацию.

Архитектурные варианты размещения

1. S3 + CloudFront + Route 53 (Рекомендуемый промышленный вариант)

Это наиболее распространённое и масштабируемое решение, которое обеспечивает:

  • Высокую доступность (99.9% SLA)
  • Глобальную низкую задержку через CDN
  • HTTPS поддержку
  • Экономическую эффективность

Этапы развёртывания:

# 1. Создание S3 bucket для хостинга
aws s3 mb s3://my-landing-page-bucket --region us-east-1

# 2. Настройка bucket для статического хостинга
aws s3 website s3://my-landing-page-bucket \
  --index-document index.html \
  --error-document error.html

# 3. Загрузка файлов лендинга
aws s3 sync ./dist s3://my-landing-page-bucket --acl public-read

Конфигурация bucket policy для публичного доступа:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "PublicReadGetObject",
      "Effect": "Allow",
      "Principal": "*",
      "Action": "s3:GetObject",
      "Resource": "arn:aws:s3:::my-landing-page-bucket/*"
    }
  ]
}

2. Amplify Console (Самый простой для разработчиков)

AWS Amplify предоставляет полностью управляемый CI/CD пайплайн для статических сайтов:

Преимущества Amplify:

  • Автоматическое развёртывание из Git репозитория
  • Встроенный HTTPS и CDN
  • Поддержка SSR/SSG (Next.js, Gatsby)
  • Интеграция с собственным доменом
  • Environment переменные

Подробная реализация через S3 + CloudFront

Настройка CloudFront для производительности и безопасности

# CloudFront Distribution Configuration (CloudFormation)
Resources:
  MyLandingPageDistribution:
    Type: AWS::CloudFront::Distribution
    Properties:
      DistributionConfig:
        Origins:
          - Id: S3Origin
            DomainName: my-landing-page-bucket.s3.amazonaws.com
            S3OriginConfig:
              OriginAccessIdentity: origin-access-identity/cloudfront/EXAMPLE
        Enabled: true
        DefaultRootObject: index.html
        CustomErrorResponses:
          - ErrorCode: 404
            ResponseCode: 200
            ResponsePagePath: /index.html
        ViewerCertificate:
          AcmCertificateArn: arn:aws:acm:us-east-1:123456789012:certificate/EXAMPLE
          SslSupportMethod: sni-only
        DefaultCacheBehavior:
          TargetOriginId: S3Origin
          ViewerProtocolPolicy: redirect-to-https
          AllowedMethods: ["GET", "HEAD"]
          CachedMethods: ["GET", "HEAD"]
          ForwardedValues:
            QueryString: false
            Cookies:
              Forward: none
          MinTTL: 0
          DefaultTTL: 86400
          MaxTTL: 31536000

Автоматизация развёртывания с CI/CD

# GitHub Actions workflow для автоматического деплоя
name: Deploy to S3 and CloudFront

on:
  push:
    branches: [ main ]

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      
      - name: Configure AWS credentials
        uses: aws-actions/configure-aws-credentials@v1
        with:
          aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
          aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
          aws-region: us-east-1
      
      - name: Build static site
        run: npm install && npm run build
      
      - name: Deploy to S3
        run: aws s3 sync ./dist s3://my-landing-page-bucket --delete
      
      - name: Invalidate CloudFront cache
        run: aws cloudfront create-invalidation --distribution-id ${{ secrets.CLOUDFRONT_DISTRIBUTION_ID }} --paths "/*"

Ключевые оптимизации и best practices

Производительность:

  • Сжатие контента через CloudFront автоматическое gzip/brotli
  • Кэширование с оптимальными TTL значениями
  • HTTP/2 и HTTP/3 поддержка
  • Edge Functions для A/B тестирования

Безопасность:

  • WAF (Web Application Firewall) для защиты от DDoS
  • Origin Access Identity для ограничения прямого доступа к S3
  • Security Headers через CloudFront Functions:
// CloudFront Function для добавления security headers
function handler(event) {
    var response = event.response;
    var headers = response.headers;
    
    headers['strict-transport-security'] = { 
        value: 'max-age=31536000; includeSubDomains' 
    };
    headers['x-content-type-options'] = { value: 'nosniff' };
    headers['x-frame-options'] = { value: 'DENY' };
    headers['x-xss-protection'] = { value: '1; mode=block' };
    
    return response;
}

Мониторинг и аналитика:

  • CloudWatch Metrics для метрик производительности
  • Access Logs в S3 для анализа трафика
  • Real User Monitoring через CloudFront Real-time logs

Стоимостная оптимизация

Основные компоненты стоимости:

  • S3 storage: ~$0.023 за GB/месяц
  • S3 requests: ~$0.0004 за 1000 запросов
  • CloudFront traffic: ~$0.085 за GB (для первых 10TB)
  • Route 53 hosted zone: $0.50 за зону/месяц

Оптимизация расходов:

  • Использование S3 Intelligent-Tiering для автоматического перемещения объектов
  • Настройка CloudFront Price Classes для ограничения регионов CDN
  • Реализация Cache Hit Ratio мониторинга

Альтернативные сервисы для специфических случаев

  • AWS Lightsail: Для простых проектов с фиксированной месячной стоимостью
  • EC2 + Nginx: Для полного контроля (не рекомендуется для pure static)
  • API Gateway + Lambda: Для динамических элементов на статическом сайте

Практический пример полного развёртывания

#!/bin/bash
# Полный скрипт развёртывания лендинга
DOMAIN="example.com"
BUCKET="landing-$DOMAIN"
DISTRIBUTION_ID=""

# 1. Создание S3 bucket
aws s3api create-bucket --bucket $BUCKET --region us-east-1

# 2. Настройка хостинга
aws s3 website s3://$BUCKET --index-document index.html

# 3. Создание CloudFront Distribution
DIST_CONFIG=$(cat <<EOF
{
  "CallerReference": "$(date +%s)",
  "Aliases": {"Quantity": 1, "Items": ["$DOMAIN"]},
  "DefaultRootObject": "index.html",
  "Origins": {
    "Quantity": 1,
    "Items": [{
      "Id": "S3-$BUCKET",
      "DomainName": "$BUCKET.s3.amazonaws.com",
      "S3OriginConfig": {"OriginAccessIdentity": ""}
    }]
  }
}
EOF
)

# 4. Настройка DNS в Route 53
# 5. Загрузка контента и инвалидация кэша

Заключение

Для production-лендинга я настоятельно рекомендую S3 + CloudFront + Route 53 комбинацию как наиболее надежное, масштабируемое и экономически эффективное решение. Amplify отлично подходит для быстрого старта и команд, которые хотят минимизировать operational overhead. Ключевые преимущества AWS подхода — глобальная доступность, встроенная безопасность и интеграция с остальной экосистемой AWS для будущего расширения функциональности.

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