2.5 Облачные платформы

2.5 Облачные платформы #

☁️ Обзор основных провайдеров #

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

Топ провайдеры (2024) #

Глобальные:

  1. Amazon Web Services (AWS) — 32% рынка
  2. Microsoft Azure — 23% рынка
  3. 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:

Компоненты инфраструктуры:

  1. Internet Gateway - точка входа из интернета
  2. Application Load Balancer - распределение нагрузки
  3. Зоны доступности:
    • AZ-1a: EC2 Instance (веб-сервер)
    • AZ-1b: EC2 Instance (веб-сервер)
  4. 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 карьеры