تشغيل سريع: إنشاء نقطة نهاية خاصة باستخدام Bicep

في هذا التشغيل السريع، ستستخدم Bicep لإنشاء نقطة نهاية خاصة.

Bicep هي لغة المجال المخصصة (DSL) التي تستخدم بناء الجملة التعريفي لتوزيع موارد Azure. توفر بناء جملة مختصر، وسلامة موثوقة من النوع، ودعمًا لإعادة استخدام التعليمة البرمجية. تقدم Bicep أفضل تجربة تأليف لحلول البنية الأساسية باعتبارها تعليمة برمجية في Azure.

يمكنك أيضاً إنشاء نقطة نهاية خاصة باستخدام مدخل Microsoft Azure أو Azure PowerShell أو Azure CLI أو قالب Azure Resource Manager.

Diagram of resources created in private endpoint quickstart.

المتطلبات الأساسية

تحتاج إلى حساب "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 متعددة:

نشر ملف Bicep

  1. احفظ ملف Bicep بالاسم main.bicep على الكمبيوتر المحلي الخاص بك.

  2. بادر بتوزيع ملف Bicep باستخدام Azure CLI أو Azure PowerShell.

    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-login> باسم المستخدم لخادم SQL المنطقي. استبدل <vm-login> مع اسم المستخدم الخاص بالجهاز الظاهري. سيُطلب منك إدخال sqlAdministratorLoginPassword. ستتم مطالبتك أيضاً بإدخال vmAdminPassword، والذي يجب أن يكون طوله 12 حرفاً على الأقل ويحتوي على حرف واحد على الأقل من الأحرف الصغيرة والأحرف الكبيرة وحرف خاص واحد.

    عند الانتهاء من عملية النشر، يجب أن ترى رسالة تشير إلى نجاح عملية النشر.

التحقُّق من صحة عملية النشر

إشعار

ينشئ ملف Bicep اسماً مميزاً لمورد myVm{uniqueid} للجهاز الظاهري، ولمورد قاعدة بيانات SQL sqlserver{uniqueid}. استبدل القيمة التي تم إنشاؤها بـ {uniqueid}.

الاتصال بجهاز افتراضي من الإنترنت

اتصل بالجهاز الافتراضي myVm{uniqueid} من الإنترنت على النحو التالي:

  1. في شريط البحث في مدخل Microsoft Azure، أدخل myVm{uniqueid}.

  2. حدد اتصال. سيفتح "Connect to virtual machine".

  3. حدد Download RDP File. يعمل Azure على إنشاء ملف Remote Desktop Protocol (RDP) وتنزيله إلى الكمبيوتر الخاص بك.

  4. افتح الملف ".rdp" الذي تم تنزيله.

    أ. إذا تمت مطالبتك، فحدد "Connect".
    ب. أدخل اسم المُستخدم وكلمة المرور اللذين حددتهما عند إنشاء الجهاز الظاهري.

    إشعار

    قد تحتاج إلى تحديد More choices>استخدام حساب مختلف، لتحديد بيانات الاعتماد التي أدخلتها عند إنشاء الجهاز الافتراضي.

  5. حدد موافق.

    قد تتلقى تحذيرًا بشأن الشهادة أثناء عملية تسجيل الدخول. إذا قمت بذلك، حدّد نعم أو متابعة.

  6. بعد ظهور سطح مكتب الجهاز الافتراضي، قم بتصغيره للعودة إلى سطح المكتب المحلي.

الوصول إلى خادم قاعدة بيانات "SQL Database" بشكل خاص من الجهاز الافتراضي

وفيما يلي كيفية الاتصال بخادم قاعدة البيانات SQL مـن الجهاز الافتراضي عن طريق استخدام نقطة النهاية الخاصة:

  1. فـي سطح المكتب البعيد الخاص بـ myVM{uniqueid}، افتح خدمة PowerShell.

  2. شغّل الأمر التالي:

    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
    
  3. عليك تثبيت "SQL Server Management Studio".

  4. فـي جزء الاتصال بالخادم، قم بما يلي:

    • بالنسبة إلى نوع الخادم: حـدد محرك قاعدة البيانات.
    • بالنسبة إلى اسم الخادم: حـدد sqlserver{uniqueid}.database.windows.net.
    • بالنسبة إلى اسم المستخدم، أدخل اسم المُستخدم الذي تم توفيره سابقاً.
    • بالنسبة إلى كلمة المرور، أدخل كلمة المُرور التي تم توفيرها سابقاً.
    • بالنسبة إلـى تذكر كلمة المرور: حدد Yes.
  5. حدد اتصال.

  6. فـي الجزء الأيسر، حدد ⁧Databases⁩. بشكل اختياري، يمكنك إنشاء أو الاستعلام عن المعلومات من sample-db.

  7. أغلق اتصال "Remote Desktop" بالجهاز الظاهري "myVm{uniqueid}".

تنظيف الموارد

عندما لا تعد في حاجة إلى الموارد التي أنشأتها باستخدام خدمة الرابط الخاص، احذف مجموعة الموارد. يؤدي هذا إلى إزالة خدمة الرابط الخاص وكل الموارد ذات الصلة.

az group delete --name exampleRG

الخطوات التالية

لمزيد من المعلومات حول الخدمات التي تدعم نقطة نهاية خاصة، راجع: