Easy📖Теория3 min

Настройка окружения Azure

Создание аккаунта, Azure CLI, VS Code, управление подписками, Bicep

Настройка окружения Azure

Первый шаг к работе с Azure -- создание аккаунта и настройка рабочего окружения. В этой статье разберем все необходимые инструменты.

Создание Azure-аккаунта

  1. Перейдите на https://azure.microsoft.com/free/
  2. Создайте бесплатный аккаунт -- вы получите $200 кредит на 30 дней и доступ к бесплатным сервисам на 12 месяцев
  3. Для регистрации потребуется банковская карта (для верификации, деньги не списываются)

Установка 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)"

Проверь себя

🧪

Какой кредит получает новый пользователь при создании бесплатного Azure-аккаунта?

🧪

Какая команда используется для входа в Azure через CLI?

🧪

Что такое Bicep в контексте Azure?