Události
Vytváření aplikací a agentů AI
17. 3. 21 - 21. 3. 10
Připojte se k řadě meetupů a vytvořte škálovatelná řešení AI založená na skutečných případech použití s kolegy vývojáři a odborníky.
ZaregistrovatTento prohlížeč se už nepodporuje.
Upgradujte na Microsoft Edge, abyste mohli využívat nejnovější funkce, aktualizace zabezpečení a technickou podporu.
V tomto kurzu nasadíte webovou aplikaci Pythonu řízenou daty (FastAPI) do služby Aplikace Azure Service pomocí služby relační databáze Azure Database for PostgreSQL. služba Aplikace Azure podporuje Python v linuxovém serverovém prostředí Pokud chcete, přečtěte si místo toho kurz Flask nebo Django.
K dokončení tohoto kurzu budete potřebovat:
S nainstalovaným rozhraním příkazového řádku Pro vývojáře Azure můžete přeskočit na konec kurzu spuštěním následujících příkazů v prázdném pracovním adresáři:
azd auth login
azd init --template msdocs-fastapi-postgresql-sample-app
azd up
K dispozici je ukázková aplikace Pythonu využívající architekturu FastAPI, která vám pomůže postupovat společně s tímto kurzem. Pokud ji chcete nasadit bez místního spuštění, tuto část přeskočte.
Pokud chcete aplikaci spustit místně, ujistěte se, že máte místně nainstalovaný Python 3.8 nebo novější a PostgreSQL . Potom naklonujte větev ukázkového úložiště starter-no-infra
a přejděte do kořenového adresáře úložiště.
git clone -b starter-no-infra https://github.com/Azure-Samples/msdocs-fastapi-postgresql-sample-app
cd msdocs-fastapi-postgresql-sample-app
Vytvořte soubor .env , jak je znázorněno níže, pomocí souboru .env.sample jako průvodce. Nastavte hodnotu DBNAME
na název existující databáze v místní instanci PostgreSQL. Nastavte hodnoty parametru DBHOST
, DBUSER
a DBPASS
podle potřeby pro místní instanci PostgreSQL.
DBNAME=<database name>
DBHOST=<database-hostname>
DBUSER=<db-user-name>
DBPASS=<db-password>
Vytvořte pro aplikaci virtuální prostředí:
py -m venv .venv
.venv\scripts\activate
Nainstalujte závislosti:
python3 -m pip install -r src/requirements.txt
Nainstalujte aplikaci jako upravitelný balíček:
python3 -m pip install -e src
Spusťte ukázkovou aplikaci pomocí následujících příkazů:
# Run database migration
python3 src/fastapi_app/seed_data.py
# Run the app at http://127.0.0.1:8000
python3 -m uvicorn fastapi_app:app --reload --port=8000
V tomto kroku vytvoříte prostředky Azure. Kroky použité v tomto kurzu vytvoří sadu prostředků zabezpečených ve výchozím nastavení, které zahrnují App Service a Azure Database for PostgreSQL. Pro proces vytváření zadáte:
https://<app-name>.azurewebsites.net
.Přihlaste se k webu Azure Portal a podle těchto kroků vytvořte prostředky služby Aplikace Azure Service.
Krok 1: Na webu Azure Portal:
Krok 2: Na stránce Vytvořit webovou aplikaci a databázi vyplňte formulář následujícím způsobem.
Krok 3: Dokončení nasazení trvá několik minut. Po dokončení nasazení vyberte tlačítko Přejít k prostředku . Přejdete přímo do aplikace App Service, ale vytvoří se následující prostředky:
Krok 4: U aplikací FastAPI musíte zadat spouštěcí příkaz, aby služba App Service spustila vaši aplikaci. Na stránce služby App Service:
src/entrypoint.sh
do pole Spouštěcí příkaz v části Nastavení zásobníku.Průvodce vytvořením vygeneroval proměnné připojení, které už máte jako nastavení aplikace. Nastavení aplikace je jedním ze způsobů, jak udržovat tajné kódy připojení mimo úložiště kódu. Až budete připraveni přesunout tajné kódy do bezpečnějšího umístění, tady je článek o ukládání ve službě Azure Key Vault.
Krok 1: Na stránce služby App Service v nabídce vlevo vyberte proměnné prostředí.
Krok 2: Na kartě Nastavení aplikace na stránce Proměnné prostředí ověřte, že AZURE_POSTGRESQL_CONNECTIONSTRING
je k dispozici. Připojovací řetězec se vloží do prostředí runtime jako proměnná prostředí.
V tomto kroku nakonfigurujete nasazení GitHubu pomocí GitHub Actions. Je to jen jeden z mnoha způsobů nasazení do služby App Service, ale také skvělý způsob, jak mít kontinuální integraci v procesu nasazení. Ve výchozím nastavení spustí každá git push
z vašich úložišť GitHub akci sestavení a nasazení.
Krok 1: V novém okně prohlížeče:
Krok 2: Na stránce GitHubu otevřete Visual Studio Code v prohlížeči stisknutím klávesy .
.
Krok 3: V editoru Visual Studio Code v prohlížeči otevřete soubor src/fastapi/models.py v průzkumníkovi. Podívejte se na proměnné prostředí používané v produkčním prostředí, včetně nastavení aplikace, která jste viděli na stránce konfigurace.
Krok 4: Zpět na stránce služby App Service v nabídce vlevo v části Nasazení vyberte Deployment Center.
Krok 5: Na stránce Deployment Center:
.github/workflows
adresáři.Krok 6: Na stránce Deployment Center:
Krok 7: Přejdete do úložiště GitHub a zjistíte, že je spuštěná akce GitHubu. Soubor pracovního postupu definuje dvě samostatné fáze, sestavení a nasazení. Počkejte na spuštění GitHubu, aby se zobrazil stav Dokončeno. Trvá to asi 5 minut.
Máte problémy? Projděte si průvodce odstraňováním potíží.
V předchozí části jste přidali src/entrypoint.sh jako spouštěcí příkaz pro vaši aplikaci.
entrypoint.sh obsahuje následující řádek: python3 src/fastapi_app/seed_data.py
. Tento příkaz migruje databázi. V ukázkové aplikaci se zajistí pouze vytvoření správných tabulek ve vaší databázi. Nenaplní tyto tabulky žádnými daty.
V této části spustíte tento příkaz ručně pro demonstrační účely. S databází PostgreSQL chráněnou virtuální sítí je nejjednodušší způsob spuštění příkazu v relaci SSH s kontejnerem služby App Service.
Krok 1: Zpět na stránce služby App Service v nabídce vlevo
Krok 2: V terminálu SSH spusťte python3 src/fastapi_app/seed_data.py
příkaz . Pokud proběhne úspěšně, služba App Service se úspěšně připojuje k databázi.
Kromě restartování aplikace se můžou zachovat jenom změny v /home
souborech. Změny mimo /home
jiné se neuchovávají.
Krok 1: Na stránce služby App Service:
https://<app-name>.azurewebsites.net
.Krok 2: Přidejte do seznamu několik restaurací. Blahopřejeme, spouštíte webovou aplikaci ve službě Aplikace Azure Service se zabezpečeným připojením ke službě Azure Database for PostgreSQL.
Ukázková aplikace používá modul protokolování standardní knihovny Pythonu, který vám pomůže diagnostikovat problémy s aplikací. Ukázková aplikace zahrnuje volání protokolovacího nástroje, jak je znázorněno v následujícím kódu.
@app.get("/", response_class=HTMLResponse)
async def index(request: Request, session: Session = Depends(get_db_session)):
logger.info("root called")
statement = (
select(Restaurant, func.avg(Review.rating).label("avg_rating"), func.count(Review.id).label("review_count"))
.outerjoin(Review, Review.restaurant == Restaurant.id)
.group_by(Restaurant.id)
)
Krok 1: Na stránce služby App Service:
Krok 2: V nabídce vlevo vyberte Stream protokolu. Zobrazí se protokoly pro vaši aplikaci, včetně protokolů platformy a protokolů z kontejneru.
Zobrazení událostí v diagnostických protokolech může trvat několik minut. Přečtěte si další informace o protokolování v aplikacích Pythonu v řadě o nastavení služby Azure Monitor pro vaši aplikaci v Pythonu.
Po dokončení můžete odstranit všechny prostředky z předplatného Azure odstraněním skupiny prostředků.
Krok 1: Na panelu hledání v horní části webu Azure Portal:
Krok 2: Na stránce skupiny prostředků vyberte Odstranit skupinu prostředků.
Krok 3:
V tomto kroku vytvoříte prostředky Azure a nasadíte ukázkovou aplikaci do App Service v Linuxu. Kroky použité v tomto kurzu vytvoří sadu prostředků zabezpečených ve výchozím nastavení, které zahrnují App Service a Azure Database for PostgreSQL.
Pokud jste to ještě neudělali, naklonujte větev ukázkového úložiště starter-no-infra
v místním terminálu.
git clone -b starter-no-infra https://github.com/Azure-Samples/msdocs-fastapi-postgresql-sample-app
cd msdocs-fastapi-postgresql-sample-app
Tato naklonovaná větev je vaším výchozím bodem. Obsahuje jednoduchou aplikaci FastAPI pro datovou jednotku.
V kořenovém adresáři úložiště spusťte azd init
příkaz .
azd init --template msdocs-fastapi-postgresql-sample-app
Po zobrazení výzvy zadejte následující odpovědi:
Otázka | Odpověď |
---|---|
Aktuální adresář není prázdný. Chcete zde inicializovat projekt v adresáři<>? | Y |
Co chcete s těmito soubory dělat? | Zachovat stávající soubory beze změny |
Zadejte nový název prostředí. | Zadejte jedinečný název. Šablona azd používá tento název jako součást názvu DNS vaší webové aplikace v Azure (<app-name>.azurewebsites.net ). Jsou povoleny alfanumerické znaky a spojovníky. |
Spuštěním azd up
příkazu zřiďte potřebné prostředky Azure a nasaďte kód aplikace. Pokud ještě nejste přihlášení k Azure, prohlížeč se spustí a požádá vás o přihlášení. Příkaz azd up
vás také vyzve k výběru požadovaného předplatného a umístění pro nasazení.
azd up
Dokončení azd up
příkazu může trvat několik minut. Zkompiluje a nasadí také kód aplikace. Když je spuštěný, příkaz poskytuje zprávy o procesu zřizování a nasazení, včetně odkazu na nasazení v Azure. Po dokončení zobrazí příkaz také odkaz na aplikaci pro nasazení.
Tato šablona azd obsahuje soubory (azure.yaml a adresář infrastruktury ), které ve výchozím nastavení generují zabezpečenou architekturu s následujícími prostředky Azure:
azd up
Po dokončení příkazu si poznamenejte hodnoty ID předplatného (GUID), služby App Service a skupiny prostředků ve výstupu. Použijete je v následujících částech. Výstup bude vypadat podobně jako následující (částečný) výstup:
Subscription: Your subscription name (1111111-1111-1111-1111-111111111111)
Location: East US
You can view detailed progress in the Azure Portal:
https://portal.azure.com/#view/HubsExtension/DeploymentDetailsBlade/~/overview/id/%2Fsubscriptions%2F1111111-1111-1111-1111-111111111111%2Fproviders%2FMicrosoft.Resources%2Fdeployments%2Fyourenv-1721867673
(✓) Done: Resource group: yourenv-rg
(✓) Done: Virtual Network: yourenv-e2najjk4vewf2-vnet
(✓) Done: App Service plan: yourenv-e2najjk4vewf2-service-plan
(✓) Done: Log Analytics workspace: yourenv-e2najjk4vewf2-workspace
(✓) Done: Application Insights: yourenv-e2najjk4vewf2-appinsights
(✓) Done: Portal dashboard: yourenv-e2najjk4vewf2-dashboard
(✓) Done: App Service: yourenv-e2najjk4vewf2-app-service
(✓) Done: Azure Database for PostgreSQL flexible server: yourenv-e2najjk4vewf2-postgres-server
(✓) Done: Cache for Redis: yourenv-e2najjk4vewf2-redisCache
(✓) Done: Private Endpoint: cache-privateEndpoint
SUCCESS: Your application was provisioned in Azure in 32 minutes.
You can view the resources created under the resource group yourenv-rg in Azure Portal:
https://portal.azure.com/#@/resource/subscriptions/1111111-1111-1111-1111-111111111111/resourceGroups/yourenv-rg/overview
Deploying services (azd deploy)
(✓) Done: Deploying service web
- Endpoint: https://yourenv-e2najjk4vewf2-app-service.azurewebsites.net/
Šablona azd vygeneruje proměnné připojení pro vás jako nastavení aplikace. Nastavení aplikace je jedním ze způsobů, jak udržovat tajné kódy připojení mimo úložiště kódu.
infra/resources.bicep
V souboru vyhledejte nastavení aplikace a najděte nastavení pro AZURE_POSTGRESQL_CONNECTIONSTRING
.
resource appSettings 'config' = {
name: 'appsettings'
properties: {
SCM_DO_BUILD_DURING_DEPLOYMENT: 'true'
AZURE_POSTGRESQL_CONNECTIONSTRING: 'dbname=${pythonAppDatabase.name} host=${postgresServer.name}.postgres.database.azure.com port=5432 sslmode=require user=${postgresServer.properties.administratorLogin} password=${databasePassword}'
SECRET_KEY: secretKey
AZURE_REDIS_CONNECTIONSTRING: 'rediss://:${redisCache.listKeys().primaryKey}@${redisCache.name}.redis.cache.windows.net:6380/0'
}
}
AZURE_POSTGRESQL_CONNECTIONSTRING
obsahuje připojovací řetězec do databáze Postgres v Azure. Abyste se k němu mohli připojit, musíte ho použít ve svém kódu. Kód, který používá tuto proměnnou prostředí, najdete v src/fastapi/models.py:
sql_url = ""
if os.getenv("WEBSITE_HOSTNAME"):
logger.info("Connecting to Azure PostgreSQL Flexible server based on AZURE_POSTGRESQL_CONNECTIONSTRING...")
env_connection_string = os.getenv("AZURE_POSTGRESQL_CONNECTIONSTRING")
if env_connection_string is None:
logger.info("Missing environment variable AZURE_POSTGRESQL_CONNECTIONSTRING")
else:
# Parse the connection string
details = dict(item.split('=') for item in env_connection_string.split())
# Properly format the URL for SQLAlchemy
sql_url = (
f"postgresql://{quote_plus(details['user'])}:{quote_plus(details['password'])}"
f"@{details['host']}:{details['port']}/{details['dbname']}?sslmode={details['sslmode']}"
)
else:
logger.info("Connecting to local PostgreSQL server based on .env file...")
load_dotenv()
POSTGRES_USERNAME = os.environ.get("DBUSER")
POSTGRES_PASSWORD = os.environ.get("DBPASS")
POSTGRES_HOST = os.environ.get("DBHOST")
POSTGRES_DATABASE = os.environ.get("DBNAME")
POSTGRES_PORT = os.environ.get("DBPORT", 5432)
sql_url = f"postgresql://{POSTGRES_USERNAME}:{POSTGRES_PASSWORD}@{POSTGRES_HOST}:{POSTGRES_PORT}/{POSTGRES_DATABASE}"
engine = create_engine(sql_url)
služba Aplikace Azure ke spuštění aplikace FastAPI vyžaduje spouštěcí příkaz. Šablona azd nastaví tento příkaz za vás v instanci služby App Service.
infra/resources.bicep
V souboru vyhledejte deklaraci pro váš web a pak vyhledejte nastavení pro appCommandLine
. Toto je nastavení spouštěcího příkazu.
resource web 'Microsoft.Web/sites@2022-03-01' = {
name: '${prefix}-app-service'
location: location
tags: union(tags, { 'azd-service-name': 'web' })
kind: 'app,linux'
properties: {
serverFarmId: appServicePlan.id
siteConfig: {
alwaysOn: true
linuxFxVersion: 'PYTHON|3.11'
ftpsState: 'Disabled'
appCommandLine: 'src/entrypoint.sh'
minTlsVersion: '1.2'
}
httpsOnly: true
}
identity: {
type: 'SystemAssigned'
}
Spouštěcí příkaz spustí soubor src/entrypoint.sh. Prozkoumejte kód v souboru a seznamte se s příkazy, které app Service spouští, aby se spustila vaše aplikace:
#!/bin/bash
set -e
python3 -m pip install --upgrade pip
python3 -m pip install -e src
python3 src/fastapi_app/seed_data.py
python3 -m gunicorn fastapi_app:app -c src/gunicorn.conf.py
Další informace o konfiguraci a spuštění aplikace ve službě App Service najdete v tématu Konfigurace linuxové aplikace Pythonu pro službu Aplikace Azure Service.
Možná jste si v předchozí části všimli, že entrypoint.sh obsahuje následující řádek: python3 src/fastapi_app/seed_data.py
. Tento příkaz migruje databázi. V ukázkové aplikaci se zajistí pouze vytvoření správných tabulek ve vaší databázi. Nenaplní tyto tabulky žádnými daty.
V této části spustíte tento příkaz ručně pro demonstrační účely. S databází PostgreSQL chráněnou virtuální sítí je nejjednodušší způsob spuštění příkazu v relaci SSH s kontejnerem služby App Service.
Pomocí hodnoty služby App Service , kterou jste si poznamenali dříve ve výstupu azd, a šablony uvedené níže vytvořte adresu URL relace SSH a přejděte na ni v prohlížeči:
https://<app-name>.scm.azurewebsites.net/webssh/host
V terminálu SSH spusťte python3 src/fastapi_app/seed_data.py
příkaz . Pokud proběhne úspěšně, služba App Service se úspěšně připojuje k databázi.
Poznámka
Kromě restartování aplikace se můžou zachovat jenom změny v /home
souborech. Změny mimo /home
jiné se neuchovávají.
Ve výstupu azd vyhledejte adresu URL aplikace a přejděte na ni v prohlížeči. Adresa URL vypadá takto ve výstupu AZD:
Deploying services (azd deploy) (✓) Done: Deploying service web - Endpoint: https://<app-name>.azurewebsites.net/
Přidejte do seznamu několik restaurací.
Blahopřejeme, spouštíte webovou aplikaci ve službě Aplikace Azure Service se zabezpečeným připojením ke službě Azure Database for PostgreSQL.
Aplikace Azure Služba může zaznamenávat protokoly, které vám pomůžou diagnostikovat problémy s vaší aplikací. Pro usnadnění používání šablony AZD už protokolování do místního systému souborů povolilo.
Ukázková aplikace používá modul protokolování standardní knihovny Pythonu k výstupním protokolům. Ukázková aplikace zahrnuje volání protokolovacího nástroje, jak je znázorněno níže.
@app.get("/", response_class=HTMLResponse)
async def index(request: Request, session: Session = Depends(get_db_session)):
logger.info("root called")
statement = (
select(Restaurant, func.avg(Review.rating).label("avg_rating"), func.count(Review.id).label("review_count"))
.outerjoin(Review, Review.restaurant == Restaurant.id)
.group_by(Restaurant.id)
)
Pomocí hodnot ID předplatného (GUID), skupiny prostředků a služby App Service, které jste si poznamenali dříve ve výstupu azd a šabloně uvedené níže, vytvořte adresu URL pro streamování protokolů služby App Service a přejděte na ni v prohlížeči.
https://portal.azure.com/#@/resource/subscriptions/<subscription-guid>/resourceGroups/<group-name>/providers/Microsoft.Web/sites/<app-name>/logStream
Zobrazení událostí v diagnostických protokolech může trvat několik minut. Přečtěte si další informace o protokolování v aplikacích Pythonu v řadě o nastavení služby Azure Monitor pro vaši aplikaci v Pythonu.
Pokud chcete odstranit všechny prostředky Azure v aktuálním prostředí nasazení, spusťte azd down
příkaz .
azd down
Níže jsou uvedené problémy, se kterými se můžete setkat při pokusu o práci v tomto kurzu a postupu při jejich řešení.
Pokud se nemůžete připojit k relaci SSH, nepovedlo se spustit samotnou aplikaci. Podrobnosti najdete v diagnostických protokolech . Pokud se například zobrazí nějaká chyba KeyError: 'AZURE_POSTGRESQL_CONNECTIONSTRING'
, může to znamenat, že proměnná prostředí chybí (možná jste odebrali nastavení aplikace).
Pokud dojde k nějakým chybám souvisejícím s připojením k databázi, zkontrolujte, jestli nedošlo ke změně nastavení aplikace (AZURE_POSTGRESQL_CONNECTIONSTRING
). Bez toho připojovací řetězec nemůže migrovat příkaz komunikovat s databází.
Ceny vytvořených prostředků jsou následující:
psql
z terminálu SSH aplikace.Když jako příklad použijete automaticky vygenerovaný soubor pracovního postupu ze služby App Service, spustí se nové git push
sestavení a nasazení. Z místního klonu úložiště GitHub provedete požadované aktualizace a nasdílíte je na GitHub. Příklad:
git add .
git commit -m "<some-message>"
git push origin main
V dalším kurzu se dozvíte, jak zabezpečit aplikaci pomocí vlastní domény a certifikátu.
Zjistěte, jak App Service spouští aplikaci v Pythonu:
Události
Vytváření aplikací a agentů AI
17. 3. 21 - 21. 3. 10
Připojte se k řadě meetupů a vytvořte škálovatelná řešení AI založená na skutečných případech použití s kolegy vývojáři a odborníky.
ZaregistrovatŠkolení
Modul
Nasazení aplikace Quarkus do Azure Container Apps - Training
Vytvořte aplikaci Quarkus, připojte ji k databázi PostgreSQL a pak ji nasaďte do Azure Container Apps.
Certifikace
Microsoft Certified: Přidružení správce služby Azure Database - Certifications
Správa infrastruktury databáze SQL Serveru pro cloudové, místní a hybridní relační databáze pomocí nabídek relačních databází Microsoft PaaS.
Dokumentace
Kurz: Nasazení webové aplikace Python Flask pomocí PostgreSQL - Azure App Service
Vytvořte webovou aplikaci Python Flask s databází PostgreSQL a nasaďte ji do Azure. Tento kurz používá architekturu Flask a aplikace je hostovaná ve službě Aplikace Azure Service v Linuxu.
Začněte se službou Aplikace Azure Service tím, že nasadíte svou první aplikaci v Pythonu do služby Aplikace Azure Service.
Přehled postupu vytvoření a nasazení kontejnerizované webové aplikace v Pythonu (Flask nebo FastAPI) ve službě Aplikace Azure Service