Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
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
nameparameter kueri dariparamsparameter 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 sepertihttp://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-functionsdan 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
nameparameter kueri dariparamsparameter 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 sepertihttp://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
FunctionAppobjek - Mendeklarasikan pemicu dan pengikatan (misalnya,
@app.route,@app.timer_trigger) - Akses input dan output yang telah diketik (seperti
HttpRequestdanHttpResponse, 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:
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!")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.txtSertakan 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
directionsebagai "in" difunction.json. Output memilikidirectiondariout. - Anda dapat mengakses detail permintaan melalui
HttpRequestobjek dan membuat kustomHttpResponsedengan 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
Outpengikatan dan.set()metode untuk beberapa output.
- Anda dapat mengakses detail permintaan melalui
HttpRequestobjek dan membuat kustomHttpResponsedengan 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:
- Secara lokal: dalam file local.settings.json, selama pengembangan lokal.
- Di Azure: sebagai Pengaturan Aplikasi di halaman konfigurasi Aplikasi Fungsi Anda di portal Microsoft Azure.
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, ,asyncioatauuuid) direquirements.txt.
- Hindari penamaan folder proyek Anda setelah pustaka standar Python (misalnya,
- Penyebaran:
- Untuk mencegah
ModuleNotFoundkesalahan, pastikan semua dependensi yang diperlukan tercantum dalamrequirements.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.
- Untuk mencegah
- Dependensi Non-PyPI:
- Anda dapat menyertakan dependensi yang tidak tersedia di PyPI di aplikasi Anda, seperti paket lokal, file roda, atau umpan privat. Lihat Dependensi kustom di Python Azure Functions untuk instruksi penyiapan.
- Ketergantungan pekerja pada Azure Functions Python:
- Jika paket Anda berisi pustaka tertentu yang mungkin bertabrakan dengan dependensi pekerja (misalnya,
protobufataugrpcio), konfigurasikan PYTHON_ISOLATE_WORKER_DEPENDENCIES ke 1 di pengaturan aplikasi untuk mencegah aplikasi Anda mengacu pada dependensi pekerja. Untuk Python 3.13 ke atas, fitur ini diaktifkan secara default.
- Jika paket Anda berisi pustaka tertentu yang mungkin bertabrakan dengan dependensi pekerja (misalnya,
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-runtimedalamrequirements.txtAnda.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-runtimeAplikasi 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.0Aplikasi 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
grpcioatauprotobuf) sepenuhnya terisolasi dari dependensi pekerja, mencegah konflik versi. PengaturanPYTHON_ISOLATE_WORKER_DEPENDENCIESaplikasi 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-v1paket di Andarequirements.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-v1Aplikasi 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.0Aplikasi 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
grpcioatauprotobuf) sepenuhnya terisolasi dari dependensi pekerja, mencegah konflik versi. PengaturanPYTHON_ISOLATE_WORKER_DEPENDENCIESaplikasi 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:
- Skalabilitas & Performa
- Menggunakan Flask Framework dengan Azure Functions
- Durable Functions
- HTTP Streaming
Artikel terkait
Untuk informasi selengkapnya tentang Functions, lihat artikel berikut ini:
- Dokumentasi API paket Azure Functions
- Praktik terbaik untuk Azure Functions
- Pemicu dan pengikatan Azure Functions
- Pengikatan Blob Storage
- Pengikatan HTTP dan webhook
- Pengikatan Penyimpanan Antrean
- Pemicu Waktu
Mengalami masalah saat menggunakan Python? Beri tahu kami dan ajukan masalah.