Что такое 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 и другие.