Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Azure Functions, altyapıyı sağlamadan veya yönetmeden olay temelli kod çalıştırmanızı sağlayan sunucusuz bir işlem hizmetidir. İşlev yürütmeleri HTTP istekleri, kuyruk iletileri, zamanlayıcılar veya depolamadaki değişiklikler gibi olaylar tarafından tetiklenir ve isteğe bağlı olarak otomatik olarak ölçeklendirilir.
Bu kılavuz özellikle Python tabanlı Azure Functions oluşturmaya odaklanır ve size yardımcı olur:
- İşlev uygulamalarını yerel olarak oluşturma ve çalıştırma
- Python programlama modelini anlama
- Uygulamanızı düzenleme ve yapılandırma
- uygulamanızı Azure'da dağıtma ve izleme
- Ölçeklendirme ve performans için en iyi yöntemleri uygulama
Kavramsal bir genel bakış mı arıyorsunuz? Bkz. Azure Functions Geliştirici Başvuru Rehberi.
Gerçek dünya kullanım örnekleriyle ilgileniyor musunuz? Senaryolar ve Örnekler sayfasını keşfedin.
Başlangıç Yapmak
İş akışınıza uygun ortamı seçin ve Python için Azure Functions'a başlayın.
İşlev uygulamanızı oluşturma
Bu bölüm, Python işlev uygulamanızı oluşturmaya ve yapılandırmaya yönelik temel bileşenleri kapsar. Programlama modeli, proje yapısı, tetikleyiciler ve bağlamalar vebağımlılık yönetimi konularıdır.
Programlama modeli
İşlevler, Python programlama modelinin iki sürümünü destekler:
| Sürüm | Açıklama |
|---|---|
| 2.x | Tetikleyicileri ve bağlamaları doğrudan Python kod dosyanızda tanımlamak için dekoratör tabanlı bir yaklaşım kullanın. Her işlevi bir function_app.py dosyasında veya başvurulan taslak dosyasında genel, durum bilgisi olmayan bir yöntem olarak uygularsınız. Bu model sürümü yeni Python uygulamaları için önerilir. |
| 1.x | Her işlev için tetikleyicileri ve bağlamaları ayrı function.json bir dosyada tanımlarsınız. her işlevi Python kod dosyanızda genel ve durum bilgisi olmayan bir yöntem olarak uygularsınız. Modelin bu sürümü eski uygulamaları destekler. |
Bu makale belirli bir Python modeli sürümünü hedefler. Makalenin üst kısmında istediğiniz sürümü seçin.
Önemli
Tetikleyicileri ve bağlamaları doğrudan kodunuzda tanımlamak için dekoratör tabanlı bir yaklaşım için v2 programlama modelini kullanın.
Python v1 programlama modelinde her işlev, main() adlı bir dosyanın içinde genel, durum bilgisi olmayan bir __init__.py yöntemi olarak tanımlanır.
İşlevin tetikleyicileri ve bağlamaları bir function.json dosyada ayrı olarak yapılandırılır ve bağlama name değerleri yönteminizde main() parametre olarak kullanılır.
Örnek
Http isteğine yanıt veren basit bir işlev aşağıdadır:
# __init__.py
def main(req):
user = req.params.get('user')
return f'Hello, {user}!'
buna karşılık gelen function.json dosya şu şekildedir:
{
"scriptFile": "__init__.py",
"bindings": [
{
"authLevel": "function",
"type": "httpTrigger",
"direction": "in",
"name": "req",
"methods": [
"get",
"post"
]
},
{
"type": "http",
"direction": "out",
"name": "$return"
}
]
}
Temel kavramlar
- İşlevin tek bir HTTP tetikleyicisi vardır.
-
HttpRequest nesnesi istek üst bilgilerini, sorgu parametrelerini, yol parametrelerini ve ileti gövdesini içerir. Bu işlev,
namesorgu parametresinin değeriniparamsnesnesinin parametresinden alır. - Bu örnekte bir ad göndermek için, kullanıma sunulan işlev URL'sine ekleyin
?name={name}. Örneğin, yerel olarak çalışıyorsa, tam URL,http://localhost:7071/api/http_trigger?name=Testgibi görünümde olabilir. Bağlamaları kullanan örnekler için bkz. Tetikleyiciler ve Bağlamalar.
SDK kullanarak azure-functions IntelliSense ve düzenleyici desteğini geliştirin ve tür annotasyonları ekleyin:
# __init__.py
import azure.functions as func
def http_trigger(req: func.HttpRequest) -> str:
# requirements.txt
azure-functions
Kitaplık azure-functions
azure-functions Python kitaplığı, Azure Functions çalışma zamanıyla etkileşime geçmek için kullanılan temel türleri sağlar. Kullanılabilir tüm türleri ve yöntemleri görmek için API'yi ziyaret edinazure-functions.
İşlev kodunuz şunu yapmak için kullanabilir azure-functions :
- Erişim tetikleyicisi giriş verileri (örneğin,
HttpRequest,TimerRequest) - Çıkış değerleri oluşturma (örneğin
HttpResponse) - Çalışma zamanı tarafından sağlanan bağlam ve bağlama verileriyle etkileşim kurma
Uygulamanızda kullanıyorsanız azure-functions , bunun proje bağımlılıklarınıza dahil edilmesi gerekir.
Not
azure-functions kitaplığı Python Azure Functions için programlama yüzeyini tanımlar, ancak genel amaçlı bir SDK değildir. Özellikle Azure Functions çalışma zamanında işlevleri yazmak ve çalıştırmak için kullanın.
Alternatif giriş noktası
scriptFile dosyasındaki entryPoint ve function.json özelliklerini belirterek bir işlevin varsayılan davranışını değiştirebilirsiniz. Örneğin, aşağıdaki function.json dosyası çalışma zamanını custom_entry() dosyasındaki main.py yöntemini Azure işlevinizin giriş noktası olarak kullanmaya yönlendirir.
{
"scriptFile": "main.py",
"entryPoint": "custom_entry",
"bindings": [
...
]
}
Klasör yapısı
Python Azure Functions projesi için aşağıdaki yapıyı kullanın:
<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
Önemli dosyalar ve klasörler
| Dosya / Klasör | Açıklama | Uygulamanın Azure'da çalışması için gereklidir |
|---|---|---|
my_first_function/ |
Tek bir işlev için dizin. | ✅ |
__init__.py/ |
my_first_function işlev kodunun tanımlandığı ana betik. |
✅ |
function.json/ |
İşlev için my_first_function bağlama yapılandırmasını içerir. |
✅ |
host.json |
Uygulamadaki tüm işlevler için genel yapılandırma. | ✅ |
requirements.txt |
remote build kullanılırken yayımlama sırasında yüklenen Python bağımlılıkları. | ❌ (paket yönetimi için önerilir) |
local.settings.json |
Yalnızca yerel uygulama ayarları ve gizli bilgiler (asla yayımlanmaz). | ❌ (yerel geliştirme için gereklidir) |
.funcignore |
Dağıtımın dışında tutulacak dosya ve klasörleri belirtir (örneğin, .venv/, tests/, local.settings.json). |
❌ (önerilir) |
.venv/ |
Python için yerel sanal ortam (dağıtım dışındadır). | ❌ |
.vscode/ |
Visual Studio Code için düzenleyici yapılandırması. Dağıtım için gerekli değildir. | ❌ |
shared/ |
İşlev Uygulaması projesinde paylaşılan yardımcı kodu tutar | ❌ |
additional_functions/ |
Modüler kod düzenlemesi için kullanılır; genellikle şemalarla birlikte kullanılır. | ❌ |
tests/ |
İşlev uygulamanız için birim testleri. Azure'a yayımlanmadı. | ❌ |
Dockerfile |
Dağıtım için özel bir kapsayıcı tanımlar. | ❌ |
Python v2 programlama modelinde, Azure Functions tetikleyicileri ve bağlamaları doğrudan kodunuzda tanımlamak için decorator tabanlı bir yaklaşım kullanır. Her işlev, bir dosya içinde genel, durum bilgisi olmayan bir function_app.py yöntem olarak uygulanır.
Örnek
Http isteğine yanıt veren basit bir işlev aşağıdadır:
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
Temel kavramlar
- Kod,
azure-functionspaketini içeri aktarır ve app işlevini tanımlamak için dekoratörler ile türler kullanır. - İşlevin tek bir HTTP tetikleyicisi vardır.
-
HttpRequest nesnesi istek üst bilgilerini, sorgu parametrelerini, yol parametrelerini ve ileti gövdesini içerir. Bu işlev,
namesorgu parametresinin değeriniparamsnesnesinin parametresinden alır. - Bu örnekte bir ad göndermek için, kullanıma sunulan işlev URL'sine ekleyin
?name={name}. Örneğin, yerel olarak çalışıyorsa, tam URL,http://localhost:7071/api/http_trigger?name=Testgibi görünümde olabilir. Bağlamaları kullanan örnekler için bkz. Tetikleyiciler ve Bağlamalar.
Kitaplık azure-functions
azure-functions Python kitaplığı, Azure Functions programlama modelinin temel bir parçasıdır. Dekoratörler, tetikleyici ve bağlama türleri ile çalışma zamanında işlevleri tanımlamak ve bunlarla etkileşimde bulunmak için kullanılan istek/yanıt nesnelerini sağlar.
Kullanılabilir tüm türleri ve dekoratörleri görmek için API'yi ziyaret edinazure-functions.
İşlev uygulama kodunuz şu kitaplığa bağlıdır:
- nesnesini kullanarak
FunctionApptüm işlevleri tanımlama - Tetikleyicileri ve bağlamaları bildirme (örneğin, ,
@app.route@app.timer_trigger) - Yazılı giriş ve çıkışlar (örneğin
HttpRequestveHttpResponse, ve Out) erişme
, azure-functions proje bağımlılıklarınıza dahil edilmelidir. Daha fazla bilgi için bkz. paket yönetimi.
Not
azure-functions kitaplığı Python Azure Functions için programlama yüzeyini tanımlar, ancak genel amaçlı bir SDK değildir. Özellikle Azure Functions çalışma zamanında işlevleri yazmak ve çalıştırmak için kullanın.
IntelliSense ve editör desteğini geliştirmek için tür annotasyonlarını kullanın.
def http_trigger(req: func.HttpRequest) -> str:
Şemalarla düzenleme
Daha büyük veya modüler uygulamalar için ayrı Python dosyalarında işlevleri tanımlamak ve bunları ana uygulamanıza kaydetmek için blueprints kullanın. Bu ayrım kodunuzu düzenli ve yeniden kullanılabilir durumda tutar.
Şemayı tanımlamak ve kaydetmek için:
http_blueprint.pygibi başka bir Python dosyasında şema tanımlayın: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!")Şemayı ana
function_app.pydosyaya kaydedin:import azure.functions as func from http_blueprint import bp app = func.FunctionApp() app.register_functions(bp)
Şemaları kullanarak şunları yapabilirsiniz:
- Uygulamanızı yeniden kullanılabilir modüllere ayırma
- İlgili işlevleri dosyaya veya özelliğe göre gruplandırma
- Şemaları projeler arasında genişletme veya paylaşma
Not
Durable Functions, azure-functions-durable kullanarak şemaları da destekler.
Örneği görüntüle →
Klasör yapısı
Python Azure Functions projesi için aşağıdaki yapıyı kullanın:
<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
Önemli dosyalar ve klasörler
| Dosya / Klasör | Açıklama | Uygulamanın Azure'da çalışması için gereklidir |
|---|---|---|
function_app.py |
Azure Functions ve tetikleyicilerin dekoratörler kullanılarak tanımlandığı ana betik. | ✅ |
host.json |
Uygulamadaki tüm işlevler için genel yapılandırma. | ✅ |
requirements.txt |
remote build kullanılırken yayımlama sırasında yüklenen Python bağımlılıkları. | ❌ (paket yönetimi için önerilir) |
local.settings.json |
Yalnızca yerel uygulama ayarları ve gizli bilgiler (asla yayımlanmaz). | ❌ (yerel geliştirme için gereklidir) |
.funcignore |
Dağıtımın dışında tutulacak dosya ve klasörleri belirtir (örneğin, .venv/, tests/, local.settings.json). |
❌ (önerilir) |
.venv/ |
Python için yerel sanal ortam (dağıtım dışındadır). | ❌ |
.vscode/ |
Visual Studio Code için düzenleyici yapılandırması. Dağıtım için gerekli değildir. | ❌ |
shared/ |
İşlev Uygulaması projesinde paylaşılan yardımcı kodu tutar | ❌ |
additional_functions/ |
Modüler kod düzenlemesi için kullanılır; genellikle şemalarla birlikte kullanılır. | ❌ |
tests/ |
İşlev uygulamanız için birim testleri. Azure'a yayımlanmadı. | ❌ |
Dockerfile |
Dağıtım için özel bir kapsayıcı tanımlar. | ❌ |
[DİKKAT!]
requirements.txtile dağıtım yaparken bir dosya ekleyin. Uzak derleme kullanmıyorsanız veya uygulama bağımlılıklarını tanımlamak için başka bir dosya kullanmak istiyorsanız , yerel bir derleme gerçekleştirebilir ve uygulamayı önceden oluşturulmuş bağımlılıklarla dağıtabilirsiniz.
Birim testiyle ilgili yönergeler için bkz. Birim Testi. Kapsayıcı dağıtımları için bkz. Özel kapsayıcılarla dağıtma.
Tetikleyiciler ve bağlamalar
Azure Functions işlevi yürütmeyi başlatmak için triggers kullanır ve kodunuzu depolama, kuyruklar ve veritabanları gibi diğer hizmetlere bağlamak için bindings kullanır. Python v2 programlama modelinde, dekoratörleri kullanarak bağlamaları bildirirsiniz.
İki ana bağlama türü vardır:
- Tetikleyiciler (işlevi başlatan giriş)
- Girişler ve çıkışlar (ek veri kaynakları veya hedefler)
Kullanılabilir tetikleyiciler ve bağlamalar hakkında daha fazla bilgi için bkz. Triggers and Bindings in Azure Functions.
Örnek: Blob Girişi ile Zamanlayıcı Tetikleyicisi
Bu işlev:
- 10 dakikada bir tetikler
- SDK Tür Bağlamalarını kullanarak Blob'dan okur
- Sonuçları önbelleğe alır ve geçici bir dosyaya yazar
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}")
Temel kavramlar
- Zengin türlerle çalışmak için SDK türü bağlamalarını kullanın. Daha fazla bilgi için bkz. SDK türü bağlamaları.
- Pahalı hesaplamaları önbelleğe almak için genel değişkenleri kullanabilirsiniz, ancak durumlarının işlev yürütmeleri arasında kalıcı olması garanti değildir.
- Geçici dosyalar
tmp/içinde depolanmakta ve çağrılar arasında veya ölçek genişletme örnekleriyle kalıcı olmaları garanti edilmez. - Bağlam sınıfı aracılığıyla bir işlevin çağırma bağlamı erişebilirsiniz.
Örnek: Cosmos DB Girişi ve Event Hub Çıkışı ile HTTP Tetikleyicisi
Bu işlev:
- HTTP isteğinde tetikleyiciler
- Cosmos DB'den veri okur
- Bir Olay Hub'ı çıkışına yazar
- HTTP yanıtı döndürür
# __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"
}
]
}
Temel kavramlar
- Her işlevin tek bir tetikleyicisi vardır, ancak birden çok bağlaması olabilir.
- "
directionöğesinifunction.jsoniçinde 'in' olarak belirterek girişler ekleyin." Çıkışlarındirectionoutvardır. - İstek ayrıntılarına
HttpRequestnesnesi üzerinden erişebilir ve başlıklar, durum kodu ve gövdeden oluşan özel birHttpResponseoluşturabilirsiniz.
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
)
Temel kavramlar
- İşlevinizin nasıl çağrıldığı tanımlamak için
@route()veya tetikleyiciye özgü dekoratörleri (@timer_trigger,@queue_triggerve diğerlerini) kullanın. - ,
@blob_inputve diğerleri gibi@queue_inputdekoratörleri kullanarak girişler ekleyin. - Çıkışlar şu şekilde olabilir:
- Doğrudan döndürülür (yalnızca bir çıkış varsa)
- Birden çok çıkış için
Outbağlamaları ve.set()yöntemi kullanılarak atanır.
- İstek ayrıntılarına
HttpRequestnesnesi üzerinden erişebilir ve başlıklar, durum kodu ve gövdeden oluşan özel birHttpResponseoluşturabilirsiniz.
SDK türü bağlamaları
Belirli tetikleyiciler ve bağlamalar için, temel alınan Azure SDKs ve çerçeveler tarafından uygulanan veri türleriyle çalışabilirsiniz. Bu SDK türü bağlamalarını kullanarak, temel alınan hizmet SDK'sını kullanıyor gibi bağlama verileriyle etkileşim kurabilirsiniz. Daha fazla bilgi için bkz. Desteklenen SDK türü bağlamaları.
Önemli
Python için SDK türü bağlama desteği yalnızca Python v2 programlama modelinde kullanılabilir.
Ortam değişkenleri
Azure Functions ortam değişkenleri, yapılandırma değerlerini, bağlantı dizelerini ve uygulama gizli dizilerini işlev kodunuzda sabit kodlamadan güvenli bir şekilde yönetmenize olanak tanır.
Ortam değişkenlerini tanımlayabilirsiniz:
- Yerel olarak: yerel geliştirme sırasında local.settings.json dosyasında.
- Azure: Azure portalındaki İşlev Uygulamanızın yapılandırma sayfasında Uygulama Ayarları olarak.
veya os.environkullanarak os.getenv doğrudan kodunuzdaki değişkenlere erişin.
setting_value = os.getenv("myAppSetting", "default_value")
Not
Azure Functions, İşlevler çalışma zamanını ve Python çalışan davranışını yapılandıran sistem ortamı değişkenlerini de tanır. Bu değişkenler işlev kodunuzda açıkça kullanılmaz, ancak uygulamanızın çalışma şeklini etkiler. Sistem ortamı değişkenlerinin tam listesi için bkz. Uygulama ayarları başvurusu.
Paket yönetimi
Azure Functions uygulamanızda diğer Python paketlerini kullanmak için bunları projenizin kökündeki requirements.txt dosyasında listeleyin. Bu paketler Python içeri aktarma sistemi tarafından içeri aktarılır ve bu paketlere her zamanki gibi başvurabilirsiniz.
Dış bağımlılıklarla oluşturma ve dağıtım seçenekleri hakkında daha fazla bilgi edinmek için bkz. Python İşlev Uygulamaları için Oluşturma Seçenekleri.
Örneğin, aşağıdaki örnek modülün işlev uygulamasına requests nasıl dahil olduğunu ve kullanıldığını gösterir.
<requirements.txt>
requests==2.31.0
pip install -r requirements.txt ile yerel olarak paketi yükleyin.
Paket yüklendikten sonra işlev kodunuzda içeri aktarabilir ve kullanabilirsiniz:
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}")
Değerlendirmeler
- Yerleşik modüllerle çakışmalar:
- Proje klasörlerinizi Python standart kitaplıklardan sonra adlandırmaktan kaçının (örneğin,
email/,json/). - Python yerel kitaplıkları (
logging,asyncioveyauuidgibi)requirements.txteklemeyin.
- Proje klasörlerinizi Python standart kitaplıklardan sonra adlandırmaktan kaçının (örneğin,
- Dağıtım:
- Hataları önlemek için, tüm gerekli bağımlılıkların
ModuleNotFoundiçinde listelenmiş olduğundan emin olun. - Uygulamanızın Python sürümünü güncelleştirirseniz, daha önce oluşturulan paketlerle bağımlılık çakışmalarını önlemek için uygulamanızı yeni Python sürümünde yeniden derleyin ve yeniden dağıtın.
- Hataları önlemek için, tüm gerekli bağımlılıkların
- PyPI Olmayan Bağımlılıklar:
- Yerel paketler, tekerlek dosyaları veya özel akışlar gibi uygulamanızda PyPI'de bulunmayan bağımlılıkları ekleyebilirsiniz. Kurulum yönergeleri için bkz. Python Azure Functions'da Özel Bağımlılıklar.
- Azure Functions Python çalışanı bağımlılıkları
- Paketiniz, çalışan bağımlılıkları ile çakışabilecek bazı kitaplıklar içeriyorsa (örneğin,
protobufveyagrpcio), uygulamanızın işçi bağımlılıklarına başvurmasını önlemek için uygulama ayarları içinden PYTHON_ISOLATE_WORKER_DEPENDENCIES'i 1 olarak ayarlayın. Python 3.13 ve üzeri için bu özellik varsayılan olarak etkindir.
- Paketiniz, çalışan bağımlılıkları ile çakışabilecek bazı kitaplıklar içeriyorsa (örneğin,
Çalıştırma ve dağıtım
Bu bölümde, fonksiyonların yerel olarak çalıştırılması, Python sürüm desteği, yapılandırma ve dağıtım seçenekleri ve çalışma zamanı ayarları hakkında bilgi sağlar. İşlev uygulamanızı hem yerel hem de Azure ortamlarda başarıyla çalıştırmak için bu bilgileri kullanın.
Yerel olarak çalıştırılıyor
Azure dağıtmadan önce yerel makinenizde Python işlev uygulamanızı çalıştırabilir ve test edebilirsiniz.
Azure Functions Core Araçları'nı kullanma
Azure Functions Core Tools yükleyin ve proje kökünden func start komutunu çalıştırarak yerel çalışma zamanını başlatın:
func start
İşlev uygulamasını yerel olarak başlattığınızda, Core Tools uygulamanız için bulduğu tüm işlevleri görüntüler:
Functions:
http_trigger: http://localhost:7071/api/http_trigger
Core Tools'u kullanarak Azure Functions'ı yerel olarak geliştirme hakkında daha fazla bilgi edinebilirsiniz.
İşlevi doğrudan çağırma
azure-functions >= 1.21.0 kullanarak, Çekirdek Araçları çalıştırmadan Python yorumlayıcısını kullanarak işlevleri doğrudan çağırabilirsiniz. Bu yaklaşım hızlı birim testleri için kullanışlıdır:
# 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))
Çıktıyı görmek için dosyayı doğrudan Python ile çalıştırın:
> 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))
Çıktıyı görmek için dosyayı doğrudan Python ile çalıştırın:
> python __init__.py
Hello, World!
Bu yaklaşım fazladan paket veya kurulum gerektirmez ve geliştirme sırasında hızlı doğrulama için idealdir. Daha ayrıntılı test için bkz . Birim Testi
Desteklenen Python sürümleri
Azure Functions, Supported languages in Azure Functions'da listelenen Python sürümlerini destekler. Daha fazla genel bilgi için bkz. Azure Functions çalışma zamanı destek ilkesi.
Önemli
İşlev uygulamanızın Python sürümünü değiştirirseniz, yeni sürümü kullanarak uygulamayı yeniden oluşturmanız ve yeniden dağıtmanız gerekir. Python sürümü değiştiğinde mevcut dağıtım yapıtları ve bağımlılıkları otomatik olarak yeniden derlenemez.
Derleme ve Dağıtım
Senaryonuz için önerilen derleme mekanizması hakkında daha fazla bilgi edinmek için bkz. Derleme Seçenekleri. Dağıtıma genel bir bakış için Azure Functions'ta Dağıtım teknolojileri başlıklı bölüme bakın.
Dağıtım Mekanizmaları Hızlı Karşılaştırması
| Araç / Platform | Komut / Eylem | En İyi Kullanım Örneği |
|---|---|---|
| Azure Functions Core Tools | func azure functionapp publish <APP_NAME> |
CI çalıştırmaları, yerel otomasyon veya platformlar arası çalışırken idealdir. |
| AZ CLI | az functionapp deployment source config-zip |
Çekirdek Araçlar dışındaki dağıtımlarda betikleme yaparken kullanışlıdır. Otomatik işlem hatlarında veya bulut tabanlı terminallerde (Azure Cloud Shell) iyi çalışır. |
| Visual Studio Code (Azure Functions Uzantısı) | Command Palette → "Azure Functions: Azure'a Dağıtın…” | Yeni başlayanlar veya etkileşimli dağıtımlar için en iyi. Paketleme ve derleme işlemlerini otomatik olarak işler. |
| GitHub Actions | Azure/functions-action@v1 |
GitHub tabanlı CI/CD için idealdir. Push veya PR birleştirmelerinde otomatik dağıtımı etkinleştirir. |
| Azure Pipelines |
AzureFunctionApp@2 Görev |
Azure DevOps kullanan kurumsal CI/CD. Denetimli yayın iş akışları, geçitli derlemeler ve çok aşamalı işlem hatları için en iyi yöntemdir. |
| Özel Kapsayıcı Dağıtımı | Kapsayıcı Gönder az functionapp create --image <container> |
İşletim sistemi düzeyinde paketlere, özel Python derlemelerine, sabitlenmiş çalışma zamanlarına veya desteklenmeyen bağımlılıklara (örneğin, sistem kitaplıkları, yerel ikililer) ihtiyacınız olduğunda gereklidir. |
| Portal Tabanlı İşlev Oluşturma | Azure portalında → satır içi düzenleyicide işlev oluşturma | Yalnızca basit, bağımlılıksız işlevler için kullanın. Tanıtımlar veya öğrenme için harikadır, ancak üçüncü taraf paketleri gerektiren uygulamalar için önerilmez . |
Not
Portal tabanlı İşlev Oluşturma , üçüncü taraf bağımlılıklarını desteklemez ve üretim uygulamaları oluşturmak için önerilmez. paketleri azure-functions ve yerleşik Python standart kitaplığı dışında yükleyemez veya bunlara başvuramazsınız.
Önemli
30 Eylül 2028'in ardından işlev uygulamanızı Bir Tüketim planında Linux'ta barındırma seçeneği kullanımdan kaldırılmıştır. Kesintileri önlemek için Linux üzerinde çalışan mevcut Tüketim planı uygulamalarınızı bu tarihten önce Flex Consumption planına geçirin. Tüketim planındaki Windows çalışan uygulamalar bu değişiklikten etkilenmez.
30 Eylül 2025'in ardından Linux Tüketim planına yeni özellik ve yeni dil yığını desteği eklenmez. Linux Tüketimi için desteklenen son dil sürümleri şunlardır: .NET 9, Python 3.12, Node.js 22, PowerShell 7.4 ve Java 21. Linux Tüketimi için daha yeni dil sürümleri desteklenmez.
Daha fazla bilgi için bkz . Tüketim planı uygulamalarını Esnek Tüketim planına geçirme.
Python 3.13+ güncelleştirmeleri
Python 3.13 sürümünden başlayarak Azure Functions, uygulamalarınızı derleme ve çalıştırma şeklinizi etkileyen çeşitli önemli çalışma zamanı ve performans geliştirmeleri sağlar. Önemli değişiklikler şunlardır:
Çalışma zamanı sürüm denetimi: artık
azure-functions-runtimerequirements.txtpaketine başvurarak isteğe bağlı olarak uygulamanızı belirli Python çalışan sürümlerine sabitleyebilir veya yükseltebilirsiniz.Sürüm denetimi etkinleştirilmeden uygulamanız, İşlevler'in yönettiği Python çalışma zamanının varsayılan sürümünde çalışır. requirements.txt dosyanızı en son yayımlanan sürümü, önceden yayınlanmış sürümü istemek veya uygulamanızı Python çalışma zamanının belirli bir sürümüne sabitlemek için değiştirmeniz gerekir.
requirements.txt dosyanıza Python çalışma zamanı paketine başvuru ekleyerek çalışma zamanı sürümü denetimini etkinleştirirsiniz; burada pakete atanan değer kullanılan çalışma zamanı sürümünü belirler.
Herhangi bir üretim uygulamasını yayın öncesi (alfa, beta veya geliştirme) çalışma zamanı sürümlerine sabitlemekten kaçının.
Değişikliklerden haberdar olmak için Python çalışma zamanı sürüm notlarını düzenli olarak gözden geçirin.
Aşağıdaki tabloda, requirements.txt dosyanızdaki bu ayarın sürüm değerine göre sürüm oluşturma davranışı gösterilir:
Sürüm Örnek Davranış Değer kümesi yok azure-functions-runtimePython 3.13+ uygulamanız İşlevler Python çalışma zamanının en son kullanılabilir sürümünde çalışır. Uygulamanız en son kararlı çalışma zamanı güncelleştirmelerini otomatik olarak aldığından, bu seçenek platform iyileştirmeleri ve özellikleriyle güncel kalmak için en iyisidir. Belirli bir sürüme sabitlenmiş azure-functions-runtime==1.2.0Python 3.13+ uygulamanız sabitlenmiş çalışma zamanı sürümünde kalır ve otomatik güncelleştirmeleri almaz. Bunun yerine, çalışma zamanındaki yeni özelliklerden, düzeltmelerden ve geliştirmelerden yararlanmak için sabitlenmiş sürümünüzü el ile güncelleştirmeniz gerekir. Sabitleme, kararlılığın ve öngörülebilirliğin önemli olduğu kritik üretim iş yükleri için önerilir. Sabitleme ayrıca geliştirme sırasında uygulamanızı önceden yayınlanmış çalışma zamanı sürümlerinde test etmenizi sağlar. Paket referansı yok Yok azure-functions-runtimeayarlanmadığında, Python 3.13+ uygulamanız, Python çalışma zamanının en son yayınlanan sürümün arkasındaki varsayılan bir sürümünde çalışır. Güncelleştirmeler, İşlevler tarafından düzenli aralıklarla yapılır. Bu seçenek kararlılık ve geniş uyumluluk sağlar. Ancak, en yeni özelliklere ve düzeltmelere erişim, varsayılan sürüm güncelleştirilene kadar geciktirilir.
Bağımlılık yalıtımı: Uygulamanızın bağımlılıkları (veya
grpciogibiprotobuf) çalışanın bağımlılıklarından tamamen yalıtılır ve sürüm çakışmalarını önler.PYTHON_ISOLATE_WORKER_DEPENDENCIESuygulama ayarı, Python 3.13 veya sonraki sürümlerde çalışan uygulamalar için hiçbir etkiye sahip olmayacaktır.Basitleştirilmiş HTTP akış kurulumu; özel uygulama ayarları gerekmez.
Çalışan uzantılarına ve paylaşılan bellek özelliklerine olan destek kaldırıldı.
Çalışma zamanı sürüm denetimi: artık
azure-functions-runtime-v1requirements.txtpaketine başvurarak isteğe bağlı olarak uygulamanızı belirli Python çalışan sürümlerine sabitleyebilir veya yükseltebilirsiniz.Sürüm denetimi etkinleştirilmeden uygulamanız, İşlevler'in yönettiği Python çalışma zamanının varsayılan sürümünde çalışır. requirements.txt dosyanızı en son yayımlanan sürümü, önceden yayınlanmış sürümü istemek veya uygulamanızı Python çalışma zamanının belirli bir sürümüne sabitlemek için değiştirmeniz gerekir.
requirements.txt dosyanıza Python çalışma zamanı paketine başvuru ekleyerek çalışma zamanı sürümü denetimini etkinleştirirsiniz; burada pakete atanan değer kullanılan çalışma zamanı sürümünü belirler.
Herhangi bir üretim uygulamasını yayın öncesi (alfa, beta veya geliştirme) çalışma zamanı sürümlerine sabitlemekten kaçının.
Değişikliklerden haberdar olmak için Python çalışma zamanı sürüm notlarını düzenli olarak gözden geçirin.
Aşağıdaki tabloda, requirements.txt dosyanızdaki bu ayarın sürüm değerine göre sürüm oluşturma davranışı gösterilir:
Sürüm Örnek Davranış Değer kümesi yok azure-functions-runtime-v1Python 3.13+ uygulamanız İşlevler Python çalışma zamanının en son kullanılabilir sürümünde çalışır. Uygulamanız en son kararlı çalışma zamanı güncelleştirmelerini otomatik olarak aldığından, bu seçenek platform iyileştirmeleri ve özellikleriyle güncel kalmak için en iyisidir. Belirli bir sürüme sabitlenmiş azure-functions-runtime-v1==1.2.0Python 3.13+ uygulamanız sabitlenmiş çalışma zamanı sürümünde kalır ve otomatik güncelleştirmeleri almaz. Bunun yerine, çalışma zamanındaki yeni özelliklerden, düzeltmelerden ve geliştirmelerden yararlanmak için sabitlenmiş sürümünüzü el ile güncelleştirmeniz gerekir. Sabitleme, kararlılığın ve öngörülebilirliğin önemli olduğu kritik üretim iş yükleri için önerilir. Sabitleme ayrıca geliştirme sırasında uygulamanızı önceden yayınlanmış çalışma zamanı sürümlerinde test etmenizi sağlar. Paket referansı yok Yok azure-functions-runtime-v1ayarlanmadığında, Python 3.13+ uygulamanız, Python çalışma zamanının en son yayınlanan sürümün arkasındaki varsayılan bir sürümünde çalışır. Güncelleştirmeler, İşlevler tarafından düzenli aralıklarla yapılır. Bu seçenek kararlılık ve geniş uyumluluk sağlar. Ancak, en yeni özelliklere ve düzeltmelere erişim, varsayılan sürüm güncelleştirilene kadar geciktirilir.
Bağımlılık yalıtımı: Uygulamanızın bağımlılıkları (veya
grpciogibiprotobuf) çalışanın bağımlılıklarından tamamen yalıtılır ve sürüm çakışmalarını önler.PYTHON_ISOLATE_WORKER_DEPENDENCIESuygulama ayarı, Python 3.13 veya sonraki sürümlerde çalışan uygulamalar için hiçbir etkiye sahip olmayacaktır.Çalışan uzantılarına ve paylaşılan bellek özelliklerine olan destek kaldırıldı.
Gözlemlenebilirlik ve test etme
Bu bölümde logging, monitoring ve testing özellikleri sorunları ayıklamanıza, performansı izlemenize ve Python işlev uygulamalarınızın güvenilirliğinden emin olmanıza yardımcı olur.
Kayıt ve izleme
Azure Functions, doğrudan Python yerleşik logging modülüyle kullanabileceğiniz bir kök günlükçü kullanıma sunar. Bu günlükçü kullanılarak yazılan tüm iletiler, uygulamanız Azure çalışırken otomatik olarak Application Insights gönderilir.
Kayıt tutma, daha fazla kuruluma gerek kalmadan çalışma zamanı bilgilerini yakalamanıza ve tanılama yapmanızı sağlar.
HTTP tetikleyicisi ile günlüğe kaydetme örneği
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")
Günlük düzeylerinin tamamını (debug, info, warning, error, critical) kullanabilirsiniz ve bunlar Azure portalında Günlükler veya Application Insights altında görünür.
Portalda Azure Functions izleme hakkında daha fazla bilgi edinmek için bkz. Monitor Azure Functions.
Not
Application Insights'ta hata ayıklama günlüklerini görüntülemek için daha fazla kurulum gerekir. Python günlüklemeyi etkinleştirmek için PYTHON_ENABLE_DEBUG_LOGGING ayarını 1, ve logLevel, trace veya debug olarak host.json dosyanızda yapılandırarak bu özelliği etkinleştirebilirsiniz. Varsayılan olarak, hata ayıklama günlükleri Application Insights'ta görünmez.
Arka plan iş parçacıklarından loglama
İşleviniz yeni bir iş parçacığı başlatırsa ve bu iş parçacığından loglama yapmanız gerekiyorsa, context argümanını iş parçacığına geçtiğinizden emin olun.
context iş parçacığı yerel depolama alanını ve çalışan iş parçacığında ayarlanması gereken güncel invocation_id değerini içerir, böylece günlükler işlev yürütmesiyle düzgün bir şekilde ilişkilendirilebilir.
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")
Özel günlükçüleri yapılandırma
Özel biçimlendirme, günlük filtreleme veya üçüncü taraf tümleştirmeleri gibi günlük davranışı üzerinde daha fazla denetime ihtiyacınız olduğunda Python özel günlükçüleri yapılandırabilirsiniz.
Özel bir günlükçü yapılandırmak için Python logging.getLogger() özel bir adla kullanın ve gerektiğinde işleyiciler veya biçimlendiriciler ekleyin.
import logging
custom_logger = logging.getLogger('my_custom_logger')
OpenTelemetry desteği
Python için Azure Functions, izlemeleri, ölçümleri ve günlükleri standart bir biçimde yaymanızı sağlayan OpenTelemetry'yi de destekler. OpenTelemetry kullanmak, telemetriyi Application Insights dışındaki araçlara (Grafana veya Jaeger gibi) aktarmak istediğiniz dağıtılmış uygulamalar veya senaryolar için özellikle değerlidir.
Kurulum yönergeleri ve örnek kod için Azure Functions (Python) için OpenTelemetry Hızlı Başlangıcı'na bakın.
Birim testi
kullanarak pytestişlevleriniz için birim testleri yazın ve çalıştırın.
Standart test çerçevelerini kullanarak diğer Python kodu gibi Python işlevlerini test edebilirsiniz. Çoğu bağlama için, paketten azure.functions uygun bir sınıfın örneğini oluşturarak bir sahte giriş nesnesi oluşturabilirsiniz.
Örnek olarak kullanarak my_function , aşağıdaki örnek HTTP ile tetiklenen bir işlevin sahte testidir:
İlk olarak, project_root</function_app.py dosyasını oluşturun> ve işlevi HTTP tetikleyicisi olarak uygulayınmy_function.
# <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
)
HTTP tetikleyiciniz için test çalışmaları yazmaya başlayabilirsiniz.
# <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',
)
Python sanal ortam klasörünüzün içinde, uygulamayı test etmek için aşağıdaki komutları çalıştırabilirsiniz:
pip install pytest
pytest test_my_function.py
Sonuçları terminalde aşağıdaki gibi görürsünüz pytest :
============================================================================================================ test session starts ============================================================================================================
collected 1 item
test_my_function.py . [100%]
============================================================================================================= 1 passed in 0.24s =============================================================================================================
İyileştirme ve gelişmiş konular
Python işlevleri uygulamalarınızı iyileştirme hakkında daha fazla bilgi edinmek için şu makalelere bakın:
- Ölçeklendirme ve Performans
- Flask Framework ile Azure Functions kullanımı
- Durable Functions
- HTTP Akışı
İlgili makaleler
İşlevler hakkında daha fazla bilgi için şu makalelere bakın:
- Azure Functions paket API'si belgeleri
- Azure Functions için en iyi uygulamalar
- Azure Functions tetikleyicileri ve bağlamaları
- Blob Storage bağlamaları
- HTTP ve web kancası bağlamaları
- Kuyruk Depolama bağlamaları
- Zamanlayıcı tetikleyicileri
Python kullanırken sorun mu yaşıyorsunuz? Bize bildirin ve bir sorun bildirin.