0Pricing
Cloud & IT Cert Prep · บทเรียน

ทริกเกอร์และการผูกของ Azure Functions

เขียนฟังก์ชันที่ทริกเกอร์ด้วย HTTP เพิ่มการผูกเอาต์พุตเพื่อเขียนไปยัง Azure Queue Storage และทำความเข้าใจรูปแบบการปรับขนาดอัตโนมัติของแผน Consumption

ทริกเกอร์และการผูกของ Azure Functions เป็นบทเรียน Cloud & IT Cert Prep ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Cloud & IT Cert Prep และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Cloud & IT Cert Prep มีบทเรียนทั้งหมด 4 บทเรียน

Azure Functions คืออะไร

Azure Functionsคือบริการประมวลผลแบบไร้เซิร์ฟเวอร์ที่ช่วยให้คุณเรียกใช้หน่วยโค้ดขนาดเล็ก (ฟังก์ชัน) เพื่อตอบสนองต่อเหตุการณ์โดยไม่ต้องจัดการโครงสร้างพื้นฐานใด ๆ คุณจ่ายเฉพาะเวลาประมวลผลและหน่วยความจำที่ใช้ขณะฟังก์ชันทำงานเท่านั้น โดยจะไม่มีค่าใช้จ่ายเมื่อฟังก์ชันไม่ได้ทำงาน Functions เหมาะสำหรับงานที่ขับเคลื่อนด้วยเหตุการณ์, API ขนาดเล็ก, งานตามกำหนดเวลา และการผสานรวมบริการคลาวด์โดยไม่ต้องมีเซิร์ฟเวอร์ถาวร

ทริกเกอร์: สิ่งที่เริ่มการทำงานของฟังก์ชัน

Azure Function ทุกตัวต้องมีทริกเกอร์เพียงหนึ่งรายการ ซึ่งกำหนดเหตุการณ์ที่ทำให้ฟังก์ชันเริ่มทำงาน ทริกเกอร์ที่ใช้กันทั่วไปได้แก่ HTTP (คำขอ HTTP ขาเข้า), Timer (กำหนดการ CRON), Blob Storage (บล็อบใหม่ในคอนเทนเนอร์), Queue Storage (ข้อความใหม่ในคิว), Event Hub (สตรีมเหตุการณ์), Service Bus (ข้อความในคิวหรือหัวข้อ) และ Cosmos DB (ฟีดการเปลี่ยนแปลง) ทริกเกอร์จะรับข้อมูลเหตุการณ์และส่งต่อให้โค้ดฟังก์ชันของคุณ

// HTTP trigger function (JavaScript/Node.js)
module.exports = async function (context, req) {
  const name = req.query.name || (req.body && req.body.name);
  const message = name ? 'Hello, ' + name : 'Pass a name in the query or body';
  context.res = {
    status: 200,
    body: { message }
  };
};

Function.json: การกำหนดค่าทริกเกอร์และการผูก

ในภาษาที่ไม่ได้คอมไพล์ (JavaScript, Python) ไฟล์ function.json ในไดเรกทอรีของแต่ละฟังก์ชันจะประกาศทริกเกอร์และการผูกของฟังก์ชันนั้น ไฟล์นี้จับคู่แหล่งเหตุการณ์และเอาต์พุตกับพารามิเตอร์ที่มีชื่อในโค้ดฟังก์ชัน สำหรับ C# และ Java จะประกาศการผูกโดยใช้แอตทริบิวต์/คำอธิบายประกอบโดยตรงในโค้ด รันไทม์ของ Functions จะอ่านการกำหนดค่าและตั้งค่าการเชื่อมต่อกับบริการ Azure โดยอัตโนมัติ

// function.json — HTTP trigger + Queue output binding
{
  'bindings': [
    {
      'authLevel': 'function',
      'type': 'httpTrigger',
      'direction': 'in',
      'name': 'req',
      'methods': ['post']
    },
    {
      'type': 'http',
      'direction': 'out',
      'name': 'res'
    },
    {
      'type': 'queue',
      'direction': 'out',
      'name': 'outputQueue',
      'queueName': 'processing-queue',
      'connection': 'AzureWebJobsStorage'
    }
  ]
}

การผูกเอาต์พุต: การเขียนข้อมูลไปยังบริการ

การผูกเอาต์พุตช่วยให้ฟังก์ชันเขียนข้อมูลไปยังบริการ Azure (Blob Storage, Queue Storage, Cosmos DB, Event Hub และอื่น ๆ) ได้โดยไม่ต้องจัดการ SDK หรือสตริงการเชื่อมต่อ คุณเพียงกำหนดค่าให้กับพารามิเตอร์การผูกเอาต์พุต แล้วรันไทม์ของ Functions จะจัดการการเขียนให้เอง วิธีนี้ช่วยลดโค้ดส่วนซ้ำซ้อนลงอย่างมาก และแยกฟังก์ชันออกจากรายละเอียดการทำงานของบริการ Azure ที่เจาะจง

// HTTP trigger with Queue output binding (Node.js)
module.exports = async function (context, req) {
  const orderData = req.body;

  // Write to queue via output binding -- no SDK needed!
  context.bindings.outputQueue = JSON.stringify({
    orderId: orderData.id,
    timestamp: new Date().toISOString()
  });

  context.res = { status: 202, body: 'Order queued' };
};

ทริกเกอร์ Timer พร้อมนิพจน์ CRON

ทริกเกอร์ Timerจะเรียกใช้ฟังก์ชันตามกำหนดการที่กำหนดโดยนิพจน์ CRON Azure Functions ใช้ CRON 6 ส่วน: {seconds} {minutes} {hours} {day} {month} {day-of-week} ใช้ 0 0 * * * * สำหรับทุกชั่วโมง, 0 0 0 * * * สำหรับเที่ยงคืนของทุกวัน หรือ 0 0 9-17 * * 1-5 สำหรับทุกชั่วโมงในเวลาทำการของวันธรรมดา ฟังก์ชัน Timer มีประโยชน์สำหรับงานล้างข้อมูล การสร้างรายงาน และการตรวจสอบสถานะ

// Timer trigger — runs every day at 02:00 UTC
// function.json binding:
// {
//   'type': 'timerTrigger',
//   'schedule': '0 0 2 * * *',
//   'name': 'myTimer'
// }

module.exports = async function (context, myTimer) {
  const now = new Date().toISOString();
  context.log('Daily cleanup started at', now);
  // ... perform cleanup logic ...
  context.log('Cleanup completed');
};

แผน Consumption: การปรับขนาดแบบไร้เซิร์ฟเวอร์

ในแผน Consumption Azure Functions จะปรับขนาดจากศูนย์เป็นหลายร้อยอินสแตนซ์โดยอัตโนมัติตามอัตราเหตุการณ์จากทริกเกอร์ คุณจ่ายเฉพาะจำนวนการเรียกใช้และหน่วยความจำหน่วย GB-วินาทีที่ใช้เท่านั้น โดยการเรียกใช้ 1 ล้านครั้งแรกต่อเดือนจะไม่มีค่าใช้จ่าย โฮสต์ Functions สามารถปรับขนาดทริกเกอร์ HTTP ได้สูงสุด 200 อินสแตนซ์ และปรับขนาดทริกเกอร์คิวตามจำนวนข้อความในคิวที่ประมวลผลพร้อมกันได้ การเริ่มทำงานแบบเย็น (การเรียกใช้ครั้งแรกหลังไม่มีการใช้งาน) จะเพิ่มเวลาแฝงเล็กน้อย ซึ่งลดได้ด้วยอินสแตนซ์ที่เตรียมพร้อมล่วงหน้าของแผน Premium

# View billing details for a function app
az functionapp show \
  --name myFunctionApp \
  --resource-group MyRG \
  --query '{name:name, plan:serverFarmId, state:state}'

# Create a Function App on Consumption plan
az functionapp create \
  --name myFunctionApp \
  --resource-group MyRG \
  --consumption-plan-location eastus \
  --runtime node \
  --runtime-version 18 \
  --storage-account mystorageaccount

แผน Premium และ Dedicated

แผน Premiumขจัดการเริ่มทำงานแบบเย็นด้วยการคงอินสแตนซ์ที่เตรียมพร้อมล่วงหน้า เพิ่มการผสานรวม VNet และอนุญาตให้กำหนดเวลาหมดอายุของการทำงานได้นานขึ้น (สูงสุด 60 นาที) แผน Dedicated (App Service)จะเรียกใช้ฟังก์ชันบนแผน App Service เดียวกับเว็บแอป ซึ่งมีประโยชน์เมื่อต้องการต้นทุนที่คาดการณ์ได้หรือมีทรัพยากรประมวลผล App Service เดิมอยู่แล้ว เลือก Consumption เมื่อต้องการรูปแบบต้นทุนแบบไร้เซิร์ฟเวอร์อย่างแท้จริง และเลือก Premium สำหรับฟังก์ชันที่ไวต่อประสิทธิภาพหรือเชื่อมต่อกับ VNet

# Create a Function App on Premium plan (EP1)
az functionapp plan create \
  --name MyPremiumPlan \
  --resource-group MyRG \
  --location eastus \
  --sku EP1 \
  --is-linux

az functionapp create \
  --name myFunctionAppPremium \
  --resource-group MyRG \
  --plan MyPremiumPlan \
  --runtime python \
  --runtime-version 3.11 \
  --storage-account mystorageaccount

การนำ Azure Functions ไปใช้งาน

นำ Azure Functions ไปใช้งานโดยใช้ Azure Functions Core Tools (func azure functionapp publish), ส่วนขยาย VS Code, การนำ ZIP ไปใช้งานผ่าน Azure CLI หรือไปป์ไลน์ CI/CDใน Azure Pipelines หรือ GitHub Actions ในสภาพแวดล้อมจริง ควรนำไปใช้งานจากไปป์ไลน์เสมอแทนเครื่องของผู้พัฒนา เพื่อให้มั่นใจว่าเวอร์ชันที่ผ่านการทดสอบและติดแท็กแล้วถูกนำไปใช้งานจริง รันไทม์ของ Functions ยังรองรับการนำคอนเทนเนอร์ Docker ไปใช้งานเพื่อควบคุมสภาพแวดล้อมรันไทม์ได้อย่างเต็มที่

# Local development: install Core Tools
npm install -g azure-functions-core-tools@4

# Start locally (triggers work against real Azure services)
func start

# Deploy to Azure
func azure functionapp publish myFunctionApp

# Or deploy via Azure CLI (ZIP deploy)
zip -r function.zip . --exclude '.git/*'
az functionapp deployment source config-zip \
  --name myFunctionApp \
  --resource-group MyRG \
  --src function.zip

การตั้งค่าแอปพลิเคชันและการอ้างอิง Key Vault

Function Apps จัดเก็บการกำหนดค่าไว้ในการตั้งค่าแอปพลิเคชัน ซึ่งจะแสดงเป็นตัวแปรสภาพแวดล้อมในโค้ดฟังก์ชันของคุณ จัดเก็บสตริงการเชื่อมต่อ คีย์ API และข้อมูลลับเป็นการตั้งค่าแอปพลิเคชัน สำหรับสภาพแวดล้อมจริง ให้ใช้การอ้างอิง Key Vault เพื่อจัดเก็บค่าไว้ใน Key Vault และอ้างอิงด้วยชื่อในการตั้งค่าแอปเท่านั้น ทำให้ข้อมูลลับไม่ปรากฏในพอร์ทัลหรือสิ่งประดิษฐ์จากการนำไปใช้งาน เปิดใช้ข้อมูลประจำตัวที่มีการจัดการบนแอปฟังก์ชันเพื่อยืนยันตัวตนกับ Key Vault โดยไม่ต้องใช้ข้อมูลประจำตัว

# Set application settings
az functionapp config appsettings set \
  --name myFunctionApp \
  --resource-group MyRG \
  --settings \
    STORAGE_CONNECTION='@Microsoft.KeyVault(SecretUri=https://mykv.vault.azure.net/secrets/storage-conn/)' \
    COSMOS_DB_URI='https://mycosmosdb.documents.azure.com'

# In function code, read as normal env var
# const storageConn = process.env['STORAGE_CONNECTION'];

การตรวจสอบ Functions ด้วย Application Insights

Azure Functions จะผสานรวมกับ Application Insights โดยอัตโนมัติเมื่อคุณระบุคีย์เครื่องมือวัดหรือสตริงการเชื่อมต่อ การเรียกใช้ฟังก์ชันทุกครั้งจะถูกติดตามเป็นคำขอ รวมถึงระยะเวลา ความสำเร็จ/ล้มเหลว และคุณสมบัติแบบกำหนดเอง ใช้เมตริกแบบสดของ Application Insights เพื่อดูการเรียกใช้แบบเรียลไทม์ระหว่างการทดสอบ และใช้มุมมองความล้มเหลวเพื่อวินิจฉัยข้อผิดพลาดด้วยร่องรอยข้อยกเว้นและการเรียกใช้การพึ่งพาอย่างครบถ้วน

# Connect Application Insights to a Function App
az functionapp config appsettings set \
  --name myFunctionApp \
  --resource-group MyRG \
  --settings \
    APPLICATIONINSIGHTS_CONNECTION_STRING='InstrumentationKey=xxxxxxxx;...'

# Custom telemetry in function code (Node.js)
const appInsights = require('applicationinsights');
appInsights.setup().start();
const client = appInsights.defaultClient;
client.trackEvent({ name: 'OrderProcessed', properties: { orderId: '123' } });

พฤติกรรมการทำงานพร้อมกันและการปรับขนาด

สำหรับฟังก์ชันที่ใช้ทริกเกอร์คิว โฮสต์ Functions จะประมวลผลหลายข้อความพร้อมกัน กำหนดค่า batchSize ใน host.json เพื่อควบคุมจำนวนข้อความที่อินสแตนซ์หนึ่งประมวลผลพร้อมกัน สำหรับทริกเกอร์ HTTP การขยายจำนวนอินสแตนซ์จะเพิ่มอินสแตนซ์ใหม่โดยอัตโนมัติ ใช้ maxConcurrentCalls (ทริกเกอร์ Service Bus) หรือ maxPollingInterval (ทริกเกอร์คิว) เพื่อปรับอัตราการประมวลผลและป้องกันไม่ให้บริการปลายทาง เช่น ฐานข้อมูล รับภาระมากเกินไปในระหว่างเหตุการณ์การขยายระบบ

// host.json — tune queue trigger concurrency
{
  'version': '2.0',
  'extensions': {
    'queues': {
      'batchSize': 16,          // messages per instance
      'newBatchThreshold': 8,   // fetch more when < 8 remain
      'maxPollingInterval': '00:00:02',
      'visibilityTimeout': '00:05:00'
    }
  },
  'functionTimeout': '00:10:00'
}

ตรวจสอบความเข้าใจอย่างรวดเร็ว

ทดสอบความเข้าใจแนวคิด Microsoft Azure Fundamentals (AZ-900) จากบทเรียนนี้

สรุปบทเรียน

ในบทเรียนนี้ คุณได้เรียนรู้ว่า ทริกเกอร์ กำหนดเหตุการณ์ที่เริ่มต้นฟังก์ชัน (HTTP, Timer, Queue, Blob และอื่น ๆ), การเชื่อมโยงเอาต์พุต ช่วยให้ฟังก์ชันเขียนข้อมูลไปยังบริการ Azure ได้โดยไม่ต้องใช้โค้ด SDK และแผน Consumption รองรับการปรับขนาดแบบ serverless อย่างแท้จริง โดยคิดค่าบริการตามการประมวลผลแต่ละครั้งและปรับลดจากศูนย์ได้ ต่อไปเราจะศึกษา Durable Functions สำหรับเวิร์กโฟลว์ที่มีสถานะ

คำถามที่พบบ่อย

บทเรียน “ทริกเกอร์และการผูกของ Azure Functions” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “ทริกเกอร์และการผูกของ Azure Functions” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Cloud & IT Cert Prep ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Cloud & IT Cert Prep มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “ทริกเกอร์และการผูกของ Azure Functions”

เขียนฟังก์ชันที่ทริกเกอร์ด้วย HTTP เพิ่มการผูกเอาต์พุตเพื่อเขียนไปยัง Azure Queue Storage และทำความเข้าใจรูปแบบการปรับขนาดอัตโนมัติของแผน Consumption คุณปฏิบัติ Cloud & IT Cert Prep ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Cloud & IT Cert Prep หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Cloud & IT Cert Prep บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน

บทเรียน “ทริกเกอร์และการผูกของ Azure Functions” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Cloud & IT Cert Prep นี้ได้ไหม

ได้ บทเรียน Cloud & IT Cert Prep ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. ทริกเกอร์และการผูกของ Azure Functions
  2. Durable Functions สำหรับเวิร์กโฟลว์ที่มีสถานะ
  3. Azure Logic Apps
  4. Event Grid และสถาปัตยกรรมที่ขับเคลื่อนด้วยเหตุการณ์
← กลับไปที่ Cloud & IT Cert Prep