Azure Resource Manager テンプレートを使用して Linux 仮想マシンを作成する方法How to create a Linux virtual machine with Azure Resource Manager templates

Azure Resource Manager テンプレートと、Azure Cloud シェルの 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 構文を確認するには、「Define resources in Azure Resource Manager templates (Azure Resource Manager テンプレートのリソースの定義)」を参照してください。To view the JSON syntax for resources types, see Define resources in Azure Resource Manager templates.

仮想マシンの作成Create a virtual machine

通常、Azure 仮想マシンの作成には、次の 2 つの手順が含まれます。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.

次の例では、Azure クイック スタート テンプレートから VM を作成します。The following example creates a VM from an Azure Quickstart template. このデプロイでは、SSH 認証のみが許可されます。Only SSH authentication is allowed for this deployment. 値を求められたら、自らの SSH 公開キーの値 ( ~/.ssh/id_rsa.pub の内容など) を指定します。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: