Поделиться через


Краткое руководство. Развертывание виртуальной машины в общедоступном MEC Azure с помощью шаблона ARM

Из этого краткого руководства вы узнаете, как использовать шаблон Azure Resource Manager (ARM) для развертывания виртуальной машины Ubuntu Linux в общедоступных вычислительных ресурсах с несколькими доступами Azure (MEC).

Шаблон Azure Resource Manager — это файл нотации объектов JavaScript (JSON), который определяет инфраструктуру и конфигурацию проекта. В шаблоне используется декларативный синтаксис. Вы описываете предполагаемое развертывание без написания последовательности команд программирования для создания развертывания.

Необходимые компоненты

  • Если у вас нет подписки Azure, создайте бесплатную учетную запись, прежде чем приступить к работе.

  • Добавьте в учетную запись Azure разрешенную подписку, которая позволяет развертывать ресурсы в общедоступном MEC Azure. Если у вас нет активной подписки, обратитесь в группу продуктов Azure public MEC.

  • Используйте среду Bash в Azure Cloud Shell. Дополнительные сведения см . в кратком руководстве по Bash в Azure Cloud Shell.

  • Если вы предпочитаете выполнять справочные команды CLI локально, установите Azure CLI. Если вы работаете в Windows или macOS, Azure CLI можно запустить в контейнере Docker. Дополнительные сведения см. в статье Как запустить Azure CLI в контейнере Docker.

    • Если вы используете локальную установку, выполните вход в Azure CLI с помощью команды az login. Чтобы выполнить аутентификацию, следуйте инструкциям в окне терминала. Сведения о других возможностях, доступных при входе, см. в статье Вход с помощью Azure CLI.

    • Установите расширение Azure CLI при первом использовании, когда появится соответствующий запрос. Дополнительные сведения о расширениях см. в статье Использование расширений с Azure CLI.

    • Выполните команду az version, чтобы узнать установленную версию и зависимые библиотеки. Чтобы обновиться до последней версии, выполните команду az upgrade.

Примечание.

Общедоступные развертывания MEC Azure поддерживаются в Azure CLI версии 2.26 и более поздних версий.

Изучение шаблона

  1. Просмотрите следующий пример шаблона ARM.

    Каждый ресурс, развернутый в общедоступном meC Azure, имеет дополнительный атрибут, который extendedLocationAzure добавляет к поставщику ресурсов. Пример шаблона ARM развертывает следующие ресурсы:

    • Виртуальная сеть
    • Общедоступный IP-адрес
    • Сетевой интерфейс
    • группу безопасности сети;
    • Виртуальная машина

    В этом примере шаблона ARM:

    • Идентификатор зоны Azure Edge отличается от отображаемого имени общедоступного MEC Azure.
    • Группа безопасности сети Azure имеет правило входящего трафика, которое разрешает доступ по протоколу SSH и HTTPS из разных стран.
    {
        "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
        "contentVersion": "1.0.0.0",
        "parameters": {
            "adminUsername": {
                "type": "String",
                "metadata": {
                    "description": "Username for the Virtual Machine."
                }
            },
            "adminPassword": {
                "type": "SecureString",
                "metadata": {
                    "description": "Password for the Virtual Machine."
                }
            },
            "dnsLabelPrefix": {
                "type": "String",
                "metadata": {
                    "description": "Unique DNS Name for the Public IP used to access the Virtual Machine."
                }
            },
            "vmSize": {
                "defaultValue": "Standard_D2s_v3",
                "type": "String",
                "metadata": {
                    "description": "Size of the virtual machine."
                }
            },
            "location": {
                "defaultValue": "[resourceGroup().location]",
                "type": "String",
                "metadata": {
                    "description": "Location for all resources."
                }
            },
            "EdgeZone": {
                "type": "String"
            },
            "publisher": { 
                "type": "string", 
                "defaultValue": "Canonical",
                "metadata" : {
                    "description": "Publisher for the VM Image"
                }
            }, 
            "offer": { 
                "type": "string",
                "defaultValue": "UbuntuServer",
                "metadata" : {
                    "description": "Offer for the VM Image"
                }
            }, 
            "sku": { 
                "type": "string",
                "defaultValue": "18.04-LTS",
                "metadata" : {
                    "description": "SKU for the VM Image"
                }
            }, 
            "osVersion": { 
                "type": "string",
                "defaultValue": "latest",
                "metadata" : {
                    "description": "version for the VM Image"
                }
            },
            "vmName": {
                "defaultValue": "myEdgeVM",
                "type": "String",
                "metadata": {
                    "description": "VM Name."
                }
            }
        },
        "variables": {
            "nicName": "myEdgeVMNic",
            "addressPrefix": "10.0.0.0/16",
            "subnetName": "Subnet",
            "subnetPrefix": "10.0.0.0/24",
            "publicIPAddressName": "myEdgePublicIP",
            "virtualNetworkName": "MyEdgeVNET",
            "subnetRef": "[resourceId('Microsoft.Network/virtualNetworks/subnets', variables('virtualNetworkName'), variables('subnetName'))]",
            "networkSecurityGroupName": "default-NSG"
        },
        "resources": [
            {
                "type": "Microsoft.Network/publicIPAddresses",
                "apiVersion": "2018-11-01",
                "name": "[variables('publicIPAddressName')]",
                "location": "[parameters('location')]",
                "extendedLocation": {
                    "type": "EdgeZone",
                    "name": "[parameters('EdgeZone')]"
                },
                "sku": {
                    "name": "Standard"
                },
                "properties": {
                    "publicIPAllocationMethod": "Static",
                    "dnsSettings": {
                        "domainNameLabel": "[parameters('dnsLabelPrefix')]"
                    }
                }
            },
            {
                "type": "Microsoft.Network/networkSecurityGroups",
                "apiVersion": "2019-08-01",
                "name": "[variables('networkSecurityGroupName')]",
                "location": "[parameters('location')]",
                "properties": {
                    "securityRules": [
                       {
                            "name": "AllowHttps",
                            "properties": {
                                "description": "HTTPS is allowed",
                                "protocol": "*",
                                "sourcePortRange": "*",
                                "destinationPortRange": "443",
                                "sourceAddressPrefix": "*",
                                "destinationAddressPrefix": "*",
                                "access": "Allow",
                                "priority": 130,
                                "direction": "Inbound",
                                "sourcePortRanges": [],
                                "destinationPortRanges": [],
                                "sourceAddressPrefixes": [],
                                "destinationAddressPrefixes": []
                             }
                        },
                        { 
                            "name": "AllowSSH",
                            "properties": {
                                "description": "HTTPS is allowed",
                                "protocol": "*",
                                "sourcePortRange": "*",
                                "destinationPortRange": "22",
                                "sourceAddressPrefix": "*",
                                "destinationAddressPrefix": "*",
                                "access": "Allow",
                                "priority": 140,
                                "direction": "Inbound",
                                "sourcePortRanges": [],
                                "destinationPortRanges": [],
                                "sourceAddressPrefixes": [],
                                "destinationAddressPrefixes": []
                             }
                        }
                    ]
                }
            },
            {
                "type": "Microsoft.Network/virtualNetworks",
                "apiVersion": "2018-11-01",
                "name": "[variables('virtualNetworkName')]",
                "location": "[parameters('location')]",
                "extendedLocation": {
                    "type": "EdgeZone",
                    "name": "[parameters('EdgeZone')]"
                },
                "dependsOn": [
                    "[resourceId('Microsoft.Network/networkSecurityGroups', variables('networkSecurityGroupName'))]"
                ],
                "properties": {
                    "addressSpace": {
                        "addressPrefixes": [
                            "[variables('addressPrefix')]"
                        ]
                    },
                    "subnets": [
                        {
                            "name": "[variables('subnetName')]",
                            "properties": {
                                "addressPrefix": "[variables('subnetPrefix')]",
                                "networkSecurityGroup": {
                                    "id": "[resourceId('Microsoft.Network/networkSecurityGroups', variables('networkSecurityGroupName'))]"
                                 }
                            }
                        }
                    ]
                }
            },
            {
                "type": "Microsoft.Network/networkInterfaces",
                "apiVersion": "2018-11-01",
                "name": "[variables('nicName')]",
                "location": "[parameters('location')]",
                "extendedLocation": {
                    "type": "EdgeZone",
                    "name": "[parameters('EdgeZone')]"
                },
                "dependsOn": [
                    "[resourceId('Microsoft.Network/publicIPAddresses/', variables('publicIPAddressName'))]",
                    "[resourceId('Microsoft.Network/virtualNetworks/', variables('virtualNetworkName'))]"
                ],
                "properties": {
                    "ipConfigurations": [
                        {
                            "name": "ipconfig1",
                            "properties": {
                                "privateIPAllocationMethod": "Dynamic",
                                "publicIPAddress": {
                                    "id": "[resourceId('Microsoft.Network/publicIPAddresses',variables('publicIPAddressName'))]"
                                },
                                "subnet": {
                                    "id": "[variables('subnetRef')]"
                                }
                            }
                        }
                    ]
                }
            },
            {
                "type": "Microsoft.Compute/virtualMachines",
                "apiVersion": "2020-06-01",
                "name": "[parameters('vmName')]",
                "location": "[parameters('location')]",
                "extendedLocation": {
                    "type": "EdgeZone",
                    "name": "[parameters('EdgeZone')]"
                },
                "dependsOn": [
                    "[resourceId('Microsoft.Network/networkInterfaces/', variables('nicName'))]"
                ],
                "properties": {
                    "hardwareProfile": {
                        "vmSize": "[parameters('vmSize')]"
                    },
                    "osProfile": {
                        "computerName": "[parameters('vmName')]",
                        "adminUsername": "[parameters('adminUsername')]",
                        "adminPassword": "[parameters('adminPassword')]"
                    },
                    "storageProfile": {
                        "imageReference": {
                            "publisher": "[parameters('publisher')]",
                            "offer": "[parameters('offer')]",
                            "sku": "[parameters('sku')]",
                            "version": "[parameters('osVersion')]"
                        },
                        "osDisk": {
                            "createOption": "FromImage",
                            "managedDisk": {
                                "storageAccountType": "StandardSSD_LRS"
                            }
                        }
                    },
                    "networkProfile": {
                        "networkInterfaces": [
                            {
                                "id": "[resourceId('Microsoft.Network/networkInterfaces',variables('nicName'))]"
                            }
                        ]
                    }
                }
            }
        ],
        "outputs": {
            "hostname": {
                "type": "String",
                "value": "[reference(variables('publicIPAddressName')).dnsSettings.fqdn]"
            },
            "sshCommand": {
                "type": "string",
                "value": "[format('ssh {0}@{1}', parameters('adminUsername'), reference(resourceId('Microsoft.Network/publicIPAddresses', variables('publicIPAddressName'))).dnsSettings.fqdn)]"
            }
        }
    }
    

Развертывание шаблона ARM с помощью Azure CLI

  1. Сохраните содержимое примера шаблона ARM из предыдущего раздела в файле с именем azurepublicmecDeploy.json.

  2. Войдите в Azure с помощью az login и задайте подписку Azure с помощью команды az account set .

    az login                                
    az account set --subscription <subscription name>
    
  3. Создайте группу ресурсов Azure с помощью команды az group create. Группа ресурсов — это логический контейнер, в котором происходит развертывание ресурсов Azure и управление ими. В следующем примере создается группа ресурсов myResourceGroup.

    az group create --name myResourceGroup --location <location>
    

    Примечание.

    Каждый общедоступный сайт MEC Azure связан с регионом Azure. В зависимости от общедоступного расположения MEC Azure, в котором необходимо развернуть ресурс, выберите соответствующее значение региона для --location параметра. Дополнительные сведения см. в разделе "Основные понятия" для общедоступного MEC Azure.

  4. Разверните шаблон ARM в группе ресурсов с помощью команды az deployment group create .

    az deployment group create --resource-group myResourceGroup --template-file azurepublicmecDeploy.json
    
    Please provide string value for 'adminUsername' (? for help): <username>
    Please provide securestring value for 'adminPassword' (? for help): <password>
    Please provide string value for 'dnsLabelPrefix' (? for help): <uniqueDnsLabel>
    Please provide string value for 'EdgeZone' (? for help): <edge zone ID>
    
  5. Подождите несколько минут, пока развертывание будет запущено.

    После завершения выполнения команды вы увидите новые ресурсы в группе ресурсов myResourceGroup. Ниже приведен пример выходных данных.

    { 
    "id": "/subscriptions/xxxxxxx/resourceGroups/myResourceGroup/providers/Microsoft.Resources/deployments/edgeZonesDeploy",
      "location": null,
      "name": "edgeZonesDeploy",
      "properties": {
        "correlationId": "<xxxxxxxx>",
        "debugSetting": null,
        "dependencies": [
          {
            "dependsOn": [
              {
                "id": "/subscriptions/xxxxx/resourceGroups/myResourceGroup /providers/Microsoft.Network/networkSecurityGroups/default-NSG",
                "resourceGroup": " myResourceGroup ",
                "resourceName": "default-NSG",
                "resourceType": "Microsoft.Network/networkSecurityGroups"
              }
            ],
            "id": "/subscriptions/xxxxxx/resourceGroups/ myResourceGroup /providers/Microsoft.Network/virtualNetworks/MyEdgeTestVnet",
            "resourceGroup": " myResourceGroup ",
            "resourceName": " MyEdgeTestVnet ",
            "resourceType": "Microsoft.Network/virtualNetworks"
          },
     "outputs": {
          "hostname": {
            "type": "String",
            "value": "xxxxx.cloudapp.azure.com"
          },
          "sshCommand": {
            "type": "String",
            "value": "ssh <adminUsername>@<publicIPFQDN>"
          }
        },
    ...
    }
    

Доступ к виртуальной машине

Чтобы использовать SSH для подключения к виртуальной машине в общедоступном MEC Azure, лучше всего развернуть поле перехода в родительском регионе Azure.

  1. Следуйте инструкциям в статье "Создание виртуальной машины в регионе".

  2. Используйте SSH для подключения к виртуальной машине прыжка, развернутой в регионе.

    ssh <username>@<regionVM_publicIP>
    
  3. В поле перехода используйте SSH для подключения к виртуальной машине, созданной в общедоступном MEC Azure.

    ssh <username>@<edgezoneVM_publicIP>
    

Очистка ресурсов

В этом кратком руководстве вы развернули шаблон ARM в общедоступном MEC Azure с помощью Azure CLI. Если вы не ожидаете, что эти ресурсы потребуются в будущем, используйте команду az group delete , чтобы удалить группу ресурсов, масштабируемый набор и все связанные ресурсы. --yes При использовании параметра ресурсы удаляются без запроса подтверждения.

az group delete \--name myResourceGroup \--yes

Следующие шаги

Чтобы развернуть виртуальную машину в общедоступном MEC Azure с помощью Azure CLI, перейдите к следующей статье: