你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
快速入门:使用 Bicep 创建专用终结点
本快速入门中将使用 Bicep 创建专用终结点。
Bicep 是一种特定于域的语言 (DSL),使用声明性语法来部署 Azure 资源。 它提供简明的语法、可靠的类型安全性以及对代码重用的支持。 Bicep 会针对你的 Azure 基础结构即代码解决方案提供最佳创作体验。
也可以使用 Azure 门户、Azure PowerShell、Azure CLI 或 Azure 资源管理器模板创建专用终结点。
先决条件
需要一个具有活动订阅的 Azure 帐户。 如果还没有 Azure 帐户,可以免费创建帐户。
查阅 Bicep 文件
该 Bicep 文件为 Azure SQL 数据库的实例创建专用终结点。
本快速入门中使用的 Bicep 文件来自 Azure 快速入门模板。
@description('The administrator username of the SQL logical server')
param sqlAdministratorLogin string
@description('The administrator password of the SQL logical server.')
@secure()
param sqlAdministratorLoginPassword string
@description('Username for the Virtual Machine.')
param vmAdminUsername string
@description('Password for the Virtual Machine. The password must be at least 12 characters long and have lower case, upper characters, digit and a special character (Regex match)')
@secure()
param vmAdminPassword string
@description('The size of the VM')
param VmSize string = 'Standard_D2_v3'
@description('Location for all resources.')
param location string = resourceGroup().location
var vnetName = 'myVirtualNetwork'
var vnetAddressPrefix = '10.0.0.0/16'
var subnet1Prefix = '10.0.0.0/24'
var subnet1Name = 'mySubnet'
var sqlServerName = 'sqlserver${uniqueString(resourceGroup().id)}'
var databaseName = '${sqlServerName}/sample-db'
var privateEndpointName = 'myPrivateEndpoint'
var privateDnsZoneName = 'privatelink${environment().suffixes.sqlServerHostname}'
var pvtEndpointDnsGroupName = '${privateEndpointName}/mydnsgroupname'
var vmName = take('myVm${uniqueString(resourceGroup().id)}', 15)
var publicIpAddressName = '${vmName}PublicIP'
var networkInterfaceName = '${vmName}NetInt'
var osDiskType = 'StandardSSD_LRS'
resource sqlServer 'Microsoft.Sql/servers@2021-11-01-preview' = {
name: sqlServerName
location: location
tags: {
displayName: sqlServerName
}
properties: {
administratorLogin: sqlAdministratorLogin
administratorLoginPassword: sqlAdministratorLoginPassword
version: '12.0'
publicNetworkAccess: 'Disabled'
}
}
resource database 'Microsoft.Sql/servers/databases@2021-11-01-preview' = {
name: databaseName
location: location
sku: {
name: 'Basic'
tier: 'Basic'
capacity: 5
}
tags: {
displayName: databaseName
}
properties: {
collation: 'SQL_Latin1_General_CP1_CI_AS'
maxSizeBytes: 104857600
sampleName: 'AdventureWorksLT'
}
dependsOn: [
sqlServer
]
}
resource vnet 'Microsoft.Network/virtualNetworks@2021-05-01' = {
name: vnetName
location: location
properties: {
addressSpace: {
addressPrefixes: [
vnetAddressPrefix
]
}
}
}
resource subnet 'Microsoft.Network/virtualNetworks/subnets@2021-05-01' = {
parent: vnet
name: subnet1Name
properties: {
addressPrefix: subnet1Prefix
privateEndpointNetworkPolicies: 'Disabled'
}
}
resource privateEndpoint 'Microsoft.Network/privateEndpoints@2021-05-01' = {
name: privateEndpointName
location: location
properties: {
subnet: {
id: subnet.id
}
privateLinkServiceConnections: [
{
name: privateEndpointName
properties: {
privateLinkServiceId: sqlServer.id
groupIds: [
'sqlServer'
]
}
}
]
}
dependsOn: [
vnet
]
}
resource privateDnsZone 'Microsoft.Network/privateDnsZones@2020-06-01' = {
name: privateDnsZoneName
location: 'global'
properties: {}
dependsOn: [
vnet
]
}
resource privateDnsZoneLink 'Microsoft.Network/privateDnsZones/virtualNetworkLinks@2020-06-01' = {
parent: privateDnsZone
name: '${privateDnsZoneName}-link'
location: 'global'
properties: {
registrationEnabled: false
virtualNetwork: {
id: vnet.id
}
}
}
resource pvtEndpointDnsGroup 'Microsoft.Network/privateEndpoints/privateDnsZoneGroups@2021-05-01' = {
name: pvtEndpointDnsGroupName
properties: {
privateDnsZoneConfigs: [
{
name: 'config1'
properties: {
privateDnsZoneId: privateDnsZone.id
}
}
]
}
dependsOn: [
privateEndpoint
]
}
resource publicIpAddress 'Microsoft.Network/publicIPAddresses@2021-05-01' = {
name: publicIpAddressName
location: location
tags: {
displayName: publicIpAddressName
}
properties: {
publicIPAllocationMethod: 'Dynamic'
}
}
resource networkInterface 'Microsoft.Network/networkInterfaces@2021-05-01' = {
name: networkInterfaceName
location: location
tags: {
displayName: networkInterfaceName
}
properties: {
ipConfigurations: [
{
name: 'ipConfig1'
properties: {
privateIPAllocationMethod: 'Dynamic'
publicIPAddress: {
id: publicIpAddress.id
}
subnet: {
id: subnet.id
}
}
}
]
}
dependsOn: [
vnet
]
}
resource vm 'Microsoft.Compute/virtualMachines@2021-11-01' = {
name: vmName
location: location
tags: {
displayName: vmName
}
properties: {
hardwareProfile: {
vmSize: VmSize
}
osProfile: {
computerName: vmName
adminUsername: vmAdminUsername
adminPassword: vmAdminPassword
}
storageProfile: {
imageReference: {
publisher: 'MicrosoftWindowsServer'
offer: 'WindowsServer'
sku: '2019-Datacenter'
version: 'latest'
}
osDisk: {
name: '${vmName}OsDisk'
caching: 'ReadWrite'
createOption: 'FromImage'
managedDisk: {
storageAccountType: osDiskType
}
diskSizeGB: 128
}
}
networkProfile: {
networkInterfaces: [
{
id: networkInterface.id
}
]
}
}
}
Bicep 文件定义了多个 Azure 资源:
- Microsoft.Sql/servers:带有示例数据库的 SQL 数据库实例。
- Microsoft.Sql/servers/databases:示例数据库。
- Microsoft.Network/virtualNetworks:部署专用终结点的虚拟网络。
- Microsoft.Network/privateEndpoints:用于访问 SQL 数据库实例的专用终结点。
- Microsoft.Network/privateDnsZones:用于解析专用终结点 IP 地址的区域。
- Microsoft.Network/privateDnsZones/virtualNetworkLinks
- Microsoft.Network/privateEndpoints/privateDnsZoneGroups:用于将专用终结点与专用 DNS 区域相关联的区域组。
- Microsoft.Network/publicIpAddresses:用于访问虚拟机的公共 IP 地址。
- Microsoft.Network/networkInterfaces:虚拟机的网络接口。
- Microsoft.Compute/virtualMachines:用于测试专用终结点与 SQL 数据库实例之间的连接的虚拟机。
部署 Bicep 文件
将该 Bicep 文件另存为本地计算机上的 main.bicep。
使用 Azure CLI 或 Azure PowerShell 来部署该 Bicep 文件。
az group create --name exampleRG --location eastus az deployment group create --resource-group exampleRG --template-file main.bicep --parameters sqlAdministratorLogin=<admin-login> vmAdminUsername=<vm-login>
注意
将 <admin-user> 替换为 SQL 逻辑服务器的用户名。 将 <admin-user> 替换为虚拟机的用户名。 系统会提示输入 sqlAdministratorLoginPassword。 系统还会提示输入 vmAdminPassword,该字符串长度必须至少为 12 个字符,并且至少包含一个小写和大写字符和一个特殊字符。
部署完成后,应会看到一条指出部署成功的消息。
验证部署
注意
Bicep 文件为虚拟机 myVm{uniqueid} 资源和 SQL 数据库 sqlserver{uniqueid} 资源生成唯一名称。 用生成的值替换 {uniqueid}。
从 Internet 连接到 VM
通过执行以下操作,从 Internet 连接到 VM myVm{uniqueid}:
在门户的搜索栏中,输入 myVm{uniqueid}。
选择“连接”。 “连接到虚拟机”随即打开。
选择“下载 RDP 文件”。 Azure 会创建远程桌面协议 (RDP) 文件,并将其下载到计算机。
打开下载的 RDP 文件。
a. 出现提示时,选择“连接” 。
b. 输入创建 VM 时指定的用户名和密码。备注
你可能需要选择“更多选择”>“使用其他帐户”,以指定在创建 VM 时输入的凭据。
选择“确定”。
你可能会在登录过程中收到证书警告。 如果收到证书警告,选择“确定”或“继续” 。
VM 桌面出现后,将其最小化以返回到本地桌面。
以私密方式从 VM 访问 SQL 数据库服务器
要使用专用终结点从 VM 连接到 SQL 数据库服务器,请执行以下操作:
在 myVM{uniqueid} 的远程桌面中,打开 PowerShell。
运行以下命令:
nslookup sqlserver{uniqueid}.database.windows.net
你将收到如下所示的消息:
Server: UnKnown Address: 168.63.129.16 Non-authoritative answer: Name: sqlserver.privatelink.database.windows.net Address: 10.0.0.5 Aliases: sqlserver.database.windows.net
安装 SQL Server Management Studio。
在“连接到服务器”窗格中,执行以下操作:
- 选择服务器类型“数据库引擎”。
- 选择服务器名称“sqlserver{uniqueid}.database.windows.net”。
- 对于“用户名”,请输入先前提供的用户名。
- 对于“密码”,请输入之前提供的密码。
- 对于“记住密码”,选择“是”。
选择“连接”。
在左窗格中,选择“数据库”。 (可选)创建或查询 sample-db 中的信息。
关闭与 myVm{uniqueid} 的远程桌面连接。
清理资源
如果不再需要使用专用链接服务创建的资源,请删除资源组。 这会删除专用链接服务和所有相关资源。
az group delete --name exampleRG
后续步骤
要详细了解支持专用终结点的服务,请参阅: