Настройка окружения Azure
Первый шаг к работе с Azure -- создание аккаунта и настройка рабочего окружения. В этой статье разберем все необходимые инструменты.
Создание Azure-аккаунта
- Перейдите на https://azure.microsoft.com/free/
- Создайте бесплатный аккаунт -- вы получите $200 кредит на 30 дней и доступ к бесплатным сервисам на 12 месяцев
- Для регистрации потребуется банковская карта (для верификации, деньги не списываются)
Установка Azure CLI
Azure CLI -- основной инструмент для управления Azure из командной строки.
macOS:
brew update && brew install azure-cli
Windows:
winget install -e --id Microsoft.AzureCLI
Linux (Ubuntu/Debian):
curl -sL https://aka.ms/InstallAzureCLIDeb | sudo bash
Базовые команды
# Вход в Azure
az login
# Проверка текущей подписки
az account show
# Список всех подписок
az account list --output table
# Установка подписки по умолчанию
az account set --subscription "your-subscription-id"
# Получение ID текущей подписки
az account show --query id -o tsv
Расширения VS Code
Для продуктивной работы с Azure рекомендуются следующие расширения:
- Azure Tools -- набор инструментов для работы с Azure
- Azure Functions -- создание и отладка Functions
- Azure Databases -- подключение к Azure SQL и Cosmos DB
- Bicep -- подсветка синтаксиса и IntelliSense для Bicep
- C# Dev Kit -- полноценная поддержка C# и .NET
Bicep -- Infrastructure as Code
Bicep -- декларативный язык для описания инфраструктуры Azure. Он компилируется в ARM-шаблоны, но намного проще JSON.
Структура проекта IaC
infra/
+-- main.bicep # Точка входа
+-- parameters.dev.json # Параметры для dev
+-- parameters.prod.json # Параметры для prod
+-- modules/
+-- app-service.bicep
+-- sql-database.bicep
+-- key-vault.bicep
+-- monitoring.bicep
Пример main.bicep
targetScope = 'resourceGroup'
@description('Environment name (dev, staging, prod)')
param environment string = 'dev'
@description('Azure region')
param location string = resourceGroup().location
@description('Base name for resources')
param appName string = 'orderapp'
var suffix = uniqueString(resourceGroup().id)
var resourcePrefix = '${appName}-${environment}'
// App Service
module appService 'modules/app-service.bicep' = {
name: 'appService'
params: {
name: '${resourcePrefix}-app'
location: location
environment: environment
}
}
// SQL Database
module sqlDatabase 'modules/sql-database.bicep' = {
name: 'sqlDatabase'
params: {
serverName: '${resourcePrefix}-sql-${suffix}'
databaseName: 'OrderDB'
location: location
}
}
// Key Vault
module keyVault 'modules/key-vault.bicep' = {
name: 'keyVault'
params: {
name: 'kv-${appName}-${suffix}'
location: location
appServicePrincipalId: appService.outputs.principalId
}
}
output appServiceUrl string = appService.outputs.url
output sqlServerFqdn string = sqlDatabase.outputs.serverFqdn
Пример модуля app-service.bicep
param name string
param location string
param environment string
var skuName = environment == 'prod' ? 'S1' : 'B1'
resource appServicePlan 'Microsoft.Web/serverfarms@2023-01-01' = {
name: '${name}-plan'
location: location
sku: { name: skuName }
kind: 'linux'
properties: { reserved: true }
}
resource webApp 'Microsoft.Web/sites@2023-01-01' = {
name: name
location: location
identity: { type: 'SystemAssigned' }
properties: {
serverFarmId: appServicePlan.id
siteConfig: {
linuxFxVersion: 'DOTNETCORE|8.0'
alwaysOn: environment == 'prod'
healthCheckPath: '/health'
}
httpsOnly: true
}
}
output url string = 'https://${webApp.properties.defaultHostName}'
output principalId string = webApp.identity.principalId
Деплой инфраструктуры
# Создание Resource Group
az group create --name rg-orderapp-dev --location westeurope
# Деплой Bicep-шаблона
az deployment group create \
--resource-group rg-orderapp-dev \
--template-file infra/main.bicep \
--parameters environment=dev
# Проверка созданных ресурсов
az resource list --resource-group rg-orderapp-dev --output table
Настройка Key Vault
# Сохранение секретов
az keyvault secret set \
--vault-name kv-orderapp-xxx \
--name "ConnectionStrings--OrderDB" \
--value "Server=orderapp-dev-sql-xxx.database.windows.net;Database=OrderDB;Authentication=Active Directory Default;"
# Настройка App Service для чтения из Key Vault
az webapp config appsettings set \
--name orderapp-dev-app \
--resource-group rg-orderapp-dev \
--settings \
ConnectionStrings__OrderDB="@Microsoft.KeyVault(VaultName=kv-orderapp-xxx;SecretName=ConnectionStrings--OrderDB)"