Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Azure Functions je bezserverová výpočetní služba, která umožňuje spouštět kód řízený událostmi bez zřizování nebo správy infrastruktury. Spouštění funkcí se aktivují událostmi, jako jsou požadavky HTTP, zprávy fronty, časovače nebo změny v úložišti, a automaticky se škálují na základě poptávky.
Tato příručka se zaměřuje konkrétně na vytváření Azure Functions založených na Python a pomáhá vám:
- Vytváření a spouštění aplikací Function Apps místně
- Vysvětlení programovacího modelu Python
- Uspořádání a konfigurace aplikace
- Nasazení a monitorování aplikace v Azure
- Použití osvědčených postupů pro škálování a výkon
Hledáte koncepční přehled? Viz Azure Functions Reference pro vývojáře.
Zajímá vás skutečné případy použití? Projděte si stránku Scénáře a ukázky .
Začínáme
Zvolte prostředí, které vyhovuje vašemu pracovnímu postupu, a přejděte do Azure Functions pro Python:
Sestavení aplikace funkcí
Tato část se věnuje základním komponentám pro vytváření a strukturování aplikace funkcí Python. Mezi témata patří programovací model, struktura projektu, triggery a vazby a správa závislostí.
Programovací model
Funkce podporují dvě verze programovacího modelu Python:
| Version | Popis |
|---|---|
| 2.x | K definování triggerů a vazeb přímo v souboru kódu Python použijte přístup založený na dekorátoru. Každou funkci implementujete jako globální bezstavovou metodu function_app.py v souboru nebo odkazovaném souboru šablony. Tato verze modelu se doporučuje pro nové aplikace Python. |
| 1.x | Pro každou funkci v samostatném function.json souboru definujete triggery a vazby. Každou funkci implementujete jako globální bezstavovou metodu v souboru kódu Python. Tato verze modelu podporuje starší verze aplikací. |
Tento článek cílí na konkrétní verzi modelu Python. V horní části článku zvolte požadovanou verzi.
Důležité
K definování triggerů a vazeb přímo v kódu použijte programovací model v2 pro přístup založený na dekorátoru .
V programovacím modelu Python v1 je každá funkce definována jako globální bezstavová metoda main() uvnitř souboru s názvem __init__.py.
Triggery a vazby funkce se konfigurují samostatně v function.json souboru a hodnoty vazby name se používají jako parametry ve vaší main() metodě.
Příklad
Tady je jednoduchá funkce, která reaguje na požadavek HTTP:
# __init__.py
def main(req):
user = req.params.get('user')
return f'Hello, {user}!'
Tady je odpovídající function.json soubor:
{
"scriptFile": "__init__.py",
"bindings": [
{
"authLevel": "function",
"type": "httpTrigger",
"direction": "in",
"name": "req",
"methods": [
"get",
"post"
]
},
{
"type": "http",
"direction": "out",
"name": "$return"
}
]
}
Klíčové koncepty
- Funkce má jeden trigger HTTP.
-
HttpRequest objekt obsahuje hlavičky požadavku, parametry dotazu, parametry trasy a text zprávy. Tato funkce získá hodnotu parametru
namedotazu zparamsparametru HttpRequest objektu. - Pokud chcete v tomto příkladu odeslat jméno, připojte
?name={name}k URL adrese zpřístupněné funkce. Pokud například běží místně, může úplná adresa URL vypadat taktohttp://localhost:7071/api/http_trigger?name=Test. Příklady použití vazeb najdete v tématu Triggery a vazby.
azure-functions Použití sady SDK a zahrnutí poznámek k typům ke zlepšení podpory IntelliSense a editoru:
# __init__.py
import azure.functions as func
def http_trigger(req: func.HttpRequest) -> str:
# requirements.txt
azure-functions
Knihovna azure-functions
Knihovna azure-functions Python poskytuje základní typy používané k interakci s modulem runtime Azure Functions. Pokud chcete zobrazit všechny dostupné typy a metody, navštivte azure-functions rozhraní API.
Kód funkce může použít azure-functions k:
- Access aktivuje vstupní data (například
HttpRequest,TimerRequest) - Vytvoření výstupních hodnot (například
HttpResponse) - Interakce s kontextovými a vazbovými daty poskytnutými za běhu
Pokud v aplikaci používáte azure-functions , musí být součástí závislostí projektu.
Poznámka:
Knihovna azure-functions definuje programovací plochu pro Python Azure Functions, ale nejedná se o sadu SDK pro obecné účely. Použijte ho speciálně pro vytváření a spouštění funkcí v Azure Functions runtime.
Alternativní vstupní bod
Výchozí chování funkce můžete změnit zadáním vlastností scriptFile a entryPoint v souboru function.json. Například následující soubor function.json směruje modul runtime tak, aby jako vstupní bod funkce Azure použil metodu custom_entry() v souboru main.py.
{
"scriptFile": "main.py",
"entryPoint": "custom_entry",
"bindings": [
...
]
}
Struktura složek
Pro projekt Python Azure Functions použijte následující strukturu:
<project_root>/
│
├── .venv/ # (Optional) Local Python virtual environment
├── .vscode/ # (Optional) VS Code workspace settings
│
├── my_first_function/ # Function directory
│ └── __init__.py # Function code file
│ └── function.json # Function binding configuration file
│
├── my_second_function/
│ └── __init__.py
│ └── function.json
│
├── shared/ # (Optional) Pure helper code with no triggers/bindings
│ └── utils.py
│
├── additional_functions/ # (Optional) Contains blueprints for organizing related Functions
│ └── blueprint_1.py
│
├── tests/ # (Optional) Unit tests for your functions
│ └── test_my_function.py
│
├── .funcignore # Excludes files from being published
├── host.json # Global function app configuration
├── local.settings.json # Local-only app settings (not published)
├── requirements.txt # (Optional) Defines Python dependencies for remote build
├── Dockerfile # (Optional) For custom container deployment
Klíčové soubory a složky
| Soubor nebo složka | Popis | Vyžaduje se, aby aplikace běžela v Azure |
|---|---|---|
my_first_function/ |
Adresář pro jednu funkci. | ✅ |
__init__.py/ |
Hlavní skript, ve my_first_function kterém je definován kód funkce. |
✅ |
function.json/ |
Obsahuje konfiguraci vazby pro funkci my_first_function. |
✅ |
host.json |
Globální konfigurace pro všechny funkce v aplikaci | ✅ |
requirements.txt |
Pythonové závislosti jsou nainstalovány během publikování s použitím remote build. | ❌ (doporučeno pro správu balíčků) |
local.settings.json |
Nastavení a tajné kódy aplikace jen pro místní prostředí (nikdy nepublikované) | ❌ (vyžadováno pro místní vývoj) |
.funcignore |
Určuje soubory a složky, které se mají vyloučit z nasazení (například .venv/, tests/, local.settings.json). |
❌ (doporučeno) |
.venv/ |
Místní virtuální prostředí pro Python (vyloučené z nasazení) | ❌ |
.vscode/ |
Konfigurace editoru pro Visual Studio Code Nevyžaduje se pro nasazení. | ❌ |
shared/ |
Obsahuje pomocný kód sdílený v rámci projektu aplikace funkcí. | ❌ |
additional_functions/ |
Používá se pro modulární organizaci kódu – obvykle s podrobnými plány. | ❌ |
tests/ |
Jednotkové testy pro vaši funkční aplikaci Nepublikuje se do Azure. | ❌ |
Dockerfile |
Definuje vlastní kontejner pro nasazení. | ❌ |
V programovacím modelu Python v2 používá Azure Functions přístup založený na decoratoru k definování triggerů a vazeb přímo v kódu. Každá funkce se implementuje jako globální bezstavová metoda v rámci function_app.py souboru.
Příklad
Tady je jednoduchá funkce, která reaguje na požadavek HTTP:
import azure.functions as func
app = func.FunctionApp()
@app.route("hello")
def http_trigger(req):
user = req.params.get("user")
return f"Hello, {user}!"
# requirements.txt
azure-functions
Klíčové koncepty
- Kód naimportuje
azure-functionsbalíček a k definování aplikace funkcí používá dekorátory a typy. - Funkce má jeden trigger HTTP.
-
HttpRequest objekt obsahuje hlavičky požadavku, parametry dotazu, parametry trasy a text zprávy. Tato funkce získá hodnotu parametru
namedotazu zparamsparametru HttpRequest objektu. - Pokud chcete v tomto příkladu odeslat jméno, připojte
?name={name}k URL adrese zpřístupněné funkce. Pokud například běží místně, může úplná adresa URL vypadat taktohttp://localhost:7071/api/http_trigger?name=Test. Příklady použití vazeb najdete v tématu Triggery a vazby.
Knihovna azure-functions
Knihovna azure-functions Python je základní součástí programovacího modelu Azure Functions. Poskytuje dekorátory, typy triggerů a vazeb a objekty požadavků a odpovědí používané k definování a interakci s funkcemi za běhu.
Pokud chcete zobrazit všechny dostupné typy a dekorátory, navštivte azure-functions rozhraní API.
Kód vaší aplikace funkcí závisí na této knihovně:
- Definování všech funkcí pomocí objektu
FunctionApp - Deklarace triggerů a vazeb (například
@app.route,@app.timer_trigger) - Přístup ke specifickým vstupům a výstupům (například
HttpRequest,HttpResponsea Out`)
Musí azure-functions být součástí závislostí projektu. Další informace najdete v tématu Správa balíčků.
Poznámka:
Knihovna azure-functions definuje programovací plochu pro Python Azure Functions, ale nejedná se o sadu SDK pro obecné účely. Použijte ho speciálně pro vytváření a spouštění funkcí v Azure Functions runtime.
Ke zlepšení podpory IntelliSense a editoru použijte poznámky typu :
def http_trigger(req: func.HttpRequest) -> str:
Uspořádání s využitím podrobných plánů
U větších nebo modulárních aplikací můžete pomocí blueprintů definovat funkce v samostatných Python souborech a zaregistrovat je v hlavní aplikaci. Toto oddělení udržuje váš kód uspořádaný a opakovaně použitelný.
Definování a registrace podrobného plánu:
Definujte podrobný plán v jiném souboru Python, například
http_blueprint.py:import azure.functions as func bp = func.Blueprint() @bp.route(route="default_template") def default_template(req: func.HttpRequest) -> func.HttpResponse: return func.HttpResponse("Hello World!")Zaregistrujte blueprint v hlavním
function_app.pysouboru:import azure.functions as func from http_blueprint import bp app = func.FunctionApp() app.register_functions(bp)
Pomocí podrobných plánů můžete:
- Rozdělení aplikace na opakovaně použitelné moduly
- Zachování souvisejících funkcí seskupených podle souboru nebo funkce
- Rozšíření nebo sdílení podrobných plánů napříč projekty
Poznámka:
Durable Functions také podporuje podrobné plány pomocí azure-functions-durable.
Zobrazit ukázku →
Struktura složek
Pro projekt Python Azure Functions použijte následující strukturu:
<project_root>/
│
├── .venv/ # (Optional) Local Python virtual environment
├── .vscode/ # (Optional) VS Code workspace settings
│
├── function_app.py # Main function entry point (decorator model)
├── shared/ # (Optional) Pure helper code with no triggers/bindings
│ └── utils.py
│
├── additional_functions/ # (Optional) Contains blueprints for organizing related Functions
│ └── blueprint_1.py
│
├── tests/ # (Optional) Unit tests for your functions
│ └── test_my_function.py
│
├── .funcignore # Excludes files from being published
├── host.json # Global function app configuration
├── local.settings.json # Local-only app settings (not published)
├── requirements.txt # (Optional) Defines Python dependencies for remote build
├── Dockerfile # (Optional) For custom container deployment
Klíčové soubory a složky
| Soubor nebo složka | Popis | Vyžaduje se, aby aplikace běžela v Azure |
|---|---|---|
function_app.py |
Hlavní skript, kde jsou definovány Azure Functions a triggery pomocí dekorátorů. | ✅ |
host.json |
Globální konfigurace pro všechny funkce v aplikaci | ✅ |
requirements.txt |
Pythonové závislosti jsou nainstalovány během publikování s použitím remote build. | ❌ (doporučeno pro správu balíčků) |
local.settings.json |
Nastavení a tajné kódy aplikace jen pro místní prostředí (nikdy nepublikované) | ❌ (vyžadováno pro místní vývoj) |
.funcignore |
Určuje soubory a složky, které se mají vyloučit z nasazení (například .venv/, tests/, local.settings.json). |
❌ (doporučeno) |
.venv/ |
Místní virtuální prostředí pro Python (vyloučené z nasazení) | ❌ |
.vscode/ |
Konfigurace editoru pro Visual Studio Code Nevyžaduje se pro nasazení. | ❌ |
shared/ |
Obsahuje pomocný kód sdílený v rámci projektu aplikace funkcí. | ❌ |
additional_functions/ |
Používá se pro modulární organizaci kódu – obvykle s podrobnými plány. | ❌ |
tests/ |
Jednotkové testy pro vaši funkční aplikaci Nepublikuje se do Azure. | ❌ |
Dockerfile |
Definuje vlastní kontejner pro nasazení. | ❌ |
[POZNÁMKA!] Při nasazení pomocí
requirements.txtsestavení zahrňte soubor. Pokud nepoužíváte vzdálené sestavení nebo chcete k definování závislostí aplikací použít jiný soubor, můžete provést místní sestavení a nasadit aplikaci s předem sestavenými závislostmi.
Pokyny k testování jednotek najdete v tématu Testování částí. Nasazení kontejnerů najdete v tématu Nasazení s vlastními kontejnery.
Spouštěče a vazby
Azure Functions používá triggery ke spuštění spouštění funkcí a bindings pro připojení kódu k jiným službám, jako jsou úložiště, fronty a databáze. V programovacím modelu Python v2 deklarujete vazby pomocí dekorátorů.
Existují dva hlavní typy vazeb:
- Spouštěče (vstup, který aktivuje funkci)
- Vstupy a výstupy (další zdroje dat nebo cíle)
Další informace o dostupných triggerech a vazbách najdete v tématu Triggery a vazby v Azure Functions.
Příklad: Trigger časovače s Blob vstupem
Tato funkce:
- Spouští se každých 10 minut
- Čtení z objektu blob pomocí vazeb typu sady SDK
- Ukládá výsledky do mezipaměti a zapisuje do dočasného souboru.
import azure.functions as func
import azurefunctions.extensions.bindings.blob as blob
import logging
import tempfile
CACHED_BLOB_DATA = None
app = func.FunctionApp()
@app.function_name(name="TimerTriggerWithBlob")
@app.schedule(schedule="0 */10 * * * *", arg_name="mytimer")
@app.blob_input(arg_name="client",
path="PATH/TO/BLOB",
connection="BLOB_CONNECTION_SETTING")
def timer_trigger_with_blob(mytimer: func.TimerRequest,
client: blob.BlobClient,
context: func.Context) -> None:
global CACHED_BLOB_DATA
if CACHED_BLOB_DATA is None:
# Download blob and save as a global variable
CACHED_BLOB_DATA = client.download_blob().readall()
# Create temp file prefix
my_prefix = context.invocation_id
temp_file = tempfile.NamedTemporaryFile(prefix=my_prefix)
temp_file.write(CACHED_BLOB_DATA)
logging.info(f"Cached data written to {temp_file.name}")
Klíčové koncepty
- Použijte vazby typů SDK pro práci s bohatými typy. Další informace najdete v tématu Vazby typu sady SDK.
- Globální proměnné můžete použít k ukládání drahých výpočtů do mezipaměti, ale jejich stav není zaručený pro zachování napříč prováděními funkcí.
- Dočasné soubory se ukládají do
tmp/a nejsou zaručené, že se zachovají napříč vyvoláním nebo instancemi horizontálního navýšení kapacity. - K kontextu vyvolání funkce můžete přistupovat prostřednictvím třídy Context.
Příklad: Trigger HTTP se vstupem služby Cosmos DB a výstupem centra událostí
Tato funkce:
- Spouštěče na HTTP požadavku
- Čtení dat z Cosmos DB
- Zápis dat do výstupu Event Hubu
- Vrátí odpověď HTTP.
# __init__.py
import azure.functions as func
def main(req: func.HttpRequest,
documents: func.DocumentList,
event: func.Out[str]) -> func.HttpResponse:
# Content from HttpRequest and Cosmos DB input
http_content = req.params.get("body")
doc_id = documents[0]["id"] if documents else "No documents found"
event.set(f"HttpRequest content: {http_content} | CosmosDB ID: {doc_id}")
return func.HttpResponse(
"Function executed successfully.",
status_code=200
)
// function.json
{
"scriptFile": "__init__.py",
"entryPoint": "main",
"bindings": [
{
"type": "httpTrigger",
"direction": "in",
"name": "req",
"methods": ["get", "post"],
"route": "file"
},
{
"type": "http",
"direction": "out",
"name": "$return"
},
{
"type": "cosmosDB",
"direction": "in",
"name": "documents",
"databaseName": "test",
"containerName": "items",
"id": "cosmosdb-input-test",
"connection": "COSMOSDB_CONNECTION_SETTING"
},
{
"type": "eventHub",
"direction": "out",
"name": "event",
"eventHubName": "my-test-eventhub",
"connection": "EVENTHUB_CONNECTION_SETTING"
}
]
}
Klíčové koncepty
- Každá funkce má jeden trigger, ale může mít více vazeb.
- Přidejte vstupy tak, že v
directionzadátefunction.jsonjako „in“. Výstupy majídirectiono hodnotěout. - K podrobnostem žádosti můžete přistupovat prostřednictvím objektu
HttpRequesta vytvořit vlastníHttpResponsepomocí hlaviček, stavového kódu a textu.
import azure.functions as func
app = func.FunctionApp()
@app.function_name(name="HttpTriggerWithCosmosDB")
@app.route(route="file")
@app.cosmos_db_input(arg_name="documents",
database_name="test",
container_name="items",
connection="COSMOSDB_CONNECTION_SETTING")
@app.event_hub_output(arg_name="event",
event_hub_name="my-test-eventhub",
connection="EVENTHUB_CONNECTION_SETTING")
def http_trigger_with_cosmosdb(req: func.HttpRequest,
documents: func.DocumentList,
event: func.Out[str]) -> func.HttpResponse:
# Content from HttpRequest and Cosmos DB input
http_content = req.params.get('body')
doc_id = documents[0]['id']
event.set("HttpRequest content: " + http_content
+ " | CosmosDB ID: " + doc_id)
return func.HttpResponse(
f"Function executed successfully.",
status_code=200
)
Klíčové koncepty
- K definování způsobu vyvolání funkce použijte
@route()nebo dekorátory specifické pro triggery (@timer_trigger@queue_triggera další). - Přidejte vstupy pomocí dekorátorů, jako jsou
@blob_input,@queue_inputa další. - Výstupy můžou být:
- Vráceno přímo (pokud pouze jeden výstup)
- Přiřazeno pomocí
Outvazeb a.set()metody pro více výstupů.
- K podrobnostem žádosti můžete přistupovat prostřednictvím objektu
HttpRequesta vytvořit vlastníHttpResponsepomocí hlaviček, stavového kódu a textu.
Vazby typu sady SDK
U vybraných triggerů a vazeb můžete pracovat s datovými typy implementovanými podkladovými Azure SDKs a architekturami. Pomocí těchto vazeb typu sady SDK můžete pracovat s daty vazeb, jako byste používali podkladovou sadu SDK služby. Další informace najdete v podporovaných vazbách typu sady SDK.
Důležité
Podpora vazeb typu sady SDK pro Python je dostupná pouze v programovacím modelu Python v2.
Proměnné prostředí
Proměnné prostředí v Azure Functions umožňují bezpečně spravovat hodnoty konfigurace, připojovací řetězce a tajné kódy aplikací bez jejich pevně zakódování v kódu funkce.
Můžete definovat proměnné prostředí:
- Místně: v souborulocal.settings.json během místního vývoje.
- V Azure: jako Nastavení aplikace na stránce konfigurace aplikace funkcí na portálu Azure.
Přístup k proměnným přímo v kódu pomocí os.environ nebo os.getenv.
setting_value = os.getenv("myAppSetting", "default_value")
Poznámka:
Azure Functions také rozpozná systémové proměnné prostředí, které konfigurují Functions runtime a chování pracovní procesu Pythonu. Tyto proměnné se explicitně nepoužívají v kódu funkce, ale ovlivňují způsob spouštění vaší aplikace. Úplný seznam systémových proměnných prostředí najdete v referenčních informacích k nastavení aplikace.
Správa balíčků
Pokud chcete v aplikaci Azure Functions použít jiné balíčky Python, vypište je do souboru requirements.txt v kořenovém adresáři projektu. Tyto balíčky se naimportují systémem importu Python a pak na tyto balíčky můžete odkazovat obvyklým způsobem.
Další informace o vytváření a nasazení s externími závislostmi najdete v tématu Nástavové možnosti pro aplikace funkcí Python.
Například následující ukázka ukazuje, jak requests je modul zahrnutý a používaný v aplikaci funkcí.
<requirements.txt>
requests==2.31.0
Nainstalujte balíček místně pomocí pip install -r requirements.txtsouboru .
Jakmile je balíček nainstalovaný, můžete ho importovat a používat v kódu funkce:
import azure.functions as func
import requests
def main(req: func.HttpRequest) -> func.HttpResponse:
r = requests.get("https://api.github.com")
return func.HttpResponse(f"Status: {r.status_code}")
import azure.functions as func
import requests
app = func.FunctionApp()
@app.function_name(name="HttpExample")
@app.route(route="call_api")
def main(req: func.HttpRequest) -> func.HttpResponse:
r = requests.get("https://api.github.com")
return func.HttpResponse(f"Status: {r.status_code}")
Úvahy
- Konflikty s integrovanými moduly:
- Vyhněte se pojmenování složek projektu po Python standardních knihoven (například
email/,json/). - Do
loggingnezahrnujte Python nativní knihovny (napříkladasyncio,uuidneborequirements.txt).
- Vyhněte se pojmenování složek projektu po Python standardních knihoven (například
- Nasazení:
- Chcete-li zabránit
ModuleNotFoundchybám, ujistěte se, že jsou uvedeny všechny požadované závislosti vrequirements.txt. - Pokud aktualizujete Python verzi aplikace, znovu ji znovu nasaďte na novou verzi Python, aby nedocházelo ke konfliktům závislostí s dříve sestavenými balíčky.
- Chcete-li zabránit
- Závislosti jiného typu než PyPI:
- Můžete do své aplikace zahrnout závislosti, které nejsou dostupné na PyPI, jako jsou místní balíčky, wheel soubory nebo soukromé feedy. Pokyny k nastavení najdete v tématu Vlastní závislosti v Azure Functions pro Python.
- Azure Functions Python závislostí pracovního procesu:
- Pokud váš balíček obsahuje určité knihovny, které můžou kolidovat se závislostmi pracovního procesu (například
protobufgrpcio), nakonfigurujte PYTHON_ISOLATE_WORKER_DEPENDENCIES na hodnotu 1 v nastavení aplikace, aby aplikace nemohla odkazovat na závislosti pracovního procesu. U Python verze 3.13 a vyšší je ve výchozím nastavení povolená funkce this.
- Pokud váš balíček obsahuje určité knihovny, které můžou kolidovat se závislostmi pracovního procesu (například
Spuštění a nasazení
Tato část obsahuje informace o spouštění funkcí místně, podpora verzí Pythonu, možnosti sestavení a nasazení a konfiguraci modulu runtime. Tyto informace slouží k úspěšnému spuštění aplikace funkcí v místním prostředí i v prostředích Azure.
Lokální spuštění
Aplikaci funkcí Python můžete spustit a otestovat na místním počítači před nasazením do Azure.
Použití nástrojů Azure Functions Core Tools
Nainstalujte Azure Functions Core Tools a spusťte místní modul runtime spuštěním příkazu func start z kořenového adresáře projektu:
func start
Když spustíte funkční aplikaci místně, nástroje Core Tools zobrazí všechny funkce, které pro vaši aplikaci najde:
Functions:
http_trigger: http://localhost:7071/api/http_trigger
Další informace o používání nástrojů Core Tools najdete v tématu Develop Azure Functions místně pomocí nástrojů Core Tools.
Přímé vyvolání funkce
Pomocí azure-functions >= 1.21.0 můžete také volat funkce přímo pomocí interpretu Python bez spuštění nástrojů Core Tools. Tento přístup je užitečný pro rychlé testy jednotek:
# function_app.py
import azure.functions as func
app = func.FunctionApp(http_auth_level=func.AuthLevel.ANONYMOUS)
@app.route(route="http_trigger")
def http_trigger(req: func.HttpRequest) -> func.HttpResponse:
return "Hello, World!"
# Test the function directly
print(http_trigger(None))
Pokud chcete zobrazit výstup, spusťte soubor přímo s Python:
> python function_app.py
Hello, World!
# __init__.py
import azure.functions as func
def main(req: func.HttpRequest) -> func.HttpResponse:
return func.HttpResponse("Hello, World!")
# Test the function directly
print(main(None))
Pokud chcete zobrazit výstup, spusťte soubor přímo s Python:
> python __init__.py
Hello, World!
Tento přístup nevyžaduje žádné další balíčky ani nastavení a je ideální pro rychlé ověření během vývoje. Podrobnější testování najdete v tématu Testování částí.
Podporované verze Python
Azure Functions podporuje verze Python uvedené v Supported languages in Azure Functions. Další obecné informace najdete v zásadách podpory modulu runtime Azure Functions.
Důležité
Pokud změníte Python verzi aplikace funkcí, musíte aplikaci znovu sestavit a znovu nasadit pomocí nové verze. Existující artefakty nasazení a závislosti nejsou automaticky přestavěny při změně verze Pythonu.
Build and Deployment
Další informace o doporučeném mechanismu sestavení pro váš scénář najdete v tématu Možnosti sestavení. Obecný přehled nasazení najdete v tématu nasazovací technologie v prostředí Azure Functions.
Rychlé porovnání mechanismů nasazení
| Nástroj / platforma | Příkaz / akce | Nejlepší případ použití |
|---|---|---|
| Azure Functions Core Tools | func azure functionapp publish <APP_NAME> |
Ideální pro běhy CI, místní automatizaci nebo při práci napříč platformami. |
| AZ CLI | az functionapp deployment source config-zip |
Užitečné při skriptování nasazení mimo Core Tools. Funguje dobře v automatizovaných kanálech nebo cloudových terminálech (Azure Cloud Shell). |
| Visual Studio Code (rozšíření Azure Functions) | Paleta příkazů → "Azure Functions: Deploy to Azure..." | Nejvhodnější pro začátečníky nebo interaktivní nasazení. Automaticky zpracovává balení a sestavování. |
| GitHub Actions | Azure/functions-action@v1 |
Ideální pro CI/CD založené na GitHubu. Umožňuje automatizovaná nasazení při push nebo sloučení PR. |
| Azure Pipelines |
AzureFunctionApp@2 Úkol |
Podniková CI/CD s využitím Azure DevOps. Nejvhodnější pro řízené pracovní postupy vydávání verzí, řízené buildy a vícestupňové pipeliny. |
| Vlastní nasazení kontejneru | Nasdílení → kontejneru az functionapp create --image <container> |
Vyžaduje se, když potřebujete balíčky na úrovni operačního systému, vlastní Python sestavení, připnuté moduly runtime nebo nepodporované závislosti (například systémové knihovny, místní binární soubory). |
| Vytvoření funkce založené na portálu | Vytvořte funkci v Azure portálu → v integrovaném editoru | Používejte pouze pro jednoduché funkce bez závislostí. Skvělé pro ukázky nebo učení, ale nedoporučuje se pro aplikace vyžadující balíčky třetích stran. |
Poznámka:
Vytvoření funkce založené na portálu nepodporuje závislosti třetích stran a nedoporučuje se pro vytváření produkčních aplikací. Nemůžete instalovat ani odkazovat balíčky mimo azure-functions a integrovanou standardní knihovnu Python.
Důležité
Po 30. září 2028 se v plánu Consumption vyřadí možnost hostovat aplikaci funkcí v Linuxu. Abyste se vyhnuli přerušení, migrujte stávající aplikace plánu Consumption, které běží v Linuxu, do plánu Flex Consumption před tímto datem. Na aplikace spuštěné na Windows v plánu Consumption tato změna nemá vliv.
Po 30. září 2025 se do plánu Consumption pro Linux nepřidají žádné nové funkce a žádná podpora zásobníku nových jazyků. Poslední podporované jazykové verze pro Linux Consumption jsou: .NET 9, Python 3.12, Node.js 22, PowerShell 7.4 a Java 21. Novější jazykové verze nejsou podporovány pro využití Linuxu.
Další informace najdete v dokumentu Migrace aplikací z plánu Consumption do plánu Flex Consumption.
aktualizace Python verze 3.13 nebo novější
Počínaje Python 3.13 Azure Functions zavádí několik hlavních vylepšení modulu runtime a výkonu, která ovlivňují vytváření a spouštění aplikací. Mezi klíčové změny patří:
Správa verzí modulu runtime: Nyní můžete volitelně připnout nebo upgradovat aplikaci na konkrétní verze pracovního procesu Python odkazováním na balíček
azure-functions-runtimeve vašemrequirements.txt.Bez povolené správy verzí běží vaše aplikace na výchozí verzi modulu runtime Python, kterou spravuje služba Functions. Soubor requirements.txt je nutné upravit tak, aby požadoval nejnovější vydanou verzi, předběžnou verzi nebo připnul aplikaci na konkrétní verzi modulu runtime Python.
Správu verzí modulu runtime povolíte přidáním odkazu na balíček modulu runtime Python do souboru requirements.txt, kde hodnota přiřazená balíčku určuje použitou verzi modulu runtime.
Vyhněte se připnutí jakékoli produkční aplikace k předběžné verzi modulu runtime (alpha, beta nebo dev).
Pokud chcete být informováni o změnách, pravidelně si projděte poznámky k vydání prostředí Python runtime.
Následující tabulka označuje chování správy verzí na základě hodnoty verze tohoto nastavení v souboru requirements.txt :
Version Příklad Chování Žádná sada hodnot azure-functions-runtimeVaše aplikace Python verze 3.13 nebo novější běží na nejnovější dostupné verzi modulu runtime Python Functions. Tato možnost je nejvhodnější pro udržování aktuálního stavu díky vylepšením a funkcím platformy, protože vaše aplikace automaticky obdrží nejnovější stabilní aktualizace modulu runtime. Připnuto ke konkrétní verzi azure-functions-runtime==1.2.0Vaše aplikace Python verze 3.13 nebo novější zůstává na připnuté verzi modulu runtime a nepřijímá automatické aktualizace. Místo toho musíte ručně aktualizovat připnutou verzi, abyste mohli využívat nové funkce, opravy a vylepšení běhového prostředí. Připnutí se doporučuje pro kritické produkční úlohy, u kterých je důležitá stabilita a předvídatelnost. Připnutí také umožňuje otestovat aplikaci na předem připravených verzích modulu runtime během vývoje. Žádný odkaz na balíček není k dispozici Pokud nenastavíte azure-functions-runtime, vaše aplikace Python 3.13 nebo novější poběží na výchozí verzi modulu runtime Python, která zaostává za nejnovější vydanou verzí. Funkce pravidelně provádí aktualizace. Tato možnost zajišťuje stabilitu a širokou kompatibilitu. Přístup k nejnovějším funkcím a opravám se ale zpozdí, dokud se neaktualizuje výchozí verze.
Izolace závislostí: Závislosti vaší aplikace (například
grpcioneboprotobuf) jsou plně izolované od závislostí pracovního procesu, což brání konfliktům verzí. Nastavení aplikacePYTHON_ISOLATE_WORKER_DEPENDENCIESnebude mít žádný vliv na aplikace spuštěné na Python 3.13 nebo novější.Zjednodušené nastavení streamování HTTP – nevyžaduje se žádné speciální nastavení aplikace.
Byla odebrána podpora rozšíření pracovních procesů a funkcí sdílené paměti.
Správa verzí modulu runtime: Nyní můžete volitelně připnout nebo upgradovat aplikaci na konkrétní verze pracovního procesu Python odkazováním na balíček
azure-functions-runtime-v1ve vašemrequirements.txt.Bez povolené správy verzí běží vaše aplikace na výchozí verzi modulu runtime Python, kterou spravuje služba Functions. Soubor requirements.txt je nutné upravit tak, aby požadoval nejnovější vydanou verzi, předběžnou verzi nebo připnul aplikaci na konkrétní verzi modulu runtime Python.
Správu verzí modulu runtime povolíte přidáním odkazu na balíček modulu runtime Python do souboru requirements.txt, kde hodnota přiřazená balíčku určuje použitou verzi modulu runtime.
Vyhněte se připnutí jakékoli produkční aplikace k předběžné verzi modulu runtime (alpha, beta nebo dev).
Pokud chcete být informováni o změnách, pravidelně si projděte poznámky k vydání prostředí Python runtime.
Následující tabulka označuje chování správy verzí na základě hodnoty verze tohoto nastavení v souboru requirements.txt :
Version Příklad Chování Žádná sada hodnot azure-functions-runtime-v1Vaše aplikace Python verze 3.13 nebo novější běží na nejnovější dostupné verzi modulu runtime Python Functions. Tato možnost je nejvhodnější pro udržování aktuálního stavu díky vylepšením a funkcím platformy, protože vaše aplikace automaticky obdrží nejnovější stabilní aktualizace modulu runtime. Připnuto ke konkrétní verzi azure-functions-runtime-v1==1.2.0Vaše aplikace Python verze 3.13 nebo novější zůstává na připnuté verzi modulu runtime a nepřijímá automatické aktualizace. Místo toho musíte ručně aktualizovat připnutou verzi, abyste mohli využívat nové funkce, opravy a vylepšení běhového prostředí. Připnutí se doporučuje pro kritické produkční úlohy, u kterých je důležitá stabilita a předvídatelnost. Připnutí také umožňuje otestovat aplikaci na předem připravených verzích modulu runtime během vývoje. Žádný odkaz na balíček není k dispozici Pokud nenastavíte azure-functions-runtime-v1, vaše aplikace Python 3.13 nebo novější poběží na výchozí verzi modulu runtime Python, která zaostává za nejnovější vydanou verzí. Funkce pravidelně provádí aktualizace. Tato možnost zajišťuje stabilitu a širokou kompatibilitu. Přístup k nejnovějším funkcím a opravám se ale zpozdí, dokud se neaktualizuje výchozí verze.
Izolace závislostí: Závislosti vaší aplikace (například
grpcioneboprotobuf) jsou plně izolované od závislostí pracovního procesu, což brání konfliktům verzí. Nastavení aplikacePYTHON_ISOLATE_WORKER_DEPENDENCIESnebude mít žádný vliv na aplikace spuštěné na Python 3.13 nebo novější.Byla odebrána podpora rozšíření pracovních procesů a funkcí sdílené paměti.
Pozorovatelnost a testování
Tato část se věnuje logging, monitoring a testování, které vám pomůžou ladit problémy, sledovat výkon a zajistit spolehlivost aplikací funkcí Python.
Protokolování a monitorování
Azure Functions zpřístupňuje kořenový protokolovací nástroj, který můžete použít přímo s integrovaným modulem logging Python. Všechny zprávy napsané pomocí tohoto protokolovacího nástroje se automaticky posílají do Application Insights při spuštění aplikace v Azure.
Protokolování umožňuje zaznamenávat informace o době běhu a diagnostikovat problémy bez potřeby jakéhokoli dalšího nastavení.
Příklad protokolování pomocí triggeru HTTP
import logging
import azure.functions as func
def main(req: func.HttpRequest) -> func.HttpResponse:
logging.debug("Example debug log")
logging.info("Example info log")
logging.warning("Example warning")
logging.error("Example error log")
return func.HttpResponse("OK")
import logging
import azure.functions as func
app = func.FunctionApp()
@app.route(route="http_trigger")
def http_trigger(req) -> func.HttpResponse:
logging.debug("Example debug log")
logging.info("Example info log")
logging.warning("Example warning")
logging.error("Example error log")
return func.HttpResponse("OK")
Můžete použít úplnou sadu úrovní protokolování (debug, info, warning, error, critical) a zobrazí se na portálu Azure v části Protokoly nebo Application Insights.
Další informace o monitorování Azure Functions na portálu najdete v tématu Monitor Azure Functions.
Poznámka:
Pokud chcete zobrazit protokoly ladění v Application Insights, vyžaduje se další nastavení. Tuto funkci můžete povolit nastavením PYTHON_ENABLE_DEBUG_LOGGING na 1 a nastavením logLevel na trace nebo debug ve vašem souboru host.json. Ve výchozím nastavení nejsou protokoly ladění ve službě Application Insights viditelné.
Protokolování z vláken běžících na pozadí
Pokud vaše funkce spustí nové vlákno a potřebuje protokolovat z daného vlákna, nezapomeňte do vlákna předat context argument.
context obsahuje vláknově lokální úložiště a aktuální invocation_id, které musí být nastaveny v pracovním vlákně, aby protokoly byly správně přiřazeny ke spuštění funkce.
import logging
import threading
import azure.functions as func
def main(req: func.HttpRequest, context) -> func.HttpResponse:
logging.info("Function started")
t = threading.Thread(target=log_from_thread, args=(context,))
t.start()
return "okay"
def log_from_thread(context):
# Associate the thread with the current invocation
context.thread_local_storage.invocation_id = context.invocation_id
logging.info("Logging from a background thread")
import azure.functions as func
import logging
import threading
app = func.FunctionApp()
@app.route(route="http_trigger")
def http_trigger(req, context) -> func.HttpResponse:
logging.info("Function started")
t = threading.Thread(target=log_from_thread, args=(context,))
t.start()
return "okay"
def log_from_thread(context):
# Associate the thread with the current invocation
context.thread_local_storage.invocation_id = context.invocation_id
logging.info("Logging from a background thread")
Konfigurace vlastních protokolovacích nástrojů
Vlastní protokolovací nástroje můžete nakonfigurovat v Python, když potřebujete větší kontrolu nad chováním protokolování, jako je vlastní formátování, filtrování protokolů nebo integrace třetích stran.
Ke konfiguraci vlastního protokolovacího nástroje použijte logging.getLogger() Python s vlastním názvem a podle potřeby přidejte obslužné rutiny nebo formátovací rutiny.
import logging
custom_logger = logging.getLogger('my_custom_logger')
Podpora OpenTelemetry
Azure Functions pro Python také podporuje OpenTelemetry, což umožňuje generovat trasování, metriky a protokoly ve standardizovaném formátu. Použití OpenTelemetry je zvláště cenné pro distribuované aplikace nebo scénáře, ve kterých chcete exportovat telemetrii do nástrojů mimo Application Insights (například Grafana nebo Jaeger).
Pokyny k nastavení a vzorový kód najdete v našem rychlém startu pro OpenTelemetry pro Azure Functions (Python).
Testování částí
Pište a spouštějte jednotkové testy pro vaše funkce pomocí pytest.
Funkce Python jako jiné Python kódu můžete testovat pomocí standardních testovacích architektur. U většiny vazeb můžete vytvořit napodobený vstupní objekt vytvořením instance příslušné třídy z azure.functions balíčku.
Pomocí my_function jako příkladu je následující ukázka testem funkce aktivované protokolem HTTP:
Nejprve vytvořte <soubor project_root>/function_app.py a implementujte my_function funkci jako trigger HTTP.
# <project_root>/function_app.py
import azure.functions as func
import logging
app = func.FunctionApp()
# Define the HTTP trigger that accepts the ?value=<int> query parameter
# Double the value and return the result in HttpResponse
@app.function_name(name="my_function")
@app.route(route="hello")
def my_function(req: func.HttpRequest) -> func.HttpResponse:
logging.info('Executing myfunction.')
initial_value: int = int(req.params.get('value'))
doubled_value: int = initial_value * 2
return func.HttpResponse(
body=f"{initial_value} * 2 = {doubled_value}",
status_code=200
)
Můžete začít psát testovací případy pro trigger HTTP.
# <project_root>/test_my_function.py
import unittest
import azure.functions as func
from function_app import my_function
class TestFunction(unittest.TestCase):
def test_my_function(self):
# Construct a mock HTTP request.
req = func.HttpRequest(method='GET',
body=None,
url='/api/my_function',
params={'value': '21'})
# Call the function.
func_call = main.build().get_user_function()
resp = func_call(req)
# Check the output.
self.assertEqual(
resp.get_body(),
b'21 * 2 = 42',
)
Ve složce virtuálního prostředí Python můžete aplikaci otestovat spuštěním následujících příkazů:
pip install pytest
pytest test_my_function.py
V terminálu se zobrazí výsledky pytest takto:
============================================================================================================ test session starts ============================================================================================================
collected 1 item
test_my_function.py . [100%]
============================================================================================================= 1 passed in 0.24s =============================================================================================================
Optimalizace a pokročilá témata
Další informace o optimalizaci aplikací Python functions najdete v těchto článcích:
Související články
Další informace o službě Functions najdete v těchto článcích:
- Dokumentace k rozhraní API balíčku Azure Functions
- Doporučené postupy pro Azure Functions
- Triggery a vazby Azure Functions
- Připojení pro Blob Storage
- HTTP a webhookové vazby
- Vazby fronty úložiště
- Triggery časovače
Máte problémy s používáním Python? Dejte nám vědět a zapište problém.