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/месяц
🛠️ Практический пример: Деплой приложения #
Традиционный подход (без облака) #
Традиционный подход (без облака):
Поэтапные затраты и время:
- Покупка серверного оборудования: $2000 + настройка
- Настройка сетевой инфраструктуры и безопасности: неделя работы системного администратора
- Установка операционной системы и программного обеспечения: день работы
- Настройка системы резервного копирования: день работы
- Организация мониторинга и постоянной поддержки: постоянные затраты
Итог: высокие первоначальные инвестиции в деньгах и времени
Облачный подход #
# 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: Первое приложение в облаке #
- Создайте AWS Free Tier аккаунт
- Запустите EC2 instance с веб-сервером
- Настройте Security Group для HTTP трафика
- Получите доступ к приложению через интернет
Задание 2: Serverless приложение #
- Создайте Lambda функцию
- Настройте API Gateway для HTTP запросов
- Добавьте DynamoDB для хранения данных
- Протестируйте полный цикл
Задание 3: Мониторинг и алерты #
- Настройте CloudWatch мониторинг
- Создайте алерт на высокое использование CPU
- Настройте SNS для email уведомлений
- Протестируйте срабатывание алерта
📈 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: Инструменты и технологии