สร้างทริกเกอร์และการผูก
ทริกเกอร์จะกําหนดวิธีการเรียกใช้ฟังก์ชัน และฟังก์ชันต้องมีทริกเกอร์เดียวเท่านั้น ทริกเกอร์มีข้อมูลที่เกี่ยวข้องซึ่งมักจะเป็นส่วนข้อมูลของฟังก์ชัน
การผูกกับฟังก์ชันคือวิธีการเชื่อมต่อทรัพยากรอื่นกับฟังก์ชันอย่างประกาศ การผูกอาจเชื่อมต่อเป็นการรวม อินพุตการผูกเอาต์พุตหรือทั้งสองอย่าง ข้อมูลจากการผูกมีให้กับฟังก์ชันเป็นพารามิเตอร์
คุณสามารถผสม และจับคู่การผูกที่แตกต่างกันเพื่อให้เหมาะสมกับความต้องการของคุณได้ การผูกเป็นตัวเลือกและฟังก์ชันอาจมีการป้อนข้อมูลอย่างน้อยหนึ่งรายการและ/หรือการผูกเอาต์พุต
ทริกเกอร์และการรวมช่วยให้คุณหลีกเลี่ยงการเข้าถึงแบบฮาร์ดโค้ดไปยังบริการอื่น ๆ ฟังก์ชันของคุณได้รับข้อมูล (ตัวอย่างเช่น เนื้อหาของข้อความคิว) ในพารามิเตอร์ฟังก์ชัน คุณส่งข้อมูล (ตัวอย่างเช่น เพื่อสร้างข้อความคิว) โดยใช้ค่าที่ส่งกลับของฟังก์ชัน
เมื่อคุณพัฒนาฟังก์ชันของคุณภายในเครื่อง คุณจําเป็นต้องใช้ทริกเกอร์และผูกลักษณะการทํางานในการพิจารณา สําหรับทริกเกอร์ HTTP คุณสามารถเรียกใช้จุดสิ้นสุด HTTP บนคอมพิวเตอร์เฉพาะที่โดยใช้http://localhost/ สําหรับฟังก์ชันที่ไม่ได้ทริกเกอร์ HTTP มีหลายตัวเลือกในการเรียกใช้ภายในเครื่อง:
- วิธีที่ง่ายที่สุดในการทดสอบการผูกระหว่างการพัฒนาภายในเครื่องคือการใช้สตริงการเชื่อมต่อที่กําหนดเป้าหมายบริการ Azure แบบสด คุณสามารถกําหนดเป้าหมายบริการสดโดยการเพิ่มการตั้งค่าสตริงการเชื่อมต่อที่เหมาะสมใน
Valuesอาร์เรย์ในไฟล์ local.settings.json เมื่อคุณทําเช่นนี้ การดําเนินการภายในเครื่องในระหว่างการทดสอบใช้ข้อมูลบริการแบบสด ด้วยเหตุนี้ ให้พิจารณาตั้งค่าบริการแยกต่างหากเพื่อใช้ในระหว่างการพัฒนาและการทดสอบ จากนั้นสลับไปยังบริการต่างๆ ในระหว่างการผลิต - สําหรับทริกเกอร์ที่เก็บข้อมูล คุณสามารถใช้ ตัวจําลอง Azurite ภายในเครื่องเมื่อทดสอบฟังก์ชันด้วยการผูกที่เก็บข้อมูล Azure (Queue Storage, Blob Storage และ Table Storage) โดยไม่ต้องเชื่อมต่อกับบริการที่เก็บข้อมูลระยะไกล
- คุณสามารถเรียกใช้ฟังก์ชันทริกเกอร์ที่ไม่ใช่ HTTP ด้วยตนเองโดยใช้จุดสิ้นสุดของผู้ดูแลระบบพิเศษ สําหรับข้อมูลเพิ่มเติม ให้ดู เรียกใช้ฟังก์ชันที่ไม่ได้ทริกเกอร์ HTTP ด้วยตนเอง
ข้อกําหนดทริกเกอร์และการรวม
ทริกเกอร์และการผูกถูกกําหนดแตกต่างกันไปขึ้นอยู่กับภาษาการพัฒนาและโมเดลรันไทม์
| ภาษา | กําหนดค่าทริกเกอร์และการผูกโดย... |
|---|---|
| ไลบรารีคลาส C# | วิธีการตกแต่งและพารามิเตอร์ด้วยแอตทริบิวต์ C# (ผู้ปฏิบัติงานที่อยู่ระหว่างดําเนินการหรือแยก) |
| Java | ตกแต่งวิธีการและพารามิเตอร์ด้วยคําอธิบายประกอบ Java |
| JavaScript/TypeScript (จาวาสคริปต์/TypeScript) | รูปแบบการเขียนโปรแกรม v4: กําหนดอินพุต/เอาต์พุตในโค้ดโดยใช้ @azure/functions;v3: กําหนดค่าใน function.json ต่อฟังก์ชัน |
| หลาม | รูปแบบการเขียนโปรแกรม V2: กําหนดอินพุต/เอาต์พุตด้วยตัวตกแต่ง v1: กําหนดค่าใน function.json |
| PowerShell | กําหนดค่าใน function.json |
Note
ในโมเดลที่ทันสมัย (Node.js v4 และ Python v2) คุณเขียนการกําหนดค่าทริกเกอร์และการผูกในโค้ด และรันไทม์จะสร้าง function.jsonที่สอดคล้องกัน รุ่นเก่า (Node.js v3, Python v1, PowerShell) ใช้ function.json โดยตรง คุณไม่สามารถผสมโมเดลการเขียนโปรแกรมภายในแอปฟังก์ชันเดียวกันได้
สําหรับภาษาที่อาศัย function.json (ตัวอย่างเช่น Node.js v3, Python v1 และ PowerShell) พอร์ทัลมี UI สําหรับการเพิ่มการผูกในแท็บ การรวม คุณยังสามารถแก้ไขไฟล์ได้โดยตรงในพอร์ทัลในแท็บ โค้ด + ทดสอบ ของฟังก์ชันของคุณ สําหรับโมเดลที่เน้นโค้ดเป็นอันดับแรก เช่น Node.js v4 และ Python v2 ให้กําหนดค่าการผูกในโค้ดในโปรเจ็กต์ภายในเครื่องของคุณ พอร์ทัลสะท้อนถึงการกําหนดค่า แต่อาจไม่สนับสนุนการแก้ไขโดยตรง
ใน .NET และ Java ชนิดพารามิเตอร์จะกําหนดชนิดข้อมูลสําหรับข้อมูลป้อนเข้า ตัวอย่างเช่น ใช้ string เพื่อผูกกับข้อความของทริกเกอร์คิว อาร์เรย์ไบต์ที่จะอ่านเป็นไบนารี และชนิดแบบกําหนดเองเพื่อดีซีเรียลไลซ์ไปยังวัตถุ เนื่องจากฟังก์ชันไลบรารีคลาส .NET และฟังก์ชัน Java ไม่ขึ้นอยู่กับ function.json สําหรับข้อกําหนดการผูก จึงไม่สามารถสร้างและแก้ไขในพอร์ทัลได้ การแก้ไขพอร์ทัล C# ขึ้นอยู่กับสคริปต์ C# ซึ่งใช้ function.json แทนแอตทริบิวต์
สําหรับภาษาที่พิมพ์แบบไดนามิก เช่น JavaScript (โดยใช้แบบจําลอง v3) หรือ PowerShell ให้ใช้คุณสมบัติในdataTypeไฟล์ function.json ตัวอย่างเช่น เมื่อต้องการอ่านเนื้อหาของคําขอ HTTP ในรูปแบบไบนารี ให้ตั้งค่า dataType เป็น binary:
{
"dataType": "binary",
"type": "httpTrigger",
"name": "req",
"direction": "in"
}
ตัวเลือกอื่น ๆ สําหรับ dataType คือ stream และ string
ทิศทางการผูก
ทริกเกอร์และการผูกทั้งหมดมีคุณสมบัติทิศทางในไฟล์ function.json:
- สําหรับทริกเกอร์ ทิศทางจะ
inเสมอ - การผูกข้อมูลอินพุตและเอาต์พุตใช้
inและout - การผูกบางอย่างสนับสนุนทิศทางพิเศษ
inoutถ้าคุณใช้inoutจะมีเฉพาะ ตัวแก้ไขขั้นสูง เท่านั้นจะพร้อมใช้งานผ่านทางแท็บ Integrate ในพอร์ทัล
เมื่อคุณใช้แอตทริบิวต์ในไลบรารีคลาสเพื่อกําหนดค่าทริกเกอร์และการผูก ทิศทางจะถูกระบุไว้ในคอนสตรักเตอร์แอตทริบิวต์ หรืออนุมานจากชนิดพารามิเตอร์
ตัวอย่างทริกเกอร์และการผูก Azure Functions
สมมติว่าคุณต้องการเขียนข้อความไปยังที่เก็บข้อมูลคิว Azure เมื่อใดก็ตามที่ได้รับคําขอ HTTP คุณสามารถนําไปใช้กับทริกเกอร์ HTTP และการผูกเอาต์พุตคิวที่เก็บข้อมูล วิธีการกําหนดค่าขึ้นอยู่กับภาษาและรูปแบบการเขียนโปรแกรมของคุณ
นี่คือไฟล์ function.json ดั้งเดิมสําหรับสถานการณ์นี้ (ใช้ได้กับ Node.js v3, Python v1 หรือ 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"
}
]
}
องค์ประกอบแรกใน bindings อาร์เรย์คือทริกเกอร์ HTTP คุณสมบัติ type และ direction ระบุทริกเกอร์ คุณสมบัติระบุ name พารามิเตอร์ฟังก์ชันที่รับการร้องขอ HTTP และ methods แสดงรายการคํากริยา HTTP ที่สนับสนุน
องค์ประกอบที่สองใน bindings อาร์เรย์คือการผูกเอาต์พุตคิวที่เก็บข้อมูล คุณสมบัติ type และ direction ระบุการผูก คุณสมบัติระบุ name วิธีที่ฟังก์ชันให้ข้อความคิวใหม่ ระบุ queueName คิว และ connection อ้างถึงการตั้งค่าแอปที่เก็บสตริงการเชื่อมต่อที่เก็บข้อมูล
Note
การปิดใช้งานฟังก์ชันผ่าน disabled คุณสมบัติใน function.json เป็นลักษณะการทํางานแบบดั้งเดิม ต้องการใช้การตั้งค่า AzureWebJobs.<FunctionName>.Disabled=trueแอพ
ตัวอย่าง C# (ผู้ปฏิบัติงานที่แยกได้)
ตัวอย่างนี้แสดงฟังก์ชันที่ทริกเกอร์ HTTP ที่เขียนข้อความไปยังคิวที่เก็บข้อมูลโดยใช้การผูกเอาต์พุตที่กําหนดโดยแอตทริบิวต์ สําหรับข้อมูลเพิ่มเติม โปรดดู คู่มือผู้ปฏิบัติงานแบบแยก 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; }
}
ตัวอย่าง Node.js (โมเดลการเขียนโปรแกรม v4)
ในรูปแบบการเขียนโปรแกรม v4 Node.js คุณกําหนดค่าอินพุตและเอาต์พุตในโค้ดโดยใช้@azure/functions สําหรับข้อมูลเพิ่มเติม โปรดดู Node.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" };
}
});
ตัวอย่าง Python (โมเดลการเขียนโปรแกรม v2)
ในโมเดลการเขียนโปรแกรม Python v2 คุณใช้ตัวตกแต่งเพื่อกําหนดการผูก รันไทม์สร้าง function.json ให้คุณ ไปที่ คู่มือนักพัฒนา Python สําหรับข้อมูลเพิ่มเติม
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)
Note
ใน Node.js v4 และ Python v2 รันไทม์จะสร้าง function.json จากโค้ดของคุณ หลีกเลี่ยงการแก้ไข function.json โดยตรงในพอร์ทัลสําหรับโมเดลเหล่านี้ ทําการเปลี่ยนแปลงในโค้ดและเผยแพร่อีกครั้ง