Bagikan melalui


Panduan referensi pengembang Azure Functions untuk aplikasi Python

Azure Functions adalah layanan komputasi tanpa server yang memungkinkan Anda menjalankan kode berbasis peristiwa tanpa menyediakan atau mengelola infrastruktur. Eksekusi fungsi dipicu oleh peristiwa seperti permintaan HTTP, pesan antrean, timer, atau perubahan penyimpanan—dan menskalakan secara otomatis berdasarkan permintaan.

Panduan ini berfokus khusus pada pembangunan Azure Functions berbasis Python dan membantu Anda:

  • Membuat dan menjalankan aplikasi fungsi secara lokal
  • Memahami model pemrograman Python
  • Mengatur dan mengonfigurasi aplikasi Anda
  • Menyebarkan dan memantau aplikasi Anda di Azure
  • Menerapkan praktik terbaik untuk penskalaan dan performa

Mencari gambaran umum konseptual? Lihat Referensi Pengembang Azure Functions.

Tertarik dengan kasus penggunaan dunia nyata? Jelajahi halaman Skenario & Sampel .

Memulai Langkah Pertama

Pilih lingkungan yang sesuai dengan alur kerja Anda dan lompat ke Azure Functions untuk Python:

Membangun aplikasi fungsi Anda

Bagian ini mencakup komponen penting untuk membuat dan menyusun aplikasi fungsi Python Anda. Topik termasuk model pemrograman, struktur proyek, pemicu dan pengikatan, dan manajemen dependensi.

Model pemrograman

Functions mendukung dua versi model pemrograman Python:

Versi Deskripsi
2.x Gunakan pendekatan berbasis dekorator untuk menentukan pemicu dan pengikatan langsung dalam file kode Python Anda. Anda menerapkan setiap fungsi sebagai metode global tanpa status dalam function_app.py file atau file cetak biru yang dirujuk. Versi model ini direkomendasikan untuk aplikasi Python baru.
1.x Anda menentukan pemicu dan pengikatan untuk setiap fungsi dalam file terpisah function.json . Anda menerapkan setiap fungsi sebagai metode stateless global dalam file kode Python Anda. Versi model ini mendukung aplikasi warisan.

Artikel ini menargetkan versi model Python tertentu. Pilih versi yang Anda inginkan di bagian atas artikel.

Penting

Gunakan model pemrograman v2 untuk pendekatan berbasis dekorator untuk menentukan pemicu dan pengikatan langsung dalam kode Anda.

Dalam model pemrograman Python v1, setiap fungsi didefinisikan sebagai metode global tanpa main() status di dalam file bernama __init__.py. Pemicu dan pengikatan fungsi dikonfigurasi secara terpisah dalam function.json file, dan nilai pengikatan name digunakan sebagai parameter dalam metode Anda main() .

Example

Berikut adalah fungsi sederhana yang merespons permintaan HTTP:

# __init__.py
def main(req):
    user = req.params.get('user')
    return f'Hello, {user}!'

Berikut adalah file yang function.json sesuai:

{
    "scriptFile": "__init__.py",
    "bindings": [
        {
            "authLevel": "function",
            "type": "httpTrigger",
            "direction": "in",
            "name": "req",
            "methods": [
                "get",
                "post"
            ]
        },
        {
            "type": "http",
            "direction": "out",
            "name": "$return"
        }
    ]
}

Konsep utama

  • Fungsi ini memiliki satu pemicu HTTP.
  • Objek HttpRequest berisi header permintaan, parameter kueri, parameter rute, dan isi pesan. Fungsi ini mendapatkan nilai name parameter kueri dari params parameter objek HttpRequest .
  • Untuk mengirim nama dalam contoh ini, tambahkan ?name={name} ke URL fungsi yang diekspos. Misalnya, jika berjalan secara lokal, URL lengkap mungkin terlihat seperti http://localhost:7071/api/http_trigger?name=Test. Untuk contoh menggunakan pengikatan, lihat Pemicu dan Pengikatan.

Gunakan azure-functions SDK dan sertakan anotasi tipe untuk meningkatkan dukungan IntelliSense dan editor:

# __init__.py
import azure.functions as func

def http_trigger(req: func.HttpRequest) -> str:
# requirements.txt
azure-functions

Pustaka azure-functions

Pustaka azure-functions Python menyediakan jenis inti yang digunakan untuk berinteraksi dengan runtime Azure Functions. Untuk melihat semua jenis dan metode yang tersedia, kunjungi azure-functions API. Kode fungsi Anda dapat digunakan azure-functions untuk:

  • Mengakses data input pemicu (misalnya, HttpRequest, TimerRequest)
  • Membuat nilai output (seperti HttpResponse)
  • Berinteraksi dengan konteks yang disediakan runtime dan data pengikatan

Jika Anda menggunakan azure-functions di aplikasi, aplikasi tersebut harus disertakan dalam dependensi proyek Anda.

Catatan

azure-functions Pustaka ini menetapkan antarmuka pemrograman untuk Python Azure Functions, tetapi bukan merupakan SDK untuk tujuan umum. Gunakan secara khusus untuk menulis dan menjalankan fungsi dalam runtime Azure Functions.

Titik masuk alternatif

Anda dapat mengubah perilaku default (bawaan) fungsi dengan menentukan scriptFile dan entryPoint properti dalam file function.json. Misalnya, file berikut function.json mengarahkan runtime untuk menggunakan custom_entry() metode dalam main.py file sebagai titik masuk untuk fungsi Azure Anda.

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

Struktur folder

Gunakan struktur berikut untuk proyek Python Azure Functions:

<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

File dan folder kunci

Berkas / Folder Deskripsi Diperlukan agar aplikasi berjalan di Azure
my_first_function/ Direktori untuk satu fungsi.
__init__.py/ Skrip utama di mana kode fungsi my_first_function didefinisikan.
function.json/ Berisi konfigurasi binding untuk fungsi my_first_function.
host.json Konfigurasi global untuk semua fungsi di aplikasi.
requirements.txt Dependensi Python diinstal selama penerbitan saat menggunakan build jarak jauh. ❌ (disarankan untuk manajemen paket)
local.settings.json Pengaturan dan rahasia aplikasi khusus lokal (tidak pernah dipublikasikan). ❌ (diperlukan untuk pengembangan lokal)
.funcignore Menentukan file dan folder yang akan dikecualikan dari penyebaran (misalnya, , .venv/tests/, local.settings.json). ❌ (disarankan)
.venv/ Lingkungan virtual lokal untuk Python (dikecualikan dari penyebaran).
.vscode/ Konfigurasi editor untuk Visual Studio Code. Tidak diperlukan untuk implementasi.
shared/ Menyimpan kode pembantu yang dibagikan di seluruh proyek Aplikasi Fungsi
additional_functions/ Digunakan untuk organisasi kode modular—biasanya dengan rancangan.
tests/ Pengujian unit untuk aplikasi fungsi Anda. Belum dipublikasikan ke Azure.
Dockerfile Menentukan kontainer kustom untuk penyebaran.

Dalam model pemrograman Python v2, Azure Functions menggunakan pendekatan berbasis dekorator untuk menentukan pemicu dan pengikatan langsung dalam kode Anda. Setiap fungsi diimplementasikan sebagai metode global tanpa status dalam function_app.py file.

Example

Berikut adalah fungsi sederhana yang merespons permintaan HTTP:

import azure.functions as func

app = func.FunctionApp()

@app.route("hello")
def http_trigger(req):
    user = req.params.get("user")
    return f"Hello, {user}!"
# requirements.txt
azure-functions

Konsep utama

  • Kode mengimpor paket azure-functions dan menggunakan dekorator dan tipe untuk menentukan fungsi app.
  • Fungsi ini memiliki satu pemicu HTTP.
  • Objek HttpRequest berisi header permintaan, parameter kueri, parameter rute, dan isi pesan. Fungsi ini mendapatkan nilai name parameter kueri dari params parameter objek HttpRequest .
  • Untuk mengirim nama dalam contoh ini, tambahkan ?name={name} ke URL fungsi yang diekspos. Misalnya, jika berjalan secara lokal, URL lengkap mungkin terlihat seperti http://localhost:7071/api/http_trigger?name=Test. Untuk contoh menggunakan pengikatan, lihat Pemicu dan Pengikatan.

Pustaka azure-functions

Pustaka azure-functions Python adalah bagian inti dari model pemrograman Azure Functions. Ini menyediakan dekorator, jenis pemicu dan pengikatan, dan objek permintaan/respons yang digunakan untuk menentukan dan berinteraksi dengan fungsi pada runtime. Untuk melihat semua jenis dan dekorator yang tersedia, kunjungi azure-functions API. Kode aplikasi fungsi Anda bergantung pada pustaka ini untuk:

  • Tentukan semua fungsi menggunakan FunctionApp objek
  • Mendeklarasikan pemicu dan pengikatan (misalnya, @app.route, @app.timer_trigger)
  • Akses input dan output yang telah diketik (seperti HttpRequest dan HttpResponse, dan Out`)

azure-functions harus disertakan dalam dependensi proyek Anda. Untuk mempelajari lebih lanjut, lihat manajemen paket.

Catatan

azure-functions Pustaka ini menetapkan antarmuka pemrograman untuk Python Azure Functions, tetapi bukan merupakan SDK untuk tujuan umum. Gunakan secara khusus untuk menulis dan menjalankan fungsi dalam runtime Azure Functions.

Gunakan anotasi tipe untuk meningkatkan dukungan IntelliSense dan editor.

def http_trigger(req: func.HttpRequest) -> str:

Mengatur dengan cetak biru

Untuk aplikasi yang lebih besar atau modular, gunakan blueprints untuk menentukan fungsi dalam file Python terpisah dan mendaftarkannya dengan aplikasi utama Anda. Pemisahan ini membuat kode Anda tetap teratur dan dapat digunakan kembali.

Untuk mendefinisikan dan mendaftarkan rancangan:

  1. Tentukan cetak biru dalam file Python lain, seperti 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!")
    
  2. Daftarkan cetak biru dalam file utama function_app.py :

    import azure.functions as func
    from http_blueprint import bp
    
    app = func.FunctionApp()
    app.register_functions(bp)
    

Dengan menggunakan cetak biru, Anda dapat:

  • Memisahkan aplikasi Anda menjadi modul yang dapat digunakan kembali
  • Pertahankan fungsi terkait yang dikelompokkan menurut file atau fitur
  • Memperluas atau berbagi rencana antar proyek

Catatan

Durable Functions juga mendukung cetak biru dengan menggunakan azure-functions-durable. Lihat contoh →

Struktur folder

Gunakan struktur berikut untuk proyek Python Azure Functions:

<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

File dan folder kunci

Berkas / Folder Deskripsi Diperlukan agar aplikasi berjalan di Azure
function_app.py Skrip utama tempat Azure Functions dan pemicu didefinisikan menggunakan dekorator.
host.json Konfigurasi global untuk semua fungsi di aplikasi.
requirements.txt Dependensi Python diinstal selama penerbitan saat menggunakan build jarak jauh. ❌ (disarankan untuk manajemen paket)
local.settings.json Pengaturan dan rahasia aplikasi khusus lokal (tidak pernah dipublikasikan). ❌ (diperlukan untuk pengembangan lokal)
.funcignore Menentukan file dan folder yang akan dikecualikan dari penyebaran (misalnya, , .venv/tests/, local.settings.json). ❌ (disarankan)
.venv/ Lingkungan virtual lokal untuk Python (dikecualikan dari penyebaran).
.vscode/ Konfigurasi editor untuk Visual Studio Code. Tidak diperlukan untuk implementasi.
shared/ Menyimpan kode pembantu yang dibagikan di seluruh proyek Aplikasi Fungsi
additional_functions/ Digunakan untuk organisasi kode modular—biasanya dengan rancangan.
tests/ Pengujian unit untuk aplikasi fungsi Anda. Belum dipublikasikan ke Azure.
Dockerfile Menentukan kontainer kustom untuk penyebaran.

[CATATAN!] requirements.txt Sertakan file ketika Anda melakukan penerapan dengan build jarak jauh. Jika Anda tidak menggunakan build jarak jauh atau ingin menggunakan file lain untuk menentukan dependensi aplikasi, Anda dapat melakukan build lokal dan menyebarkan aplikasi dengan dependensi bawaan.

Untuk panduan tentang pengujian unit, lihat Pengujian Unit. Untuk penyebaran kontainer, lihat Menyebarkan dengan kontainer kustom.


Pemicu dan pengikatan

Azure Functions menggunakan pemicu untuk memulai eksekusi dan pengikatan fungsi untuk menyambungkan kode Anda ke layanan lain seperti penyimpanan, antrean, dan database. Dalam model pemrograman Python v2, Anda mendeklarasikan pengikatan dengan menggunakan dekorator.

Ada dua jenis pengikatan utama:

  • Pemicu (input yang memulai fungsi)
  • Input dan output (sumber data atau tujuan tambahan)

Untuk informasi selengkapnya tentang pemicu dan pengikatan yang tersedia, lihat Pemicu dan Pengikatan di Azure Functions.

Contoh: Pemicu Timer dengan Input Blob

Fungsi ini:

  • Memicu otomatis setiap 10 menit
  • Membaca dari Blob dengan menggunakan Pengikatan Jenis SDK
  • Cache hasil dan tulis ke file sementara
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}")

Konsep utama

  • Gunakan pengikatan tipe SDK untuk bekerja dengan tipe kaya. Untuk informasi selengkapnya, lihat Pengikatan jenis SDK.
  • Anda dapat menggunakan variabel global untuk menyimpan komputasi mahal, tetapi statusnya tidak dijamin bertahan di seluruh eksekusi fungsi.
  • File sementara disimpan di tmp/ dan tidak dijamin akan bertahan di seluruh pemanggilan atau instans pelebaran skala.
  • Anda dapat mengakses konteks pemanggilan fungsi melalui kelas Konteks.

Contoh: Pemicu HTTP dengan Masukan Cosmos DB dan Keluaran Event Hub

Fungsi ini:

  • Pemicu pada permintaan HTTP
  • Membaca dari Cosmos DB
  • Menulis ke output Pusat Aktivitas
  • Mengembalikan respons HTTP
# __init__.py
import azure.functions as func

def main(req: func.HttpRequest,
         documents: func.DocumentList,
         event: func.Out[str]) -> func.HttpResponse:

    # Content from HttpRequest and Cosmos DB input
    http_content = req.params.get("body")
    doc_id = documents[0]["id"] if documents else "No documents found"

    event.set(f"HttpRequest content: {http_content} | CosmosDB ID: {doc_id}")

    return func.HttpResponse(
        "Function executed successfully.",
        status_code=200
    )
// function.json
{
  "scriptFile": "__init__.py",
  "entryPoint": "main",
  "bindings": [
    {
      "type": "httpTrigger",
      "direction": "in",
      "name": "req",
      "methods": ["get", "post"],
      "route": "file"
    },
    {
      "type": "http",
      "direction": "out",
      "name": "$return"
    },
    {
      "type": "cosmosDB",
      "direction": "in",
      "name": "documents",
      "databaseName": "test",
      "containerName": "items",
      "id": "cosmosdb-input-test",
      "connection": "COSMOSDB_CONNECTION_SETTING"
    },
    {
      "type": "eventHub",
      "direction": "out",
      "name": "event",
      "eventHubName": "my-test-eventhub",
      "connection": "EVENTHUB_CONNECTION_SETTING"
    }
  ]
}

Konsep Utama

  • Setiap fungsi memiliki satu pemicu, tetapi dapat memiliki beberapa pengikatan.
  • Tambahkan input dengan menentukan direction sebagai "in" di function.json. Output memiliki direction dari out.
  • Anda dapat mengakses detail permintaan melalui HttpRequest objek dan membuat kustom HttpResponse dengan header, kode status, dan isi.
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
    )

Konsep utama

  • Gunakan @route() atau dekorator khusus pemicu (@timer_trigger, @queue_trigger, dan lainnya) untuk menentukan bagaimana fungsi Anda dipanggil.
  • Tambahkan input dengan menggunakan dekorator seperti @blob_input, , @queue_inputdan lainnya.
  • Output dapat berupa:
    • Dikembalikan secara langsung (jika hanya satu output)
    • Ditetapkan dengan menggunakan Out pengikatan dan .set() metode untuk beberapa output.
  • Anda dapat mengakses detail permintaan melalui HttpRequest objek dan membuat kustom HttpResponse dengan header, kode status, dan isi.

Pengikatan tipe SDK

Untuk pemicu dan pengikatan tertentu, Anda dapat bekerja dengan jenis data yang diimplementasikan oleh Azure SDK dan kerangka kerja yang mendasar. Dengan menggunakan pengikatan jenis SDK ini, Anda dapat berinteraksi dengan data pengikatan seolah-olah Anda menggunakan SDK layanan yang mendasar. Untuk informasi selengkapnya, lihat pengikatan jenis SDK yang didukung.

Penting

Dukungan pengikatan jenis SDK untuk Python hanya tersedia dalam model pemrograman Python v2.

Variabel lingkungan

Variabel lingkungan di Azure Functions memungkinkan Anda mengelola nilai konfigurasi, string koneksi, dan rahasia aplikasi dengan aman tanpa melakukan hardcoding dalam kode fungsi Anda.

Anda dapat menentukan variabel lingkungan:

Akses variabel langsung dalam kode Anda dengan menggunakan os.environ atau os.getenv.

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

Catatan

Azure Functions juga mengenali variabel lingkungan sistem yang mengonfigurasi runtime Functions dan perilaku pekerja Python. Variabel ini tidak secara eksplisit digunakan dalam kode fungsi Anda tetapi memengaruhi cara aplikasi Anda berjalan. Untuk daftar lengkap variabel lingkungan sistem, lihat Referensi pengaturan aplikasi.

Manajemen paket

Untuk menggunakan paket Python lainnya di aplikasi Azure Functions Anda, cantumkan requirements.txt dalam file di akar proyek Anda. Paket-paket ini diimpor oleh sistem impor Python, dan Anda kemudian dapat mereferensikan paket tersebut seperti biasa. Untuk mempelajari selengkapnya tentang opsi pembuatan dan penyebaran dengan dependensi eksternal, lihat Opsi Build untuk Aplikasi Fungsi Python.

Misalnya, sampel berikut menunjukkan bagaimana requests modul disertakan dan digunakan dalam aplikasi fungsi.

<requirements.txt>
requests==2.31.0

Instal paket secara lokal dengan pip install -r requirements.txt.

Setelah paket diinstal, Anda dapat mengimpor dan menggunakannya dalam kode fungsi Anda:

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}")

Pertimbangan

  • Konflik dengan modul bawaan:
    • Hindari penamaan folder proyek Anda setelah pustaka standar Python (misalnya, email/, json/).
    • Jangan sertakan pustaka asli Python (seperti logging, , asyncioatau uuid) di requirements.txt.
  • Penyebaran:
    • Untuk mencegah ModuleNotFound kesalahan, pastikan semua dependensi yang diperlukan tercantum dalam requirements.txt.
    • Jika Anda memperbarui versi Python aplikasi, bangun kembali dan sebarkan ulang aplikasi Anda pada versi Python baru untuk menghindari konflik dependensi dengan paket yang dibuat sebelumnya.
  • Dependensi Non-PyPI:
  • Ketergantungan pekerja pada Azure Functions Python:

Menjalankan dan meluncurkan

Bagian ini menyediakan informasi tentang menjalankan fungsi secara lokal, dukungan versi Python, opsi build dan penyebaran, dan konfigurasi runtime. Gunakan informasi ini untuk berhasil menjalankan aplikasi fungsi Anda di lingkungan lokal dan Azure.

Beroperasi secara lokal

Anda dapat menjalankan dan menguji aplikasi fungsi Python di komputer lokal Anda sebelum menyebarkan ke Azure.

Menggunakan Azure Functions Core Tools

Instal Azure Functions Core Tools dan mulai runtime lokal dengan menjalankan func start perintah dari akar proyek Anda:

func start

Saat Anda memulai aplikasi fungsi secara lokal, Core Tools menampilkan semua fungsi yang ditemukannya untuk aplikasi Anda:

Functions:
        http_trigger:  http://localhost:7071/api/http_trigger

Anda dapat mempelajari selengkapnya tentang cara menggunakan Core Tools dengan mengunjungi Mengembangkan Azure Functions secara lokal menggunakan Core Tools.

Memanggil fungsi secara langsung

Dengan menggunakan azure-functions >= 1.21.0, Anda juga dapat memanggil fungsi secara langsung dengan menggunakan penerjemah Python tanpa menjalankan Core Tools. Pendekatan ini berguna untuk pengujian unit cepat:

# 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))

Untuk melihat output, jalankan file secara langsung dengan 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))

Untuk melihat output, jalankan file secara langsung dengan Python:

> python __init__.py

Hello, World!

Pendekatan ini tidak memerlukan paket atau penyiapan tambahan dan sangat ideal untuk validasi cepat selama pengembangan. Untuk pengujian yang lebih mendalam, lihat Pengujian Unit

Versi Python yang didukung

Azure Functions mendukung versi Python yang tercantum dalam Bahasa yang didukung di Azure Functions. Untuk informasi umum selengkapnya, lihat kebijakan dukungan runtime Azure Functions.

Penting

Jika Anda mengubah versi Python untuk aplikasi fungsi, Anda harus membangun kembali dan menyebarkan ulang aplikasi dengan menggunakan versi baru. Artefak dan dependensi penyebaran yang ada tidak dibangun kembali secara otomatis saat versi Python berubah.

Pembangunan dan Penerapan

Untuk mempelajari selengkapnya tentang mekanisme build yang direkomendasikan untuk skenario Anda, lihat Opsi Build. Untuk gambaran umum penyebaran, lihat Teknologi penyebaran di Azure Functions.

Perbandingan Cepat Mekanisme Penyebaran

Perangkat / Platform Perintah / Tindakan Kasus Penggunaan Terbaik
Alat Inti Azure Functions func azure functionapp publish <APP_NAME> Ideal untuk eksekusi CI, otomatisasi lokal, atau saat bekerja lintas platform.
AZ CLI az functionapp deployment source config-zip Berguna saat membuat skrip penyebaran di luar Core Tools. Bekerja dengan baik di alur otomatis atau terminal berbasis cloud (Azure Cloud Shell).
Visual Studio Code (Ekstensi Azure Functions) Palet Perintah → "Azure Functions: Deploy to Azure..." Terbaik untuk pemula atau penerapan interaktif. Secara otomatis menangani pengemasan dan build.
Tindakan GitHub Azure/functions-action@v1 Ideal untuk CI/CD berbasis GitHub. Mengaktifkan penyebaran otomatis saat pendorongan atau penggabungan PR.
Azure Pipelines AzureFunctionApp@2 Tugas CI/CD Perusahaan menggunakan Azure DevOps. Terbaik untuk alur kerja rilis terkontrol, build berjenjang, dan jalur pipeline multi-tahap.
Penyebaran Kontainer Kustom Dorong kontainer az functionapp create --image <container> Diperlukan saat Anda memerlukan paket level OS, kompilasi Python khusus, runtime tetap, atau dependensi yang tidak didukung (misalnya, pustaka sistem, biner lokal).
Pembuatan Fungsi berbasis portal Membuat fungsi di portal Microsoft Azure → editor sebaris Gunakan hanya untuk fungsi sederhana dan bebas dependensi. Cocok untuk demo atau pembelajaran, tetapi tidak disarankan untuk aplikasi yang memerlukan paket pihak ketiga.

Catatan

Pembuatan Fungsi berbasis portal tidak mendukung dependensi pihak ketiga dan tidak disarankan untuk membuat aplikasi produksi. Anda tidak dapat menginstal atau mereferensikan paket di luar azure-functions dan pustaka standar Python bawaan.

Penting

Setelah 30 September 2028, opsi untuk menghosting aplikasi fungsi Anda di Linux dalam paket Konsumsi dihentikan. Untuk menghindari gangguan, migrasikan aplikasi paket Konsumsi yang ada yang berjalan di Linux ke paket Konsumsi Flex sebelum tanggal tersebut. Aplikasi yang berjalan di Windows dalam paket Konsumsi tidak terpengaruh oleh perubahan ini. Untuk informasi selengkapnya, lihat pemberitahuan penghentian paket Konsumsi Linux.

Pembaruan Python 3.13+

Dimulai dengan Python 3.13, Azure Functions memperkenalkan beberapa peningkatan runtime dan performa utama yang memengaruhi cara Anda membangun dan menjalankan aplikasi Anda. Perubahan utama meliputi:

  • Kontrol versi runtime: Anda sekarang dapat secara opsional memasang atau memperbarui aplikasi Anda ke versi pekerja Python tertentu dengan merujuk paket azure-functions-runtime dalam requirements.txt Anda.

    • Tanpa mengaktifkan kontrol versi, aplikasi Anda berjalan pada versi default runtime Python, yang dikelola Functions. Anda harus memodifikasi file requirements.txt untuk meminta versi terbaru yang dirilis, versi yang telah dirilis sebelumnya, atau untuk menyematkan aplikasi Anda ke versi runtime Python tertentu.

    • Anda mengaktifkan kontrol versi runtime dengan menambahkan referensi ke paket runtime Python ke file requirements.txt Anda, di mana nilai yang ditetapkan ke paket menentukan versi runtime yang digunakan.

    • Hindari membatasi aplikasi produksi apa pun pada versi runtime prarilis (alpha, beta, atau dev).

    • Untuk mengetahui perubahan, tinjau catatan rilis runtime Python secara teratur.

    • Tabel berikut menunjukkan perilaku penerapan versi berdasarkan nilai versi pengaturan ini dalam file requirements.txt Anda:

      Versi Example Perilaku
      Tidak ada nilai yang ditetapkan azure-functions-runtime Aplikasi Python 3.13+ Anda berjalan pada versi terbaru yang tersedia dari runtime Functions Python. Opsi ini terbaik untuk tetap terkini dengan peningkatan dan fitur platform, karena aplikasi Anda secara otomatis menerima pembaruan runtime stabil terbaru.
      Disematkan ke versi tertentu azure-functions-runtime==1.2.0 Aplikasi Python 3.13+ Anda tetap berada di versi runtime yang disematkan dan tidak menerima pembaruan otomatis. Anda harus memperbarui versi yang disematkan secara manual untuk memanfaatkan fitur, perbaikan, dan peningkatan baru dalam runtime. Penyematan direkomendasikan untuk pekerjaan produksi kritis di mana stabilitas dan kemampuan diprediksi sangat diutamakan. Penyematan juga memungkinkan Anda menguji aplikasi pada versi runtime yang telah rilis sebelumnya selama pengembangan.
      Tidak ada referensi paket n/a Dengan tidak mengatur azure-functions-runtime, aplikasi Python 3.13+ Anda berjalan pada versi default runtime Python yang berada di belakang versi terbaru yang dirilis. Pembaruan dilakukan secara berkala oleh Functions. Opsi ini memastikan stabilitas dan kompatibilitas yang luas. Namun, akses ke fitur dan perbaikan terbaru tertunda hingga versi default diperbarui.
  • Isolasi dependensi: Dependensi aplikasi Anda (seperti grpcio atau protobuf) sepenuhnya terisolasi dari dependensi pekerja, mencegah konflik versi. Pengaturan PYTHON_ISOLATE_WORKER_DEPENDENCIES aplikasi tidak akan berdampak pada aplikasi yang berjalan di Python 3.13 atau yang lebih baru.

  • Penyiapan streaming HTTP yang disederhanakan—tidak diperlukan pengaturan aplikasi khusus.

  • Dukungan untuk ekstensi pekerja dan fitur memori bersama telah dihapus.

  • Kontrol versi runtime: Anda sekarang dapat secara opsional menyematkan atau meningkatkan aplikasi Anda ke versi pekerja Python tertentu dengan merujuk azure-functions-runtime-v1 paket di Anda requirements.txt.

    • Tanpa mengaktifkan kontrol versi, aplikasi Anda berjalan pada versi default runtime Python, yang dikelola Functions. Anda harus memodifikasi file requirements.txt untuk meminta versi terbaru yang dirilis, versi yang telah dirilis sebelumnya, atau untuk menyematkan aplikasi Anda ke versi runtime Python tertentu.

    • Anda mengaktifkan kontrol versi runtime dengan menambahkan referensi ke paket runtime Python ke file requirements.txt Anda, di mana nilai yang ditetapkan ke paket menentukan versi runtime yang digunakan.

    • Hindari mengunci aplikasi produksi apa pun pada versi runtime prarilis (alpha, beta, atau dev).

    • Untuk mengetahui perubahan, tinjau catatan rilis runtime Python secara teratur.

    • Tabel berikut menunjukkan perilaku penerapan versi berdasarkan nilai versi pengaturan ini dalam file requirements.txt Anda:

      Versi Example Perilaku
      Tidak ada nilai yang ditetapkan azure-functions-runtime-v1 Aplikasi Python 3.13+ Anda berjalan pada versi terbaru yang tersedia dari runtime Functions Python. Opsi ini terbaik untuk tetap terkini dengan peningkatan dan fitur platform, karena aplikasi Anda secara otomatis menerima pembaruan runtime stabil terbaru.
      Disematkan ke versi tertentu azure-functions-runtime-v1==1.2.0 Aplikasi Python 3.13+ Anda tetap berada di versi runtime yang disematkan dan tidak menerima pembaruan otomatis. Anda harus memperbarui versi yang disematkan secara manual untuk memanfaatkan fitur, perbaikan, dan peningkatan baru dalam runtime. Disarankan untuk menggunakan penyematan pada beban kerja produksi penting di mana stabilitas dan kepastian sangat penting. Penyematan juga memungkinkan Anda menguji aplikasi pada versi runtime yang telah rilis sebelumnya selama pengembangan.
      Tidak ada referensi paket n/a Dengan tidak mengatur azure-functions-runtime-v1, aplikasi Python 3.13+ Anda berjalan pada versi default runtime Python yang berada di belakang versi terbaru yang dirilis. Pembaruan dilakukan secara berkala oleh Functions. Opsi ini memastikan stabilitas dan kompatibilitas yang luas. Namun, akses ke fitur dan perbaikan terbaru tertunda hingga versi default diperbarui.
  • Isolasi dependensi: Dependensi aplikasi Anda (seperti grpcio atau protobuf) sepenuhnya terisolasi dari dependensi pekerja, mencegah konflik versi. Pengaturan PYTHON_ISOLATE_WORKER_DEPENDENCIES aplikasi tidak akan berdampak pada aplikasi yang berjalan di Python 3.13 atau yang lebih baru.

  • Menghapus dukungan untuk worker extension dan fitur memori bersama.

Pengamatan dan pengujian

Bagian ini mencakup kemampuan pengelogan, pemantauan, dan pengujian untuk membantu Anda men-debug masalah, melacak performa, dan memastikan keandalan aplikasi fungsi Python Anda.

Pencatatan dan pemantauan

Azure Functions memperkenalkan pencatat root yang dapat Anda gunakan langsung dengan modul bawaan logging Python. Setiap pesan yang ditulis menggunakan pencatat ini secara otomatis dikirim ke Application Insights saat aplikasi Anda berjalan di Azure.

Pengelogan memungkinkan Anda mengambil informasi runtime dan mendiagnosis masalah tanpa memerlukan penyiapan lagi.

Contoh pengelogan dengan pemicu HTTP

import logging
import azure.functions as func

def main(req: func.HttpRequest) -> func.HttpResponse:
    logging.debug("Example debug log")
    logging.info("Example info log")
    logging.warning("Example warning")
    logging.error("Example error log")
    return func.HttpResponse("OK")
import logging
import azure.functions as func

app = func.FunctionApp()

@app.route(route="http_trigger")
def http_trigger(req) -> func.HttpResponse:
    logging.debug("Example debug log")
    logging.info("Example info log")
    logging.warning("Example warning")
    logging.error("Example error log")
    return func.HttpResponse("OK")

Anda dapat menggunakan set lengkap tingkat pengelogan (debug, , info, warningerror, critical), dan mereka muncul di portal Microsoft Azure di bawah Log atau Application Insights.

Untuk mempelajari selengkapnya tentang memantau Azure Functions di portal, lihat Memantau Azure Functions.

Catatan

Untuk melihat log debug di Application Insights, diperlukan lebih banyak penyiapan. Anda dapat mengaktifkan fitur ini dengan mengatur PYTHON_ENABLE_DEBUG_LOGGING ke 1 dan mengatur logLevel ke trace atau debug dalam file host.json Anda. Secara default, log debug tidak terlihat di Application Insights.

Pengelogan dari utas latar belakang

Jika fungsi Anda memulai utas baru dan perlu mencatat dari utas tersebutcontext, pastikan untuk meneruskan argumen context ke utas. context mencakup penyimpanan thread-lokal dan status saat ini invocation_id, yang harus diatur pada utas pekerja agar log dapat dikaitkan dengan benar dengan pelaksanaan fungsi.

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")

Mengonfigurasi pencatat kustom

Anda dapat mengonfigurasi pencatat kustom di Python saat Anda memerlukan kontrol lebih besar atas perilaku pengelogan, seperti pemformatan kustom, pemfilteran log, atau integrasi pihak ketiga. Untuk mengonfigurasi pencatat kustom, gunakan Python logging.getLogger() dengan nama kustom dan tambahkan handler atau formatter sesuai kebutuhan.

import logging

custom_logger = logging.getLogger('my_custom_logger')

Dukungan OpenTelemetry

Azure Functions untuk Python juga mendukung OpenTelemetry, yang memungkinkan Anda memancarkan jejak, metrik, dan log dalam format standar. Menggunakan OpenTelemetry sangat berharga untuk aplikasi atau skenario terdistribusi di mana Anda ingin mengekspor telemetri ke alat di luar Application Insights (seperti Grafana atau Jaeger).

Lihat Panduan Memulai Cepat OpenTelemetry untuk Azure Functions (Python) kami untuk petunjuk pemasangan dan kode sampel.

Pengujian Unit

Tulis dan jalankan pengujian unit untuk fungsi Anda dengan menggunakan pytest. Anda dapat menguji fungsi Python seperti kode Python lainnya dengan menggunakan kerangka kerja pengujian standar. Untuk sebagian besar pengikatan, Anda dapat membuat objek input tiruan dengan membuat instans kelas yang sesuai dari azure.functions paket.

Dengan menggunakan my_function sebagai contoh, contoh berikut adalah tes tiruan dari fungsi yang dipicu HTTP:

Pertama, buat <file project_root>/function_app.py dan terapkan my_function fungsi sebagai pemicu HTTP.

# <project_root>/function_app.py
import azure.functions as func
import logging

app = func.FunctionApp()

# Define the HTTP trigger that accepts the ?value=<int> query parameter
# Double the value and return the result in HttpResponse
@app.function_name(name="my_function")
@app.route(route="hello")
def my_function(req: func.HttpRequest) -> func.HttpResponse:
    logging.info('Executing myfunction.')

    initial_value: int = int(req.params.get('value'))
    doubled_value: int = initial_value * 2

    return func.HttpResponse(
        body=f"{initial_value} * 2 = {doubled_value}",
        status_code=200
    )

Anda dapat mulai menulis kasus pengujian untuk pemicu HTTP Anda.

# <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',
    )

Di dalam folder lingkungan virtual Python, Anda dapat menjalankan perintah berikut untuk menguji aplikasi:

pip install pytest
pytest test_my_function.py

Anda melihat hasilnya pytest di terminal, seperti ini:

============================================================================================================ test session starts ============================================================================================================
collected 1 item                                                                                                                                                                                                                             

test_my_function.py .                                                                                                                                                                                                                  [100%] 
============================================================================================================= 1 passed in 0.24s ============================================================================================================= 

Pengoptimalan dan topik tingkat lanjut

Untuk mempelajari selengkapnya tentang mengoptimalkan aplikasi fungsi Python Anda, lihat artikel berikut:

Untuk informasi selengkapnya tentang Functions, lihat artikel berikut ini:

Mengalami masalah saat menggunakan Python? Beri tahu kami dan ajukan masalah.