1.5 Облачные технологии

1.5 Облачные технологии #

🌤️ Что такое облачные технологии #

Облако — это чужие компьютеры, которые вы арендуете через интернет вместо покупки собственных серверов.

Представьте разницу между:

  • Покупкой машины (собственная инфраструктура) — дорого, нужно обслуживать, но полный контроль
  • Вызовом такси (облако) — платишь за использование, не думаешь об обслуживании

🏗️ Модели облачных сервисов #

IaaS (Infrastructure as a Service) #

“Аренда виртуальных серверов”

Вы получаете:

  • Виртуальные машины
  • Сети
  • Хранилища

Вы управляете:

  • Операционной системой
  • Приложениями
  • Данными

Примеры: AWS EC2, Azure Virtual Machines, Google Compute Engine

Пример создания виртуальной машины в AWS:

Команда AWS CLI для запуска EC2-инстанса:

  • Образ (AMI): ami-0c55b159cbfafe1d0
  • Тип инстанса: t2.micro (бесплатный уровень)
  • SSH-ключ: my-key-pair (для доступа к серверу)
  • Группа безопасности: sg-12345678 (правила файервола)

PaaS (Platform as a Service) #

“Готовая платформа для разработки”

Вы получаете:

  • Среду выполнения
  • Базы данных
  • Middleware

Вы управляете:

  • Только приложением и данными

Примеры: Heroku, AWS Elastic Beanstalk, Google App Engine

Пример деплоя в Heroku:

Простое развертывание приложения:

  • Отправляем код в Heroku Git репозиторий
  • Платформа автоматически определяет язык, собирает и разворачивает приложение
  • Не нужно управлять серверами или инфраструктурой

SaaS (Software as a Service) #

“Готовое приложение”

Вы получаете:

  • Полностью готовое приложение

Вы управляете:

  • Только настройками и данными

Примеры: Gmail, Slack, Salesforce, GitHub

🏆 Основные облачные провайдеры #

1. Amazon Web Services (AWS) #

Плюсы:

  • Самый большой выбор сервисов (200+)
  • Большое сообщество
  • Много обучающих материалов

Минусы:

  • Сложная ценовая модель
  • Крутая кривая обучения

Ключевые сервисы: Ключевые сервисы AWS:

  • Вычисления: EC2 (виртуальные машины), Lambda (serverless), ECS/EKS (контейнеры)
  • Хранение: S3 (объектное), EBS (блочное), EFS (файловое)
  • Базы данных: RDS (реляционные), DynamoDB (NoSQL), ElastiCache (кэширование)
  • Сеть: VPC (виртуальные сети), CloudFront (CDN), Route 53 (DNS)

2. Microsoft Azure #

Плюсы:

  • Отличная интеграция с Microsoft продуктами
  • Хорошие гибридные решения
  • Сильная enterprise поддержка

Минусы:

  • Меньше сервисов чем у AWS
  • Иногда медленные updates

Ключевые сервисы: Ключевые сервисы Microsoft Azure:

  • Вычисления: Virtual Machines (виртуальные машины), Functions (serverless), AKS (Kubernetes)
  • Хранение: Blob Storage (объектное), Files (файловое), Disks (блочное)
  • Базы данных: SQL Database (реляционные), Cosmos DB (мультимодельные)
  • Сеть: Virtual Network (виртуальные сети), CDN (сеть доставки контента), DNS

3. Google Cloud Platform (GCP) #

Плюсы:

  • Сильные ML/AI сервисы
  • Отличная производительность сети
  • Простая ценовая модель

Минусы:

  • Меньший выбор сервисов
  • Меньше enterprise фич

Ключевые сервисы: Ключевые сервисы Google Cloud Platform:

  • Вычисления: Compute Engine (виртуальные машины), Cloud Functions (serverless), GKE (Kubernetes)
  • Хранение: Cloud Storage (объектное), Persistent Disk (блочное)
  • Базы данных: Cloud SQL (реляционные), Firestore (NoSQL), BigQuery (аналитика)
  • Сеть: VPC (виртуальные сети), Cloud CDN, Cloud DNS

💰 Модели оплаты в облаке #

1. Pay-as-you-go (По факту использования) #

Модель Pay-as-you-go:

  • Использование CPU 10 часов = оплата за 10 часов
  • Хранение 50 GB данных = оплата за 50 GB

2. Reserved Instances (Резервирование) #

Модель Reserved Instances:

  • Обязательство использовать сервер 1 год = скидка 30-70%
  • Подходит для предсказуемых и стабильных нагрузок

3. Spot Instances (Дешевые прерываемые) #

Модель Spot Instances:

  • Использование свободных мощностей = скидка до 90%
  • AWS может прервать выполнение в любой момент
  • Подходит для batch-обработки и некритичных задач

Пример расчета стоимости AWS #

Пример расчёта стоимости AWS:

Месячные затраты на типичное приложение:

  • EC2 инстанс t3.medium: $0.0416/час × 24ч × 30 дней = $29.95/месяц
  • Хранилище EBS 100 GB: $0.10/GB × 100 GB = $10/месяц
  • Трафик 1 TB: $0.09/GB × 1000 GB = $90/месяц

Общая стоимость: около $130/месяц

🛠️ Практический пример: Деплой приложения #

Традиционный подход (без облака) #

Традиционный подход (без облака):

Поэтапные затраты и время:

  1. Покупка серверного оборудования: $2000 + настройка
  2. Настройка сетевой инфраструктуры и безопасности: неделя работы системного администратора
  3. Установка операционной системы и программного обеспечения: день работы
  4. Настройка системы резервного копирования: день работы
  5. Организация мониторинга и постоянной поддержки: постоянные затраты

Итог: высокие первоначальные инвестиции в деньгах и времени

Облачный подход #

# 1. Создание инфраструктуры (5 минут)
aws cloudformation create-stack \
  --stack-name my-app \
  --template-body file://infrastructure.yaml

# 2. Деплой приложения (2 минуты)  
aws ecs update-service \
  --cluster my-cluster \
  --service my-app \
  --task-definition my-app:2

# 3. Настройка автоскейлинга (1 минута)
aws application-autoscaling register-scalable-target \
  --service-namespace ecs \
  --scalable-dimension ecs:service:DesiredCount \
  --resource-id service/my-cluster/my-app \
  --min-capacity 1 \
  --max-capacity 10

Итого: 8 минут, платите только за использование

🏗️ Облачная архитектура: Best Practices #

1. Well-Architected Framework (AWS) #

Принципы:

  • Operational Excellence — автоматизация и мониторинг
  • Security — защита данных и систем
  • Reliability — восстановление после сбоев
  • Performance Efficiency — эффективное использование ресурсов
  • Cost Optimization — минимизация затрат

2. Multi-AZ и Multi-Region #

Высокодоступная архитектура:

Load Balancer (Multi-AZ):

  • Web Server (AZ-1a) ✅
  • Web Server (AZ-1b) ✅
  • Web Server (AZ-1c) ✅

Database:

  • Primary (AZ-1a) ✅
  • Read Replica (AZ-1b) ✅

Disaster Recovery:

  • Backup Region (us-west-2) 🔄

3. Auto Scaling #

{
  "AutoScalingGroupName": "web-servers-asg",
  "MinSize": 2,
  "MaxSize": 10,
  "DesiredCapacity": 3,
  "TargetGroupARNs": ["arn:aws:elasticloadbalancing:..."],
  "HealthCheckType": "ELB",
  "HealthCheckGracePeriod": 300,
  "DefaultCooldown": 300,
  "Tags": [
    {
      "Key": "Environment",
      "Value": "Production"
    }
  ]
}

🔒 Безопасность в облаке #

Shared Responsibility Model #

AWS ответственность:
├── Физическая безопасность дата-центров
├── Безопасность гипервизора  
├── Сетевая инфраструктура
└── Патчи базовых сервисов

Ваша ответственность:
├── Конфигурация security groups
├── Управление пользователями (IAM)
├── Шифрование данных
├── Патчи гостевых ОС
└── Безопасность приложений

IAM (Identity and Access Management) #

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "s3:GetObject",
        "s3:PutObject"
      ],
      "Resource": "arn:aws:s3:::my-bucket/*",
      "Condition": {
        "StringEquals": {
          "s3:x-amz-server-side-encryption": "AES256"
        }
      }
    }
  ]
}

Principle of Least Privilege #

⚖️ Главная дилемма DevOps: Как не закрутить все гайки, но и систему не сделать дырявой?

# ❌ Плохо: слишком широкие права
{
  "Effect": "Allow",
  "Action": "*",
  "Resource": "*"
}

# ✅ Хорошо: минимальные необходимые права
{
  "Effect": "Allow", 
  "Action": [
    "s3:GetObject"
  ],
  "Resource": "arn:aws:s3:::app-logs/*"
}

🎯 Практический подход к безопасности: #

1. Начинайте с минимума, добавляйте по необходимости

Стартовая роль для CI/CD:

  • s3:GetObject — только чтение конфигов
  • ecr:GetAuthorizationToken — только пуш образов

Постепенно добавляем по мере роста задач:

  • s3:GetObject
  • s3:PutObject — теперь нужна загрузка
  • ecr:GetAuthorizationToken
  • ecs:UpdateService — добавили деплой

2. Используйте временные роли

# AWS STS - временные креденшелы на 1 час
aws sts assume-role \
  --role-arn arn:aws:iam::123456789012:role/DeployRole \
  --role-session-name deployment-session \
  --duration-seconds 3600

3. Мониторьте использование прав

# CloudTrail показывает какие права реально используются
unused_permissions = [
    "s3:DeleteBucket",     # никогда не вызывался
    "ec2:TerminateInstances"  # не используется
]
# Удаляйте неиспользуемые права каждые 3 месяца

🛡️ Руководство по безопасности: #

Базовые принципы:

  • Defense in Depth - многоуровневая защита
  • Zero Trust - не доверяй, проверяй всё
  • Fail Secure - при ошибке закрывай доступ
  • Least Privilege - минимальные права

Практические чеклисты:

  • Используются ли временные токены?
  • Логируются ли все доступы?
  • Есть ли автоматическая ротация ключей?
  • Настроены ли алерты на подозрительную активность?

📚 Дополнительные ресурсы: #

Изучите OWASP Top Ten - топ-10 уязвимостей веб-приложений и способы их предотвращения.

Полезные практики:

  • Регулярные аудиты прав доступа (раз в квартал)
  • Автоматизация проверок безопасности в CI/CD
  • Обучение команды основам cybersecurity
  • Инцидент-менеджмент для быстрого реагирования

📊 Мониторинг в облаке #

CloudWatch (AWS) #

import boto3

cloudwatch = boto3.client('cloudwatch')

# Отправка custom метрики
cloudwatch.put_metric_data(
    Namespace='MyApp/Orders',
    MetricData=[
        {
            'MetricName': 'OrdersProcessed',
            'Value': 123,
            'Unit': 'Count',
            'Dimensions': [
                {
                    'Name': 'Environment',
                    'Value': 'Production'
                }
            ]
        }
    ]
)

Алерты и уведомления #

# CloudFormation template для алерта
HighCPUAlarm:
  Type: AWS::CloudWatch::Alarm
  Properties:
    AlarmName: HighCPUUtilization
    AlarmDescription: Alert when CPU exceeds 80%
    MetricName: CPUUtilization
    Namespace: AWS/EC2
    Statistic: Average
    Period: 300
    EvaluationPeriods: 2
    Threshold: 80
    ComparisonOperator: GreaterThanThreshold
    AlarmActions:
      - !Ref SNSTopic

🎯 Container Services в облаке #

AWS ECS (Elastic Container Service) #

# Task Definition
family: my-app
networkMode: awsvpc
requiresCompatibilities:
  - FARGATE
cpu: 256
memory: 512
containerDefinitions:
  - name: web-server
    image: nginx:latest
    portMappings:
      - containerPort: 80
        protocol: tcp
    logConfiguration:
      logDriver: awslogs
      options:
        awslogs-group: /ecs/my-app
        awslogs-region: us-east-1

Kubernetes в облаке #

# AWS EKS, GKE, AKS
apiVersion: apps/v1
kind: Deployment
metadata:
  name: web-app
spec:
  replicas: 3
  selector:
    matchLabels:
      app: web-app
  template:
    metadata:
      labels:
        app: web-app
    spec:
      containers:
      - name: web-app
        image: my-app:latest
        ports:
        - containerPort: 8080
        resources:
          requests:
            memory: "128Mi"
            cpu: "100m"
          limits:
            memory: "256Mi"
            cpu: "200m"

💡 Serverless Computing #

AWS Lambda #

import json

def lambda_handler(event, context):
    # Обработчик HTTP запроса
    name = event.get('queryStringParameters', {}).get('name', 'World')
    
    return {
        'statusCode': 200,
        'headers': {
            'Content-Type': 'application/json',
            'Access-Control-Allow-Origin': '*'
        },
        'body': json.dumps({
            'message': f'Hello, {name}!'
        })
    }

Serverless архитектура #

API Gateway → Lambda Function → DynamoDB
     ↓              ↓               ↓
Управление     Выполнение      Хранение
   запросов        кода          данных

Преимущества:
✅ Нет серверов для управления
✅ Автомасштабирование  
✅ Платите только за выполнение
✅ Высокая доступность из коробки

🎯 Практические задания #

Задание 1: Первое приложение в облаке #

  1. Создайте AWS Free Tier аккаунт
  2. Запустите EC2 instance с веб-сервером
  3. Настройте Security Group для HTTP трафика
  4. Получите доступ к приложению через интернет

Задание 2: Serverless приложение #

  1. Создайте Lambda функцию
  2. Настройте API Gateway для HTTP запросов
  3. Добавьте DynamoDB для хранения данных
  4. Протестируйте полный цикл

Задание 3: Мониторинг и алерты #

  1. Настройте CloudWatch мониторинг
  2. Создайте алерт на высокое использование CPU
  3. Настройте SNS для email уведомлений
  4. Протестируйте срабатывание алерта

📈 Cost Optimization #

Основные принципы экономии #

1. Right-sizing:
   - Анализируйте реальное использование
   - Уменьшайте размер недогруженных инстансов

2. Reserved Instances:
   - Покупайте для стабильных нагрузок
   - Экономия 30-70%

3. Spot Instances:
   - Используйте для fault-tolerant задач
   - Экономия до 90%

4. Auto Scaling:
   - Автоматически подстраивайтесь под нагрузку
   - Не платите за простой

5. Storage Optimization:
   - Используйте подходящие типы хранилищ
   - Настройте lifecycle policies

Инструменты для оптимизации #

# AWS Cost Explorer API
aws ce get-cost-and-usage \
  --time-period Start=2024-01-01,End=2024-01-31 \
  --granularity MONTHLY \
  --metrics BlendedCost \
  --group-by Type=DIMENSION,Key=SERVICE

# AWS Trusted Advisor
aws support describe-trusted-advisor-checks \
  --language en

🎯 Заключение #

Облачные технологии — это основа современной IT-инфраструктуры. Ключевые принципы:

Выбирайте подходящую модель (IaaS/PaaS/SaaS)
Планируйте для высокой доступности
Автоматизируйте масштабирование
Мониторьте costs и производительность
Следуйте принципам безопасности
Используйте управляемые сервисы когда возможно

Помните: Облако — это не просто чужие серверы, это новый способ думать об инфраструктуре. Фокусируйтесь на бизнес-логике, а рутину оставьте провайдеру.


Поздравляем! Вы изучили все основные концепции DevOps. Переходите к Главе 2: Инструменты и технологии