Alternative Architecture DOJO

オルターブースのクラウドネイティブ特化型ブログです。

Azure Web AppsのOutbound IPアドレスを固定する

Iginte 2回目も終わり、そろそろ花粉も終わって欲しいところです。 さて、昨年11月からWeb AppsがNat Gatewayを使うことで手軽にOutbound IPアドレスの固定化ができるるようになりました。

azure.github.io

今回はこの環境をAzure Cloud ShellからAzure CLIで作ってみます。

Let's Deploy

ざっくりとした作成の流れです。

  • NAT Gatewayを作成
  • VNETを作成
  • Web Appsを作成
  • VNET Integrationを設定

まずは、Web Appまでを作ります。

resourceGroup=<Resouce Group>
location=<Location>
appName=<App Name>

# Create Resource group
az group create --name $resourceGroup --location $location

# NAT Gateway
natName=nat-$appName
az network nat gateway create --resource-group $resourceGroup --name $natName --public-ip-addresses $natPublicIPName

# Public IP
natPublicIPName=pip-$natName
az network public-ip create --resource-group $resourceGroup --name $natPublicIPName --sku standard --zone 1

# VNet
vnetName=vnet-$appName
az network vnet create -g $resourceGroup -n $vnetName --address-prefixes "10.0.0.0/16"

appSubnetName=snet-webapp
az network vnet subnet create --resource-group $resourceGroup --vnet-name $vnetName -n $appSubnetName --address-prefixes "10.0.0.0/24" --nat-gateway $natName

# App Service Plan
appServicePlanName=plan-$appName
az appservice plan create --resource-group $resourceGroup --name $appServicePlanName --is-linux --sku P1V3

# Web App
webAppName=app-$appName
az webapp create -g $resourceGroup -n $webAppName -p $appServicePlanName -i "DOTNETCORE|3.1"
az webapp config set -g $resourceGroup -n $webAppName --always-on true --http20-enabled
az webapp update -g $resourceGroup -n $webAppName --client-affinity-enabled false --https-only true

Outbount IPアドレスを固定する前のWeb AppsのOutbount IPアドレスを確認してみます。

$ az webapp ssh -g $resourceGroup -n $webAppName
This command is in preview and under development. Reference and support levels: https://aka.ms/CLI_refstatus
Verifying if app is running....
App is running. Trying to establish tunnel connection...
  _____
  /  _  \ __________ _________   ____
 /  /_\  \___   /  |  \_  __ \_/ __ \
/    |    \/    /|  |  /|  | \/\  ___/
\____|__  /_____ \____/ |__|    \___  >
        \/      \/                  \/
A P P   S E R V I C E   O N   L I N U X

Documentation: http://aka.ms/webapp-linux
PHP quickstart: https://aka.ms/php-qs
PHP version : 7.0.33
Note: Any data outside '/home' is not persisted
root@2c0a6cd794d1:/home# curl -s https://ipinfo.io/ip
XXX.XXX.XXX.XXX
root@2c0a6cd794d1:/home# exit

固定化するOutbount IPアドレスを確認します。

$ az network public-ip show -n $natPublicIPName -gresourceGroup  --query ipAddress
"XXX.XXX.XXX.XXX"

最後にWeb AppsにVNET Integrationを設定してOutbound IPアドレスを固定にします。

# VNET Integration
az webapp vnet-integration add --resource-group $resourceGroup --vnet $vnetName --subnet $appSubnetName --name $webAppName
az webapp config appsettings set -g $resourceGroup -n $webAppName --settings WEBSITE_VNET_ROUTE_ALL=1

Outbound IPが作成したPublic IPになっているか確認してみましょう。

$ az webapp ssh -g $resourceGroup -n $webAppName
This command is in preview and under development. Reference and support levels: https://aka.ms/CLI_refstatus
Verifying if app is running....
App is running. Trying to establish tunnel connection...
  _____
  /  _  \ __________ _________   ____
 /  /_\  \___   /  |  \_  __ \_/ __ \
/    |    \/    /|  |  /|  | \/\  ___/
\____|__  /_____ \____/ |__|    \___  >
        \/      \/                  \/
A P P   S E R V I C E   O N   L I N U X

Documentation: http://aka.ms/webapp-linux
PHP quickstart: https://aka.ms/php-qs
PHP version : 7.0.33
Note: Any data outside '/home' is not persisted
root@37a02c38f851:/home# curl -s https://ipinfo.io/ip
XXX.XXX.XXX.XXX
root@37a02c38f851:/home#

Web AppがNAT Gatewayにも向けられるようになったことで、手軽にOutbound IPアドレスを固定化できるようになりました。どんどんWeb Appを使っていきましょう!