Buat pemicu dan ikatan
Pemicu menentukan bagaimana fungsi dipanggil dan fungsi harus memiliki tepat satu pemicu. Pemicu memiliki data terkait yang sering diberikan sebagai payload fungsi.
Mengikat ke fungsi adalah cara menyambungkan sumber daya lain secara deklaratif ke fungsi; pengikatan mungkin terhubung sebagai pengikatan input, pengikatan output, atau keduanya. Data dari pengikatan diberikan ke fungsi sebagai parameter.
Anda dapat mencampur dan mencocokkan pengikatan yang berbeda untuk menyesuaikan dengan kebutuhan Anda. Pengikatan bersifat opsional dan fungsi mungkin memiliki satu atau beberapa pengikatan input dan/atau output.
Pemicu dan pengikatan memungkinkan Anda menghindari akses hardcoding ke layanan lain. Fungsi Anda menerima data (misalnya, konten pesan antrean) dalam parameter fungsi. Anda mengirim data (misalnya, untuk membuat pesan antrean) dengan menggunakan nilai yang dikembalikan dari fungsi.
Saat Anda mengembangkan fungsi secara lokal, Anda perlu mempertimbangkan perilaku pemicu dan pengikatan. Untuk pemicu HTTP, Anda dapat memanggil titik akhir HTTP di komputer lokal, menggunakan http://localhost/. Untuk fungsi yang dipicu non-HTTP, ada beberapa opsi untuk dijalankan secara lokal:
- Cara termudah untuk menguji pengikatan selama pengembangan lokal adalah dengan menggunakan string koneksi yang menggunakan layanan Azure langsung. Anda dapat menargetkan layanan langsung dengan menambahkan pengaturan string koneksi yang sesuai dalam
Valuesarray dalam file local.settings.json. Saat Anda melakukan ini, eksekusi lokal selama pengujian menggunakan data layanan langsung. Karena itu, pertimbangkan untuk menyiapkan layanan terpisah untuk digunakan selama pengembangan dan pengujian, lalu beralih ke layanan yang berbeda selama produksi. - Untuk pemicu berbasis penyimpanan, Anda dapat menggunakan emulator Azurite lokal saat menguji fungsi dengan pengikatan Azure Storage (Queue Storage, Blob Storage, dan Table Storage), tanpa harus terhubung ke layanan penyimpanan jarak jauh.
- Anda dapat menjalankan fungsi pemicu non-HTTP secara manual dengan menggunakan titik akhir administrator khusus. Untuk informasi selengkapnya, lihat Menjalankan fungsi yang tidak dipicu HTTP secara manual.
Penentuan pemicu dan pengikatan
Pemicu dan pengikatan didefinisikan secara berbeda tergantung pada bahasa pengembangan dan model runtime.
| Bahasa | Mengonfigurasi pemicu dan pengikatan dengan... |
|---|---|
| Pustaka kelas C# | mendekorasi metode dan parameter dengan atribut C# (pekerja dalam proses atau terisolasi) |
| Java | mendekorasi metode dan parameter dengan anotasi Java |
| JavaScript/TypeScript | Model pemrograman v4: menentukan input/output dalam kode menggunakan @azure/functions; v3: mengonfigurasi dalam function.json per fungsi |
| Phyton | Model pemrograman v2: menentukan input/output dengan dekorator; v1: mengonfigurasi di function.json |
| PowerShell | mengonfigurasi di function.json |
Nota
Dalam model modern (Node.js v4 dan Python v2), Anda menulis konfigurasi pemicu dan pengikatan dalam kode dan runtime menghasilkan function.jsonyang sesuai. Model lama (Node.js v3, Python v1, PowerShell) menggunakan function.json secara langsung. Anda tidak dapat mencampur model pemrograman dalam aplikasi fungsi yang sama.
Untuk bahasa yang mengandalkan function.json (misalnya, Node.js v3, Python v1, dan PowerShell), portal menyediakan UI untuk menambahkan pengikatan di tab Integrasi . Anda juga dapat mengedit file langsung di portal di tab Kode + uji fungsi Anda. Untuk model code-first seperti Node.js v4 dan Python v2, konfigurasikan pengikatan dalam kode di proyek lokal Anda; portal mencerminkan konfigurasi tetapi mungkin tidak mendukung pengeditan langsung.
Dalam .NET dan Java, jenis parameter menentukan jenis data untuk data input. Misalnya, gunakan string untuk mengikat teks pemicu antrean, array byte untuk dibaca sebagai biner, dan jenis kustom untuk mendeserialisasi ke objek. Karena fungsi pustaka kelas .NET dan fungsi Java tidak bergantung pada function.json untuk penentuan pengikatan, mereka tidak dapat dibuat dan diedit di portal. Pengeditan portal C# didasarkan pada skrip C#, yang menggunakan function.json, bukan dengan atribut.
Untuk bahasa yang ditik secara dinamis seperti JavaScript (menggunakan model v3) atau PowerShell, gunakan dataType properti dalam file function.json . Misalnya, untuk membaca konten permintaan HTTP dalam format biner, atur dataType ke binary:
{
"dataType": "binary",
"type": "httpTrigger",
"name": "req",
"direction": "in"
}
Opsi lain untuk dataType adalah stream dan string.
Arah pengikatan
Semua pemicu dan pengikatan memiliki properti arah dalam file function.json:
- Untuk pemicu, arahnya selalu
in - Pengikatan input dan output menggunakan
indanout - Beberapa pengikatan mendukung arah khusus
inout. Jika Anda menggunakaninout, hanya Penyunting tingkat lanjut yang tersedia melalui tab Integrasikan di portal.
Saat Anda menggunakan atribut di pustaka kelas untuk mengonfigurasi pemicu dan pengikatan, arahnya diberikan di konstruktor atribut atau disimpulkan dari jenis parameter.
Contoh pemicu dan pengikatan Azure Functions
Misalkan Anda ingin menulis pesan ke penyimpanan Azure Queue setiap kali permintaan HTTP diterima. Anda dapat menerapkan ini dengan pemicu HTTP dan pengikatan output Antrean Penyimpanan. Pendekatan konfigurasi tergantung pada bahasa dan model pemrograman Anda.
Berikut adalah file function.json warisan untuk skenario ini (berlaku untuk Node.js v3, Python v1, atau PowerShell).
{
"disabled": false,
"bindings": [
{
"type": "httpTrigger",
"direction": "in",
"name": "req",
"authLevel": "function",
"methods": ["get","post"]
},
{
"type": "queue",
"direction": "out",
"name": "outqueue",
"queueName": "outqueue",
"connection": "AzureWebJobsStorage"
}
]
}
Elemen pertama dalam bindings array adalah pemicu HTTP. Properti type dan direction mengidentifikasi pemicu. Properti name mengidentifikasi parameter fungsi yang menerima permintaan HTTP, dan methods mencantumkan kata kerja HTTP yang didukung.
Elemen kedua dalam array bindings adalah pengikatan output untuk Antrean Penyimpanan. Properti type dan direction mengidentifikasi pengikatan. Properti name menentukan bagaimana fungsi menyediakan pesan antrean baru, queueName mengidentifikasi antrean, dan connection merujuk ke pengaturan aplikasi yang menyimpan string koneksi penyimpanan.
Nota
Menonaktifkan fungsi melalui disabled properti di function.json adalah perilaku warisan. Sebaiknya menggunakan pengaturan aplikasi AzureWebJobs.<FunctionName>.Disabled=true.
Contoh C# (pekerja terisolasi)
Contoh ini menunjukkan fungsi yang dipicu HTTP yang menulis pesan ke Antrean Penyimpanan menggunakan pengikatan output yang ditentukan oleh atribut. Untuk informasi selengkapnya, lihat Panduan pekerja terisolasi C#.
using Microsoft.Azure.Functions.Worker;
using Microsoft.Azure.Functions.Worker.Http;
public static class HttpToQueue
{
[Function("HttpToQueue")]
public static MultiResponse Run(
[HttpTrigger(AuthorizationLevel.Function, "get", "post")] HttpRequestData req)
{
var message = "Processed request";
return new MultiResponse
{
Messages = new[] { message },
HttpResponse = req.CreateResponse(System.Net.HttpStatusCode.OK)
};
}
}
public class MultiResponse
{
[QueueOutput("outqueue", Connection = "AzureWebJobsStorage")]
public string[] Messages { get; set; }
public HttpResponseData HttpResponse { get; set; }
}
contoh Node.js (model pemrograman v4)
Dalam model pemrograman Node.js v4, Anda mengonfigurasi input dan output dalam kode menggunakan @azure/functions. Untuk informasi selengkapnya, lihat panduan pengembangNode.js (v4).
import { app, output } from "@azure/functions";
const queueOutput = output.storageQueue({
queueName: "outqueue",
connection: "AzureWebJobsStorage"
});
app.http("HttpToQueue", {
methods: ["GET", "POST"],
authLevel: "function",
extraOutputs: [queueOutput],
handler: async (request, context) => {
const body = await request.text();
context.extraOutputs.set(queueOutput, body || "Processed request");
return { status: 200, body: "Queued" };
}
});
Contoh Python (model pemrograman v2)
Dalam model pemrograman Python v2, Anda menggunakan dekorator untuk menentukan pengikatan. Runtime menghasilkan function.json untuk Anda. Kunjungi panduan pengembang Python untuk informasi selengkapnya.
import azure.functions as func
app = func.FunctionApp()
@app.route(route="HttpToQueue", auth_level=func.AuthLevel.FUNCTION)
@app.queue_output(arg_name="msg", queue_name="outqueue", connection="AzureWebJobsStorage")
def HttpToQueue(req: func.HttpRequest, msg: func.Out[str]) -> func.HttpResponse:
body = req.get_body().decode("utf-8") if req.get_body() else "Processed request"
msg.set(body)
return func.HttpResponse("Queued", status_code=200)
Nota
Di Node.js v4 dan Python v2, runtime menghasilkan function.json dari kode Anda. Hindari mengedit function.json langsung di portal untuk model ini; buat perubahan dalam kode dan terbitkan ulang.