Azure CLI からの vMX のデプロイ
このセクションのデプロイ スクリプトとサンプル 構成ファイルを使用すると、Microsoft Azure 仮想ネットワークでの vMX のデプロイが簡単になります。構成ファイルには、ログインユーザー名やネットワークインターフェイス(NIC)など、vMX VMの展開をカスタマイズできるパラメーターが含まれています。
Azure Portal を使用して vMX を手動でデプロイするのではなく、このセクションで説明する Azure CLI メソッドを使用して vMX VM をデプロイすることをお勧めします。
次のステップ
Azure CLI を使用して vMX をデプロイする前に
Azure CLI から vMX のデプロイを開始する前に、以下を行ってください。
Microsoft Azure のアカウントとサブスクリプションを取得します。「 Microsoft Azure」を参照してください。
Microsoft アカウントのユーザー名とパスワードを使用して、 Microsoft Azure ポータルにログインします。このセクションの後半で Azure Portal を使用して、Azure CLI メソッドを使用して vMX のデプロイを確認します。
最新バージョンの Azure コマンド ライン インターフェイス (Azure CLI) をインストールします。
vMX ライセンスを購入するか、評価ライセンスをリクエストします。ライセンスは、 ジュニパーネットワークスのライセンス管理システム(LMS)から取得できます。
vMXの評価ライセンスの詳細については、 https://www.juniper.net/us/en/dm/free-vmx-trial/ を参照してください。
手記:Microsoft Azure では、従量課金制 (PAYG) または個人所有ライセンス (BYOL) サービスとして、クラウド上のサーバーとサービスをホストできます。PAYGイメージにジュニパーネットワークスのライセンスは必要ありません。
まず、次の Azure CLI コマンドを実行して、デプロイする特定の BYOL または PAYG vMX イメージのエンド ユーザー ライセンス契約 (EULA) 条項に同意する必要があります。そうしないと、このセクションで後述するデプロイ スクリプトの VM 作成ステージで MarketplacePurchaseEligibilityFailed エラーが発生します。
次のCLIコマンドは、デプロイするPAYGまたはBYOLイメージタイプに対して一度だけ実行する必要があります。
az vm image terms accept --urn juniper-networks:vmx-services-gateway-byol:vmx-services-gateway-byol:18.3.2
Azure 用 vMX デプロイ スクリプトは、シェルと最新バージョンの Azure CLI コマンドで記述されます。2.x より前のバージョンの Azure CLI はサポートされていません。
Microsoft Azure への vMX のデプロイでは、デプロイ手順の一部として使用されるシェルスクリプトは Linux または Mac OS CLI からのみ実行できるため、Microsoft Windows からの Azure CLI の使用はサポートされていません。
Azure CLI からの vMX のデプロイ
Azure CLI から Microsoft Azure 仮想ネットワークに vMX をデプロイして構成するには、次の手順を使用します。
- Microsoft Azure CLI の使用
- vMX導入ツールの使用
- 展開のためのvMX設定パラメータの変更
- シェルスクリプトを使用したvMXの導入
- Microsoft AzureへのvMXの導入を検証
- vMXインスタンスへのログイン
- vMX の初期コンフィグを設定する
Microsoft Azure CLI の使用
提供されている Azure CLI スクリプトを実行するには、サーバーに Azure CLI をインストールします。
選択した方法について、次のいずれかのタスクを実行します。
Azure CLI のインストール
Azure CLI をインストールしてログインするには:
vMX導入ツールの使用
ジュニパーネットワークスは、一連のスクリプトと設定ファイルを提供しています。これらのツールは、Azure CLI を使用するときに vMX の Azure へのデプロイを簡素化することを目的としています。
azure.config 構成ファイル
azure_vmx_deploy.sh シェルスクリプト
azure_vmx_deploy.sh は、 azure.config 構成ファイルのパラメーターを使用して、vMX 仮想マシン (VM) と仮想ネットワークのデプロイをそれぞれ自動化します。 azure_vmx_deploy.sh シェル スクリプトは、ネットワーク インターフェイス、仮想ネットワーク、仮想サブネット、および VM を作成します。
azure_vmx_deploy.sh ファイルと azure.config ファイルをコピーするには、次のようにします。
ファイルを保存したら、構成に合わせて azure.config ファイルを変更し、 azure_vmx_deploy.sh スクリプトを実行できます。
azure.config ファイル
# # Sample VMX deployment settings for Microsoft Azure # # Account config account="12345bf4b32bf-1234-5678-aaaa-4b348978e06a" grpname="vmxcloudv2" location="westus" # VM config vmname="vmx183-x3" admin="azuser" vmximagename="juniper-networks:vmx-services-gateway-byol:vmx-services-gateway-byol:18.3.2" # Network Config number_of_nics=4 addressprefix="30.0.0.0/16" PrivateIpAddress="30.0.0.10" PrivateIpAddress2="30.0.1.10" subnet_prefixes=( 30.0.0.0/24 30.0.1.0/24 30.0.2.0/24 30.0.3.0/24 )
azure_vmx_deploy.shファイル
#!/bin/sh
# Copyright (c) 2020, Juniper Networks, Inc.
# All rights reserved.
#
#
# Sample deployment script for vMX on Microsoft Azure
#
source ./azure.config
stor="stor"
cont="cont"
vm="_image"
vnet=$grpname-vnet1
base_subnet=$vnet-vsubnet
base_nic=$vmname-wan-nic
mdisk="_Managed_Disk"
storageacc=$grpname$stor
STORAGE_CONT=$grpname$cont
az account set -s $account
echo "Creating resource group"
az group create -n $grpname -l $location -o table
echo "Created group $grpname"
echo "Creating storage account"
# Create storage account
az storage account create --sku Standard_LRS --location $location --kind Storage --resource-group $grpname --name $storageacc --output table
echo "Created storage account $storageacc"
# Get connection string for the storage account
KEY1=`az storage account keys list --account-name $storageacc --resource-group $grpname | grep -m 1 \"value\": | awk '{print $2}'`
# Create storage container
az storage container create --account-name $storageacc --name $STORAGE_CONT --account-key $KEY1 --output table
echo "Created container $STORAGE_CONT"
count=$(( $number_of_nics - 1 ))
while [ $count -ge 0 ]
do
subnet_names[$count]=$base_subnet"$count"
nic_names[$count]=$base_nic"$count"
count=$(( $count - 1 ))
done
skip=1
az network vnet show -g $grpname --name $vnet > /dev/null 2>&1
if [ $? -eq 0 ]; then
skip=2
echo "Vnet \"$vnet\" already exists, skipping vnet and subnet creation"
fi
if [ $skip -eq 1 ]; then
# Create VNET
echo "Creating Azure virtual network $vnet...."
az network vnet create \
--resource-group $grpname \
--name $vnet \
--address-prefix $addressprefix \
--location $location \
--output table
echo "Done creating Azure virtual network $vnet"
# Create as many subnets as there are NICs
i=0
for prefix in "${subnet_prefixes[@]}"
do
echo "Creating virtual subnet ${subnet_names[$i]} $prefix.."
az network vnet subnet create \
--address-prefix $prefix \
--name ${subnet_names[$i]} \
--resource-group $grpname \
--vnet-name $vnet \
--output table
echo "Done creating subnet ${subnet_names[$i]} with prefix $prefix"
let i++
done
fi
#
# Creating routing tables for vMX WAN ports (add tables as needed for more than 2 wan ports)
#
echo "Creating routing tables..."
az network route-table create --name $grpname-rt-to-subnet2 --resource-group $grpname --location $location --output table
az network route-table create --name $grpname-rt-to-subnet3 --resource-group $grpname --location $location --output table
az network vnet subnet update --resource-group $grpname --vnet-name $vnet --name $vnet-vsubnet2 --route-table $grpname-rt-to-subnet3 --output table
az network vnet subnet update --resource-group $grpname --vnet-name $vnet --name $vnet-vsubnet3 --route-table $grpname-rt-to-subnet2 --output table
#
# Create all NICs
#
echo "Creating public IP addresses and NICs..."
i=0
for nic in "${nic_names[@]}"
do
if [ $i -eq 0 ]; then
# Create Public IP for first NIC:
ip=$vmname-vfp-public-ip
az network public-ip create \
--name $ip \
--allocation-method Static \
--resource-group $grpname \
--location $location \
--output table
# Create 1st NIC
nic=$vmname-vfp-nic
allnics="$allnics ""$nic"
az network nic create \
--resource-group $grpname \
--location $location \
--name $nic \
--vnet-name $vnet \
--subnet ${subnet_names[$i]} \
--public-ip-address $ip \
--private-ip-address $PrivateIpAddress \
--output table
echo "Created NIC $nic with public IP..."
elif [ $i -eq 1 ]; then
# Create Public IP for first NIC:
ip2=$vmname-vcp-public-ip
az network public-ip create \
--name $ip2 \
--allocation-method Static \
--resource-group $grpname \
--location $location \
--output table
# Create 2nd NIC
nic=$vmname-vcp-nic
allnics="$allnics ""$nic"
az network nic create \
--resource-group $grpname \
--location $location \
--name $nic \
--vnet-name $vnet \
--subnet ${subnet_names[$i]} \
--public-ip-address $ip2 \
--private-ip-address $PrivateIpAddress2 \
--output table
echo "Created NIC $nic with public IP..."
else
allnics="$allnics ""$nic"
az network nic create \
--resource-group $grpname \
--location $location \
--accelerated-networking true \
--name $nic \
--vnet-name $vnet \
--subnet ${subnet_names[$i]} \
--output table
echo "Created NIC $nic..."
fi
let i++
done
#
# Add routes to route tables
#
echo "Adding routes to routing tables"
ip=`az network nic show -g $grpname --name $base_nic"2"|grep privateIpAddress\"|awk '{print $2}'|sed -e s/\"//g -e s/\,//`
az network route-table route create -g $grpname --route-table-name $grpname-rt-to-subnet3 --next-hop-type VirtualAppliance --name ToSubnet3 --next-hop-ip-address $ip --address-prefix ${subnet_prefixes[3]} --output table
ip=`az network nic show -g $grpname --name $base_nic"3"|grep privateIpAddress\"|awk '{print $2}'|sed -e s/\"//g -e s/\,//`
az network route-table route create -g $grpname --route-table-name $grpname-rt-to-subnet2 --next-hop-type VirtualAppliance --name ToSubnet2 --next-hop-ip-address $ip --address-prefix ${subnet_prefixes[2]} --output table
#
# Create vMX VM
#
echo "Creating vMX VM..."
az vm create \
--name $vmname \
--size Standard_F8 \
--image $vmximagename \
--nics $allnics \
--resource-group $grpname \
--location $location \
--authentication-type ssh \
--admin-username $admin \
--generate-ssh-keys \
--storage-sku Standard_LRS \
--boot-diagnostics-storage ${grpname}stor \
--output table
echo "vMX deployment complete"
展開のためのvMX設定パラメータの変更
vMX を展開するには、次のタスクを実行して構成パラメータを変更する必要がある場合があります。
Azure 構成パラメーターの変更
azure.config ファイルで、次のパラメーターを設定します。
account=”account subscription id”- これは、Microsoft Azure アカウントのサブスクリプション ID です。grpname="group-name"- リソース グループ名。既存のリソース グループを入力します。リソース・グループ名には、英数字、ピリオド (.)、下線 (_)、ハイフン (-)、および括弧 () を含めることができますが、名前の末尾にピリオドを付けることはできません。location="region"- リソース グループの場所。VM のデプロイ元となる Microsoft Azure データ センターの場所を選択します。リソースの大部分が存在する場所を指定します。通常は、物理的な場所に最も近い場所を選択します。vmname="vm-name"—vMX VM 名。VM 名に非 ASCII 文字または特殊文字を含めることはできません。admin="admin-username"- SSH を使用して VM にログインしているユーザーの名前。ユーザー名に大文字や特殊文字を含めることはできず、ドル記号($)またはハイフン(-)で始めることはできません。vmximagename="image-name"—vMXイメージの名前。number_of_nics=number-of-interfaces—VFP(eth0)、VCP(fxp0)、および任意のWANポートを含むインターフェイスの数(WANポートはvMXではge-x/x/x として表示されます)。この数値は 3 から 8 の間でなければなりません。addressprefix="address-prefix"—アドレス空間。仮想ネットワークのアドレス範囲を CIDR 表記で入力します。デフォルトでは、アドレス範囲は 30.0.0.0/16 です。手記:アドレス空間が既存のネットワークと重複しないようにします
PrivateIpAddress="ip-address"—VFP(eth0)管理ポートのプライベートIPアドレス。これは、addressprefixパラメーターで定義されているように、仮想ネットワークのアドレス空間に含まれている必要があります。PrivateIpAddress2="ip-address"—VCP(fxp0)管理ポートのプライベートIPアドレス。これは、addressprefixパラメーターで定義されている仮想ネットワークのアドレス空間に含まれている必要があります。subnet_prefixes=(subnet-prefix0 subnet-prefix1 subnet-prefix2 subnet-prefix3 )—仮想ネットワークの下の各サブネットのサブネット アドレス範囲の配列。各ネットワーク サブネット アドレス範囲を CIDR 表記で入力します。これは、addressprefixパラメーターで定義されている仮想ネットワークのアドレス空間に含まれている必要があります。サブネット アドレス範囲を互いに重複させることはできません。サブネットは、VM を分離するための仮想ネットワーク内の IP アドレスの範囲です。 パブリック・サブネットはインターネット・ゲートウェイにアクセスできますが、プライベート・サブネットはアクセスできません。
インターフェイスの数と同じ数のサブネットをアレイに入力します。各NICには、このアレイで定義された対応するサブネットがあります。たとえば、
number_of_nicsが 4 の場合、subnet_prefixes配列には 4 つのエントリがあります。vMX VM には、2 つのパブリックサブネットと、個々のインスタンスグループごとに 1 つ以上のパブリックサブネットまたはプライベートサブネットが必要です。VFP(eth0)およびVCP(fxp0)の管理インターフェイスはパブリックサブネットを使用し、収益(データ)インターフェイスはパブリックサブネットまたはプライベートサブネットのいずれかを使用できます。他のvMXインターフェイスに接続されたプライベート・サブネットは、プライベート・サブネット上のアプリケーションとインターネット間のすべてのトラフィックがvMXインスタンスを通過する必要があることを保証します。
たとえば、作成される 4 つの NIC に対して 4 つのサブネットを持つ仮想ネットワークには、
subnet_prefixes=( 30.0.0.0/24 30.0.1.0/24 30.0.2.0/24 30.0.3.0/24)という設定があります。
たとえば、 azure.config ファイルは次のようになります。
grpname="vmxcloudv2" location="westus" # VM config vmname="vmxv2" admin="azuser" vmximagename="juniper-networks:vmx-services-gateway-byol:vmx-services-gateway-byol:18.3.2" number_of_nics=4 # Network Config addressprefix="30.0.0.0/16" PrivateIpAddress="30.0.0.1" PrivateIpAddress2=”30.0.1.10” subnet_prefixes=( 30.0.0.0/24 30.0.1.0/24 30.0.2.0/24 30.0.3.0/24 )
次のコマンドを使用して、vMX イメージの詳細を取得できます。
az vm image list --all --publisher juniper-networks
設定へのNICの追加
Standard_F8 CPUタイプは合計8ポートをサポートします。各vMXには、Azure上に2つの管理ポートが必要で、残りのWANポートは最大6つです。
vMX インスタンスには、仮想転送プレーン VMX FPC(VFP)用の仮想マシンと仮想コントロールプレーン(VCP)用の 2 つの個別の仮想マシン(VM)が含まれています
VFP には、vMX の <vm-name>-vfp-nic にマッピングされた専用管理ポート(eth0)があります。
VCP には、vMX の <vm-name>-vcp-nic にマッピングされた専用管理ポート(fxp0)があります。
vMX リソース グループ > vmname-vcp-nic >リソース グループで構成されたパブリック IP アドレス。vMX 名は、SSH を使用して VMX RE(VCP)FPC に接続するために使用する IP アドレスです。
ネットワークインターフェイス(NIC)の数を変更するには、次の手順に従います。
シェルスクリプトを使用したvMXの導入
azure_vmx_deploy.sh シェル スクリプトは、Azure クラウドの地理的な場所に基づくリソース グループに vMX 仮想マシン (VM) をデプロイします。
vMX を Azure 仮想ネットワークにデプロイするには、 azure_vmx_deploy.sh スクリプトを実行して、仮想ネットワーク サブネット、NIC、VM を作成します。 azure.config 構成ファイルで定義されているパラメーターは、vMX のデプロイに使用されます。
たとえば、 azure.config ファイルに次のパラメーターが含まれているとします。
grpname="vmxcloudv2" location="westus" # VM config vmname="vmxv2" admin="user" vmximagename="juniper-networks:vmx-services-gateway-byol:vmx-services-gateway-byol:18.3.2" number_of_nics=4 # Network Config addressprefix="30.0.0.0/16" PrivateIpAddress="30.0.0.10" subnet_prefixes=( 30.0.0.0/24 30.0.1.0/24 30.0.2.0/24 30.0.3.0/24 )
azure_vmx_deploy.sh スクリプトを実行すると、次の出力が生成されます。
$ ./azure_vmx_deploy.sh Creating resource group Location Name ---------- ----------- westus vmxcloudv2 Created group vmxcloudv2 Creating storage account CreationTime EnableHttpsTrafficOnly Kind Location Name PrimaryLocation ProvisioningState ResourceGroup StatusOfPrimary -------------------------------- ------------------------ ------- ---------- --------------- ----------------- ------------------- --------------- ----------------- 2020-03-11T00:12:55.943835+00:00 True Storage westus vmxcloudv2stor westus Succeeded vmxcloudv2 available Created storage account vmxcloudv2stor Created --------- False Created container vmxcloudv2cont Creating Azure virtual network vmxcloudv2-vnet1.... Done creating Azure virtual network vmxcloudv2-vnet1 Creating virtual subnet vmxcloudv2-vnet1-vsubnet0 30.0.0.0/24.. AddressPrefix Name PrivateEndpointNetworkPolicies PrivateLinkServiceNetworkPolicies ProvisioningState ResourceGroup --------------- -------------------------- -------------------------------- ----------------------------------- ------------------- --------------- 30.0.0.0/24 vmxcloudv2-vnet1-vsubnet0 Enabled Enabled Succeeded vmxcloudv2 Done creating subnet vmxcloudv2-vnet1-vsubnet0 with prefix 30.0.0.0/24 Creating virtual subnet vmxcloudv2-vnet1-vsubnet1 30.0.1.0/24.. AddressPrefix Name PrivateEndpointNetworkPolicies PrivateLinkServiceNetworkPolicies ProvisioningState ResourceGroup --------------- -------------------------- -------------------------------- ----------------------------------- ------------------- --------------- 30.0.1.0/24 vmxcloudv2-vnet1-vsubnet1 Enabled Enabled Succeeded vmxcloudv2 Done creating subnet vmxcloudv2-vnet1-vsubnet1 with prefix 30.0.1.0/24 Creating virtual subnet vmxcloudv2-vnet1-vsubnet2 30.0.2.0/24.. AddressPrefix Name PrivateEndpointNetworkPolicies PrivateLinkServiceNetworkPolicies ProvisioningState ResourceGroup --------------- -------------------------- -------------------------------- ----------------------------------- ------------------- --------------- 30.0.2.0/24 vmxcloudv2-vnet1-vsubnet2 Enabled Enabled Succeeded vmxcloudv2 Done creating subnet vmxcloudv2-vnet1-vsubnet2 with prefix 30.0.2.0/24 Creating virtual subnet vmxcloudv2-vnet1-vsubnet3 30.0.3.0/24.. AddressPrefix Name PrivateEndpointNetworkPolicies PrivateLinkServiceNetworkPolicies ProvisioningState ResourceGroup --------------- -------------------------- -------------------------------- ----------------------------------- ------------------- --------------- 30.0.3.0/24 vmxcloudv2-vnet1-vsubnet3 Enabled Enabled Succeeded vmxcloudv2 Done creating subnet vmxcloudv2-vnet1-vsubnet3 with prefix 30.0.3.0/24 Creating routing tables... DisableBgpRoutePropagation Location Name ProvisioningState ResourceGroup ---------------------------- ---------- ------------------------- ------------------- --------------- False westus vmxcloudv2-rt-to-subnet2 Succeeded vmxcloudv2 DisableBgpRoutePropagation Location Name ProvisioningState ResourceGroup ---------------------------- ---------- ------------------------- ------------------- --------------- False westus vmxcloudv2-rt-to-subnet3 Succeeded vmxcloudv2 AddressPrefix Name PrivateEndpointNetworkPolicies PrivateLinkServiceNetworkPolicies ProvisioningState ResourceGroup --------------- -------------------------- -------------------------------- ----------------------------------- ------------------- --------------- 30.0.2.0/24 vmxcloudv2-vnet1-vsubnet2 Enabled Enabled Succeeded vmxcloudv2 AddressPrefix Name PrivateEndpointNetworkPolicies PrivateLinkServiceNetworkPolicies ProvisioningState ResourceGroup --------------- -------------------------- -------------------------------- ----------------------------------- ------------------- --------------- 30.0.3.0/24 vmxcloudv2-vnet1-vsubnet3 Enabled Enabled Succeeded vmxcloudv2 Creating public IP addresses and NICs... Created NIC vmx183-x3-vfp-nic with public IP... Created NIC vmx183-x3-vcp-nic with public IP... Created NIC vmx183-x3-wan-nic2... Created NIC vmx183-x3-wan-nic3... Adding routes to routing tables AddressPrefix Name NextHopIpAddress NextHopType ProvisioningState ResourceGroup --------------- --------- ------------------ ---------------- ------------------- --------------- 30.0.3.0/24 ToSubnet3 30.0.2.4 VirtualAppliance Succeeded vmxcloudv2 AddressPrefix Name NextHopIpAddress NextHopType ProvisioningState ResourceGroup --------------- --------- ------------------ ---------------- ------------------- --------------- 30.0.2.0/24 ToSubnet2 30.0.3.4 VirtualAppliance Succeeded vmxcloudv2 Creating vMX VM... ResourceGroup PowerState PublicIpAddress Fqdns PrivateIpAddress MacAddress Location Zones --------------- ------------ ------------------------ ------- ------------------------------------- ----------------------------------------------------------------------- ---------- ------- vmxcloudv2 VM running 52.160.86.48,40.83.167.5 30.0.0.10,30.0.1.10,30.0.2.4,30.0.3.4 00-0D-3A-5C-0B-1D,00-0D-3A-5C-08-9C,00-0D-3A-5C-09-83,00-0D-3A-5C-0E-D8 westus vMX deployment complete
Microsoft AzureへのvMXの導入を検証
Microsoft AzureへのvMXインスタンスのデプロイを検証するには:
vMXインスタンスへのログイン
vMXの展開が完了すると、vMXインスタンスの電源が自動的にオンになり、起動します。この時点で、SSH クライアントを使用して vMX インスタンスにログインできます。
vMXの導入が完了し、SSH経由でログインできるようになるまで、15分以上かかる場合があります。
vMX VM にログインするには、次の手順を実行します。
vMX の初期コンフィグを設定する
vMX にログインした後、少なくとも以下の Junos OS の初期構成タスクを実行する必要があります。

