Mám rád cloudové prostředí Microsoft Azure. Umožňuje mi dělat co chci a ne se starat o infrastrukturu, kterou sice nechci, ale musím ji mít. Nelíbí se mi ale webový portál pro správu. Je to typická moderní aplikace dnešní doby: křehká květinka plná JavaScriptu, která se zakucká při sebemenší chybyčce ve spojení a o co je nepřehlednější, o to je pomalejší. Navíc se mění pod rukama a co platilo tento týden, neplatí dnes.
Naštěstí je k dispozici Azure CLI (Command Line Interface) a příkazová řádka na webu, Azure Cloud Shell. A v tomto shellu lze spouštět bashové skripty. Spravovat Microsoft cloud z Bashe může někomu připadat jako svatokrádež, ale mně se Azure CLI líbí moc. A rozhodně jsem s ním více mentálně kompatibilní než s jeho PowerShell verzí.
Skript pro vytvoření virtuálního počítače
Následující skript po spuštění vytvoří virtuální server (VM) s Windows 2022 Datacenter. Vytvoří vlastní resource group s náhodně vygenerovaným jménem (Test-XXXXXXXXXX
kde X
jsou náhodně vygenerované šestnáctkové číslice 0-f
) a VM s podobným jménem (testXXXXXXXXXX
). VM bude mít povolené porty 80
(HTTP), 443
(HTTPS), 3389
(RDP) a 8172
(Web Management Service). Bude mít rozumnou velikost B2ms
(2 cores, 8 GB RAM) a bude vytvořena v regionu EastUS
, který je dlouhodobě nejlevnější. Bude vytvořen správcovský účet Developer
s náhodně vygenerovaným heslem.
Veškeré parametry můžete upravit snadnou editací záhaví skriptu.
Takto skript vypadá:
#!/bin/bash
# Configuration
SUFFIX=$(openssl rand -hex 5)
RG_NAME=Test-$SUFFIX
NSG_NAME=Test-$SUFFIX-NSG
REGION=EastUS
SIZE=Standard_B2ms
IMAGE=win2022datacenter
VM_NAME=test$SUFFIX
USER_NAME=Developer
USER_PASS=Pw1-$(openssl rand -base64 18 | sed "s|[+/]|x|g")
# Display intentions and ask user if they want to proceed
echo "This will create the following Windows VM:"
echo " Name: $VM_NAME.$REGION.cloudapp.azure.com"
echo " User: $USER_NAME"
echo " Password: $USER_PASS"
echo " Region: $REGION"
echo " Resource Group: $RG_NAME"
echo
read -p "Do you want to continue (y/n)? " -n 1 -r
echo
if [[ ! $REPLY =~ ^[Yy]$ ]]
then
exit 1
fi
# Create resource group
echo "Creating the resource group..."
az group create -n $RG_NAME -l $REGION
# Create network security group
echo "Creating NSG in $REGION region..."
az network nsg create -g $RG_NAME -n $NSG_NAME -l $REGION
# Create firewall rules for RDP, HTTP, HTTPS and WMSvc
echo "Creating RDP rule..."
az network nsg rule create -g $RG_NAME --nsg-name $NSG_NAME --priority 1000 \
--destination-port-ranges 3389 -n RDP
echo "Creating HTTP rule..."
az network nsg rule create -g $RG_NAME --nsg-name $NSG_NAME --priority 1001 \
--destination-port-ranges 80 -n HTTP
echo "Creating HTTPS rule..."
az network nsg rule create -g $RG_NAME --nsg-name $NSG_NAME --priority 1002 \
--destination-port-ranges 443 -n HTTPS
echo "Creating WMSvc rule..."
az network nsg rule create -g $RG_NAME --nsg-name $NSG_NAME --priority 1003 \
--destination-port-ranges 8172 -n WMSvc
# Create virtual machine
echo "Creating virtual machine..."
az vm create -n $VM_NAME -g $RG_NAME \
--admin-username $USER_NAME --admin-password $USER_PASS \
--image $IMAGE --size $SIZE \
--nsg $NSG_NAME -l $REGION \
--public-ip-sku Standard \
--public-ip-address-dns-name $VM_NAME
# Display results
echo "The following virtual machine has been created:"
echo " Name: $VM_NAME.$REGION.cloudapp.azure.com"
echo " User: $USER_NAME"
echo " Password: $USER_PASS"
echo " Region: $REGION"
echo " Resource Group: $RG_NAME"
Skript pro vytvoření App Service a databáze
Z podobného vrhu je druhý skript, který vytvoří nikoliv VM, ale App Service - tedy website. Vytvoří nový App Service Plan a v něm novou website. K ní vytvoří stejnojmenný SQL server a databázi. Connection string bude přidán do nastavení App Service se jménem DefaultConnectionString
. Název bude automaticky náhodně vygenerován, stejně jako vlastní resource group.
Zdrojový kód vypadá takto:
#!/bin/bash
SUFFIX=$(openssl rand -hex 5)
RG_NAME=Test-$SUFFIX
REGION=EastUS
PLAN_NAME=TestPlan-$SUFFIX
PLAN_SKU=B1
APPSERVICE_NAME=Test$SUFFIX
SQL_SERVER=test$SUFFIX
SQL_USER=test$SUFFIX
SQL_PASSWORD=Pw1-$(openssl rand -base64 18 | sed "s|[+/]|x|g")
SQL_DB=test$SUFFIX
# Display intentions and ask user if they want to proceed
echo "This will create the following Windows App Service:"
echo " Name: $APPSERVICE_NAME.azurewebsites.net"
echo " Region: $REGION"
echo " Resource Group: $RG_NAME"
echo " SQL Server: $SQL_SERVER.database.windows.net"
echo " SQL Database: $SQL_DB"
echo " SQL User: $SQL_USER"
echo " SQL Password: $SQL_PASSWORD"
echo
read -p "Do you want to continue (y/n)? " -n 1 -r
echo
if [[ ! $REPLY =~ ^[Yy]$ ]]
then
exit 1
fi
# Create resource group
echo "Creating the resource group..."
az group create -n $RG_NAME -l $REGION
# Create app service plan
echo "Creating appservice plan..."
az appservice plan create -g $RG_NAME -n $PLAN_NAME -l $REGION --sku $PLAN_SKU
# Create app service (website)
az webapp create -g $RG_NAME -p $PLAN_NAME -n $APPSERVICE_NAME
# Create SQL server
az sql server create -g $RG_NAME -n $SQL_SERVER -l $REGION \
--admin-user $SQL_USER --admin-password $SQL_PASSWORD
# Allow access from Azure services
az sql server firewall-rule create -g $RG_NAME -s $SQL_SERVER \
-n AllowAzureServices --start-ip-address 0.0.0.0 --end-ip-address 0.0.0.0
# Create database
az sql db create -g $RG_NAME -s $SQL_SERVER -n $SQL_DB --collation Czech_CI_AI
# Show connection string
az sql db show-connection-string -s $SQL_SERVER -n $SQL_DB -c ado.net
# Assign connection string to web app
az webapp config connection-string set -g $RG_NAME -n $APPSERVICE_NAME -t SQLAzure \
--settings DefaultConnection="Server=tcp:$SQL_SERVER.database.windows.net,1433;Database=$SQL_DB;User ID=$SQL_USER;Password=$SQL_PASSWORD;Encrypt=true;Connection Timeout=30;"
# Display result
echo "The following Windows App Service has been created:"
echo " Name: $APPSERVICE_NAME.azurewebsites.net"
echo " Region: $REGION"
echo " Resource Group: $RG_NAME"
echo " SQL Server: $SQL_SERVER.database.windows.net"
echo " SQL Database: $SQL_DB"
echo " SQL User: $SQL_USER"
echo " SQL Password: $SQL_PASSWORD"
Jak skripty používat
Oba dva skripty najdete na mém GitHubu. Můžete je použít buďto v Azure Cloud Shellu nebo kdekoliv, kde máte Azure CLI a Bash, například v Linux Subsystému ve Windows 10.