このクイックスタートでは、Azure Resource Manager テンプレート (ARM テンプレート) を使用して内部の Azure ロード バランサーを作成する方法を説明します。 内部ロード バランサーは、ロード バランサーのバックエンド プールにある仮想ネットワーク内の仮想マシンにトラフィックを分散します。 このテンプレートは、内部ロード バランサーと共に、仮想ネットワーク、ネットワーク インターフェイス、NAT Gateway、Azure Bastion インスタンスを作成します。
ARM テンプレートを使用すると、他のデプロイ方法より手順が減ります。
Azure Resource Manager テンプレートは JavaScript Object Notation (JSON) ファイルであり、プロジェクトのインフラストラクチャと構成が定義されています。 このテンプレートでは、宣言型の構文が使用されています。 デプロイしようとしているものを、デプロイを作成する一連のプログラミング コマンドを記述しなくても記述できます。
環境が前提条件を満たしていて、ARM テンプレートの使用に慣れている場合は、 [Azure へのデプロイ] ボタンを選択します。 テンプレートが Azure portal で開きます。
前提条件
Azure サブスクリプションをお持ちでない場合は、開始する前に 無料アカウント を作成してください。
テンプレートを確認する
このクイックスタートで使用されるテンプレートは Azure クイックスタート テンプレートからのものです。
@description('Admin username')
param adminUsername string
@description('Admin password')
@secure()
param adminPassword string
@description('Prefix to use for VM names')
param vmNamePrefix string = 'BackendVM'
@description('Location for all resources.')
param ___location string = resourceGroup().___location
@description('Size of VM')
param vmSize string = 'Standard_D2s_v3'
@description('Virtual network address prefix')
param vNetAddressPrefix string = '10.0.0.0/16'
@description('Backend subnet address prefix')
param vNetSubnetAddressPrefix string = '10.0.0.0/24'
@description('Bastion subnet address prefix')
param vNetBastionSubnetAddressPrefix string = '10.0.2.0/24'
@description('Frontend IP address of load balancer')
param lbFrontendIPAddress string = '10.0.0.6'
var natGatewayName = 'lb-nat-gateway'
var natGatewayPublicIPAddressName = 'lb-nat-gateway-ip'
var vNetName = 'lb-vnet'
var vNetSubnetName = 'backend-subnet'
var storageAccountType = 'Standard_LRS'
var storageAccountName = uniqueString(resourceGroup().id)
var loadBalancerName = 'internal-lb'
var networkInterfaceName = 'lb-nic'
var numberOfInstances = 2
var lbSkuName = 'Standard'
var bastionName = 'lb-bastion'
var bastionSubnetName = 'AzureBastionSubnet'
var bastionPublicIPAddressName = 'lb-bastion-ip'
resource natGateway 'Microsoft.Network/natGateways@2023-09-01' = {
name: natGatewayName
___location: ___location
sku: {
name: 'Standard'
}
properties: {
idleTimeoutInMinutes: 4
publicIpAddresses: [
{
id: natGatewayPublicIPAddress.id
}
]
}
}
resource natGatewayPublicIPAddress 'Microsoft.Network/publicIPAddresses@2023-09-01' = {
name: natGatewayPublicIPAddressName
___location: ___location
sku: {
name: 'Standard'
}
properties: {
publicIPAddressVersion: 'IPv4'
publicIPAllocationMethod: 'Static'
idleTimeoutInMinutes: 4
}
}
resource vNet 'Microsoft.Network/virtualNetworks@2023-09-01' = {
name: vNetName
___location: ___location
properties: {
addressSpace: {
addressPrefixes: [
vNetAddressPrefix
]
}
}
}
resource vNetName_bastionSubnet 'Microsoft.Network/virtualNetworks/subnets@2023-09-01' = {
parent: vNet
name: bastionSubnetName
properties: {
addressPrefix: vNetBastionSubnetAddressPrefix
}
}
resource vNetName_vNetSubnetName 'Microsoft.Network/virtualNetworks/subnets@2023-09-01' = {
parent: vNet
name: vNetSubnetName
properties: {
addressPrefix: vNetSubnetAddressPrefix
natGateway: {
id: natGateway.id
}
}
}
resource bastion 'Microsoft.Network/bastionHosts@2023-09-01' = {
name: bastionName
___location: ___location
properties: {
ipConfigurations: [
{
name: 'IpConf'
properties: {
privateIPAllocationMethod: 'Dynamic'
publicIPAddress: {
id: bastionPublicIPAddress.id
}
subnet: {
id: vNetName_bastionSubnet.id
}
}
}
]
}
}
resource bastionPublicIPAddress 'Microsoft.Network/publicIPAddresses@2023-09-01' = {
name: bastionPublicIPAddressName
___location: ___location
sku: {
name: lbSkuName
}
properties: {
publicIPAddressVersion: 'IPv4'
publicIPAllocationMethod: 'Static'
}
}
resource networkInterface 'Microsoft.Network/networkInterfaces@2023-09-01' = [for i in range(0, numberOfInstances): {
name: '${networkInterfaceName}${i}'
___location: ___location
properties: {
ipConfigurations: [
{
name: 'ipconfig1'
properties: {
privateIPAllocationMethod: 'Dynamic'
subnet: {
id: vNetName_vNetSubnetName.id
}
loadBalancerBackendAddressPools: [
{
id: resourceId('Microsoft.Network/loadBalancers/backendAddressPools', loadBalancerName, 'BackendPool1')
}
]
}
}
]
}
dependsOn: [
vNet
loadBalancer
]
}]
resource loadBalancer 'Microsoft.Network/loadBalancers@2023-09-01' = {
name: loadBalancerName
___location: ___location
sku: {
name: 'Standard'
}
properties: {
frontendIPConfigurations: [
{
properties: {
subnet: {
id: vNetName_vNetSubnetName.id
}
privateIPAddress: lbFrontendIPAddress
privateIPAllocationMethod: 'Static'
}
name: 'LoadBalancerFrontend'
}
]
backendAddressPools: [
{
name: 'BackendPool1'
}
]
loadBalancingRules: [
{
properties: {
frontendIPConfiguration: {
id: resourceId('Microsoft.Network/loadBalancers/frontendIpConfigurations', loadBalancerName, 'LoadBalancerFrontend')
}
backendAddressPool: {
id: resourceId('Microsoft.Network/loadBalancers/backendAddressPools', loadBalancerName, 'BackendPool1')
}
probe: {
id: resourceId('Microsoft.Network/loadBalancers/probes', loadBalancerName, 'lbprobe')
}
protocol: 'Tcp'
frontendPort: 80
backendPort: 80
idleTimeoutInMinutes: 15
}
name: 'lbrule'
}
]
probes: [
{
properties: {
protocol: 'Tcp'
port: 80
intervalInSeconds: 15
numberOfProbes: 2
}
name: 'lbprobe'
}
]
}
}
resource storageAccount 'Microsoft.Storage/storageAccounts@2023-01-01' = {
name: storageAccountName
___location: ___location
sku: {
name: storageAccountType
}
kind: 'StorageV2'
}
resource vm 'Microsoft.Compute/virtualMachines@2023-09-01' = [for i in range(0, numberOfInstances): {
name: '${vmNamePrefix}${i}'
___location: ___location
properties: {
hardwareProfile: {
vmSize: vmSize
}
osProfile: {
computerName: '${vmNamePrefix}${i}'
adminUsername: adminUsername
adminPassword: adminPassword
}
storageProfile: {
imageReference: {
publisher: 'MicrosoftWindowsServer'
offer: 'WindowsServer'
sku: '2019-Datacenter'
version: 'latest'
}
osDisk: {
createOption: 'FromImage'
}
}
networkProfile: {
networkInterfaces: [
{
id: networkInterface[i].id
}
]
}
diagnosticsProfile: {
bootDiagnostics: {
enabled: true
storageUri: storageAccount.properties.primaryEndpoints.blob
}
}
}
}]
output ___location string = ___location
output name string = loadBalancer.name
output resourceGroupName string = resourceGroup().name
output resourceId string = loadBalancer.id
テンプレートでは、複数の Azure リソースが定義されています。
- Microsoft.Network/virtualNetworks: ロード バランサーと仮想マシン用の仮想ネットワーク。
- Microsoft.Network/networkInterfaces: 仮想マシンのネットワーク インターフェイス。
- Microsoft.Network/loadBalancers: 内部ロード バランサー。
- Microsoft.Network/natGateways
- Microsoft.Network/publicIPAddresses: NAT Gateway と Azure Bastion のパブリック IP アドレス。
- Microsoft.Compute/virtualMachines: バックエンド プールの仮想マシン。
- Microsoft.Network/bastionHosts: Azure Bastion インスタンス。
- Microsoft.Network/virtualNetworks/subnets: 仮想ネットワークのサブネット。
- Microsoft.Storage/storageAccounts: 仮想マシンのストレージ アカウント。
Azure Load Balancer に関連するテンプレートをさらに探すには、「Azure クイックスタート テンプレート」を参照してください。
テンプレートのデプロイ
この手順では、Azure PowerShell で [New-AzResourceGroupDeployment](/powershell/module/az.resources/new-azresourcegroupdeployment)
コマンドを使用してテンプレートをデプロイします。
次のコード ブロックの [使ってみる] を選択して Azure Cloud Shell を開き、指示に従って Azure にサインインします。
Azure CLI または Azure PowerShell のどちらかを使用して Bicep ファイルをデプロイします。
echo "Enter a project name with 12 or less letters or numbers that is used to generate Azure resource names" read projectName echo "Enter the ___location (i.e. centralus)" read ___location resourceGroupName="${projectName}rg" templateUri="https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/quickstarts/microsoft.network/internal-loadbalancer-create/azuredeploy.json" az group create --name $resourceGroupName --___location $___location az deployment group create --resource-group $resourceGroupName --template-uri $templateUri --name $projectName --parameters ___location=$___location read -p "Press [ENTER] to continue."
次の値を入力するように求められます:
- projectName: リソース名の生成に使用されます。
- adminUsername: 仮想マシンの管理者ユーザー名です。
- adminPassword: 仮想マシンの管理者のパスワードです。
テンプレートのデプロイには約 10 分かかります。
Azure PowerShell または Azure CLI を使って、テンプレートをデプロイします。 Azure portal と REST API を使用することもできます。 他のデプロイ方法については、「テンプレートのデプロイ」を参照してください。
デプロイされているリソースを確認する
Azure CLI または Azure PowerShell で次のコマンドを使用して、リソース グループ内のデプロイ済みリソースを一覧表示します。
az resource list --resource-group $resourceGroupName
リソースをクリーンアップする
不要になったら、Azure CLI または Azure PowerShell で次のコマンドを使用して、リソース グループとそのリソースを削除します。
Remove-AzResourceGroup -Name "${projectName}rg"
次のステップ
テンプレートの作成手順について説明したチュートリアルについては、次のページを参照してください。
初めての ARM テンプレートを作成してデプロイする方法のチュートリアル