Azure Resource Manager 템플릿을 사용하여 Linux 가상 머신을 만드는 방법How to create a Linux virtual machine with Azure Resource Manager templates

Azure Resource Manager 템플릿 및 Azure Cloud shell에서 Azure CLI를 사용 하 여 Linux 가상 컴퓨터 (VM)를 만드는 방법에 알아봅니다.Learn how to create a Linux virtual machine (VM) by using an Azure Resource Manager template and the Azure CLI from the Azure Cloud shell. Windows 가상 머신을 만들려면 참조 Resource Manager 템플릿에서 Windows 가상 머신 만들기합니다.To create a Windows virtual machine, see Create a Windows virtual machine from a Resource Manager template.

템플릿 개요Templates overview

Azure Resource Manager 템플릿은 Azure 솔루션의 인프라와 구성을 정의하는 JSON 파일입니다.Azure Resource Manager templates are JSON files that define the infrastructure and configuration of your Azure solution. 템플릿을 사용하여 수명 주기 내내 솔루션을 반복적으로 배포하고 안심하고 일관된 상태로 리소스를 배포할 수 있습니다.By using a template, you can repeatedly deploy your solution throughout its lifecycle and have confidence your resources are deployed in a consistent state. 템플릿 및 생성 하는 방법의 형식에 대 한 자세한 내용은 참조 빠른 시작: Azure Portal을 사용하여 Azure Resource Manager 템플릿 만들기 및 배포를 참조하세요.To learn more about the format of the template and how you construct it, see Quickstart: Create and deploy Azure Resource Manager templates by using the Azure portal. 리소스 유형의 JSON 구문을 보려면 Azure Resource Manager 템플릿에서 리소스 정의를 참조하세요.To view the JSON syntax for resources types, see Define resources in Azure Resource Manager templates.

가상 머신 만들기Create a virtual machine

일반적으로 Azure 가상 머신을 만들 두 단계가 포함 됩니다.Creating an Azure virtual machine usually includes two steps:

  1. 리소스 그룹을 만듭니다.Create a resource group. Azure 리소스 그룹은 Azure 리소스가 배포 및 관리되는 논리적 컨테이너입니다.An Azure resource group is a logical container into which Azure resources are deployed and managed. 가상 머신보다 먼저 리소스 그룹을 만들어야 합니다.A resource group must be created before a virtual machine.
  2. 가상 머신을 만듭니다.Create a virtual machine.

다음 예제에서 VM을 만듭니다는 Azure 빠른 시작 템플릿합니다.The following example creates a VM from an Azure Quickstart template. 이 배포에 대 한 SSH 인증만 허용 됩니다.Only SSH authentication is allowed for this deployment. 메시지가 표시되면 ~/.ssh/id_rsa.pub의 내용과 같은 고유한 SSH 공용 키의 값을 제공합니다.When prompted, provide the value of your own SSH public key, such as the contents of ~/.ssh/id_rsa.pub. SSH 키 쌍을 만들어야 하는 경우 Azure에서 Linux VM용 SSH 키 쌍을 만들고 사용하는 방법을 참조하세요.If you need to create an SSH key pair, see How to create and use an SSH key pair for Linux VMs in Azure. 다음은 템플릿의 복사본입니다.Here is a copy of the template:

{
  "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "projectName": {
      "type": "string",
      "metadata": {
        "description": "Specifies a name for generating resource names."
      }
    },
    "location": {
      "type": "string",
      "defaultValue": "[resourceGroup().location]",
      "metadata": {
        "description": "Specifies the location for all resources."
      }
    },
    "adminUsername": {
      "type": "string",
      "metadata": {
        "description": "Specifies a username for the Virtual Machine."
      }
    },
    "adminPublicKey": {
      "type": "string",
      "metadata": {
        "description": "Specifies the SSH rsa public key file as a string. Use \"ssh-keygen -t rsa -b 2048\" to generate your SSH key pairs."
      }
    }
  },
  "variables": {
    "vNetName": "[concat(parameters('projectName'), '-vnet')]",
    "vNetAddressPrefixes": "10.0.0.0/16",
    "vNetSubnetName": "default",
    "vNetSubnetAddressPrefix": "10.0.0.0/24",
    "vmName": "[concat(parameters('projectName'), '-vm')]",
    "publicIPAddressName": "[concat(parameters('projectName'), '-ip')]",
    "networkInterfaceName": "[concat(parameters('projectName'), '-nic')]",
    "networkSecurityGroupName": "[concat(parameters('projectName'), '-nsg')]"
  },
  "resources": [
    {
      "type": "Microsoft.Network/networkSecurityGroups",
      "apiVersion": "2018-11-01",
      "name": "[variables('networkSecurityGroupName')]",
      "location": "[parameters('location')]",
      "properties": {
        "securityRules": [
          {
            "name": "ssh_rule",
            "properties": {
              "description": "Locks inbound down to ssh default port 22.",
              "protocol": "Tcp",
              "sourcePortRange": "*",
              "destinationPortRange": "22",
              "sourceAddressPrefix": "*",
              "destinationAddressPrefix": "*",
              "access": "Allow",
              "priority": 123,
              "direction": "Inbound"
            }
          }
        ]
      }
    },
    {
      "type": "Microsoft.Network/publicIPAddresses",
      "apiVersion": "2018-11-01",
      "name": "[variables('publicIPAddressName')]",
      "location": "[parameters('location')]",
      "properties": {
        "publicIPAllocationMethod": "Dynamic"
      },
      "sku": {
        "name": "Basic"
      }
    },
    {
      "type": "Microsoft.Network/virtualNetworks",
      "apiVersion": "2018-11-01",
      "name": "[variables('vNetName')]",
      "location": "[parameters('location')]",
      "properties": {
        "addressSpace": {
          "addressPrefixes": [
            "[variables('vNetAddressPrefixes')]"
          ]
        },
        "subnets": [
          {
            "name": "[variables('vNetSubnetName')]",
            "properties": {
              "addressPrefix": "[variables('vNetSubnetAddressPrefix')]"
            }
          }
        ]
      }
    },
    {
      "type": "Microsoft.Network/networkInterfaces",
      "apiVersion": "2018-11-01",
      "name": "[variables('networkInterfaceName')]",
      "location": "[parameters('location')]",
      "dependsOn": [
        "[resourceId('Microsoft.Network/publicIPAddresses', variables('publicIPAddressName'))]",
        "[resourceId('Microsoft.Network/virtualNetworks', variables('vNetName'))]",
        "[resourceId('Microsoft.Network/networkSecurityGroups', variables('networkSecurityGroupName'))]"
      ],
      "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('vNetSubnetName'))]"
              }
            }
          }
        ]
      }
    },
    {
      "type": "Microsoft.Compute/virtualMachines",
      "apiVersion": "2018-10-01",
      "name": "[variables('vmName')]",
      "location": "[parameters('location')]",
      "dependsOn": [
        "[resourceId('Microsoft.Network/networkInterfaces', variables('networkInterfaceName'))]"
      ],
      "properties": {
        "hardwareProfile": {
          "vmSize": "Standard_D2s_v3"
        },
        "osProfile": {
          "computerName": "[variables('vmName')]",
          "adminUsername": "[parameters('adminUsername')]",
          "linuxConfiguration": {
            "disablePasswordAuthentication": true,
            "ssh": {
              "publicKeys": [
                {
                  "path": "[concat('/home/', parameters('adminUsername'), '/.ssh/authorized_keys')]",
                  "keyData": "[parameters('adminPublicKey')]"
                }
              ]
            }
          }
        },
        "storageProfile": {
          "imageReference": {
            "publisher": "Canonical",
            "offer": "UbuntuServer",
            "sku": "18.04-LTS",
            "version": "latest"
          },
          "osDisk": {
            "createOption": "fromImage"
          }
        },
        "networkProfile": {
          "networkInterfaces": [
            {
              "id": "[resourceId('Microsoft.Network/networkInterfaces', variables('networkInterfaceName'))]"
            }
          ]
        }
      }
    }
  ],
  "outputs": {
    "adminUsername": {
      "type": "string",
      "value": "[parameters('adminUsername')]"
    }
  }
}

CLI 스크립트를 실행 하려면 사용해 를 Azure Cloud shell을 엽니다.To run the CLI script, Select Try it to open the Azure Cloud shell. 스크립트를 붙여 넣으려면 셸을 마우스 오른쪽 단추로 클릭 붙여:To paste the script, right-click the shell, and then select Paste:

echo "Enter the Resource Group name:" &&
read resourceGroupName &&
echo "Enter the location (i.e. centralus):" &&
read location &&
echo "Enter the project name (used for generating resource names):" &&
read projectName &&
echo "Enter the administrator username:" &&
read username &&
echo "Enter the SSH public key:" &&
read key &&
az group create --name $resourceGroupName --location "$location" &&
az group deployment create --resource-group $resourceGroupName --template-uri https://raw.githubusercontent.com/azure/azure-quickstart-templates/master/101-vm-sshkey/azuredeploy.json --parameters projectName=$projectName adminUsername=$username adminPublicKey="$key" &&
az vm show --resource-group $resourceGroupName --name "$projectName-vm" --show-details --query publicIps --output tsv

마지막으로 Azure CLI 명령은 새로 만든된 VM의 공용 IP 주소를 보여 줍니다.The last Azure CLI command shows the public IP address of the newly created VM. 가상 컴퓨터에 연결할 공용 IP 주소가 필요 합니다.You need the public IP address to connect to the virtual machine. 이 문서의 다음 섹션을 참조 하세요.See the next section of this article.

이전 예제에서는 GitHub에 저장된 템플릿을 지정했습니다.In the previous example, you specified a template stored in GitHub. 또한 템플릿을 다운로드하거나 만들고 --template-file 매개 변수로 로컬 경로를 지정할 수도 있습니다.You can also download or create a template and specify the local path with the --template-file parameter.

다음은 몇 가지 추가 리소스입니다.Here are some additional resources:

가상 머신에 연결Connect to virtual machine

그런 다음 정상적으로 VM에 SSH할 수 있습니다.You can then SSH to your VM as normal. 이전 명령에서 사용자 고유의 공용 IP 주소를 제공합니다.Provide you own public IP address from the preceding command:

ssh <adminUsername>@<ipAddress>

다음 단계Next steps

이 예제에서는 기본 Linux VM을 만들었습니다.In this example, you created a basic Linux VM. 응용 프로그램 프레임 워크를 포함 하거나 더 복잡 한 환경을 만드는 더 많은 Resource Manager 템플릿은 찾아보기 합니다 Azure 빠른 시작 템플릿합니다.For more Resource Manager templates that include application frameworks or create more complex environments, browse the Azure Quickstart templates.

템플릿 만들기에 대해 자세히 알아보려면 배포한 리소스 종류의 JSON 구문 및 속성을 확인하세요.To learn more about creating templates, view the JSON syntax and properties for the resources types you deployed: