Что такое Microsoft Azure?

Microsoft Azure — это облачная платформа и набор сервисов от Microsoft, предоставляющий решения для вычислений, аналитики, хранения данных и сетевых подключений. Azure позволяет быстро создавать, развертывать и управлять приложениями через глобальную сеть центров обработки данных Microsoft.

Основные сервисы Azure

  • Virtual Machines — виртуальные машины Windows и Linux
  • App Service — платформа для веб-приложений и API
  • Azure SQL Database — управляемая база данных SQL
  • Azure Functions — serverless вычисления
  • Azure Storage — объектное и файловое хранилище
  • Azure Active Directory — управление идентификацией
  • Azure Kubernetes Service (AKS) — управляемый Kubernetes
  • Azure DevOps — инструменты для разработки и CI/CD

Создание виртуальной машины

 1# Установка Azure CLI
 2curl -sL https://aka.ms/InstallAzureCLIDeb | sudo bash
 3
 4# Вход в Azure
 5az login
 6
 7# Создание группы ресурсов
 8az group create --name myResourceGroup --location eastus
 9
10# Создание виртуальной машины
11az vm create \
12  --resource-group myResourceGroup \
13  --name myVM \
14  --image Ubuntu2204 \
15  --admin-username azureuser \
16  --generate-ssh-keys \
17  --size Standard_B1s
18
19# Открытие порта 80 для веб-трафика
20az vm open-port --port 80 --resource-group myResourceGroup --name myVM
21
22# Получение публичного IP адреса
23az vm show --resource-group myResourceGroup --name myVM --show-details \
24  --query [publicIps] --output tsv
25
26# Подключение по SSH
27ssh azureuser@<public-ip-address>

Развертывание веб-приложения в App Service

 1# Создание App Service плана
 2az appservice plan create \
 3  --name myAppServicePlan \
 4  --resource-group myResourceGroup \
 5  --sku B1 \
 6  --is-linux
 7
 8# Создание веб-приложения
 9az webapp create \
10  --resource-group myResourceGroup \
11  --plan myAppServicePlan \
12  --name myUniqueWebApp2025 \
13  --runtime "PYTHON|3.9"
14
15# Настройка deployment из Git репозитория
16az webapp deployment source config \
17  --resource-group myResourceGroup \
18  --name myUniqueWebApp2025 \
19  --repo-url https://github.com/Azure-Samples/python-docs-hello-world \
20  --branch master \
21  --manual-integration
22
23# Просмотр логов приложения
24az webapp log tail --resource-group myResourceGroup --name myUniqueWebApp2025

Работа с Azure Storage

 1# Создание storage account
 2az storage account create \
 3  --name mystorageaccount2025 \
 4  --resource-group myResourceGroup \
 5  --location eastus \
 6  --sku Standard_LRS
 7
 8# Получение ключей доступа
 9az storage account keys list \
10  --resource-group myResourceGroup \
11  --account-name mystorageaccount2025
12
13# Создание blob container
14az storage container create \
15  --name mycontainer \
16  --account-name mystorageaccount2025 \
17  --account-key <storage-key>
18
19# Загрузка файла
20az storage blob upload \
21  --file myfile.txt \
22  --container-name mycontainer \
23  --name myfile.txt \
24  --account-name mystorageaccount2025 \
25  --account-key <storage-key>
26
27# Просмотр файлов в контейнере
28az storage blob list \
29  --container-name mycontainer \
30  --account-name mystorageaccount2025 \
31  --account-key <storage-key> \
32  --output table

Создание Azure Function

 1# requirements.txt
 2azure-functions
 3requests
 4
 5# function_app.py
 6import azure.functions as func
 7import logging
 8import json
 9from datetime import datetime
10
11app = func.FunctionApp()
12
13@app.route(route="hello", auth_level=func.AuthLevel.ANONYMOUS)
14def hello_world(req: func.HttpRequest) -> func.HttpResponse:
15    """
16    HTTP trigger Azure Function
17    """
18    logging.info('Python HTTP trigger function processed a request.')
19
20    # Получение параметра name из query string или body
21    name = req.params.get('name')
22    if not name:
23        try:
24            req_body = req.get_json()
25            name = req_body.get('name') if req_body else None
26        except ValueError:
27            pass
28
29    if name:
30        response_data = {
31            'message': f'Hello, {name}!',
32            'timestamp': datetime.now().isoformat(),
33            'function': 'Azure Functions'
34        }
35        return func.HttpResponse(
36            json.dumps(response_data),
37            status_code=200,
38            mimetype="application/json"
39        )
40    else:
41        return func.HttpResponse(
42            "Please pass a name in the query string or request body",
43            status_code=400
44        )
 1# Установка Azure Functions Core Tools
 2npm install -g azure-functions-core-tools@4 --unsafe-perm true
 3
 4# Создание нового проекта функции
 5func init MyFunctionApp --python
 6
 7# Создание HTTP trigger функции
 8cd MyFunctionApp
 9func new --name HttpTrigger --template "HTTP trigger"
10
11# Локальный запуск функции
12func start
13
14# Создание Function App в Azure
15az functionapp create \
16  --resource-group myResourceGroup \
17  --consumption-plan-location eastus \
18  --runtime python \
19  --runtime-version 3.9 \
20  --functions-version 4 \
21  --name myFunctionApp2025 \
22  --storage-account mystorageaccount2025
23
24# Развертывание функции в Azure
25func azure functionapp publish myFunctionApp2025

Настройка Azure DevOps Pipeline

 1# azure-pipelines.yml
 2trigger:
 3- main
 4
 5pool:
 6  vmImage: 'ubuntu-latest'
 7
 8variables:
 9  azureServiceConnectionId: 'myServiceConnection'
10  webAppName: 'myUniqueWebApp2025'
11  environmentName: 'production'
12  projectRoot: $(System.DefaultWorkingDirectory)
13  pythonVersion: '3.9'
14
15stages:
16- stage: Build
17  displayName: Build stage
18  jobs:
19  - job: BuildJob
20    pool:
21      vmImage: $(vmImageName)
22    steps:
23    - task: UsePythonVersion@0
24      inputs:
25        versionSpec: '$(pythonVersion)'
26      displayName: 'Use Python $(pythonVersion)'
27
28    - script: |
29        python -m venv antenv
30        source antenv/bin/activate
31        python -m pip install --upgrade pip
32        pip install setup
33        pip install -r requirements.txt
34      workingDirectory: $(projectRoot)
35      displayName: 'Install dependencies'
36
37    - script: |
38        source antenv/bin/activate
39        python -m pytest tests/ --junitxml=junit/test-results.xml --cov=. --cov-report=xml
40      workingDirectory: $(projectRoot)
41      displayName: 'Run tests'
42
43    - task: PublishTestResults@2
44      inputs:
45        testResultsFiles: '**/test-*.xml'
46        testRunTitle: 'Publish test results for Python $(pythonVersion)'
47
48    - task: ArchiveFiles@2
49      displayName: 'Archive files'
50      inputs:
51        rootFolderOrFile: '$(projectRoot)'
52        includeRootFolder: false
53        archiveType: zip
54        archiveFile: $(Build.ArtifactStagingDirectory)/$(Build.BuildId).zip
55        replaceExistingArchive: true
56
57    - upload: $(Build.ArtifactStagingDirectory)/$(Build.BuildId).zip
58      displayName: 'Upload package'
59      artifact: drop
60
61- stage: Deploy
62  displayName: 'Deploy Web App'
63  dependsOn: Build
64  condition: succeeded()
65  jobs:
66  - deployment: DeploymentJob
67    pool:
68      vmImage: $(vmImageName)
69    environment: $(environmentName)
70    strategy:
71      runOnce:
72        deploy:
73          steps:
74          - task: AzureWebApp@1
75            displayName: 'Deploy Azure Web App'
76            inputs:
77              azureSubscription: $(azureServiceConnectionId)
78              appName: $(webAppName)
79              package: $(Pipeline.Workspace)/drop/$(Build.BuildId).zip

Управление ресурсами с ARM Templates

 1{
 2  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
 3  "contentVersion": "1.0.0.0",
 4  "parameters": {
 5    "webAppName": {
 6      "type": "string",
 7      "metadata": {
 8        "description": "Name of the web app"
 9      }
10    },
11    "location": {
12      "type": "string",
13      "defaultValue": "[resourceGroup().location]"
14    }
15  },
16  "variables": {
17    "appServicePlanName": "[concat(parameters('webAppName'), '-plan')]",
18    "storageAccountName": "[concat(uniqueString(resourceGroup().id), 'storage')]"
19  },
20  "resources": [
21    {
22      "type": "Microsoft.Web/serverfarms",
23      "apiVersion": "2021-02-01",
24      "name": "[variables('appServicePlanName')]",
25      "location": "[parameters('location')]",
26      "sku": {
27        "name": "B1",
28        "capacity": 1
29      },
30      "properties": {
31        "reserved": true
32      }
33    },
34    {
35      "type": "Microsoft.Web/sites",
36      "apiVersion": "2021-02-01",
37      "name": "[parameters('webAppName')]",
38      "location": "[parameters('location')]",
39      "dependsOn": [
40        "[resourceId('Microsoft.Web/serverfarms', variables('appServicePlanName'))]"
41      ],
42      "properties": {
43        "serverFarmId": "[resourceId('Microsoft.Web/serverfarms', variables('appServicePlanName'))]",
44        "siteConfig": {
45          "linuxFxVersion": "PYTHON|3.9"
46        }
47      }
48    }
49  ],
50  "outputs": {
51    "webAppUrl": {
52      "type": "string",
53      "value": "[concat('https://', parameters('webAppName'), '.azurewebsites.net')]"
54    }
55  }
56}

Основные регионы Azure

  • East US (Вирджиния) — основной регион США
  • West Europe (Нидерланды) — главный европейский регион
  • Southeast Asia (Сингапур) — для азиатского рынка
  • UK South (Лондон) — для соответствия британским требованиям
  • Germany West Central — для соответствия немецким стандартам
  • Australia East (Сидней) — для австралийского рынка

Модель ценообразования Azure

  • Pay-as-you-go — оплата по факту использования
  • Reserved Instances — скидки до 72% при долгосрочных обязательствах
  • Spot VMs — скидки до 90% на неиспользуемые ресурсы
  • Free Tier — 12 месяцев бесплатного использования + $200 кредитов
  • Enterprise Agreement — корпоративные скидки

Когда использовать Azure

  • Компании, использующие продукты Microsoft (Office 365, Windows)
  • Корпоративные приложения на .NET и Windows
  • Гибридные облачные решения с Azure Arc
  • Проекты с интеграцией Active Directory
  • Разработка с Visual Studio и Azure DevOps
  • Проекты машинного обучения с Azure ML

Преимущества Azure

  • Отличная интеграция с экосистемой Microsoft
  • Гибридные и multi-cloud решения
  • Соответствие множеству стандартов безопасности
  • Глобальная инфраструктура в 60+ регионах
  • Сильные корпоративные функции и поддержка
  • Конкурентоспособные цены
  • Быстрое развитие и добавление новых сервисов

Недостатки Azure

  • Менее зрелая экосистема по сравнению с AWS
  • Сложность в изучении и настройке
  • Иногда нестабильная работа некоторых сервисов
  • Документация может быть неполной для новых сервисов
  • Vendor lock-in в экосистему Microsoft

Azure vs конкуренты

  • Azure vs AWS — Azure лучше для Microsoft стека, AWS имеет больше сервисов
  • Azure vs Google Cloud — Azure сильнее в enterprise, GCP в AI/ML
  • Azure vs DigitalOcean — Azure для корпораций, DO для простых проектов

Рекомендации по внедрению

Для успешного внедрения Azure рекомендуется:

  • Начать с Free Tier и простых сервисов
  • Изучить Azure Well-Architected Framework
  • Использовать Azure Resource Manager (ARM) templates
  • Настроить Cost Management для контроля расходов
  • Получить Azure сертификацию (AZ-900, AZ-104)
  • Использовать Azure DevOps для CI/CD
  • Внедрить Infrastructure as Code подход

FAQ

Подходит ли Azure для продакшена?

Да, Azure используется крупными корпорациями включая BMW, H&R Block, Progressive и многими другими для критически важных приложений.

Сколько стоит Azure для небольшого проекта?

Стоимость может составлять $20-200 в месяц в зависимости от используемых сервисов. Новые пользователи получают $200 кредитов на 30 дней.

Нужна ли экспертиза Microsoft для работы с Azure?

Знание экосистемы Microsoft полезно, но не обязательно. Azure поддерживает множество технологий включая Linux, Python, Java и другие.