Быстрый старт: Создание управляемого экземпляра SQL в Azure средствами Bicep
В этом кратком руководстве рассматривается процесс развертывания Bicep-файла для создания управляемого экземпляра SQL Azure и виртуальной сети. управляемого экземпляра SQL Azure — это интеллектуальная, полностью управляемая, масштабируемая облачная база данных с почти 100% четностью функций с ядром СУБД SQL Server.
Bicep — это язык, зависящий от домена (DSL), который использует декларативный синтаксис для развертывания ресурсов Azure. Он предоставляет краткий синтаксис, безопасность надежных типов и поддержку повторного использования кода. Bicep предлагает лучший интерфейс разработки для решений инфраструктуры как кода в Azure.
Необходимые условия
- Подписка Azure. Если у вас нет подписки Azure, создать бесплатную учетную запись
- В общем случае пользователю должна быть назначена роль Участник управляемого экземпляра SQL на уровне подписки.
- Если подготовка в подсети, которая уже делегирована управляемому экземпляру SQL Azure, пользователю требуется только разрешение Microsoft.Sql/managedInstances/write, назначенное в области подписки.
Просмотр файла Bicep
Файл Bicep, используемый в этом кратком руководстве, взят из шаблонов быстрого старта Azure.
@description('Enter managed instance name.')
param managedInstanceName string
@description('Enter user name.')
param administratorLogin string
@description('Enter password.')
@secure()
param administratorLoginPassword string
@description('Enter location. If you leave this field blank resource group location would be used.')
param location string = resourceGroup().location
@description('Enter virtual network name. If you leave this field blank name will be created by the template.')
param virtualNetworkName string = 'SQLMI-VNET'
@description('Enter virtual network address prefix.')
param addressPrefix string = '10.0.0.0/16'
@description('Enter subnet name.')
param subnetName string = 'ManagedInstance'
@description('Enter subnet address prefix.')
param subnetPrefix string = '10.0.0.0/24'
@description('Enter sku name.')
@allowed([
'GP_Gen5'
'BC_Gen5'
])
param skuName string = 'GP_Gen5'
@description('Enter number of vCores.')
@allowed([
4
8
16
24
32
40
64
80
])
param vCores int = 16
@description('Enter storage size.')
@minValue(32)
@maxValue(8192)
param storageSizeInGB int = 256
@description('Enter license type.')
@allowed([
'BasePrice'
'LicenseIncluded'
])
param licenseType string = 'LicenseIncluded'
var networkSecurityGroupName = 'SQLMI-${managedInstanceName}-NSG'
var routeTableName = 'SQLMI-${managedInstanceName}-Route-Table'
resource networkSecurityGroup 'Microsoft.Network/networkSecurityGroups@2021-08-01' = {
name: networkSecurityGroupName
location: location
properties: {
securityRules: [
{
name: 'allow_tds_inbound'
properties: {
description: 'Allow access to data'
protocol: 'Tcp'
sourcePortRange: '*'
destinationPortRange: '1433'
sourceAddressPrefix: 'VirtualNetwork'
destinationAddressPrefix: '*'
access: 'Allow'
priority: 1000
direction: 'Inbound'
}
}
{
name: 'allow_redirect_inbound'
properties: {
description: 'Allow inbound redirect traffic to Managed Instance inside the virtual network'
protocol: 'Tcp'
sourcePortRange: '*'
destinationPortRange: '11000-11999'
sourceAddressPrefix: 'VirtualNetwork'
destinationAddressPrefix: '*'
access: 'Allow'
priority: 1100
direction: 'Inbound'
}
}
{
name: 'deny_all_inbound'
properties: {
description: 'Deny all other inbound traffic'
protocol: '*'
sourcePortRange: '*'
destinationPortRange: '*'
sourceAddressPrefix: '*'
destinationAddressPrefix: '*'
access: 'Deny'
priority: 4096
direction: 'Inbound'
}
}
{
name: 'deny_all_outbound'
properties: {
description: 'Deny all other outbound traffic'
protocol: '*'
sourcePortRange: '*'
destinationPortRange: '*'
sourceAddressPrefix: '*'
destinationAddressPrefix: '*'
access: 'Deny'
priority: 4096
direction: 'Outbound'
}
}
]
}
}
resource routeTable 'Microsoft.Network/routeTables@2021-08-01' = {
name: routeTableName
location: location
properties: {
disableBgpRoutePropagation: false
}
}
resource virtualNetwork 'Microsoft.Network/virtualNetworks@2021-08-01' = {
name: virtualNetworkName
location: location
properties: {
addressSpace: {
addressPrefixes: [
addressPrefix
]
}
subnets: [
{
name: subnetName
properties: {
addressPrefix: subnetPrefix
routeTable: {
id: routeTable.id
}
networkSecurityGroup: {
id: networkSecurityGroup.id
}
delegations: [
{
name: 'managedInstanceDelegation'
properties: {
serviceName: 'Microsoft.Sql/managedInstances'
}
}
]
}
}
]
}
}
resource managedInstance 'Microsoft.Sql/managedInstances@2021-11-01-preview' = {
name: managedInstanceName
location: location
sku: {
name: skuName
}
identity: {
type: 'SystemAssigned'
}
dependsOn: [
virtualNetwork
]
properties: {
administratorLogin: administratorLogin
administratorLoginPassword: administratorLoginPassword
subnetId: resourceId('Microsoft.Network/virtualNetworks/subnets', virtualNetworkName, subnetName)
storageSizeInGB: storageSizeInGB
vCores: vCores
licenseType: licenseType
}
}
Эти ресурсы определены в файле Bicep:
- Microsoft.Network/networkSecurityGroups
- Microsoft.Network/routeTables
- Microsoft.Network/virtualNetworks
- Microsoft.Sql/managedinstances
Развертывание Bicep-файла
Сохраните Bicep-файл как main.bicep на локальный компьютер.
Разверните Bicep-файл с помощью Azure CLI или Azure PowerShell.
az group create --name exampleRG --location eastus az deployment group create --resource-group exampleRG --template-file main.bicep --parameters managedInstanceName=<instance-name> administratorLogin=<admin-login>
Заметка
Замените <имя экземпляра> именем управляемого экземпляра. Замените <имя входа администратора> именем администратора. Вам будет предложено ввести administratorLoginPassword.
По завершении развертывания появится сообщение, указывающее на успешное развертывание.
Проверка развернутых ресурсов
Используйте портал Azure, Azure CLI или Azure PowerShell для перечисления развернутых ресурсов в группе ресурсов.
az resource list --resource-group exampleRG
Очистка ресурсов
Если больше не требуется, используйте портал Azure, Azure CLI или Azure PowerShell, чтобы удалить группу ресурсов и ее ресурсы.
az group delete --name exampleRG