2.5 Облачные платформы #
☁️ Обзор основных провайдеров #
Облачные платформы — это основа современной IT-инфраструктуры. Каждый провайдер имеет свои особенности, но принципы работы схожи.
Топ провайдеры (2024) #
Глобальные:
- Amazon Web Services (AWS) — 32% рынка
- Microsoft Azure — 23% рынка
- Google Cloud Platform (GCP) — 10% рынка
Российские и СНГ: 4. Yandex Cloud — ведущий российский провайдер 5. Selectel — крупный российский провайдер
🚀 Amazon Web Services (AWS) #
Почему AWS популярен #
- Первопроходец облачных технологий (с 2006 года)
- Огромный выбор сервисов (200+)
- Глобальная инфраструктура (80+ зон доступности)
- Большое сообщество и экосистема
Ключевые сервисы AWS #
Compute (Вычисления) #
Команды AWS для вычислительных ресурсов:
EC2 - создание виртуального сервера:
- Образ: ami-0c55b159cbfafe1d0 (Amazon Linux)
- Тип инстанса: t3.micro (бесплатный уровень)
- SSH ключ: my-key (для подключения)
- Группа безопасности: sg-12345678
- Подсеть: subnet-12345678
Lambda - создание serverless функции:
- Имя функции: my-function
- Среда выполнения: Python 3.9
- IAM роль: lambda-role (для прав доступа)
- Обработчик: lambda_function.lambda_handler
- Код: загружается из function.zip
Storage (Хранение) #
Команды AWS для работы с хранилищами:
S3 - операции с объектным хранилищем:
- Создание bucket: уникальное имя по всему AWS
- Копирование файла: один файл в bucket
- Синхронизация папки: вся локальная папка в S3
EBS - создание блочного хранилища:
- Размер: 20 GB
- Тип: gp3 (новое поколение SSD)
- Зона доступности: us-east-1a
- Назначение: подключение к EC2 инстансам
Database (Базы данных) #
Команды AWS для работы с базами данных:
RDS - создание управляемой реляционной БД:
- Идентификатор: mydb (уникальное имя экземпляра)
- Класс инстанса: db.t3.micro (маленький сизе)
- Движок: MySQL (бесплатный open-source)
- Мастер-пользователь: admin
- Хранилище: 20 GB
DynamoDB - создание NoSQL таблицы:
- Имя таблицы: Users
- Первичный ключ: UserId (тип HASH)
- Тип атрибута: S (String)
- Модель оплаты: PAY_PER_REQUEST (плата за запросы)
Практический пример: Веб-приложение на AWS #
Архитектура #
Архитектура веб-приложения на AWS:
Компоненты инфраструктуры:
- Internet Gateway - точка входа из интернета
- Application Load Balancer - распределение нагрузки
- Зоны доступности:
- AZ-1a: EC2 Instance (веб-сервер)
- AZ-1b: EC2 Instance (веб-сервер)
- RDS MySQL - управляемая база данных с Multi-AZ для высокой доступности
Преимущества архитектуры:
- Отказоустойчивость (несколько зон)
- Масштабируемость (можно добавить серверы)
- Балансировка нагрузки
🔷 Microsoft Azure #
Особенности Azure #
- Отличная интеграция с Microsoft продуктами
- Гибридные решения (Azure Arc, Azure Stack)
- Enterprise-ориентированность
- Сильная поддержка .NET и Windows
Ключевые сервисы Azure #
Azure CLI примеры #
Команды Azure CLI для создания ресурсов:
Создание Resource Group (группы ресурсов):
- Имя: myResourceGroup
- Регион: eastus (East US)
Создание виртуальной машины:
- Группа ресурсов: myResourceGroup
- Имя ВМ: myVM
- Образ: Ubuntu LTS (последняя стабильная версия)
- Пользователь: azureuser
- SSH ключи: генерируются автоматически
Создание App Service (PaaS):
- План: myAppServicePlan (тариф B1)
- Имя приложения: myUniqueAppName (должно быть уникальным)
- Среда выполнения: Python 3.9
Создание Azure Container Instances:
- Контейнер: nginx (веб-сервер)
- DNS: mycontainer.eastus.azurecontainer.io
- Порт: 80 (HTTP)
Azure DevOps Pipeline #
# azure-pipelines.yml
trigger:
- main
pool:
vmImage: 'ubuntu-latest'
variables:
buildConfiguration: 'Release'
stages:
- stage: Build
jobs:
- job: Build
steps:
- task: UseDotNet@2
inputs:
packageType: 'sdk'
version: '6.0.x'
- task: DotNetCoreCLI@2
displayName: 'Restore packages'
inputs:
command: 'restore'
projects: '**/*.csproj'
- task: DotNetCoreCLI@2
displayName: 'Build application'
inputs:
command: 'build'
projects: '**/*.csproj'
arguments: '--configuration $(buildConfiguration)'
- task: DotNetCoreCLI@2
displayName: 'Run tests'
inputs:
command: 'test'
projects: '**/*Tests.csproj'
arguments: '--configuration $(buildConfiguration) --collect "Code coverage"'
- stage: Deploy
dependsOn: Build
condition: succeeded()
jobs:
- deployment: Deploy
environment: 'production'
strategy:
runOnce:
deploy:
steps:
- task: AzureWebApp@1
inputs:
azureSubscription: 'Azure-Service-Connection'
appType: 'webApp'
appName: 'myWebApp'
package: '$(Pipeline.Workspace)/**/*.zip'
🟡 Google Cloud Platform (GCP) #
Преимущества GCP #
- Передовые ML/AI сервисы
- Отличная производительность сети
- Kubernetes-first подход (GKE)
- Простая ценовая модель
Ключевые сервисы GCP #
gcloud CLI примеры #
# Compute Engine
gcloud compute instances create my-instance \
--image-family=ubuntu-2004-lts \
--image-project=ubuntu-os-cloud \
--machine-type=e2-medium \
--zone=us-central1-a
# Google Kubernetes Engine
gcloud container clusters create my-cluster \
--zone=us-central1-a \
--num-nodes=3 \
--enable-autoscaling \
--min-nodes=1 \
--max-nodes=5
# Cloud Functions (Serverless)
gcloud functions deploy hello-world \
--runtime python39 \
--trigger-http \
--allow-unauthenticated \
--source=.
# Cloud SQL
gcloud sql instances create my-instance \
--database-version=MYSQL_8_0 \
--tier=db-f1-micro \
--region=us-central1
Cloud Build для CI/CD #
# cloudbuild.yaml
steps:
# Build Docker image
- name: 'gcr.io/cloud-builders/docker'
args: ['build', '-t', 'gcr.io/$PROJECT_ID/myapp:$COMMIT_SHA', '.']
# Push to Container Registry
- name: 'gcr.io/cloud-builders/docker'
args: ['push', 'gcr.io/$PROJECT_ID/myapp:$COMMIT_SHA']
# Deploy to GKE
- name: 'gcr.io/cloud-builders/gke-deploy'
args:
- run
- --filename=k8s/
- --image=gcr.io/$PROJECT_ID/myapp:$COMMIT_SHA
- --location=us-central1-a
- --cluster=my-cluster
options:
logging: CLOUD_LOGGING_ONLY
🔄 Мультиоблачность (Multi-Cloud) #
Зачем использовать несколько облаков #
- Избежание vendor lock-in
- Использование лучших сервисов каждого провайдера
- Географическое распределение
- Disaster Recovery
Terraform для мультиоблачности #
# providers.tf
terraform {
required_providers {
aws = {
source = "hashicorp/aws"
version = "~> 4.0"
}
azurerm = {
source = "hashicorp/azurerm"
version = "~> 3.0"
}
google = {
source = "hashicorp/google"
version = "~> 4.0"
}
}
}
provider "aws" {
region = "us-east-1"
alias = "us_east"
}
provider "azurerm" {
features {}
alias = "azure_primary"
}
provider "google" {
project = "my-gcp-project"
region = "us-central1"
alias = "gcp_primary"
}
# AWS Resources
resource "aws_s3_bucket" "primary_storage" {
provider = aws.us_east
bucket = "my-primary-storage"
}
# Azure Resources
resource "azurerm_storage_account" "backup_storage" {
provider = azurerm.azure_primary
name = "mybackupstorage"
resource_group_name = azurerm_resource_group.main.name
location = azurerm_resource_group.main.location
account_tier = "Standard"
account_replication_type = "LRS"
}
# GCP Resources
resource "google_storage_bucket" "archive_storage" {
provider = google.gcp_primary
name = "my-archive-storage"
location = "US"
lifecycle_rule {
condition {
age = 30
}
action {
type = "SetStorageClass"
storage_class = "COLDLINE"
}
}
}
💰 Управление расходами (Cost Management) #
AWS Cost Optimization #
# AWS Cost Explorer CLI
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 configure set preview.cloudfront true
aws logs create-log-group --log-group-name aws-cost-analysis
# Создать бюджет
aws budgets create-budget \
--account-id 123456789012 \
--budget file://budget.json
budget.json #
{
"BudgetName": "Monthly-Budget",
"BudgetLimit": {
"Amount": "100",
"Unit": "USD"
},
"TimeUnit": "MONTHLY",
"BudgetType": "COST",
"CostFilters": {
"Service": ["Amazon Elastic Compute Cloud - Compute"]
}
}
Стратегии экономии #
# 1. Reserved Instances (экономия 30-70%)
aws ec2 describe-reserved-instances-offerings \
--instance-type t3.medium \
--product-description "Linux/UNIX"
# 2. Spot Instances (экономия до 90%)
aws ec2 request-spot-instances \
--spot-price "0.05" \
--instance-count 2 \
--type "one-time" \
--launch-specification file://spot-specification.json
# 3. Auto Scaling для оптимизации использования
aws autoscaling create-auto-scaling-group \
--auto-scaling-group-name my-asg \
--launch-template LaunchTemplateName=my-template,Version=1 \
--min-size 1 \
--max-size 10 \
--desired-capacity 2 \
--target-group-arns arn:aws:elasticloadbalancing:us-east-1:123456789012:targetgroup/my-targets/1234567890123456
# 4. Lifecycle policies для S3
aws s3api put-bucket-lifecycle-configuration \
--bucket my-bucket \
--lifecycle-configuration file://lifecycle.json
🔐 Безопасность в облаке #
Shared Responsibility Model #
┌─────────────────────────────────────────┐
│ Заказчик отвечает за: │
├─────────────────────────────────────────┤
│ • Данные пользователей │
│ • Платформы, приложения, Identity & IAM │
│ • Конфигурация ОС, сети, firewall │
│ • Шифрование данных │
│ • Сетевой трафик │
└─────────────────────────────────────────┘
┌─────────────────────────────────────────┐
│ Провайдер отвечает за: │
├─────────────────────────────────────────┤
│ • Физическая безопасность │
│ • Инфраструктура │
│ • Сеть │
│ • Гипервизор │
│ • Управляемые сервисы │
└─────────────────────────────────────────┘
AWS Security Best Practices #
# 1. Включить CloudTrail (логирование всех API вызовов)
aws cloudtrail create-trail \
--name management-events \
--s3-bucket-name my-cloudtrail-bucket
# 2. Включить AWS Config (мониторинг конфигураций)
aws configservice put-configuration-recorder \
--configuration-recorder name=default,roleARN=arn:aws:iam::123456789012:role/config-role
# 3. Включить GuardDuty (threat detection)
aws guardduty create-detector --enable
# 4. Использовать IAM роли вместо ключей
aws sts assume-role \
--role-arn arn:aws:iam::123456789012:role/S3Access \
--role-session-name MySession
# 5. Включить шифрование EBS томов по умолчанию
aws ec2 enable-ebs-encryption-by-default
IAM Policy пример #
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:PutObject"
],
"Resource": "arn:aws:s3:::my-app-bucket/*",
"Condition": {
"StringEquals": {
"s3:x-amz-server-side-encryption": "AES256"
},
"IpAddress": {
"aws:SourceIp": ["203.0.113.0/24", "198.51.100.0/24"]
}
}
},
{
"Effect": "Deny",
"Action": "*",
"Resource": "*",
"Condition": {
"Bool": {
"aws:SecureTransport": "false"
}
}
}
]
}
🇷🇺 Yandex Cloud #
Особенности Yandex Cloud #
- Российская юрисдикция — соответствие ФЗ-152 о персональных данных
- Высокая производительность — собственные дата-центры в России
- Интеграция с экосистемой Яндекса — поиск, переводчик, аналитика
- Competitive pricing — часто дешевле зарубежных аналогов
Ключевые сервисы Yandex Cloud #
Compute Cloud #
# Создание ВМ через CLI
yc compute instance create \
--name my-vm \
--zone ru-central1-a \
--network-interface subnet-name=default,nat-ip-version=ipv4 \
--ssh-key ~/.ssh/id_rsa.pub \
--create-boot-disk image-folder-id=standard-images,image-family=ubuntu-2004-lts
Container Registry #
# Аутентификация в реестре
yc container registry configure-docker
# Сборка и загрузка образа
docker build -t cr.yandex/registry-id/my-app:latest .
docker push cr.yandex/registry-id/my-app:latest
Managed Kubernetes #
# Создание кластера через CLI
yc managed-kubernetes cluster create \
--name my-k8s-cluster \
--network-name default \
--zone ru-central1-a \
--subnet-name default \
--public-ip
Object Storage (S3-совместимый) #
# Работа с Object Storage через AWS CLI
aws --endpoint-url=https://storage.yandexcloud.net \
s3 mb s3://my-bucket
aws --endpoint-url=https://storage.yandexcloud.net \
s3 cp file.txt s3://my-bucket/
Преимущества для российских проектов #
- ✅ Локализация данных — соответствие российскому законодательству
- ✅ Поддержка на русском языке — документация и техподдержка
- ✅ Интеграция с российскими сервисами — платежные системы, банки
- ✅ Стабильные цены в рублях — отсутствие валютных рисков
🟦 Selectel #
О Selectel #
- Опыт работы с 2008 года — один из старейших провайдеров в России
- Собственная инфраструктура — дата-центры в Москве и Санкт-Петербурге
- Гибридные решения — от dedicated серверов до облачных сервисов
- Прозрачное ценообразование — без скрытых комиссий
Основные сервисы #
Облачная платформа #
# API для управления серверами
curl -X POST https://api.selectel.ru/vpc/servers \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "my-server",
"flavor": "1001",
"image": "ubuntu-20-04",
"keypair": "my-key"
}'
Managed Kubernetes #
# Создание кластера через API
curl -X POST https://api.selectel.ru/mks/v1/clusters \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "my-cluster",
"kube_version": "1.27.4",
"region": "ru-1",
"enable_autorepair": true
}'
S3-совместимое хранилище #
# Настройка S3 клиента
aws configure set aws_access_key_id $SELECTEL_ACCESS_KEY
aws configure set aws_secret_access_key $SELECTEL_SECRET_KEY
aws configure set default.region ru-1
# Создание бакета
aws --endpoint-url https://s3.selcdn.ru s3 mb s3://my-bucket
# Загрузка файлов
aws --endpoint-url https://s3.selcdn.ru s3 cp ./files/ s3://my-bucket/ --recursive
Managed Databases #
# Создание PostgreSQL кластера
curl -X POST https://api.selectel.ru/dbaas/v1/projects/$PROJECT_ID/instances \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "production-db",
"datastore": {
"type": "postgresql",
"version": "14"
},
"flavor": "SL1.2-4",
"volume": {
"size": 100,
"type": "fast.ru-1a"
},
"network": {
"type": "routed",
"subnet_id": "subnet-12345"
}
}'
Практический пример: Деплой в Selectel #
# docker-compose.yml для продакшена
version: '3.8'
services:
app:
image: registry.selectel.ru/project/my-app:latest
ports:
- "80:8080"
environment:
- DATABASE_URL=postgresql://user:pass@db.selcloud.ru:5432/mydb
- REDIS_URL=redis://cache.selcloud.ru:6379
deploy:
replicas: 3
resources:
limits:
memory: 512M
reservations:
memory: 256M
nginx:
image: nginx:alpine
ports:
- "443:443"
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf
- selectel-ssl:/etc/ssl/certs
depends_on:
- app
volumes:
selectel-ssl:
driver: selectel
driver_opts:
project_id: "12345"
region: "ru-1"
Преимущества Selectel #
- ✅ Dedicated + Cloud — гибридные решения
- ✅ Прозрачные цены — понятное ценообразование
- ✅ 24/7 поддержка — техническая поддержка на русском
- ✅ Compliance — соответствие российским стандартам
- ✅ Geographic redundancy — несколько дата-центров
🎯 Заключение #
Облачные платформы — это основа современной IT-инфраструктуры. Ключевые принципы:
✅ Выберите подходящий провайдер под ваши задачи
✅ Начните с основных сервисов - Compute, Storage, Network
✅ Автоматизируйте развертывание через IaC (Terraform, CloudFormation)
✅ Мониторьте расходы и оптимизируйте использование
✅ Следуйте принципам безопасности - IAM, шифрование, аудит
✅ Изучайте managed сервисы - они экономят время и усилия
Помните: Облако - это не просто “чужие серверы”, это новая парадигма создания и управления IT-системами. Фокусируйтесь на бизнес-логике, а инфраструктурные задачи делегируйте провайдеру.
Следующий раздел: 2.7 Terraform и Infrastructure as Code
Поздравляем! Вы завершили изучение основных инструментов DevOps. Переходите к Главе 3: Soft skills для DevOps карьеры