Aracılığıyla paylaş


Python uygulamaları için Azure İşlevleri geliştirici başvuru kılavuzu

Azure İşlevleri, 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 İşlevleri oluşturmaya odaklanır ve şunları gerçekleştirmenize 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
  • Azure'da uygulamanızı dağıtma ve izleme
  • Ölçeklendirme ve performans için en iyi yöntemleri uygulama

Kavramsal bir genel bakış mı arıyorsunuz? Bkz. Azure İşlevleri Geliştirici Başvurusu.

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 İşlevleri'ne atlayı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 adlı main()dosyanın içinde genel ve durum bilgisi olmayan __init__.py bir yöntem 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, name sorgu parametresinin değerini HttpRequest nesnesinin params 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=Test gibi 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

Python kitaplığı, azure-functions Azure İşlevleri ç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

Kitaplık, azure-functions Python Azure İşlevleri için programlama yüzeyini tanımlar ancak genel amaçlı bir SDK değildir. Özellikle Azure İşlevleri çalışma zamanı içinde işlevleri yazmak ve çalıştırmak için kullanın.

Alternatif giriş noktası

function.json dosyasındaki scriptFile ve entryPoint özelliklerini belirterek bir işlevin varsayılan davranışını değiştirebilirsiniz. Örneğin, aşağıdaki function.json dosyası, Azure işleviniz için giriş noktası olarak custom_entry() yöntemini kullanmak üzere çalışma zamanını main.py dosyasına yönlendirir.

{
  "scriptFile": "main.py",
  "entryPoint": "custom_entry",
  "bindings": [
      ...
  ]
}

Klasör yapısı

Python Azure İşlevleri 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 Uzak derleme 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'da yayımlanmaz.
Dockerfile Dağıtım için özel bir kapsayıcı tanımlar.

Python v2 programlama modelinde Azure İşlevleri, tetikleyicileri ve bağlamaları doğrudan kodunuzda tanımlamak için dekoratör 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-functions paketini 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, HttpRequest nesnesinin parametresinden sorgu parametresinin değerini 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 şu şekilde görünebilir: http://localhost:7071/api/http_trigger?name=Test. Bağlamaları kullanan örnekler için bkz. Tetikleyiciler ve Bağlamalar.

Kitaplık azure-functions

azure-functions Python kitaplığı, Azure İşlevleri 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 FunctionApp tü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 HttpRequest ve HttpResponse, 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

Kitaplık, azure-functions Python Azure İşlevleri için programlama yüzeyini tanımlar ancak genel amaçlı bir SDK değildir. Özellikle Azure İşlevleri çalışma zamanı içinde 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 şemaları kullanarak işlevleri ayrı Python dosyalarında tanımlayın ve bunları ana uygulamanıza kaydedin. Bu ayrım kodunuzu düzenli ve yeniden kullanılabilir durumda tutar.

Şemayı tanımlamak ve kaydetmek için:

  1. Gibi http_blueprint.pybaş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!")
    
  2. Şemayı ana function_app.py dosyaya 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

Dayanıklı İşlevler kullanarak azure-functions-durable taslakları da destekler. Örnek → görüntüleme

Klasör yapısı

Python Azure İşlevleri 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 İşlevleri ve tetikleyicilerinin dekoratörler kullanılarak tanımlandığı ana betik.
host.json Uygulamadaki tüm işlevler için genel yapılandırma.
requirements.txt Uzak derleme 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 sırlar (hiçbir zaman 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'da yayımlanmaz.
Dockerfile Dağıtım için özel bir kapsayıcı tanımlar.

[DİKKAT!] requirements.txt ile 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 İşlevleri, işlevi yürütmeyi başlatmak için tetikleyicileri ve kodunuzu depolama, kuyruklar ve veritabanları gibi diğer hizmetlere bağlamak için bağlamaları 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. Azure İşlevleri'nde Tetikleyiciler ve Bağlamalar.

Ö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 öğesini function.json içinde 'in' olarak belirterek girişler ekleyin." Çıkışların directionout vardır.
  • İstek ayrıntılarına HttpRequest nesnesi üzerinden erişebilir ve başlıklar, durum kodu ve gövdeden oluşan özel bir HttpResponse oluş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_trigger ve 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 Out bağlamaları ve .set() yöntemi kullanılarak atanır.
  • HttpRequest nesnesi aracılığıyla istek ayrıntılarına erişebilir ve üst bilgiler, durum kodu ve gövde içeren özel bir HttpResponse oluşturabilirsiniz.

SDK türü bağlamaları

Belirli tetikleyiciler ve bağlamalar için, temel alınan Azure SDK'ları ve çerçeveleri 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 İşlevleri'ndeki 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:

veya os.environkullanarak os.getenv doğrudan kodunuzdaki değişkenlere erişin.

setting_value = os.getenv("myAppSetting", "default_value")

Not

Azure İşlevleri, İş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 İşlevleri uygulamanızda diğer Python paketlerini kullanmak için bunları projenizin kökündeki bir requirements.txt dosyada listeleyin. Bu paketler Python'ın 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 Derleme 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ıklarından (örneğin, , email/json/) sonra adlandırmaktan kaçının.
    • Python yerel kitaplıklarını (logging, asyncio veya uuid gibi) requirements.txt içinde eklemeyin.
  • Dağıtım:
    • Hataları önlemek için, tüm gerekli bağımlılıkların requirements.txt iç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.
  • PyPI Olmayan Bağımlılıklar:
  • Azure İşlevleri Python çalışan bağımlılıkları:

Çalıştırma ve dağıtım

Bu bölümde işlevleri yerel olarak çalıştırma, Python sürüm desteği, derleme ve dağıtım seçenekleri ve çalışma zamanı yapılandırması hakkında bilgi sağlanır. İşlev uygulamanızı hem yerel hem de Azure ortamlarında başarıyla çalıştırmak için bu bilgileri kullanın.

Yerel olarak çalıştırılıyor

Azure'a dağıtmadan önce yerel makinenizde Python işlev uygulamanızı çalıştırabilir ve test edebilirsiniz.

Azure İşlevleri Temel Araçları'nı kullanma

Azure İşlevleri Temel Araçları'nı yükleyin ve proje kökünden komutunu çalıştırarak func start 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

Çekirdek Araçları'nı kullanma hakkında daha fazla bilgi için Bkz. Çekirdek Araçları kullanarak Azure İşlevlerini yerel olarak geliştirme.

İşlevi doğrudan çağırma

kullanarak azure-functions >= 1.21.0, Ç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 İşlevleri, Azure İşlevleri'nde desteklenen diller bölümünde listelenen Python sürümlerini destekler. Daha fazla genel bilgi için bkz. Azure İşlevleri ç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şturup 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 genel bakış için bkz. Azure İşlevleri'nde dağıtım teknolojileri.

Dağıtım Mekanizmaları Hızlı Karşılaştırması

Araç / Platform Komut / Eylem En İyi Kullanım Örneği
Azure İşlevleri Temel Araçları 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 İşlevleri Uzantısı) Komut Paleti → "Azure İşlevleri: Azure'a dağıtma..." 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 kullanarak kurumsal ölçekli 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 → satır içi düzenleyicisinde 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. azure-functions ve yerleşik Python standart kitaplığı haricinde paketleri 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ında Windows üzerinde çalışan uygulamalar bu değişiklikten etkilenmez. Daha fazla bilgi için Bkz. Linux Tüketim planı kullanımdan kaldırma bildirimi.

Python 3.13+ güncelleştirmeleri

Python 3.13'den başlayarak Azure İşlevleri, 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 isteğe bağlı olarak azure-functions-runtime paketine başvurarak uygulamanızı requirements.txt kullanarak belirli Python altyapı sürümlerine sabitleyebilir veya yükseltebilirsiniz.

    • Sürüm denetimi etkinleştirilmeden uygulamanız, İşlevler'in yönettiği Varsayılan Python çalışma zamanı sürümünde çalışır. requirements.txt dosyanızı en son yayımlanan sürümü, önceden yayınlanmış bir 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 Example Davranış
      Değer kümesi yok azure-functions-runtime Python 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.0 Python 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 Python 3.13+ uygulamanızda azure-functions-runtime öğesini ayarlamazsanız, uygulamanız Python çalışma zamanının en son yayınlanan sürümünün gerisinde kalan varsayılan bir sürümde ç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. Uygulama ayarının PYTHON_ISOLATE_WORKER_DEPENDENCIES Python 3.13 veya sonraki sürümlerde çalışan uygulamalar üzerinde hiçbir etkisi olmaz.

  • 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-v1 paketine başvurarak uygulamanızı belirli Python çalışan sürümlerine sabitleyebilir veya yükseltebilirsiniz requirements.txt.

    • Sürüm denetimi etkinleştirilmeden uygulamanız, İşlevler'in yönettiği Varsayılan Python çalışma zamanı sürümünde çalışır. requirements.txt dosyanızı en son yayımlanan sürümü, önceden yayınlanmış bir 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 Example Davranış
      Değer kümesi yok azure-functions-runtime-v1 Python 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.0 Python 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. Kararlılığın ve öngörülebilirliğin önemli olduğu kritik üretim iş yükleri için sabitleme ö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 başvurusu yok Yok azure-functions-runtime-v1 öğesini ayarlamayarak, Python 3.13+ uygulamanız en son yayınlanan sürümün gerisinde olan varsayılan bir Python çalışma zamanı 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. Uygulama ayarının PYTHON_ISOLATE_WORKER_DEPENDENCIES Python 3.13 veya sonraki sürümlerde çalışan uygulamalar üzerinde hiçbir etkisi olmaz.

  • Çalışan uzantıları ve paylaşılan bellek özellikleri desteği kaldırıldı.

Gözlemlenebilirlik ve test etme

Bu bölümde, sorunlarda hata ayıklamanıza, performansı izlemenize ve Python işlev uygulamalarınızın güvenilirliğinden emin olmanıza yardımcı olacak günlük, izleme ve test özellikleri yer almaktadır.

Kayıt ve izleme

Azure İşlevleri, Python'ın yerleşik logging modülüyle doğrudan kullanabileceğiniz bir kök günlükçü sunar. Uygulamanız Azure'da çalışırken bu günlükçü kullanılarak yazılan tüm iletiler otomatik olarak Application Insights'a 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 (debug, info, , warning, errorcritical) tam kümesini kullanabilirsiniz ve bunlar Azure portalında Günlükler veya Application Insights altında görünür.

Portalda Azure İşlevleri'ni izleme hakkında daha fazla bilgi edinmek için bkz. Azure İşlevleri'ni izleme.

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'da özel günlükçüler yapılandırabilirsiniz. Özel günlükçü yapılandırmak için Python'ları 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 İşlevleri, 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 Bkz. Azure İşlevleri (Python) için OpenTelemetry Hızlı Başlangıcı .

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:

İşlevler hakkında daha fazla bilgi için şu makalelere bakın:

Python kullanırken sorun mu yaşıyorsunuz? Bize bildirin ve bir sorun bildirin.