Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de 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 Azure Functions op basis van Python 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 naslaginformatie voor Ontwikkelaars van Azure Functions.
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:
Uw functie-app bouwen
In deze sectie worden de essentiële onderdelen besproken 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 function_app.py 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 function.json 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 Python v1-programmeermodel wordt elke functie gedefinieerd als een globale, staatloze main() methode in een bestand met de naam __init__.py.
De triggers en bindingen van de functie worden afzonderlijk geconfigureerd in een function.json bestand en de bindingswaarden name worden gebruikt als parameters in uw main() 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 function.json 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
namequeryparameter opgehaald uit deparamsparameter van het HttpRequest-object . - Als u een naam in dit voorbeeld wilt verzenden, voegt u deze toe aan
?name={name}de weergegeven functie-URL. Als u bijvoorbeeld lokaal werkt, kanhttp://localhost:7071/api/http_trigger?name=Testde volledige URL er als volgt uitzien. Zie Triggers en bindingen voor voorbeelden van het gebruik van bindingen.
Gebruik de azure-functions 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 azure-functions bibliotheek
De azure-functions Python-bibliotheek 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 azure-functions API.
Uw functiecode kan het volgende gebruiken azure-functions :
- Invoergegevens van Access-trigger (bijvoorbeeld
HttpRequest,TimerRequest) - Uitvoerwaarden maken (zoals
HttpResponse) - Interactie met door runtime geleverde context en bindingsgegevens
Als u azure-functions in uw app gebruikt, moet deze zijn opgenomen in uw projectafhankelijkheden.
Notitie
De azure-functions bibliotheek 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 binnen de Azure Functions-runtime.
Alternatief toegangspunt
U kunt het standaardgedrag van een functie wijzigen door de scriptFile en entryPoint eigenschappen in het function.json bestand op te geven. Het volgende function.json bestand leidt de runtime bijvoorbeeld om de custom_entry() methode in het main.py bestand te gebruiken als het toegangspunt voor uw Azure-functie.
{
"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 my_first_function functiecode is gedefinieerd. |
✅ |
function.json/ |
Bevat de bindingsconfiguratie voor de my_first_function functie. |
✅ |
host.json |
Globale configuratie voor alle functies in de app. | ✅ |
requirements.txt |
Python-afhankelijkheden die zijn geïnstalleerd tijdens het publiceren wanneer externe build wordt gebruikt. | ❌ (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 .venv/, tests/). local.settings.json |
❌ (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. | ❌ |
In het Python v2-programmeermodel gebruikt Azure Functions een op decorator gebaseerde benadering om triggers en bindingen rechtstreeks in uw code te definiëren. Elke functie wordt geïmplementeerd als een globale, staatloze methode in een function_app.py 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
azure-functionspakket 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
namequeryparameter opgehaald uit deparamsparameter van het HttpRequest-object . - Als u een naam in dit voorbeeld wilt verzenden, voegt u deze toe aan
?name={name}de weergegeven functie-URL. Als u bijvoorbeeld lokaal werkt, kanhttp://localhost:7071/api/http_trigger?name=Testde volledige URL er als volgt uitzien. Zie Triggers en bindingen voor voorbeelden van het gebruik van bindingen.
De azure-functions bibliotheek
De azure-functions Python-bibliotheek 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 azure-functions API.
De code van uw functie-app is afhankelijk van deze bibliotheek voor het volgende:
- Alle functies definiëren met behulp van het
FunctionAppobject - Triggers en bindingen declareren (bijvoorbeeld
@app.route,@app.timer_trigger) - Toegewezen toegang tot getypte invoer en uitvoer (zoals
HttpRequestenHttpResponse, en Uit`)
De azure-functions moet worden opgenomen in de projectafhankelijkheden. Zie pakketbeheer voor meer informatie.
Notitie
De azure-functions bibliotheek 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 binnen 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 blauwdrukken om functies in afzonderlijke Python-bestanden te definiëren en deze te registreren bij uw hoofd-app. Met deze scheiding blijft uw code georganiseerd en herbruikbaar.
Een blauwdruk definiëren en registreren:
Een blauwdruk definiëren 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
function_app.py: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 van → 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 decorators. | ✅ |
host.json |
Globale configuratie voor alle functies in de app. | ✅ |
requirements.txt |
Python-afhankelijkheden die zijn geïnstalleerd tijdens het publiceren wanneer externe build wordt gebruikt. | ❌ (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 .venv/, tests/). local.settings.json |
❌ (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
requirements.txtbestand 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 maakt gebruik van triggers om de uitvoering van functies en bindingen te starten 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
tmp/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
directionwaarde 'in' op te geven infunction.json. Uitvoer heeft eendirectionvanout. - U kunt toegang krijgen tot aanvraagdetails via het
HttpRequestobject en een aangepasteHttpResponsemaken 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
@route()of triggerspecifieke decorators (@timer_trigger,@queue_triggeren andere) om te definiëren hoe uw functie wordt aangeroepen. - Voeg invoer toe met behulp van decorators zoals
@blob_input,@queue_inputen andere. - Uitvoer kan het volgende zijn:
- Rechtstreeks geretourneerd (als er slechts één uitvoer is)
- Toegewezen met behulp van
Outbindingen en de.set()methode voor meerdere uitvoer.
- U kunt toegang krijgen tot aanvraagdetails via het
HttpRequestobject en een aangepasteHttpResponsemaken 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 Python v2-programmeermodel.
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 toepassingsinstellingen op de configuratiepagina van uw functie-app in Azure Portal.
Open de variabelen rechtstreeks in uw code met behulp van os.environ of os.getenv.
setting_value = os.getenv("myAppSetting", "default_value")
Notitie
Azure Functions herkent ook systeemomgevingsvariabelen waarmee de Functions-runtime en het Gedrag van python-werkrollen worden geconfigureerd. 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 die pakketten verwijzen zoals gebruikelijk.
Zie Build-opties voor Python-functie-apps voor meer informatie over bouw- en implementatieopties met externe afhankelijkheden.
In het volgende voorbeeld ziet u bijvoorbeeld hoe de requests module wordt opgenomen en gebruikt in de functie-app.
<requirements.txt>
requests==2.31.0
Installeer het pakket lokaal met pip install -r requirements.txt.
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 uw projectmappen na standaardbibliotheken van Python (bijvoorbeeld
email/).json/ - Neem geen systeemeigen Python-bibliotheken (zoals
logging,asyncioofuuid) op inrequirements.txt.
- Vermijd het benoemen van uw projectmappen na standaardbibliotheken van Python (bijvoorbeeld
- Implementatie:
- Om fouten te voorkomen
ModuleNotFound, moet u ervoor zorgen dat alle vereiste afhankelijkheden worden vermeld inrequirements.txt. - Als u de Python-versie van uw app bijwerkt, bouwt en implementeert u uw app opnieuw op de nieuwe Python-versie om afhankelijkheidsconflicten met eerder gebouwde pakketten te voorkomen.
- Om fouten 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 Aangepaste afhankelijkheden in Python Azure Functions voor installatie-instructies.
- Afhankelijkheden van Python-werkrollen in Azure Functions:
- Als uw pakket bepaalde bibliotheken bevat die kunnen botsen met afhankelijkheden van werkrollen (bijvoorbeeld
protobufofgrpcio), 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 deze functie standaard ingeschakeld.
- Als uw pakket bepaalde bibliotheken bevat die kunnen botsen met afhankelijkheden van werkrollen (bijvoorbeeld
Uitvoeren en implementeren
Deze sectie bevat informatie over het lokaal uitvoeren van functies, ondersteuning voor Python-versies, 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 uit te voeren vanuit de func start 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 Azure Functions lokaal ontwikkelen met behulp van Core Tools.
De functie rechtstreeks aanroepen
Met behulp van azure-functions >= 1.21.0kunt 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 ondersteuningsbeleid voor Azure Functions-runtime 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 Implementatietechnologieë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-extensie) | Opdrachtpalet → '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 CI/CD op basis van GitHub. Hiermee kunt u geautomatiseerde implementaties uitvoeren bij push- of PR-mergebewerkingen. |
| Azure Pipelines |
AzureFunctionApp@2 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 → az functionapp create --image <container> |
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 | Een functie maken in 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 standaardbibliotheek van Python 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 in Windows in een verbruiksabonnement, worden niet beïnvloed door deze wijziging. Zie de kennisgeving over buitengebruikstelling van het Linux-verbruiksplan voor meer informatie.
Python 3.13+ updates
Vanaf Python 3.13 introduceert Azure Functions verschillende belangrijke runtime- en prestatieverbeteringen die van invloed zijn op de wijze waarop u uw apps bouwt en uitvoert. Belangrijke wijzigingen zijn onder andere:
Versiebeheer voor runtime: u kunt uw app nu desgewenst vastmaken of upgraden naar specifieke Python-werkrolversies door te verwijzen naar het
azure-functions-runtimepakket 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 uw requirements.txt-bestand wijzigen om de meest recente uitgebrachte versie, een vooraf uitgebrachte versie aan te vragen of 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 requirements.txt-bestand , 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.
Als u rekening wilt houden met wijzigingen, bekijkt u regelmatig de releaseopmerkingen voor Python Runtime .
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 runtimeversie 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-runtimePython 3.13+-app niet instelt, wordt deze 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
grpcioofprotobuf) zijn volledig geïsoleerd van de afhankelijkheden van de workerprocessen, waardoor versieconflicten worden voorkomen. De app-instellingPYTHON_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 vastmaken of upgraden naar specifieke Python-werkrolversies door te verwijzen naar het
azure-functions-runtime-v1pakket 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 uw requirements.txt-bestand wijzigen om de meest recente uitgebrachte versie, een vooraf uitgebrachte versie aan te vragen of 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 requirements.txt-bestand , 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.
Als u rekening wilt houden met wijzigingen, bekijkt u regelmatig de releaseopmerkingen voor Python Runtime .
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 runtimeversie 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. Met het vastzetten kunt u uw app ook testen op prerelease-runtimeversies tijdens de ontwikkeling. Geen pakketreferentie n/a Als u de azure-functions-runtime-v1Python 3.13+-app niet instelt, wordt deze 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
grpcioofprotobuf) zijn volledig geïsoleerd van de afhankelijkheden van de worker, waardoor versieconflicten worden voorkomen. De app-instellingPYTHON_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 vindt u informatie over de mogelijkheden voor logboekregistratie, bewaking en testen om u te helpen bij het opsporen van problemen, het bijhouden van prestaties en het garanderen van de betrouwbaarheid van uw Python-functie-apps.
Logboekregistratie en bewaking
Azure Functions maakt een rootlogger beschikbaar die u rechtstreeks kunt gebruiken met de ingebouwde logging module van Python. Berichten die met deze logger worden geschreven, worden automatisch verzonden naar Application Insights wanneer uw app wordt uitgevoerd in Azure.
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; ze worden weergegeven in de Azure portal onder Logboeken of Application Insights.
Zie Azure Functions bewaken 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 1 en logLevel op trace of debug 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 context-argument doorgestuurd aan de thread. De context bevat thread-lokale opslag en de huidige invocation_id, 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 Python's logging.getLogger() 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 voor installatie-instructies en voorbeeldcode onze Quickstart voor OpenTelemetry voor Azure Functions (Python).
Het testen van modules
Schrijf en voer eenheidstests uit voor uw functies met behulp van pytest.
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 azure.functions pakket.
Met my_function als voorbeeld is het volgende een mocktest van een HTTP-getriggerde functie.
Maak eerst het <bestand project_root>/function_app.py en implementeer de my_function 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 met de virtuele Python-omgeving kunt u de volgende opdrachten uitvoeren om de app te testen:
pip install pytest
pytest test_my_function.py
U ziet de pytest 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
- Flask Framework gebruiken met Azure Functions
- Durable Functions
- HTTP-streaming
Verwante artikelen
Zie de volgende artikelen voor meer informatie over Functions:
- Api-documentatie voor Azure Functions-pakketten
- Aanbevolen procedures voor Azure Functions
- Azure Functions-triggers en -bindingen
- Blob Storage-bindingen
- HTTP- en webhook-bindingen
- Queue Storage-bindingen
- Timertriggers
Hebt u problemen met het gebruik van Python? Laat het ons weten en dien een probleem in.