1. Úvod

V cloudových prostrediach sa úložisko aplikácií správa odlišne ako na tradičných on-premise serveroch. Kontajnery a platformové služby ako Azure App Service štandardne používajú dočasné (efemérne) úložisko. To znamená:

  • Súbory zapísané do kontajnera môžu po reštarte zmiznúť.
  • Škálovanie aplikácie na viaceré inštancie automaticky nezdieľa obsah lokálneho disku.
  • Opätovné nasadenie kontajnera môže vymazať lokálne uložené súbory.

Na riešenie tohto problému poskytuje Azure Azure File Shares, ktoré ponúkajú perzistentné zdieľané úložisko, ktoré možno pripojiť do kontajnerov App Service.

V tomto cvičení:

  • Nasadíte webovú aplikáciu Flask
  • Vytvoríte Azure Storage Account
  • Vytvoríte Azure File Share
  • Nahráte súbory pomocou Azure CLI
  • Pripojíte zdieľaný súborový systém do kontajnera App Service
  • Overíte správanie perzistentného zdieľaného úložiska

Pred začatím sa uistite, že:

  • Máte nainštalované Azure CLI
  • Máte aktívne predplatné Azure
  • Ste prihlásení — overte príkazom:
az account show
  • Máte funkčnú Flask aplikáciu z predchádzajúceho cvičenia

2. Prehľad architektúry

Na konci tohto cvičenia bude vaša architektúra vyzerať takto:

Používateľ → Azure App Service (Flask aplikácia)
                     │
                     │ pripojená cesta (/mountfiles)
                     ↓
          Azure Storage Account
                     ↓
             Azure File Share

Kontajner App Service bude pristupovať k perzistentnému úložisku cez pripojený adresár.

3. Vytvorenie infraštruktúry

Najprv krok za krokom vytvoríme potrebnú Azure infraštruktúru.

Aby sme sa vyhli opakovanému zadávaniu dlhých názvov a znížili riziko preklepov, definujeme premenné.

RESOURCE_GROUP=rg-appservice-lab
LOCATION=westeurope
APP_NAME=flaskapp$RANDOM
PLAN_NAME=flask-plan
STORAGE_NAME=storage$RANDOM
FILE_SHARE=sharedfiles

Vysvetlenie:

  • $RANDOM zaručuje globálne jedinečné názvy (vyžadované pre storage účty a webové aplikácie).
  • Udržiavanie všetkých zdrojov v jednej resource group zjednodušuje čistenie.

⚠️ Tieto premenné platia iba pre aktuálnu reláciu terminálu. Ak terminál zatvoríte, pred pokračovaním znovu spustite tento blok. Môžete ich tiež uložiť pre budúce použitie:

echo "APP_NAME=$APP_NAME" >> lab-vars.env
echo "STORAGE_NAME=$STORAGE_NAME" >> lab-vars.env

Vytvorenie Resource Group

Resource Group je logický kontajner pre Azure zdroje.

az group create \
  --name $RESOURCE_GROUP \
  --location $LOCATION

Tento príkaz pripraví dedikované prostredie pre naše cvičenie.

Vytvorenie App Service Plan

App Service Plan definuje:

  • Výpočtové zdroje
  • Cenovú úroveň
  • Operačný systém
az appservice plan create \
  --name $PLAN_NAME \
  --resource-group $RESOURCE_GROUP \
  --sku B1 \
  --is-linux

Vysvetlenie:

  • --sku B1 = základná úroveň (postačí pre cvičenie)
  • --is-linux = vyžadované pre Python runtime

4. Nasadenie webovej aplikácie (Python runtime)

Teraz vytvoríme a nasadíme webovú aplikáciu.

Prejdite do adresára vášho Flask projektu a nasaďte:

az webapp up \
  --name $APP_NAME \
  --resource-group $RESOURCE_GROUP \
  --plan $PLAN_NAME \
  --runtime "PYTHON:3.10"

Tento príkaz vytvorí webovú aplikáciu a nasadí váš kód v jedinom kroku.

Overte, že funguje:

echo https://$APP_NAME.azurewebsites.net

Otvorte URL v prehliadači.

V tejto fáze:

  • Vaša aplikácia beží
  • Používa iba lokálne úložisko kontajnera
  • Žiadny perzistentný zdieľaný disk zatiaľ neexistuje

5. Vytvorenie Azure Storage

Teraz vytvoríme perzistentné úložisko, ktoré prežije reštarty a škálovanie.

Vytvorenie Storage Account

az storage account create \
  --name $STORAGE_NAME \
  --resource-group $RESOURCE_GROUP \
  --location $LOCATION \
  --sku Standard_LRS

Vysvetlenie:

  • Storage účty musia mať globálne jedinečné názvy.
  • Standard_LRS je cenovo efektívny a postačí pre cvičenia.

Získanie prístupového kľúča úložiska

Autentifikácia Azure File Share vyžaduje prístupový kľúč.

⚠️ Uchovajte prístupový kľúč bezpečne. Necommitujte ho do zdrojového kódu. Pre produkčné nasadenie preferujte autentifikáciu cez Entra ID (Azure AD) s parametrom --auth-mode login.

STORAGE_KEY=$(az storage account keys list \
  --resource-group $RESOURCE_GROUP \
  --account-name $STORAGE_NAME \
  --query "[0].value" \
  --output tsv)

Uložíme ho do premennej pre neskoršie použitie.

Vytvorenie File Share

az storage share create \
  --name $FILE_SHARE \
  --account-name $STORAGE_NAME \
  --account-key $STORAGE_KEY \
  --quota 5

Vysvetlenie:

  • --quota 5 znamená maximálnu veľkosť 5 GB.
  • Tento zdieľaný súborový systém sa správa ako sieťový súborový systém v rámci Azure.

Vytvorte testovací súbor:

echo "Hello from Azure File Share" > testfile.txt

Nahrajte ho:

az storage file upload \
  --share-name $FILE_SHARE \
  --source testfile.txt \
  --path testfile.txt \
  --account-name $STORAGE_NAME \
  --account-key $STORAGE_KEY

Overte nahratie:

az storage file list \
  --share-name $FILE_SHARE \
  --account-name $STORAGE_NAME \
  --account-key $STORAGE_KEY \
  --output table

Súbor teraz existuje v perzistentnom cloudovom úložisku.

6. Pripojenie File Share k App Service

Teraz prepojíme webovú aplikáciu so zdieľaným súborovým systémom.

Tým sa vytvorí mapovanie medzi kontajnerom a Azure úložiskom.

Konfigurácia pripojenia

az webapp config storage-account add \
  --resource-group $RESOURCE_GROUP \
  --name $APP_NAME \
  --custom-id fileshareconnection \
  --storage-type AzureFiles \
  --account-name $STORAGE_NAME \
  --share-name $FILE_SHARE \
  --access-key $STORAGE_KEY \
  --mount-path /mountfiles

Vysvetlenie:

  • /mountfiles bude viditeľné vo vnútri kontajnera
  • Čokoľvek tam zapísané je uložené v Azure File Share
  • Úložisko je perzistentné a zdieľané

Overte, že pripojenie bolo zaregistrované:

az webapp config storage-account list \
  --resource-group $RESOURCE_GROUP \
  --name $APP_NAME \
  --output table

Reštartujte aplikáciu:

az webapp restart \
  --resource-group $RESOURCE_GROUP \
  --name $APP_NAME

Aktualizujte svoju aplikáciu:

import os
from flask import Flask, Response

app = Flask(__name__)

@app.route("/files")
def list_files():
    path = "/mountfiles"
    if not os.path.exists(path):
        return Response("Mount path not found", status=404, mimetype="text/plain")
    files = sorted(os.listdir(path))
    if not files:
        return Response("(empty)", mimetype="text/plain")
    return Response("\n".join(files), mimetype="text/plain")

if __name__ == "__main__":
    app.run()

Znovu nasaďte:

az webapp up \
  --name $APP_NAME \
  --resource-group $RESOURCE_GROUP

Otestujte:

echo https://$APP_NAME.azurewebsites.net/files

Otvorte vypísanú URL v prehliadači.

Mali by ste vidieť:

testfile.txt

Toto potvrdzuje, že kontajner má prístup k zdieľanému úložisku.

7. Test perzistencie

Reštartujte webovú aplikáciu:

az webapp restart \
  --resource-group $RESOURCE_GROUP \
  --name $APP_NAME

Znovu skontrolujte /files.

Ak je súbor stále tam → perzistentné úložisko funguje.

Čistenie

Vždy vyčistite cloudové zdroje, aby ste predišli poplatkom:

az group delete \
  --name $RESOURCE_GROUP \
  --yes \
  --no-wait

Záverečný výsledok

Teraz rozumiete:

  • Ako Azure App Service spravuje diskové úložisko
  • Prečo lokálne úložisko kontajnera nie je spoľahlivé
  • Ako pripojiť Azure File Share
  • Ako budovať perzistentné cloud-native aplikácie

Previous Post Next Post

Diskový priestor pre App Service