{Azure Application Gateway}クイック スタート:Azure Application Gateway による Web トラフィックの転送 - Azure CLI

 

 

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