Azure CLI Beispiele
Spring App mit Azure App Service
-
Resource Provider registrieren
az provider register --namespace Microsoft.Web -
Apps Service erstellen
az appservice plan create \
--name <app-service-name> \
--resource-group <resource-group-name> \
--sku B1 \
--is-linuxBeispiel:
az appservice plan create \
--name bbcssteilStudleAppService \
--resource-group bbcssteilResourceGroup \
--sku B1 \
--is-linux -
App erstellen
az webapp create \
--resource-group <resource-group-name> \
--plan <app-service-name> \
--name <app-name> \
--runtime "JAVA|17-java17" \Beispiel:
az webapp create \
--resource-group bbcssteilResourceGroup \
--plan bbcssteilStudleAppService \
--name bbcssteilStudleWebApp \
--runtime "JAVA|17-java17" \Output:
{
"defaultHostName": "bbcssteilstudleapp.azurewebsites.net"
} -
Datenbankverbindung konfigurieren: Umgebungsvariablen der App definieren
<connection-string>=jdbc:mysql://<url>.mysql.database.azure.com:3306/<database>
az webapp config appsettings set \
--resource-group <resource-group-name> \
--name <app-name> \
--settings SPRING_DATASOURCE_PASSWORD="<password>" SPRING_DATASOURCE_URL=<connection-string> SPRING_DATASOURCE_USERNAME=<username>Beispiel:
az webapp config appsettings set --resource-group bbcssteilResourceGroup --name bbcssteilStudleWebApp --settings SPRING_DATASOURCE_PASSWORD="myPassword" SPRING_DATASOURCE_URL="jdbc:mysql://firstazuretest-db.mysql.database.azure.com:3306/studle" SPRING_DATASOURCE_USERNAME=dbadmin -
TLS-Enforcement aufheben
- Hinweis:
<mysql-server-name>= Name auf Azure Portal
az mysql flexible-server parameter set \
--resource-group <resource-group-name> \
--server-name <mysql-server-name> \
--name require_secure_transport \
--value OFF \az mysql flexible-server parameter set --resource-group bbcssteilResourceGroup --server-name firstazuretest-db --name require_secure_transport --value OFF - Hinweis:
-
.jar-Datei deployen-
aus WSL kann man über
/mnt/c/userauf die Windows-Dateien zugreifen -
wenn Deployment fehlschlägt:
az webapp log tail -g <resource-group-name> -n <app-name>
az webapp deploy \
--resource-group <resource-group-name> \
--name <app-name> \
--src-path <path-to-jar-file> \
--type jarBeispiel:
az webapp deploy --resource-group bbcssteilResourceGroup --name bbcssteilStudleWebApp --src-path C:\Dev\studle-app.jar --type jar -
-
Testen über generierte URL, welche im Output des letzten Befehles war
-
Ressourcen löschen
az webapp delete \
--name <app-name> \
--resource-group <resource-group-name>
az appservice plan delete \
--name <app-service-plan-name> \
--resource-group <resource-group-name>Beispiel:
az webapp delete --name bbcssteilStudleWebApp --resource-group bbcssteilResourceGroup
az appservice plan delete --name bbcssteilStudleAppService --resource-group bbcssteilResourceGroup
Spring App mit Docker Compose
-
Applikation als Image bilden
-
Datei
DockerfileerstellenFROM openjdk:19-jdk
WORKDIR /app
COPY . .
CMD [ "java", "-jar", "studle-app.jar" ] -
Image bilden
docker build -t studle .
-
-
Datei
docker-compose.ymlmit Applikation und Datenbank erstellenversion: '3.8'
services:
app:
build: ssteilregistry.azurecr.io/studle:latest
restart: always
environment:
- SPRING_DATASOURCE_URL=jdbc:mariadb://db:3306/studle
- SERVER_PORT=80
ports:
- "80:80"
depends_on:
- db
networks:
- app
db:
image: mariadb:10.9
restart: always
environment:
MARIADB_ROOT_PASSWORD: password
MARIADB_DATABASE: studle
networks:
- app
networks:
app: {}docker compose upNun kann die API über http://localhost/swagger-ui/index.html aufgerufen werden.
-
Container Registry erstellen
az provider register --namespace Microsoft.ContainerRegistry
az acr create \
--resource-group <resource-group> \
--name <registry-name> \
--sku BasicBeispiel:
az provider register --namespace Microsoft.ContainerRegistry
az acr create --resource-group ssteilResourceGroup --name ssteilregistry --sku Basic -
bei Container Registry anmelden
az acr login --name <registry>Beispiel
az acr login --name ssteilregistry -
Service Principal erstellen
-
Service Principal: Ersatz für Benutzernamen und Passwort
-
Scope kann per Befehl herausgefunden werden (
az acr- Container Registries )az acr show --name ssteilregistry --resource-group ssteilResourceGroup --query id
az ad sp create-for-rbac --scopes <scope> --role OwnerBeispiel:
az ad sp create-for-rbac --scopes "/subscriptions/c912ae16-0c3b-47bc-a267-743415032e19/resourceGroups/bbcssteilContainerRegistryRG/providers/Microsoft.ContainerRegistry/registries/bbcssteilcr" --role OwnerOutput:
{
"appId": "bdeb3182-8d9f-4806-a2ee-cc5a0aff918c",
"displayName": "azure-cli-2025-06-16-13-21-07",
"password": "uUJ8Q~g36FoUKkM.nCCK3MELX1Qj7SZgNglx1aC3",
"tenant": "a073175e-68ed-4a18-bf49-5ac74a0cd58f"
} -
-
mit Docker anmelden
- Username:
appId - Passwort:
password
docker login <registry-name>.azurecr.io - Username:
-
Studle Image pushen
docker tag studle <registry-name>.azurecr.io/studle:latest
docker push <registry-name>.azurecr.io/studle:latest -
Image aus Container Registry (vorher gepusht) in
docker-compose.ymlverwendenbuild: .
// replace with
image: <registry-name>.azurecr.io/studle:latest -
testen
docker compose upNun sollte das Swagger UI unter der URL
<registry-name>.azurecr.ioerreichbar sein. -
Bereitstellen der Anwendung in Azure Container Instances
-
MariaDB-Container in Registry hochladen
docker pull mariadb:10.9
docker tag mariadb:10.9 <registry-name>.azurecr.io/mariadb:10.9
docker push <registry-name>.azurecr.io/mariadb:10.9 -
Datei
deploy-aci.ymlerstellenapiVersion: 2019-12-01
location: <location (Switzerland North)>
name: <container-group-name (ssteilStudleContainerGroup)>
properties:
imageRegistryCredentials:
- server: <registry-name (ssteilregistry)>.azurecr.io
username: <username>
password: <password>
containers:
- name: app
properties:
image: <registry-name (ssteilregistry)>.azurecr.io/studle:latest
environmentVariables:
- name: SPRING_DATASOURCE_URL
value: jdbc:mariadb://db:3306/studle
- name: SERVER_PORT
value: '80'
resources:
requests:
cpu: 1
memoryInGb: 1
ports:
- port: 80
- name: db
properties:
image: <registry-name (ssteilregistry)>.azurecr.io/mariadb:10.9
environmentVariables:
- name: MARIADB_ROOT_PASSWORD
value: password
- name: MARIADB_DATABASE
value: studle
resources:
requests:
cpu: 1
memoryInGb: 1
- name: aci--dns--sidecar
properties:
image: docker/aci-hostnames-sidecar:1.0
command:
- "/hosts"
- app
- db
resources:
requests:
cpu: 0.01
memoryInGb: 0.1
osType: Linux
ipAddress:
type: Public
ports:
- protocol: tcp
port: 80
type: Microsoft.ContainerInstance/containerGroups -
Container Instanzen deployen
az container create --resource-group <resource-group> --file deploy-aci.ymlOutput:
{
"properties": {
"ipAddress": {
"ip": "ip",
"ports": [
{
"port": 80,
"protocol": "TCP"
}
]
}
}
}Swagger UI kann nun unter der http://[ip]/swagger-ui/index.html erreicht werden.
Datenbank mit CLI erstellen
az group create --name ssteilResourceGroup --location switzerlandnorth
az mysql flexible-server create --name ssteilMySqlFlexibleServer --resource-group ssteilResourceGroup
Die Credentiels sind im Output unter username und password gegeben.
az mysql flexible-server connect -n ssteilMySqlFlexibleServer -u <username> --interactive
Virtuelle Maschine mit SSH-Zugriff mit CLI erstellen
Microsoft Learn Azure - How to use SSH keys with Windows on Azure
-
SSH-Key-Pair in PowerShell erstellen
ssh-keygen -m PEM -t rsa -b 2048Datei wird unter
C:\Users\username\.ssh\id_rsaerstellt. -
VM erstellen
az vm create --resource-group myResourceGroup --name myVM --image Ubuntu2204 --admin-username azureuser --ssh-key-value ~/.ssh/id_rsa.pub --size Standard_B1sOutput:
publicIpAddress -
zu VM verbinden
ssh -i ~/.ssh/id_rsa azureuser@<ip>
Docker Container deployen
-
Container Registry erstellen
az provider register --namespace Microsoft.ContainerRegistry
az acr create \
--resource-group <resource-group> \
--name <registry-name> \
--sku BasicBeispiel:
az provider register --namespace Microsoft.ContainerRegistry
az acr create --resource-group ssteilResourceGroup --name ssteilregistry --sku Basic -
bei Container Registry anmelden
az acr login --name <registry>Beispiel
az acr login --name ssteilregistry -
Service Principal erstellen
Scope herausfinden (
az acr- Container Registries )az acr show --name <registry-name> --resource-group ssteilResourceGroup --query idaz ad sp create-for-rbac --scopes <scope> --role OwnerBeispiel:
az ad sp create-for-rbac --scopes "/subscriptions/c912ae16-0c3b-47bc-a267-743415032e19/resourceGroups/bbcssteilContainerRegistryRG/providers/Microsoft.ContainerRegistry/registries/bbcssteilcr" --role OwnerOutput:
{
"appId": "bdeb3182-8d9f-4806-a2ee-cc5a0aff918c",
"displayName": "azure-cli-2025-06-16-13-21-07",
"password": "uUJ8Q~g36FoUKkM.nCCK3MELX1Qj7SZgNglx1aC3",
"tenant": "a073175e-68ed-4a18-bf49-5ac74a0cd58f"
} -
mit Docker anmelden
- Username:
appId - Passwort:
password
docker login <registry-name>.azurecr.io - Username:
-
Image pushen
docker tag studle <registry-name>.azurecr.io/studle:latest
docker push <registry-name>.azurecr.io/studle:latest -
Container auf Azure erstellen
az container- Containeraz container create --resource-group ssteilResourceGroup --name mycontainer --image <image> --dns-name-label aci-demo --ports 80 --os-type linux --memory 1.5 --cpu 1Container ist jetzt aufrufbar über
<dns-name>.<location>.azurecontainer.iooder eine bestimmte IP. Beide Werte sind im Output des letzten Befehls zu finden:{
"ipAddress": {
"autoGeneratedDomainNameLabelScope": "Unsecure",
"dnsNameLabel": "ssteilnginx",
"fqdn": "ssteilnginx.switzerlandnorth.azurecontainer.io",
"ip": "20.250.196.141",
"ports": [
{
"port": 80,
"protocol": "TCP"
}
],
"type": "Public"
}
}