مشاركة عبر


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

في هذا التشغيل السريع، ستستخدم قالب Azure Resource Manager (قالب ARM) لإنشاء نقطة نهاية خاصة.

قالب Azure Resource Manager هو ملف JavaScript Object Notation (JSON) الذي يحدد البنية الأساسية والتكوين لمشروعك. يستخدم القالب عبارات توضيحية. يمكنك وصف النشر المقصود دون كتابة تسلسل أوامر البرمجة لإنشاء النشر.

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

إذا كانت بيئتك تفي بالمتطلبات الأساسية وكنت معتادًا على استخدام قوالب ARM، فحدد الزر التوزيع إلى Azureهنا. سيتم فتح قالب ARM في مدخل Microsoft Azure.

زر لنشر قالب Resource Manager إلى Azure.

رسم تخطيطي للموارد التي تم إنشاؤها في التشغيل السريع لنقطة النهاية الخاصة.

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

تحتاج إلى حساب "Azure" مع اشتراك مفعل. إذا لم يكن لديك حساب Azure بالفعل، فأنشئ حسابًا مجانًا.

مراجعة القالب

ينشئ هذا القالب نقطة نهاية خاصة لخدمة "Azure SQL Database".

القالب الذي يستخدمه هذا التشغيل السريع مأخوذ من قوالب التشغيل السريع لـ Azure.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "metadata": {
    "_generator": {
      "name": "bicep",
      "version": "0.5.6.12127",
      "templateHash": "14846974543330599630"
    }
  },
  "parameters": {
    "sqlAdministratorLogin": {
      "type": "string",
      "metadata": {
        "description": "The administrator username of the SQL logical server"
      }
    },
    "sqlAdministratorLoginPassword": {
      "type": "secureString",
      "metadata": {
        "description": "The administrator password of the SQL logical server."
      }
    },
    "vmAdminUsername": {
      "type": "string",
      "metadata": {
        "description": "Username for the Virtual Machine."
      }
    },
    "vmAdminPassword": {
      "type": "secureString",
      "metadata": {
        "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)"
      }
    },
    "VmSize": {
      "type": "string",
      "defaultValue": "Standard_D2_v3",
      "metadata": {
        "description": "The size of the VM"
      }
    },
    "location": {
      "type": "string",
      "defaultValue": "[resourceGroup().location]",
      "metadata": {
        "description": "Location for all resources."
      }
    }
  },
  "variables": {
    "vnetName": "myVirtualNetwork",
    "vnetAddressPrefix": "10.0.0.0/16",
    "subnet1Prefix": "10.0.0.0/24",
    "subnet1Name": "mySubnet",
    "sqlServerName": "[format('sqlserver{0}', uniqueString(resourceGroup().id))]",
    "databaseName": "[format('{0}/sample-db', variables('sqlServerName'))]",
    "privateEndpointName": "myPrivateEndpoint",
    "privateDnsZoneName": "[format('privatelink{0}', environment().suffixes.sqlServerHostname)]",
    "pvtEndpointDnsGroupName": "[format('{0}/mydnsgroupname', variables('privateEndpointName'))]",
    "vmName": "[take(format('myVm{0}', uniqueString(resourceGroup().id)), 15)]",
    "publicIpAddressName": "[format('{0}PublicIP', variables('vmName'))]",
    "networkInterfaceName": "[format('{0}NetInt', variables('vmName'))]",
    "osDiskType": "StandardSSD_LRS"
  },
  "resources": [
    {
      "type": "Microsoft.Sql/servers",
      "apiVersion": "2021-11-01-preview",
      "name": "[variables('sqlServerName')]",
      "location": "[parameters('location')]",
      "tags": {
        "displayName": "[variables('sqlServerName')]"
      },
      "properties": {
        "administratorLogin": "[parameters('sqlAdministratorLogin')]",
        "administratorLoginPassword": "[parameters('sqlAdministratorLoginPassword')]",
        "version": "12.0",
        "publicNetworkAccess": "Disabled"
      }
    },
    {
      "type": "Microsoft.Sql/servers/databases",
      "apiVersion": "2021-11-01-preview",
      "name": "[variables('databaseName')]",
      "location": "[parameters('location')]",
      "sku": {
        "name": "Basic",
        "tier": "Basic",
        "capacity": 5
      },
      "tags": {
        "displayName": "[variables('databaseName')]"
      },
      "properties": {
        "collation": "SQL_Latin1_General_CP1_CI_AS",
        "maxSizeBytes": 104857600,
        "sampleName": "AdventureWorksLT"
      },
      "dependsOn": [
        "[resourceId('Microsoft.Sql/servers', variables('sqlServerName'))]"
      ]
    },
    {
      "type": "Microsoft.Network/virtualNetworks",
      "apiVersion": "2021-05-01",
      "name": "[variables('vnetName')]",
      "location": "[parameters('location')]",
      "properties": {
        "addressSpace": {
          "addressPrefixes": [
            "[variables('vnetAddressPrefix')]"
          ]
        }
      }
    },
    {
      "type": "Microsoft.Network/virtualNetworks/subnets",
      "apiVersion": "2021-05-01",
      "name": "[format('{0}/{1}', variables('vnetName'), variables('subnet1Name'))]",
      "properties": {
        "addressPrefix": "[variables('subnet1Prefix')]",
        "privateEndpointNetworkPolicies": "Disabled"
      },
      "dependsOn": [
        "[resourceId('Microsoft.Network/virtualNetworks', variables('vnetName'))]"
      ]
    },
    {
      "type": "Microsoft.Network/privateEndpoints",
      "apiVersion": "2021-05-01",
      "name": "[variables('privateEndpointName')]",
      "location": "[parameters('location')]",
      "properties": {
        "subnet": {
          "id": "[resourceId('Microsoft.Network/virtualNetworks/subnets', variables('vnetName'), variables('subnet1Name'))]"
        },
        "privateLinkServiceConnections": [
          {
            "name": "[variables('privateEndpointName')]",
            "properties": {
              "privateLinkServiceId": "[resourceId('Microsoft.Sql/servers', variables('sqlServerName'))]",
              "groupIds": [
                "sqlServer"
              ]
            }
          }
        ]
      },
      "dependsOn": [
        "[resourceId('Microsoft.Sql/servers', variables('sqlServerName'))]",
        "[resourceId('Microsoft.Network/virtualNetworks/subnets', variables('vnetName'), variables('subnet1Name'))]",
        "[resourceId('Microsoft.Network/virtualNetworks', variables('vnetName'))]"
      ]
    },
    {
      "type": "Microsoft.Network/privateDnsZones",
      "apiVersion": "2020-06-01",
      "name": "[variables('privateDnsZoneName')]",
      "location": "global",
      "properties": {},
      "dependsOn": [
        "[resourceId('Microsoft.Network/virtualNetworks', variables('vnetName'))]"
      ]
    },
    {
      "type": "Microsoft.Network/privateDnsZones/virtualNetworkLinks",
      "apiVersion": "2020-06-01",
      "name": "[format('{0}/{1}', variables('privateDnsZoneName'), format('{0}-link', variables('privateDnsZoneName')))]",
      "location": "global",
      "properties": {
        "registrationEnabled": false,
        "virtualNetwork": {
          "id": "[resourceId('Microsoft.Network/virtualNetworks', variables('vnetName'))]"
        }
      },
      "dependsOn": [
        "[resourceId('Microsoft.Network/privateDnsZones', variables('privateDnsZoneName'))]",
        "[resourceId('Microsoft.Network/virtualNetworks', variables('vnetName'))]"
      ]
    },
    {
      "type": "Microsoft.Network/privateEndpoints/privateDnsZoneGroups",
      "apiVersion": "2021-05-01",
      "name": "[variables('pvtEndpointDnsGroupName')]",
      "properties": {
        "privateDnsZoneConfigs": [
          {
            "name": "config1",
            "properties": {
              "privateDnsZoneId": "[resourceId('Microsoft.Network/privateDnsZones', variables('privateDnsZoneName'))]"
            }
          }
        ]
      },
      "dependsOn": [
        "[resourceId('Microsoft.Network/privateDnsZones', variables('privateDnsZoneName'))]",
        "[resourceId('Microsoft.Network/privateEndpoints', variables('privateEndpointName'))]"
      ]
    },
    {
      "type": "Microsoft.Network/publicIPAddresses",
      "apiVersion": "2021-05-01",
      "name": "[variables('publicIpAddressName')]",
      "location": "[parameters('location')]",
      "tags": {
        "displayName": "[variables('publicIpAddressName')]"
      },
      "properties": {
        "publicIPAllocationMethod": "Dynamic"
      }
    },
    {
      "type": "Microsoft.Network/networkInterfaces",
      "apiVersion": "2021-05-01",
      "name": "[variables('networkInterfaceName')]",
      "location": "[parameters('location')]",
      "tags": {
        "displayName": "[variables('networkInterfaceName')]"
      },
      "properties": {
        "ipConfigurations": [
          {
            "name": "ipConfig1",
            "properties": {
              "privateIPAllocationMethod": "Dynamic",
              "publicIPAddress": {
                "id": "[resourceId('Microsoft.Network/publicIPAddresses', variables('publicIpAddressName'))]"
              },
              "subnet": {
                "id": "[resourceId('Microsoft.Network/virtualNetworks/subnets', variables('vnetName'), variables('subnet1Name'))]"
              }
            }
          }
        ]
      },
      "dependsOn": [
        "[resourceId('Microsoft.Network/publicIPAddresses', variables('publicIpAddressName'))]",
        "[resourceId('Microsoft.Network/virtualNetworks/subnets', variables('vnetName'), variables('subnet1Name'))]",
        "[resourceId('Microsoft.Network/virtualNetworks', variables('vnetName'))]"
      ]
    },
    {
      "type": "Microsoft.Compute/virtualMachines",
      "apiVersion": "2021-11-01",
      "name": "[variables('vmName')]",
      "location": "[parameters('location')]",
      "tags": {
        "displayName": "[variables('vmName')]"
      },
      "properties": {
        "hardwareProfile": {
          "vmSize": "[parameters('VmSize')]"
        },
        "osProfile": {
          "computerName": "[variables('vmName')]",
          "adminUsername": "[parameters('vmAdminUsername')]",
          "adminPassword": "[parameters('vmAdminPassword')]"
        },
        "storageProfile": {
          "imageReference": {
            "publisher": "MicrosoftWindowsServer",
            "offer": "WindowsServer",
            "sku": "2019-Datacenter",
            "version": "latest"
          },
          "osDisk": {
            "name": "[format('{0}OsDisk', variables('vmName'))]",
            "caching": "ReadWrite",
            "createOption": "FromImage",
            "managedDisk": {
              "storageAccountType": "[variables('osDiskType')]"
            },
            "diskSizeGB": 128
          }
        },
        "networkProfile": {
          "networkInterfaces": [
            {
              "id": "[resourceId('Microsoft.Network/networkInterfaces', variables('networkInterfaceName'))]"
            }
          ]
        }
      },
      "dependsOn": [
        "[resourceId('Microsoft.Network/networkInterfaces', variables('networkInterfaceName'))]"
      ]
    }
  ]
}

يحدد القالب موارد Azure المتعددة:

نشر القالب

انشر قالب ARM إلى Azure عـن طريق القيام بما يلي:

  1. سجل الدخول إلى Azure وافتح قالب ARM عن طريق تحديد الزر التوزيع إلى Azure هنا. ينشئ القالب نقطة النهاية الخاصة، ومثيل قاعدة بيانات SQL، والبنية التحتية للشبكة، وجهاز افتراضي ليتم التحقق من صحته.

    زر لنشر قالب Resource Manager إلى Azure.

  2. حدد مجموعة الموارد الخاصة بك أو قم بإنشاء مجموعة جديدة.

  3. أدخل اسم تسجيل الدخول وكلمة المرور لـمسؤول SQL.

  4. أدخل اسم مُستخدم وكلمة مرور مسؤول الجهاز الظاهري.

  5. اقرأ بيان الشروط والأحكام. إذا وافقت، حدد أوافق على الشروط والأحكام المذكورة أعلاه، ثم بعدها حدد Purchase. قد يستغرق إكمال النشر 20 دقيقة أو أكثر.

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

إشعار

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

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

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

  1. في شريط البحث في "portal"، أدخل "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}".

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

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

لحذف مجموعة الموارد، قم بتشغيل Remove-AzResourceGroup cmdlet:

Remove-AzResourceGroup -Name <your resource group name>

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

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