快速入门:使用 Bicep 文件创建 Azure Database for MySQL 灵活服务器的实例
适用于: Azure Database for MySQL - 灵活服务器
Azure Database for MySQL 灵活服务器是一种托管服务,可用于在云中运行、管理和缩放具有高可用性的 MySQL 数据库。 可使用 Azure 资源管理器模板(ARM 模板)来预配 Azure Database for MySQL 灵活服务器,以便部署多个服务器或在一个服务器上部署多个数据库。
Bicep 是一种特定于域的语言 (DSL),使用声明性语法来部署 Azure 资源。 它提供简明的语法、可靠的类型安全性以及对代码重用的支持。 Bicep 会针对你的 Azure 基础结构即代码解决方案提供最佳创作体验。
先决条件
- 具有活动订阅的 Azure 帐户。
如果没有 Azure 订阅,可在开始前创建一个 Azure 试用帐户。
创建具有公共访问权限的服务器
修改以下代码示例以创建main.bicep文件和CreateFirewallRules.bicep文件。 使用文件创建具有公共访问权限的 Azure Database for MySQL 灵活服务器,并在服务器上创建数据库。 可能需要修改firewallRules
的默认值。
main.bicep:
@description('Provide a prefix for creating resource names.')
param resourceNamePrefix string
@description('Provide the location for all the resources.')
param location string = resourceGroup().location
@description('Provide the administrator login username for the flexible server.')
param administratorLogin string
@description('Provide the administrator login password for the flexible server.')
@secure()
param administratorLoginPassword string
@description('Provide an array of firewall rules to apply to the flexible server.')
param firewallRules array = [
{
name: 'rule1'
startIPAddress: '192.168.0.1'
endIPAddress: '192.168.0.255'
}
{
name: 'rule2'
startIPAddress: '192.168.1.1'
endIPAddress: '192.168.1.255'
}
]
@description('The tier of the particular SKU. High availability mode is available only in the GeneralPurpose and MemoryOptimized SKUs.')
@allowed([
'Burstable'
'GeneralPurpose'
'MemoryOptimized'
])
param serverEdition string = 'Burstable'
@description('Server version')
@allowed([
'5.7'
'8.0.21'
])
param version string = '8.0.21'
@description('The availability zone information for the server. (If you don't have a preference, leave blank.)')
param availabilityZone string = '1'
@description('High availability mode for a server: Disabled, SameZone, or ZoneRedundant.')
@allowed([
'Disabled'
'SameZone'
'ZoneRedundant'
])
param haEnabled string = 'Disabled'
@description('The availability zone of the standby server.')
param standbyAvailabilityZone string = '2'
param storageSizeGB int = 20
param storageIops int = 360
@allowed([
'Enabled'
'Disabled'
])
param storageAutogrow string = 'Enabled'
@description('The name of the SKU, such as Standard_D32ds_v4.')
param skuName string = 'Standard_B1ms'
param backupRetentionDays int = 7
@allowed([
'Disabled'
'Enabled'
])
param geoRedundantBackup string = 'Disabled'
param serverName string = '${resourceNamePrefix}sqlserver'
param databaseName string = '${resourceNamePrefix}mysqldb'
resource server 'Microsoft.DBforMySQL/flexibleServers@2021-12-01-preview' = {
location: location
name: serverName
sku: {
name: skuName
tier: serverEdition
}
properties: {
version: version
administratorLogin: administratorLogin
administratorLoginPassword: administratorLoginPassword
availabilityZone: availabilityZone
highAvailability: {
mode: haEnabled
standbyAvailabilityZone: standbyAvailabilityZone
}
storage: {
storageSizeGB: storageSizeGB
iops: storageIops
autoGrow: storageAutogrow
}
backup: {
backupRetentionDays: backupRetentionDays
geoRedundantBackup: geoRedundantBackup
}
}
}
@batchSize(1)
module createFirewallRules './CreateFirewallRules.bicep' = [for i in range(0, ((length(firewallRules) > 0) ? length(firewallRules) : 1)): {
name: 'firewallRules-${i}'
params: {
ip: firewallRules[i]
serverName: serverName
}
dependsOn: [
server
]
}]
resource database 'Microsoft.DBforMySQL/flexibleServers/databases@2021-12-01-preview' = {
parent: server
name: databaseName
properties: {
charset: 'utf8'
collation: 'utf8_general_ci'
}
}
CreateFirewallRules.bicep:
param serverName string
param ip object
resource firewallRules 'Microsoft.DBforMySQL/flexibleServers/firewallRules@2021-12-01-preview' = {
name: '${serverName}/${ip.name}'
properties: {
startIpAddress: ip.startIPAddress
endIpAddress: ip.endIPAddress
}
}
将两个 Bicep 文件保存在同一目录中。
创建具有专用访问权限的服务器
修改以下代码样本,以部署在虚拟网络中具有专用访问的 Azure Database for MySQL 灵活服务器:
@description('Provide a prefix for creating resource names.')
param resourceNamePrefix string
@description('Provide the location for all the resources.')
param location string = resourceGroup().location
@description('Provide the administrator login name for the MySQL server.')
param administratorLogin string
@description('Provide the administrator login password for the MySQL server.')
@secure()
param administratorLoginPassword string
@description('Provide Virtual Network Address Prefix')
param vnetAddressPrefix string = '10.0.0.0/16'
@description('Provide Subnet Address Prefix')
param subnetPrefix string = '10.0.0.0/24'
@description('Provide the tier of the specific SKU. High availability is available only in the GeneralPurpose and MemoryOptimized SKUs.')
@allowed([
'Burstable'
'Generalpurpose'
'MemoryOptimized'
])
param serverEdition string = 'Burstable'
@description('Provide Server version')
@allowed([
'5.7'
'8.0.21'
])
param serverVersion string = '8.0.21'
@description('The availability zone information for the server. (If you don't have a preference, leave blank.)')
param availabilityZone string = '1'
@description('Provide the high availability mode for a server: Disabled, SameZone, or ZoneRedundant.')
@allowed([
'Disabled'
'SameZone'
'ZoneRedundant'
])
param haEnabled string = 'Disabled'
@description('Provide the availability zone of the standby server.')
param standbyAvailabilityZone string = '2'
param storageSizeGB int = 20
param storageIops int = 360
@allowed([
'Enabled'
'Disabled'
])
param storageAutogrow string = 'Enabled'
@description('The name of the sku, e.g. Standard_D32ds_v4.')
param skuName string = 'Standard_B1ms'
param backupRetentionDays int = 7
@allowed([
'Disabled'
'Enabled'
])
param geoRedundantBackup string = 'Disabled'
var serverName = '${resourceNamePrefix}mysqlserver'
var databaseName = '${resourceNamePrefix}mysqldatabase'
var vnetName = '${resourceNamePrefix}mysqlvnet'
var subnetName = '${resourceNamePrefix}mysqlsubnet'
resource vnet 'Microsoft.Network/virtualNetworks@2022-07-01' = {
name: vnetName
location: location
properties: {
addressSpace: {
addressPrefixes: [
vnetAddressPrefix
]
}
}
}
resource subnet 'Microsoft.Network/virtualNetworks/subnets@2022-07-01' = {
parent: vnet
name: subnetName
properties: {
addressPrefix: subnetPrefix
delegations: [
{
name: 'MySQLflexibleServers'
properties: {
serviceName: 'Microsoft.DBforMySQL/flexibleServers'
}
}
]
}
}
resource server 'Microsoft.DBforMySQL/flexibleServers@2021-12-01-preview' = {
location: location
name: serverName
sku: {
name: skuName
tier: serverEdition
}
properties: {
version: serverVersion
administratorLogin: administratorLogin
administratorLoginPassword: administratorLoginPassword
availabilityZone: availabilityZone
highAvailability: {
mode: haEnabled
standbyAvailabilityZone: standbyAvailabilityZone
}
storage: {
storageSizeGB: storageSizeGB
iops: storageIops
autoGrow: storageAutogrow
}
network: {
delegatedSubnetResourceId: subnet.id
}
backup: {
backupRetentionDays: backupRetentionDays
geoRedundantBackup: geoRedundantBackup
}
}
}
resource database 'Microsoft.DBforMySQL/flexibleServers/databases@2021-12-01-preview' = {
parent: server
name: databaseName
properties: {
charset: 'utf8'
collation: 'utf8_general_ci'
}
}
部署模板
使用 Azure CLI 或 Azure PowerShell 来部署 Bicep 文件。
az group create --name exampleRG --location chinanorth3
az deployment group create --resource-group exampleRG --template-file main.bicep
按照说明输入参数值。 部署完成后,应会看到一条指出部署成功的消息。
查看已部署的资源
若要验证是否已在资源组中创建了 Azure Database for MySQL 灵活服务器,请执行以下操作:
az resource list --resource-group exampleRG
清理资源
若要删除资源组和资源组中包含的资源,请执行以下操作:
az group delete --name exampleRG
相关内容
- 有关指导完成 Bicep 模板创建过程的分步教程,请参阅快速入门:使用 Visual Studio Code 创建 Bicep 文件。