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:
$RANDOMzaruč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_LRSje 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 5znamená 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:
/mountfilesbude 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