Настройка деплоя сайта на AWS (EC2/ECS/Lambda)

Наша компания занимается разработкой, поддержкой и обслуживанием сайтов любой сложности. От простых одностраничных сайтов до масштабных кластерных систем построенных на микро сервисах. Опыт разработчиков подтвержден сертификатами от вендоров.
Разработка и обслуживание любых видов сайтов:
Информационные сайты или веб-приложения
Сайты визитки, landing page, корпоративные сайты, онлайн каталоги, квиз, промо-сайты, блоги, новостные ресурсы, информационные порталы, форумы, агрегаторы
Сайты или веб-приложения электронной коммерции
Интернет-магазины, B2B-порталы, маркетплейсы, онлайн-обменники, кэшбэк-сайты, биржи, дропшиппинг-платформы, парсеры товаров
Веб-приложения для управления бизнес-процессами
CRM-системы, ERP-системы, корпоративные порталы, системы управления производством, парсеры информации
Сайты или веб-приложения электронных услуг
Доски объявлений, онлайн-школы, онлайн-кинотеатры, конструкторы сайтов, порталы предоставления электронных услуг, видеохостинги, тематические порталы

Это лишь некоторые из технических типов сайтов, с которыми мы работаем, и каждый из них может иметь свои специфические особенности и функциональность, а также быть адаптированным под конкретные потребности и цели клиента

Предлагаемые услуги
Показано 1 из 1 услугВсе 2065 услуг
Настройка деплоя сайта на AWS (EC2/ECS/Lambda)
Сложная
~3-5 рабочих дней
Часто задаваемые вопросы
Наши компетенции:
Этапы разработки
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1262
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1171
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    874
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1094
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    831
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Разработка веб-сайта для компании ФИКСПЕР
    851

Настройка деплоя сайта на AWS (EC2/ECS/Lambda)

AWS предоставляет три основных пути деплоя веб-приложений: EC2 (виртуальные машины), ECS (контейнеры), Lambda (serverless). Выбор зависит от масштаба, требований к управлению и паттерна нагрузки.

Статический сайт: S3 + CloudFront

Самый дешёвый и масштабируемый вариант для SPA и статики:

# Создать S3 бакет
aws s3 mb s3://myapp-production --region eu-west-1

# Настроить как website
aws s3 website s3://myapp-production \
    --index-document index.html \
    --error-document index.html

# Деплой
aws s3 sync dist/ s3://myapp-production \
    --delete \
    --cache-control "public, max-age=31536000, immutable" \
    --exclude "index.html"

aws s3 cp dist/index.html s3://myapp-production \
    --cache-control "no-cache, no-store, must-revalidate"

# Инвалидация CloudFront кеша
aws cloudfront create-invalidation \
    --distribution-id E1234567890 \
    --paths "/*"

EC2: PHP/Laravel приложение

# launch template для Auto Scaling Group
aws ec2 create-launch-template \
    --launch-template-name myapp-lt \
    --version-description v1 \
    --launch-template-data '{
        "ImageId": "ami-0c55b159cbfafe1f0",
        "InstanceType": "t3.medium",
        "KeyName": "myapp-key",
        "SecurityGroupIds": ["sg-0123456789"],
        "UserData": "'"$(base64 user-data.sh)"'",
        "IamInstanceProfile": {"Name": "EC2InstanceProfile"}
    }'
# user-data.sh — инициализация при запуске EC2
#!/bin/bash
apt update && apt install -y nginx php8.3-fpm composer

# Скачать и настроить приложение
git clone https://github.com/user/myapp.git /var/www/app
cd /var/www/app
composer install --no-dev --optimize-autoloader
cp .env.production .env
php artisan key:generate
php artisan migrate --force

ECS Fargate: контейнеризированное приложение

// task-definition.json
{
    "family": "myapp",
    "networkMode": "awsvpc",
    "requiresCompatibilities": ["FARGATE"],
    "cpu": "512",
    "memory": "1024",
    "containerDefinitions": [
        {
            "name": "web",
            "image": "123456789.dkr.ecr.eu-west-1.amazonaws.com/myapp:latest",
            "portMappings": [{ "containerPort": 80 }],
            "environment": [
                { "name": "APP_ENV", "value": "production" }
            ],
            "secrets": [
                { "name": "DB_PASSWORD", "valueFrom": "arn:aws:secretsmanager:..." }
            ],
            "healthCheck": {
                "command": ["CMD-SHELL", "curl -f http://localhost/health || exit 1"],
                "interval": 30,
                "timeout": 5
            },
            "logConfiguration": {
                "logDriver": "awslogs",
                "options": {
                    "awslogs-group": "/ecs/myapp",
                    "awslogs-region": "eu-west-1",
                    "awslogs-stream-prefix": "ecs"
                }
            }
        }
    ]
}
# Регистрация task definition
aws ecs register-task-definition --cli-input-json file://task-definition.json

# Обновить сервис (Rolling Update)
aws ecs update-service \
    --cluster myapp-cluster \
    --service myapp-service \
    --force-new-deployment \
    --task-definition myapp:latest

Lambda: serverless API

# handler.py
import json
import boto3

def lambda_handler(event, context):
    path = event.get('path', '/')
    method = event.get('httpMethod', 'GET')

    if path == '/api/health':
        return {
            'statusCode': 200,
            'headers': {'Content-Type': 'application/json'},
            'body': json.dumps({'status': 'ok'}),
        }

    # Routing
    return {'statusCode': 404, 'body': 'Not found'}
# serverless.yml (Serverless Framework)
service: myapp-api
provider:
  name: aws
  runtime: python3.11
  region: eu-west-1
  environment:
    DB_HOST: ${ssm:/myapp/db-host}

functions:
  api:
    handler: handler.lambda_handler
    events:
      - httpApi:
          path: /api/{proxy+}
          method: ANY
    timeout: 29
    memorySize: 512

plugins:
  - serverless-python-requirements

GitHub Actions CI/CD для ECS

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - uses: aws-actions/configure-aws-credentials@v4
        with:
          aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
          aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
          aws-region: eu-west-1

      - uses: aws-actions/amazon-ecr-login@v2

      - name: Build and push to ECR
        run: |
          docker build -t $ECR_REGISTRY/myapp:$IMAGE_TAG .
          docker push $ECR_REGISTRY/myapp:$IMAGE_TAG

      - name: Deploy to ECS
        uses: aws-actions/amazon-ecs-deploy-task-definition@v1
        with:
          task-definition: task-definition.json
          service: myapp-service
          cluster: myapp-cluster
          wait-for-service-stability: true

Срок реализации

Вариант Срок
S3 + CloudFront (SPA) 1–2 дня
EC2 + ALB 3–5 дней
ECS Fargate 5–7 дней
Lambda + API Gateway 4–7 дней