https://learn.microsoft.com/ja-jp/azure/application-gateway/quick-create-cli
Azure Application Gateway --> L7のロードバランサー
※ Application Gateway専用のサブネットが必要
-- 1. 前作業
az login --use-device-code
az account show
az version
az configure --list-defaults
az configure --defaults location=japaneast
az configure --list-defaults
az group create \
--name rg01 \
--location japaneast
az group list
-- 2. ネットワーク リソースを作成する
az network vnet create \
--name vnet01 \
--resource-group rg01 \
--location japaneast \
--address-prefix 10.1.0.0/16 \
--subnet-name subnet01 \
--subnet-prefix 10.1.0.0/24
az network vnet list
az network vnet subnet create \
--name subnet02 \
--resource-group rg01 \
--vnet-name vnet01 \
--address-prefix 10.1.1.0/24
az network vnet subnet list \
--resource-group rg01 \
--vnet-name vnet01
az network public-ip create \
--resource-group rg01 \
--name pip01 \
--allocation-method Dynamic \
--sku Basic
az network public-ip list
-- 3. バックエンド サーバーを作成する
vim cloud-init.txt
#cloud-config
package_upgrade: true
packages:
- nginx
- nodejs
- npm
write_files:
- owner: www-data:www-data
- path: /etc/nginx/sites-available/default
content: |
server {
listen 80;
location / {
proxy_pass http://localhost:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection keep-alive;
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}
- owner: azureuser:azureuser
- path: /home/azureuser/myapp/index.js
content: |
var express = require('express')
var app = express()
var os = require('os');
app.get('/', function (req, res) {
res.send('Hello World from host ' + os.hostname() + '!')
})
app.listen(3000, function () {
console.log('Hello world app listening on port 3000!')
})
runcmd:
- service nginx restart
- cd "/home/azureuser/myapp"
- npm init
- npm install express -y
- nodejs index.js
for i in `seq 1 2`; do
az network nic create \
--resource-group rg01 \
--name nic$i \
--vnet-name vnet01 \
--subnet subnet02
az vm create \
--resource-group rg01 \
--name vm$i \
--nics nic$i \
--image UbuntuLTS \
--size Standard_B1ls \
--storage-sku Standard_LRS \
--admin-username azureuser \
--generate-ssh-keys \
--custom-data cloud-init.txt
done
az network nic list \
--resource-group rg01
az vm list \
--resource-group rg01
-- 4. アプリケーション ゲートウェイの作成
address1=$(az network nic show --name nic1 --resource-group rg01 | grep "\"privateIpAddress\":" | grep -oE '[^ ]+$' | tr -d '",')
address2=$(az network nic show --name nic2 --resource-group rg01 | grep "\"privateIpAddress\":" | grep -oE '[^ ]+$' | tr -d '",')
echo $address1
echo $address2
az network application-gateway create \
--name ag01 \
--resource-group rg01 \
--capacity 1 \
--sku Standard_Small \
--public-ip-address pip01 \
--vnet-name vnet01 \
--subnet subnet01 \
--servers "$address1" "$address2"
※sku=Standard_Smallで作成するためには、パブリックIPがBasicかつDynamicの必要があった
az network application-gateway list \
--resource-group rg01
az network application-gateway http-listener list \
--gateway-name ag01 \
--resource-group rg01
az network application-gateway rule list \
--gateway-name ag01 \
--resource-group rg01
az network application-gateway http-settings list \
--gateway-name ag01 \
--resource-group rg01
az network application-gateway address-pool list \
--gateway-name ag01 \
--resource-group rg01
az network application-gateway frontend-ip list \
--gateway-name ag01 \
--resource-group rg01
az network application-gateway frontend-port list \
--gateway-name ag01 \
--resource-group rg01
-- 5. アプリケーション ゲートウェイのテスト
az network public-ip show \
--resource-group rg01 \
--name pip01 \
--query [ipAddress] \
--output tsv
-- 6. クリーンアップ
az group list
az group delete \
--name rg01 \
--yes