Zum Hauptinhalt springen

Azure CLI Beispiele

Spring App mit Azure App Service

  1. Resource Provider registrieren

    az provider register --namespace Microsoft.Web
  2. Apps Service erstellen

    az appservice plan create \
    --name <app-service-name> \
    --resource-group <resource-group-name> \
    --sku B1 \
    --is-linux

    Beispiel:

    az appservice plan create \
    --name bbcssteilStudleAppService \
    --resource-group bbcssteilResourceGroup \
    --sku B1 \
    --is-linux
  3. 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"
    }
  4. 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
  5. 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
  6. .jar-Datei deployen

    • aus WSL kann man über /mnt/c/user auf 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 jar

    Beispiel:

    az webapp deploy --resource-group bbcssteilResourceGroup --name bbcssteilStudleWebApp --src-path C:\Dev\studle-app.jar --type jar
  7. Testen über generierte URL, welche im Output des letzten Befehles war

  8. 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

  1. Applikation als Image bilden

    1. Datei Dockerfile erstellen

      FROM openjdk:19-jdk

      WORKDIR /app
      COPY . .

      CMD [ "java", "-jar", "studle-app.jar" ]
    2. Image bilden

      docker build -t studle .
  2. Datei docker-compose.yml mit Applikation und Datenbank erstellen

    version: '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 up

    Nun kann die API über http://localhost/swagger-ui/index.html aufgerufen werden.

  3. Container Registry erstellen

    az provider register --namespace Microsoft.ContainerRegistry
    az acr create \
    --resource-group <resource-group> \
    --name <registry-name> \
    --sku Basic

    Beispiel:

    az provider register --namespace Microsoft.ContainerRegistry
    az acr create --resource-group ssteilResourceGroup --name ssteilregistry --sku Basic
  4. bei Container Registry anmelden

    az acr login --name <registry>

    Beispiel

    az acr login --name ssteilregistry
  5. 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 Owner

    Beispiel:

    az ad sp create-for-rbac --scopes "/subscriptions/c912ae16-0c3b-47bc-a267-743415032e19/resourceGroups/bbcssteilContainerRegistryRG/providers/Microsoft.ContainerRegistry/registries/bbcssteilcr" --role Owner

    Output:

    {
    "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"
    }
  6. mit Docker anmelden

    • Username: appId
    • Passwort: password
    docker login <registry-name>.azurecr.io
  7. Studle Image pushen

    docker tag studle <registry-name>.azurecr.io/studle:latest
    docker push <registry-name>.azurecr.io/studle:latest
  8. Image aus Container Registry (vorher gepusht) in docker-compose.yml verwenden

    build: .
    // replace with
    image: <registry-name>.azurecr.io/studle:latest
  9. testen

    docker compose up

    Nun sollte das Swagger UI unter der URL <registry-name>.azurecr.io erreichbar sein.

  10. Bereitstellen der Anwendung in Azure Container Instances

  11. 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
  12. Datei deploy-aci.yml erstellen

    apiVersion: 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
  13. Container Instanzen deployen

    az container create --resource-group <resource-group> --file deploy-aci.yml

    Output:

    {
    "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

Microsoft Learn Azure - Quickstart: Connect with Azure Database for MySQL - Flexible Server by using Azure CLI

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

  1. SSH-Key-Pair in PowerShell erstellen

    ssh-keygen -m PEM -t rsa -b 2048

    Datei wird unter C:\Users\username\.ssh\id_rsa erstellt.

  2. VM erstellen

    az vm create --resource-group myResourceGroup --name myVM --image Ubuntu2204 --admin-username azureuser --ssh-key-value ~/.ssh/id_rsa.pub --size Standard_B1s

    Output: publicIpAddress

  3. zu VM verbinden

    ssh -i ~/.ssh/id_rsa azureuser@<ip>

Docker Container deployen

  1. Container Registry erstellen

    az provider register --namespace Microsoft.ContainerRegistry
    az acr create \
    --resource-group <resource-group> \
    --name <registry-name> \
    --sku Basic

    Beispiel:

    az provider register --namespace Microsoft.ContainerRegistry
    az acr create --resource-group ssteilResourceGroup --name ssteilregistry --sku Basic
  2. bei Container Registry anmelden

    az acr login --name <registry>

    Beispiel

    az acr login --name ssteilregistry
  3. Service Principal erstellen

    Scope herausfinden (az acr - Container Registries )

    az acr show --name <registry-name> --resource-group ssteilResourceGroup --query id
    az ad sp create-for-rbac --scopes <scope> --role Owner

    Beispiel:

    az ad sp create-for-rbac --scopes "/subscriptions/c912ae16-0c3b-47bc-a267-743415032e19/resourceGroups/bbcssteilContainerRegistryRG/providers/Microsoft.ContainerRegistry/registries/bbcssteilcr" --role Owner

    Output:

    {
    "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"
    }
  4. mit Docker anmelden

    • Username: appId
    • Passwort: password
    docker login <registry-name>.azurecr.io
  5. Image pushen

    docker tag studle <registry-name>.azurecr.io/studle:latest
    docker push <registry-name>.azurecr.io/studle:latest
  6. Container auf Azure erstellen az container - Container

    az container create --resource-group ssteilResourceGroup --name mycontainer --image <image> --dns-name-label aci-demo --ports 80 --os-type linux --memory 1.5 --cpu 1

    Container ist jetzt aufrufbar über <dns-name>.<location>.azurecontainer.io oder 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"
    }
    }