Налаштування деплою сайту на 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 пропонує три основних шляхи для веб-додатків: Compute Engine (GCE) — віртуальні машини, Cloud Run — 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 днів