Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of mappen te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen om mappen te wijzigen.
Azure Functions is een serverloze rekenservice waarmee u gebeurtenisgestuurde code kunt uitvoeren zonder infrastructuur in te richten of te beheren. Functie-uitvoeringen worden geactiveerd door gebeurtenissen zoals HTTP-aanvragen, wachtrijberichten, timers of wijzigingen in de opslag en automatisch schalen op basis van aanvraag.
Deze handleiding is specifiek gericht op het bouwen van op Python gebaseerde Azure Functions en helpt u bij het volgende:
- Functie-apps lokaal maken en uitvoeren
- Meer informatie over het Python programmeermodel
- Uw toepassing organiseren en configureren
- Uw app implementeren en bewaken in Azure
- Aanbevolen procedures toepassen voor schalen en prestaties
Zoekt u een conceptueel overzicht? Zie de Azure Functions Developer Reference.
Bent u geïnteresseerd in praktijkgebruiksvoorbeelden? Verken de pagina Scenario's en voorbeelden .
Aan de slag
Kies de omgeving die past bij uw werkstroom en spring in Azure Functions voor Python:
- Visual Studio Code Snelstartgids
- Core Tools Snelle Startgids
Uw functie-app bouwen
In deze sectie worden de essentiële onderdelen beschreven voor het maken en structureren van uw Python functie-app. Onderwerpen zijn onder andere het programmeermodel, projectstructuur, triggers en bindingen en afhankelijkheidsbeheer.
Programmeermodel
Functions ondersteunt twee versies van het Python programmeermodel:
| Versie | Beschrijving |
|---|---|
| 2.x | Gebruik een op decorator gebaseerde benadering om triggers en bindingen rechtstreeks in uw Python codebestand te definiëren. U implementeert elke functie als een globale, staatloze methode in een bestand of een blauwdrukbestand waarnaar wordt verwezen. Deze modelversie wordt aanbevolen voor nieuwe Python-apps. |
| 1.x | U definieert triggers en bindingen voor elke functie in een afzonderlijk bestand. U implementeert elke functie als een globale, staatloze methode in uw Python codebestand. Deze versie van het model ondersteunt verouderde apps. |
Dit artikel is gericht op een specifieke Python modelversie. Kies de gewenste versie bovenaan het artikel.
Belangrijk
Gebruik het v2-programmeermodel voor een op decorator gebaseerde benadering om triggers en bindingen rechtstreeks in uw code te definiëren.
In het programmeermodel Python v1 wordt elke functie gedefinieerd als een globale, staatloze methode main() in een bestand met de naam __init__.py.
De triggers en bindingen van de functie worden afzonderlijk geconfigureerd in een bestand en de bindingswaarden worden gebruikt als parameters in uw methode.
Voorbeeld
Hier volgt een eenvoudige functie die reageert op een HTTP-aanvraag:
# __init__.py
def main(req):
user = req.params.get('user')
return f'Hello, {user}!'
Dit is het bijbehorende bestand:
{
"scriptFile": "__init__.py",
"bindings": [
{
"authLevel": "function",
"type": "httpTrigger",
"direction": "in",
"name": "req",
"methods": [
"get",
"post"
]
},
{
"type": "http",
"direction": "out",
"name": "$return"
}
]
}
Belangrijke concepten
- De functie heeft één HTTP-trigger.
- Het HttpRequest-object bevat aanvraagheaders, queryparameters, routeparameters en de hoofdtekst van het bericht. Met deze functie wordt de waarde van de queryparameter opgehaald uit de parameter van het HttpRequest-object .
- Als u een naam in dit voorbeeld wilt verzenden, voegt u deze toe aan de weergegeven functie-URL. Als u bijvoorbeeld lokaal werkt, kan de volledige URL er als volgt uitzien. Zie Triggers en bindingen voor voorbeelden van het gebruik van bindingen.
Gebruik de SDK en voeg typeaantekeningen toe om ondersteuning voor IntelliSense en editor te verbeteren:
# __init__.py
import azure.functions as func
def http_trigger(req: func.HttpRequest) -> str:
# requirements.txt
azure-functions
De bibliotheek
De bibliotheek azure-functions Python biedt de kerntypen die worden gebruikt voor interactie met de Azure Functions runtime. Als u alle beschikbare typen en methoden wilt zien, gaat u naar de API.
Uw functiecode kan het volgende gebruiken :
- Invoergegevens van Access-trigger (bijvoorbeeld , )
- Uitvoerwaarden maken (zoals )
- Interactie met door runtime geleverde context en bindingsgegevens
Als u in uw app gebruikt, moet deze zijn opgenomen in uw projectafhankelijkheden.
Notitie
De bibliotheek azure-functions definieert het programmeeroppervlak voor Python Azure Functions, maar is geen SDK voor algemeen gebruik. Gebruik deze functie specifiek voor het ontwerpen en uitvoeren van functies in de Azure Functions runtime.
Alternatief toegangspunt
U kunt het standaardgedrag van een functie wijzigen door de en eigenschappen in het bestand op te geven. Gebruik bijvoorbeeld het volgende bestand function.json om de runtime te instrueren de methode custom_entry() in het bestand main.py als invoerpunt voor uw Azure-functie te gebruiken.
{
"scriptFile": "main.py",
"entryPoint": "custom_entry",
"bindings": [
...
]
}
Mapstructuur
Gebruik de volgende structuur voor een Python Azure Functions project:
<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
Belangrijke bestanden en mappen
| bestand/map | Beschrijving | Vereist voor uitvoering van de app in Azure |
|---|---|---|
my_first_function/ |
Map voor een enkele functie. | ✅ |
__init__.py/ |
Hoofdscript waarin de functiecode is gedefinieerd. | ✅ |
function.json/ |
Bevat de bindingsconfiguratie voor de functie. | ✅ |
host.json |
Globale configuratie voor alle functies in de app. | ✅ |
requirements.txt |
Python afhankelijkheden die tijdens het publiceren zijn geïnstalleerd bij het gebruik van remote build. | (aanbevolen voor pakketbeheer) |
local.settings.json |
Instellingen en geheimen voor apps die alleen lokaal zijn (nooit gepubliceerd). | (vereist voor lokale ontwikkeling) |
.funcignore |
Hiermee geeft u bestanden en mappen die moeten worden uitgesloten van implementatie (bijvoorbeeld , ). | (aanbevolen) |
.venv/ |
Lokale virtuele omgeving voor Python (uitgesloten van implementatie). | ❌ |
.vscode/ |
Editorconfiguratie voor Visual Studio Code. Niet vereist voor implementatie. | ❌ |
shared/ |
Bevat helpercode die wordt gedeeld in het function-app-project | ❌ |
additional_functions/ |
Wordt gebruikt voor modulaire code-organisatie, meestal met blauwdrukken. | ❌ |
tests/ |
Eenheidstests voor uw functie-app. Niet vrijgegeven in Azure. | ❌ |
Dockerfile |
Definieert een aangepaste container voor implementatie. | ❌ |
In het programmeermodel Python v2 gebruikt Azure Functions een benadering op basis van decorator om triggers en bindingen rechtstreeks in uw code te definiëren. Elke functie wordt geïmplementeerd als een globale, staatloze methode in een bestand.
Voorbeeld
Hier volgt een eenvoudige functie die reageert op een HTTP-aanvraag:
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
Belangrijke concepten
- De code importeert het pakket en gebruikt decorators en typen om de functie-app te definiëren.
- De functie heeft één HTTP-trigger.
- Het HttpRequest-object bevat aanvraagheaders, queryparameters, routeparameters en de hoofdtekst van het bericht. Met deze functie wordt de waarde van de queryparameter opgehaald uit de parameter van het HttpRequest-object .
- Als u een naam in dit voorbeeld wilt verzenden, voegt u deze toe aan de weergegeven functie-URL. Als u bijvoorbeeld lokaal werkt, kan de volledige URL er als volgt uitzien. Zie Triggers en bindingen voor voorbeelden van het gebruik van bindingen.
De bibliotheek
De bibliotheek azure-functions Python is een belangrijk onderdeel van het Azure Functions programmeermodel. Het biedt de decorators, trigger- en bindingstypen en aanvraag-/antwoordobjecten die worden gebruikt om functies tijdens runtime te definiëren en ermee te communiceren.
Als u alle beschikbare typen en decorators wilt zien, gaat u naar de API.
De code van uw functie-app is afhankelijk van deze bibliotheek voor het volgende:
- Alle functies definiëren met behulp van het object
- Triggers en bindingen declareren (bijvoorbeeld , )
- Toegewezen toegang tot getypte invoer en uitvoer (zoals en , en Uit`)
De moet worden opgenomen in de projectafhankelijkheden. Zie pakketbeheer voor meer informatie.
Notitie
De bibliotheek azure-functions definieert het programmeeroppervlak voor Python Azure Functions, maar is geen SDK voor algemeen gebruik. Gebruik deze functie specifiek voor het ontwerpen en uitvoeren van functies in de Azure Functions runtime.
Typeaantekeningen gebruiken om ondersteuning voor IntelliSense en editor te verbeteren:
def http_trigger(req: func.HttpRequest) -> str:
Organiseren met blauwdrukken
Voor grotere of modulaire apps gebruikt u blueprints om functies in afzonderlijke Python bestanden te definiëren en ze te registreren bij uw hoofd-app. Met deze scheiding blijft uw code georganiseerd en herbruikbaar.
Een blauwdruk definiëren en registreren:
Definieer een blauwdruk in een ander Python-bestand, zoals
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!")Registreer de blauwdruk in het hoofdbestand :
import azure.functions as func from http_blueprint import bp app = func.FunctionApp() app.register_functions(bp)
Met behulp van blauwdrukken kunt u het volgende doen:
- Uw app opsplitsen in herbruikbare modules
- Gerelateerde functies gegroepeerd houden op bestand of functie
- Blauwdrukken uitbreiden of delen over projecten heen
Notitie
Durable Functions ondersteunt ook blauwdrukken met behulp van azure-functions-durable.
Voorbeeld weergeven →
Mapstructuur
Gebruik de volgende structuur voor een Python Azure Functions project:
<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
Belangrijke bestanden en mappen
| bestand/map | Beschrijving | Vereist voor uitvoering van de app in Azure |
|---|---|---|
function_app.py |
Hoofdscript waarin Azure Functions en triggers worden gedefinieerd met behulp van decorators. | ✅ |
host.json |
Globale configuratie voor alle functies in de app. | ✅ |
requirements.txt |
Python afhankelijkheden die tijdens het publiceren zijn geïnstalleerd bij het gebruik van remote build. | (aanbevolen voor pakketbeheer) |
local.settings.json |
Instellingen en geheimen voor apps die alleen lokaal zijn (nooit gepubliceerd). | (vereist voor lokale ontwikkeling) |
.funcignore |
Hiermee geeft u bestanden en mappen die moeten worden uitgesloten van implementatie (bijvoorbeeld , ). | (aanbevolen) |
.venv/ |
Lokale virtuele omgeving voor Python (uitgesloten van implementatie). | ❌ |
.vscode/ |
Editorconfiguratie voor Visual Studio Code. Niet vereist voor implementatie. | ❌ |
shared/ |
Bevat helpercode die wordt gedeeld in het function-app-project | ❌ |
additional_functions/ |
Wordt gebruikt voor modulaire code-organisatie, meestal met blauwdrukken. | ❌ |
tests/ |
Eenheidstests voor uw functie-app. Niet gepubliceerd op Azure. | ❌ |
Dockerfile |
Definieert een aangepaste container voor implementatie. | ❌ |
[OPMERKING!] Neem een bestand op wanneer u implementeert met externe build. Als u geen externe build gebruikt of een ander bestand wilt gebruiken voor het definiëren van app-afhankelijkheden, kunt u een lokale build uitvoeren en de app implementeren met vooraf gebouwde afhankelijkheden.
Zie Eenheidstests voor hulp bij het testen van eenheden. Zie Implementeren met aangepaste containers voor containerimplementaties.
Triggers en bindingen
Azure Functions gebruikt triggers om de uitvoering van functies te starten en bindingen om uw code te verbinden met andere services, zoals opslag, wachtrijen en databases. In het Python v2-programmeermodel declareert u bindingen met behulp van decorators.
Er bestaan twee hoofdtypen bindingen:
- Triggers (invoer waarmee de functie wordt gestart)
- Invoer en uitvoer (extra gegevensbronnen of bestemmingen)
Zie Triggers en bindingen in Azure Functions voor meer informatie over de beschikbare triggers en bindingen.
Voorbeeld: Timertrigger met Blob-invoer
Deze functie:
- Triggers elke 10 minuten
- Leesbewerkingen uit een blob met behulp van SDK-typebindingen
- Slaat resultaten en schrijfbewerkingen op in een tijdelijk bestand
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}")
Belangrijke concepten
- Gebruik SDK-typebindingen om te werken met uitgebreide typen. Zie SDK-typebindingen voor meer informatie.
- U kunt globale variabelen gebruiken om dure berekeningen in de cache te zetten, maar hun toestand wordt niet gegarandeerd behouden bij uitvoeringen van functies.
- Tijdelijke bestanden worden opgeslagen in en blijven niet gegarandeerd behouden tussen aanroepen of uitschaalinstanties.
- U hebt toegang tot de aanroepcontext van een functie via de contextklasse.
Voorbeeld: HTTP-trigger met Cosmos DB-invoer en Event Hub-uitvoer
Deze functie:
- Triggers op een HTTP-aanvraag
- Lezen uit een Cosmos DB
- Schrijft naar een Event Hub-uitvoer
- Retourneert een HTTP-antwoord
# __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"
}
]
}
belangrijke concepten
- Elke functie heeft één trigger, maar kan meerdere bindingen hebben.
- Voeg invoer toe door de waarde 'in' op te geven in . Uitvoer heeft een van .
- U kunt toegang krijgen tot aanvraagdetails via het object en een aangepaste maken met headers, statuscode en hoofdtekst.
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
)
Belangrijke concepten
- Gebruik of triggerspecifieke decorators (, en andere) om te definiëren hoe uw functie wordt aangeroepen.
- Voeg invoer toe met behulp van decorators zoals , en andere.
- Uitvoer kan het volgende zijn:
- Rechtstreeks geretourneerd (als er slechts één uitvoer is)
- Toegewezen met behulp van bindingen en de methode voor meerdere uitvoer.
- U kunt toegang krijgen tot aanvraagdetails via het object en een aangepaste maken met headers, statuscode en hoofdtekst.
SDK-typebindingen
Voor geselecteerde triggers en bindingen kunt u werken met gegevenstypen die zijn geïmplementeerd door de onderliggende Azure-SDK's en frameworks. Door deze SDK-typebindingen te gebruiken, kunt u communiceren met bindingsgegevens alsof u de onderliggende service-SDK gebruikt. Zie ondersteunde SDK-typebindingen voor meer informatie.
Belangrijk
Ondersteuning voor SDK-typebindingen voor Python is alleen beschikbaar in het programmeermodel Python v2.
Omgevingsvariabelen
Met omgevingsvariabelen in Azure Functions kunt u configuratiewaarden, verbindingsreeksen en app-geheimen veilig beheren zonder deze in uw functiecode vast te leggen.
U kunt omgevingsvariabelen definiëren:
- Lokaal: in het local.settings.json-bestand, tijdens lokale ontwikkeling.
- In Azure: als Application Settings op de configuratiepagina van uw functie-app in de Azure-portal.
Open de variabelen rechtstreeks in uw code met behulp van of .
setting_value = os.getenv("myAppSetting", "default_value")
Notitie
Azure Functions herkent ook systeemomgevingsvariabelen die de Functions-runtime en Python werkrolgedrag configureren. Deze variabelen worden niet expliciet gebruikt in uw functiecode, maar hebben wel invloed op de manier waarop uw app wordt uitgevoerd. Zie de naslaginformatie over app-instellingen voor een volledige lijst met omgevingsvariabelen van het systeem.
Pakketbeheer
Als u andere Python-pakketten in uw Azure Functions-app wilt gebruiken, vermeldt u deze in een requirements.txt-bestand in de hoofdmap van uw project. Deze pakketten worden geïmporteerd door het importsysteem van Python en u kunt vervolgens naar deze pakketten verwijzen zoals gebruikelijk.
Zie Build Options for Python Function Apps voor meer informatie over het bouwen en implementeren van opties voor externe afhankelijkheden.
In het volgende voorbeeld ziet u bijvoorbeeld hoe de module wordt opgenomen en gebruikt in de functie-app.
<requirements.txt>
requests==2.31.0
Installeer het pakket lokaal met .
Zodra het pakket is geïnstalleerd, kunt u het importeren en gebruiken in uw functiecode:
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}")
Overwegingen
- Conflicten met ingebouwde modules:
- Vermijd het benoemen van projectmappen na Python standaardbibliotheken (bijvoorbeeld
email/,json/). - Neem Python systeemeigen bibliotheken (zoals
logging,asyncioofuuid) niet op inrequirements.txt.
- Vermijd het benoemen van projectmappen na Python standaardbibliotheken (bijvoorbeeld
- Implementatie:
- Om fouten te voorkomen, moet u ervoor zorgen dat alle vereiste afhankelijkheden worden vermeld in .
- Als u de Python versie van uw app bijwerkt, bouwt u de app opnieuw en implementeert u deze opnieuw op de nieuwe Python versie om afhankelijkheidsconflicten met eerder gebouwde pakketten te voorkomen.
- Niet-PyPI-afhankelijkheden:
- U kunt afhankelijkheden opnemen die niet beschikbaar zijn op PyPI in uw app, zoals lokale pakketten, wielbestanden of privéfeeds. Zie Custom-afhankelijkheden in Python Azure Functions voor installatie-instructies.
- Azure Functions Python werkrolafhankelijkheden:
- Als uw pakket bepaalde bibliotheken bevat die kunnen botsen met afhankelijkheden van werkrollen (bijvoorbeeld of ), configureert u PYTHON_ISOLATE_WORKER_DEPENDENCIES naar 1 in app-instellingen om te voorkomen dat uw toepassing verwijst naar afhankelijkheden van werkrollen. Voor Python 3.13 en hoger is de functie standaard ingeschakeld.
Uitvoeren en implementeren
Deze sectie bevat informatie over running-functies lokaal, Python-versieondersteuning, build- en implementatieopties en runtimeconfiguratie. Gebruik deze informatie om uw functie-app uit te voeren in zowel lokale als Azure omgevingen.
Lokaal uitvoeren
U kunt uw Python-functie-app uitvoeren en testen op uw lokale computer voordat u implementeert in Azure.
Azure Functions Core Tools gebruiken
Installeer Azure Functions Core Tools en start de lokale runtime door de opdracht func start uit te voeren vanuit de hoofdmap van uw project:
func start
Wanneer u de functie-app lokaal start, worden in Core Tools alle functies weergegeven die voor uw app worden gevonden:
Functions:
http_trigger: http://localhost:7071/api/http_trigger
Meer informatie over het gebruik van Core Tools vindt u in Ontwikkeling Azure Functions lokaal met behulp van Core Tools.
De functie rechtstreeks aanroepen
Met behulp van azure-functions >= 1.21.0 kunt u functies ook rechtstreeks aanroepen met behulp van de Python-interpreter zonder Core Tools uit te voeren. Deze methode is handig voor snelle eenheidstests:
# 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))
Als u de uitvoer wilt zien, voert u het bestand rechtstreeks uit met 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))
Als u de uitvoer wilt zien, voert u het bestand rechtstreeks uit met Python:
> python __init__.py
Hello, World!
Deze aanpak vereist geen extra pakketten of installatie en is ideaal voor snelle validatie tijdens de ontwikkeling. Raadpleeg Eenheidstests voor meer diepgaande tests
Ondersteunde Python versies
Azure Functions ondersteunt de Python versies die worden vermeld in Ondersteunde talen in Azure Functions. Zie het Azure Functions runtime-ondersteuningsbeleid voor meer algemene informatie.
Belangrijk
Als u de Python-versie voor uw functie-app wijzigt, moet u de app opnieuw bouwen en opnieuw implementeren met behulp van de nieuwe versie. Bestaande implementatieartefacten en afhankelijkheden worden niet automatisch opnieuw opgebouwd wanneer de Python versie wordt gewijzigd.
Bouwen en implementeren
Zie Buildopties voor meer informatie over het aanbevolen buildmechanisme voor uw scenario. Zie Deployment-technologieën in Azure Functions voor een algemeen overzicht van de implementatie.
Snelle vergelijking van implementatiemechanismen
| Hulpprogramma/platform | Opdracht/actie | Beste gebruiksvoorbeeld |
|---|---|---|
| Azure Functions Core Tools | func azure functionapp publish <APP_NAME> |
Ideaal voor CI-uitvoeringen, lokale automatisering of bij het werken op meerdere platforms. |
| AZ CLI | az functionapp deployment source config-zip |
Handig bij het uitvoeren van scripts buiten Core Tools. Werkt goed in geautomatiseerde pijplijnen of cloudterminals (Azure Cloud Shell). |
| Visual Studio Code (Azure Functions Extension) | Command Palette → "Azure Functions: Implementeren in Azure..." | Het meest geschikt voor beginners of interactieve implementaties. Behandelt automatisch het verpakkingsproces en het buildproces. |
| GitHub Actions | Azure/functions-action@v1 |
Ideaal voor GitHub-gebaseerde CI/CD. Hiermee kunt u geautomatiseerde implementaties uitvoeren bij push- of PR-mergebewerkingen. |
| Azure-pipelines | Taak | Enterprise CI/CD met behulp van Azure DevOps. Het meest geschikt voor gecontroleerde releasewerkstromen, gated builds en pijplijnen met meerdere fasen. |
| Aangepaste containerimplementatie | Container uploaden → | Vereist wanneer u pakketten op besturingssysteemniveau, aangepaste Python builds, vastgemaakte runtimes of niet-ondersteunde afhankelijkheden nodig hebt (bijvoorbeeld systeembibliotheken, lokale binaire bestanden). |
| Functie maken op basis van portal | Functie maken in de Azure-portal → inline-editor | Alleen gebruiken voor eenvoudige, afhankelijkheidsvrije functies. Ideaal voor demo's of leren, maar niet aanbevolen voor apps die pakketten van derden vereisen. |
Notitie
Functie maken op basis van de portal biedt geen ondersteuning voor afhankelijkheden van derden en wordt niet aanbevolen voor het maken van productie-apps. U kunt geen pakketten buiten azure-functions en de ingebouwde Python standaardbibliotheek installeren of ernaar verwijzen.
Belangrijk
Na 30 september 2028 wordt de optie voor het hosten van uw functie-app op Linux in een verbruiksabonnement buiten gebruik gesteld. Als u onderbrekingen wilt voorkomen, migreert u uw bestaande verbruiksabonnement-apps die op Linux worden uitgevoerd naar het Flex Consumption-abonnement vóór die datum. Apps die worden uitgevoerd op Windows in een verbruiksabonnement, worden niet beïnvloed door deze wijziging.
Na 30 september 2025 worden er geen nieuwe functies en geen nieuwe taalstackondersteuning toegevoegd aan het Linux-verbruiksabonnement. De laatst ondersteunde taalversies voor Linux-verbruik zijn: .NET 9, Python 3.12, Node.js 22, PowerShell 7.4 en Java 21. Nieuwere taalversies worden niet ondersteund voor Linux-verbruik.
Zie Verbruiksabonnement-apps migreren naar het Flex Consumption-abonnement voor meer informatie.
Python 3.13+ updates
Vanaf Python 3.13 introduceert Azure Functions verschillende belangrijke runtime- en prestatieverbeteringen die van invloed zijn op hoe u uw apps bouwt en uitvoert. Belangrijke wijzigingen zijn onder andere:
Versiebeheer voor runtime: u kunt uw app nu desgewenst vastzetten of upgraden naar specifieke versies van Python workers door te verwijzen naar het
azure-functions-runtime-pakket in uwrequirements.txt.Als versiebeheer niet is ingeschakeld, wordt uw app uitgevoerd op een standaardversie van de Python runtime, die door Functions wordt beheerd. U moet het bestand requirements.txt wijzigen om de meest recente uitgebrachte versie, een vooraf uitgebrachte versie aan te vragen of om uw app vast te maken aan een specifieke versie van de Python runtime.
U schakelt runtimeversiebeheer in door een verwijzing naar het Python runtimepakket toe te voegen aan uw bestand requirements.txt, waarbij de waarde die aan het pakket is toegewezen, bepaalt welke runtimeversie wordt gebruikt.
Vermijd het koppelen van een productie-app aan prerelease (alfa, bèta of dev) runtimeversies.
Bekijk regelmatig Python runtime releaseopmerkingen om op de hoogte te zijn van wijzigingen.
De volgende tabel geeft het versiegedrag aan op basis van de versiewaarde van deze instelling in uw requirements.txt-bestand :
Versie Example Gedrag Geen waarde ingesteld azure-functions-runtimeUw Python 3.13+-app wordt uitgevoerd op de nieuwste beschikbare versie van de Functions Python runtime. Deze optie is het beste om op de hoogte te blijven van platformverbeteringen en -functies, omdat uw app automatisch de meest recente stabiele runtime-updates ontvangt. Vastgemaakt aan een specifieke versie azure-functions-runtime==1.2.0Uw Python 3.13+ app blijft op de vastgemaakte runtime-versie staan en ontvangt geen automatische updates. U moet in plaats daarvan uw vastgemaakte versie handmatig bijwerken om te profiteren van nieuwe functies, fixes en verbeteringen in de runtime. Vastmaken wordt aanbevolen voor kritieke productieworkloads, waarbij stabiliteit en voorspelbaarheid essentieel zijn. Door vast te zetten kunt u uw app ook testen op pre-release-runtimeversies tijdens de ontwikkeling. Geen pakketreferentie n/a Als u de azure-functions-runtimeniet instelt, wordt uw Python 3.13+ app uitgevoerd op een standaardversie van de Python runtime die zich achter de nieuwste uitgebrachte versie bevindt. Updates worden periodiek uitgevoerd door Functions. Deze optie zorgt voor stabiliteit en brede compatibiliteit. De toegang tot de nieuwste functies en oplossingen wordt echter uitgesteld totdat de standaardversie wordt bijgewerkt.
Afhankelijkheidsisolatie: de afhankelijkheden van uw app (zoals of ) zijn volledig geïsoleerd van de afhankelijkheden van de workerprocessen, waardoor versieconflicten worden voorkomen. De app-instelling
PYTHON_ISOLATE_WORKER_DEPENDENCIESheeft geen invloed op apps die worden uitgevoerd op Python 3.13 of hoger.Vereenvoudigde instellingen voor HTTP-streaming : er zijn geen speciale app-instellingen vereist.
Ondersteuning voor werkrolextensies en gedeelde geheugenfuncties is verwijderd.
Versiebeheer voor runtime: u kunt uw app nu desgewenst vastzetten of upgraden naar specifieke versies van Python workers door te verwijzen naar het
azure-functions-runtime-v1-pakket in uwrequirements.txt.Als versiebeheer niet is ingeschakeld, wordt uw app uitgevoerd op een standaardversie van de Python runtime, die door Functions wordt beheerd. U moet het bestand requirements.txt wijzigen om de meest recente uitgebrachte versie, een vooraf uitgebrachte versie aan te vragen of om uw app vast te maken aan een specifieke versie van de Python runtime.
U schakelt runtimeversiebeheer in door een verwijzing naar het Python runtimepakket toe te voegen aan uw bestand requirements.txt, waarbij de waarde die aan het pakket is toegewezen, bepaalt welke runtimeversie wordt gebruikt.
Vermijd het koppelen van een productie-app aan prerelease (alfa, bèta of dev) runtimeversies.
Bekijk regelmatig Python runtime releaseopmerkingen om op de hoogte te zijn van wijzigingen.
De volgende tabel geeft het versiegedrag aan op basis van de versiewaarde van deze instelling in uw requirements.txt-bestand :
Versie Example Gedrag Geen waarde ingesteld azure-functions-runtime-v1Uw Python 3.13+-app wordt uitgevoerd op de nieuwste beschikbare versie van de Functions Python runtime. Deze optie is het beste om op de hoogte te blijven van platformverbeteringen en -functies, omdat uw app automatisch de meest recente stabiele runtime-updates ontvangt. Vastgemaakt aan een specifieke versie azure-functions-runtime-v1==1.2.0Uw Python 3.13+ app blijft op de vastgemaakte runtime-versie staan en ontvangt geen automatische updates. U moet in plaats daarvan uw vastgemaakte versie handmatig bijwerken om te profiteren van nieuwe functies, fixes en verbeteringen in de runtime. Vastmaken wordt aanbevolen voor kritieke productieworkloads, waarbij stabiliteit en voorspelbaarheid essentieel zijn. Door vast te zetten kunt u uw app ook testen op pre-release-runtimeversies tijdens de ontwikkeling. Geen pakketreferentie n/a Als u de azure-functions-runtime-v1niet instelt, wordt uw Python 3.13+ app uitgevoerd op een standaardversie van de Python runtime die zich achter de nieuwste uitgebrachte versie bevindt. Updates worden periodiek uitgevoerd door Functions. Deze optie zorgt voor stabiliteit en brede compatibiliteit. De toegang tot de nieuwste functies en oplossingen wordt echter uitgesteld totdat de standaardversie wordt bijgewerkt.
Afhankelijkheidsisolatie: de afhankelijkheden van uw app (zoals of ) zijn volledig geïsoleerd van de afhankelijkheden van de workerprocessen, waardoor versieconflicten worden voorkomen. De app-instelling
PYTHON_ISOLATE_WORKER_DEPENDENCIESheeft geen invloed op apps die worden uitgevoerd op Python 3.13 of hoger.Ondersteuning voor werkrolextensies en gedeelde geheugenfuncties is verwijderd.
Waarneembaarheid en testen
In deze sectie worden logging, monitoring en testmogelijkheden beschreven om problemen op te sporen, prestaties bij te houden en de betrouwbaarheid van uw Python functie-apps te garanderen.
Logboekregistratie en bewaking
Azure Functions maakt een hoofdlogger beschikbaar die u rechtstreeks kunt gebruiken met Python ingebouwde module logging. Berichten die met deze logger worden geschreven, worden automatisch verzonden naar Application Insights wanneer uw app in Azure draait.
Met logboekregistratie kunt u runtime-informatie vastleggen en problemen diagnosticeren zonder dat u meer installatie nodig hebt.
Voorbeeld van logboekregistratie met een HTTP-trigger
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")
U kunt de volledige set logboekregistratieniveaus (debug, info, warning, error, critical) gebruiken en deze worden weergegeven in de Azure-portal onder Logboeken of Application Insights.
Zie Monitor Azure Functions voor meer informatie over het bewaken van Azure Functions in de portal.
Notitie
Als u foutopsporingslogboeken in Application Insights wilt weergeven, is er meer installatie vereist. U kunt deze functie inschakelen door PYTHON_ENABLE_DEBUG_LOGGING op en op of in te stellen in uw bestand host.json. Foutopsporingslogboeken zijn standaard niet zichtbaar in Application Insights.
Loggen vanuit achtergrond-threads
Als uw functie een nieuwe thread start en u moet loggen vanuit die thread, zorg dan dat u het -argument doorgestuurd aan de thread. De bevat thread-lokale opslag en de huidige , die moeten worden ingesteld op de werkdraad om ervoor te zorgen dat logbestanden correct worden gekoppeld aan de uitvoering van de functie.
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")
Aangepaste logboekregistraties configureren
U kunt aangepaste logboekregistraties configureren in Python wanneer u meer controle nodig hebt over het gedrag van logboekregistratie, zoals aangepaste opmaak, logboekfiltering of integraties van derden.
Als u een aangepaste logboekregistratie wilt configureren, gebruikt u de logging.getLogger() van Python met een aangepaste naam en voegt u indien nodig handlers of formatters toe.
import logging
custom_logger = logging.getLogger('my_custom_logger')
Ondersteuning voor OpenTelemetry
Azure Functions voor Python ondersteunt ook OpenTelemetry, waarmee u traceringen, metrische gegevens en logboeken in een gestandaardiseerde indeling kunt verzenden. Het gebruik van OpenTelemetry is vooral waardevol voor gedistribueerde toepassingen of scenario's waarin u telemetrie wilt exporteren naar hulpprogramma's buiten Application Insights (zoals Grafana of Jaeger).
Zie onze OpenTelemetry Quickstart voor Azure Functions (Python) voor installatie-instructies en voorbeeldcode.
Het testen van modules
Schrijf en voer eenheidstests uit voor uw functies met behulp van . U kunt Python functies zoals andere Python code testen met behulp van standaard testframeworks. Voor de meeste bindingen kunt u een mock-invoerobject maken door een exemplaar van een geschikte klasse te maken op basis van het pakket.
Met als voorbeeld is het volgende een mocktest van een HTTP-getriggerde functie.
Maak eerst het bestand project_root/function_app.py en implementeer de functie als de HTTP-trigger.
# <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
)
U kunt beginnen met het schrijven van testcases voor uw HTTP-trigger.
# <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',
)
In de map Python virtuele omgeving kunt u de volgende opdrachten uitvoeren om de app te testen:
pip install pytest
pytest test_my_function.py
U ziet de resultaten in de terminal, zoals deze:
============================================================================================================ test session starts ============================================================================================================
collected 1 item
test_my_function.py . [100%]
============================================================================================================= 1 passed in 0.24s =============================================================================================================
Optimalisatie en geavanceerde onderwerpen
Zie de volgende artikelen voor meer informatie over het optimaliseren van uw Python functions-apps:
- Schalen en prestaties
- Gebruik van Flask Framework met Azure Functions
- Durable Functions
- HTTP-streaming
Verwante artikelen
Zie de volgende artikelen voor meer informatie over Functions:
- api-documentatie voor Azure Functions pakket
- Best-procedures voor Azure Functions
- Azure Functions triggers en bindingen
- Blob Storage bindingen
- HTTP- en webhook-bindingen
- Queue Storage-bindingen
- Timertriggers
Ondervindt u problemen met het gebruik van Python? Laat het ons weten en dien een probleem in.