Azure Container Apps
นำแอปพลิเคชันไมโครเซอร์วิสไปใช้งานบน Azure Container Apps พร้อมการผสานรวมไซด์คาร์ Dapr กำหนดค่าการรับส่งข้อมูลขาเข้า และใช้การปรับขนาดอัตโนมัติที่ทำงานด้วย KEDA ตามความลึกของคิว Service Bus
Azure Container Apps เป็นบทเรียน Azure Fundamentals ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Azure Fundamentals และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Azure Fundamentals มีบทเรียนทั้งหมด 4 บทเรียน
Azure Container Apps คืออะไร
Azure Container Apps (ACA) คือบริการโฮสต์คอนเทนเนอร์แบบไร้เซิร์ฟเวอร์ที่มีการจัดการเต็มรูปแบบ สร้างอยู่บน Kubernetes และ KEDA (Kubernetes Event-Driven Autoscaling) ซึ่งแตกต่างจาก AKS ตรงที่คุณไม่ต้องจัดการระนาบควบคุม กลุ่มโหนด หรือไฟล์กำหนดค่า Kubernetes โดยตรง แต่จะปรับใช้คอนเทนเนอร์โดยใช้ CLI หรือคำจำกัดความ YAML แบบง่าย ๆ และ Azure จะจัดการการประสานงานทั้งหมดให้ ACA เหมาะอย่างยิ่งสำหรับไมโครเซอร์วิส แบ็กเอนด์ API ตัวประมวลผลที่ขับเคลื่อนด้วยเหตุการณ์ และงานประมวลผลเบื้องหลังที่ต้องปรับขนาดแบบไดนามิก รวมถึงการลดขนาดลงเป็นศูนย์
สภาพแวดล้อมของ Container Apps
สภาพแวดล้อมของ Container Apps คือขอบเขตที่แยกออกจากกัน ซึ่งภายในนั้นจะมี Container Apps หนึ่งรายการขึ้นไปทำงานอยู่ แอปทั้งหมดในสภาพแวดล้อมเดียวกันใช้เครือข่ายเสมือนและพื้นที่ทำงาน Log Analytics เดียวกัน สภาพแวดล้อมจะกำหนดขอบเขตตามภูมิภาคและกลุ่มทรัพยากร คุณสามารถปรับใช้หลายสภาพแวดล้อมเพื่อแยกทีม หรือแยกระยะต่าง ๆ (การใช้งานจริงเทียบกับการจัดเตรียม) ได้ นอกจากนี้ยังสามารถเลือกให้สภาพแวดล้อมถูกแทรกเข้าใน VNetของคุณเอง เพื่อให้ Container Apps สื่อสารแบบส่วนตัวกับบริการ Azure อื่น ๆ ได้โดยไม่ต้องผ่านอินเทอร์เน็ตสาธารณะ
# Create a Container Apps environment
az containerapp env create \
--name myACAEnvironment \
--resource-group myRG \
--location eastusการปรับใช้ Container App
หากต้องการปรับใช้ Container App ให้ระบุอิมเมจคอนเทนเนอร์ (จาก Azure Container Registry หรือรีจิสทรีสาธารณะใดก็ได้) จำนวนแบบจำลอง และตัวแปรสภาพแวดล้อม หากเปิดใช้การรับส่งข้อมูลขาเข้าภายนอก แอปจะเข้าถึงได้แบบสาธารณะผ่าน URL HTTPS ที่สร้างขึ้นโดยอัตโนมัติ การกำหนดค่าการรับส่งข้อมูลขาเข้าประกอบด้วยพอร์ตเป้าหมาย การแบ่งการรับส่งข้อมูลสำหรับการปรับใช้แบบ blue-green และการอนุญาตให้ใช้ HTTP หรือเฉพาะ HTTPS ACA จะดึงอิมเมจในขณะปรับใช้ ดังนั้นสภาพแวดล้อมต้องมีสิทธิ์ดึงข้อมูลจากรีจิสทรี
# Deploy a container app from Azure Container Registry
az containerapp create \
--name myapi \
--resource-group myRG \
--environment myACAEnvironment \
--image myacr.azurecr.io/myapi:latest \
--target-port 8080 \
--ingress external \
--registry-server myacr.azurecr.io \
--min-replicas 1 \
--max-replicas 10การปรับขนาดอัตโนมัติด้วย KEDA
Container Apps ปรับขนาดโดยใช้ตัวปรับขนาดของ KEDA ซึ่งทำงานตามเมตริกภายนอก ตัวปรับขนาด KEDA ในตัวประกอบด้วย: ปริมาณการรับส่งข้อมูล HTTP (คำขอพร้อมกันต่อแบบจำลอง), ความลึกของคิว Azure Service Bus (จำนวนข้อความที่รอ), Azure Storage Queue, Cron (ตามเวลา) และCPU/Memory เมื่อเมตริกของตัวปรับขนาดลดลงเป็นศูนย์และกำหนด minReplicas เป็น 0, Container Apps จะลดขนาดลงเป็นศูนย์ — จึงไม่มีค่าใช้จ่ายด้านการประมวลผลจนกว่าจะมีคำขอใหม่ การลดขนาดลงเป็นศูนย์เหมาะอย่างยิ่งสำหรับตัวประมวลผลที่ขับเคลื่อนด้วยเหตุการณ์และมีภาระงานเป็นช่วง ๆ
# Scale based on Service Bus queue depth
az containerapp update \
--name myworker \
--resource-group myRG \
--scale-rule-name sbqueue-scaler \
--scale-rule-type azure-servicebus \
--scale-rule-metadata 'queueName=orders' 'namespace=myservicebusns' 'messageCount=5' \
--scale-rule-auth 'connection=servicebus-connection-secret:connection' \
--min-replicas 0 \
--max-replicas 20การผสานรวม Dapr
Dapr (Distributed Application Runtime) คือรันไทม์แบบพกพาที่ขับเคลื่อนด้วยเหตุการณ์ ซึ่งช่วยให้การสร้างไมโครเซอร์วิสง่ายขึ้น Container Apps มีการผสานรวม Dapr ในตัว — คุณเปิดใช้แยกตามแต่ละแอปได้ด้วยแฟล็กเพียงรายการเดียว Dapr มีองค์ประกอบพื้นฐานสำหรับ: การเรียกใช้บริการ (พร้อมการลองใหม่และ mTLS), การส่งข้อความแบบเผยแพร่/สมัครรับข้อมูล (ซ่อนรายละเอียดของ Service Bus และ Event Hubs), การจัดการสถานะ (ซ่อนรายละเอียดของ Redis และ Cosmos DB) และการผูกเอาต์พุต ด้วย Dapr ไมโครเซอร์วิสจะสื่อสารผ่านไซด์คาร์ Dapr โดยไม่จำเป็นต้องทราบรายละเอียดโครงสร้างพื้นฐานเบื้องหลัง
# Enable Dapr on a Container App
az containerapp update \
--name myapi \
--resource-group myRG \
--enable-dapr \
--dapr-app-id myapi \
--dapr-app-port 8080 \
--dapr-app-protocol httpการแก้ไขและการแบ่งการรับส่งข้อมูล
การปรับใช้ Container App แต่ละครั้งจะสร้างการแก้ไขใหม่ ในโหมดการแก้ไขหลายรายการ คุณสามารถแบ่งการรับส่งข้อมูลระหว่างการแก้ไขต่าง ๆ สำหรับการปรับใช้แบบ blue-green หรือ canary ได้ ตัวอย่างเช่น ส่งการรับส่งข้อมูล 10% ไปยังการแก้ไขใหม่ และ 90% ไปยังการแก้ไขที่เสถียรในปัจจุบัน ให้ตรวจสอบอัตราข้อผิดพลาดและเวลาแฝงของการแก้ไขใหม่ก่อนเพิ่มสัดส่วนการรับส่งข้อมูลเป็น 100% การแก้ไขเก่าสามารถปิดใช้งานได้ แต่จะยังคงอยู่ในประวัติ ทำให้ย้อนกลับได้ทันทีโดยเปลี่ยนสัดส่วนการรับส่งข้อมูลกลับ
# Set traffic split between two revisions
az containerapp ingress traffic set \
--name myapi \
--resource-group myRG \
--revision-weight myapi--abc123=90 myapi--def456=10ข้อมูลลับและตัวแปรสภาพแวดล้อม
Container Apps รองรับการแทรกการกำหนดค่าสองวิธี ได้แก่ ตัวแปรสภาพแวดล้อม (สำหรับการกำหนดค่าที่ไม่ละเอียดอ่อน เช่น แฟล็กคุณลักษณะหรือ URL ของ API) และข้อมูลลับ (สำหรับค่าที่ละเอียดอ่อน เช่น สตริงการเชื่อมต่อ) ข้อมูลลับจะจัดเก็บในระดับ Container App และอ้างอิงผ่านตัวแปรสภาพแวดล้อมหรือส่วนประกอบ Dapr สำหรับการตั้งค่าที่ปลอดภัยที่สุด ให้อ้างอิงข้อมูลลับจาก Azure Key Vault โดยใช้ข้อมูลระบุตัวตนที่มีการจัดการ เพื่อให้ดึงค่าข้อมูลลับขณะทำงานและไม่จัดเก็บไว้ในระนาบการกำหนดค่าของ Container App
# Add a secret to a Container App
az containerapp secret set \
--name myapi \
--resource-group myRG \
--secrets 'db-password=supersecretpassword'
# Reference the secret as an environment variable
az containerapp update \
--name myapi \
--resource-group myRG \
--set-env-vars 'DB_PASSWORD=secretref:db-password'งาน: เวิร์กโหลดที่ทำงานจนเสร็จสิ้น
Container Apps Jobs ขยายขีดความสามารถของแพลตฟอร์มเพื่อรองรับเวิร์กโหลดที่ทำงานจนเสร็จสิ้น — คอนเทนเนอร์ที่เริ่มทำงาน ประมวลผล แล้วจบการทำงาน Jobs รองรับทริกเกอร์สามประเภท ได้แก่ Manual (ทริกเกอร์ผ่าน API หรือ CLI), Scheduled (นิพจน์ cron) และ Event-driven (ทริกเกอร์จากตัวปรับขนาด KEDA ในการทำงานแต่ละครั้ง) Jobs จะคิดค่าบริการเฉพาะเวลาที่ทำงานจริง จึงเหมาะอย่างยิ่งสำหรับการประมวลผลแบบกลุ่ม การสร้างรายงาน การย้ายฐานข้อมูล และไปป์ไลน์การอนุมานด้วย ML ที่ทำงานเป็นระยะหรือตอบสนองต่อเหตุการณ์
# Create a scheduled Container Apps job (run every hour)
az containerapp job create \
--name my-batch-job \
--resource-group myRG \
--environment myACAEnvironment \
--trigger-type Schedule \
--cron-expression '0 * * * *' \
--image myacr.azurecr.io/batchjob:latest \
--cpu 0.5 --memory 1Giการสังเกตการณ์ระบบ: บันทึกและเมตริก
Container Apps ส่งบันทึกระบบ (เหตุการณ์ของแพลตฟอร์ม เช่น การสร้างรุ่นและการปรับขนาด) และบันทึกคอนโซล (stdout/stderr ของแอปพลิเคชันของคุณ) ไปยังพื้นที่ทำงาน Log Analytics ที่แนบกับสภาพแวดล้อม คุณสามารถสอบถามบันทึกด้วย KQL: ContainerAppConsoleLogs_CL | where ContainerAppName_s == 'myapi' | project TimeGenerated, Log_s เมตริก Azure Monitor ในตัวประกอบด้วยจำนวนเรพลิกา จำนวนคำขอ เวลาแฝงของคำขอ และการใช้ CPU/หน่วยความจำต่อเรพลิกา ทั้งหมดนี้พร้อมใช้งานในพอร์ทัล Azure โดยไม่ต้องกำหนดค่าเพิ่มเติม
# Stream live logs from a Container App
az containerapp logs show \
--name myapi \
--resource-group myRG \
--followACA เทียบกับ AKS เทียบกับ App Service
การเลือกแพลตฟอร์มคอนเทนเนอร์ Azure ที่เหมาะสม: Container Apps เหมาะที่สุดสำหรับไมโครเซอร์วิส ผู้ทำงานที่ขับเคลื่อนด้วยเหตุการณ์ และ API ที่คุณต้องการประโยชน์ของ Kubernetes โดยไม่ต้องจัดการคลัสเตอร์ โดยเฉพาะเมื่อการปรับขนาดจนเหลือศูนย์มีประโยชน์ AKS เหมาะที่สุดเมื่อคุณต้องการควบคุม Kubernetes อย่างเต็มรูปแบบ ตัวดำเนินการแบบกำหนดเอง หรือการกำหนดค่าโหนดเฉพาะ (GPU, หน่วยความจำสูง) ส่วน App Service เหมาะที่สุดสำหรับเว็บแอปพลิเคชันและ API แบบดั้งเดิมที่ทีมพัฒนาต้องการรูปแบบ PaaS ที่เรียบง่ายโดยไม่ต้องรับภาระการจัดการคอนเทนเนอร์ ทั้งสามบริการรองรับคอนเทนเนอร์ ความแตกต่างอยู่ที่ความซับซ้อนในการจัดการเมื่อเทียบกับระดับการควบคุม
เครือข่าย: ทางเข้าใช้งานภายในและภายนอก
Container Apps รองรับโหมดทางเข้าสองแบบ ได้แก่ External (เข้าถึงได้จากสาธารณะผ่านปลายทาง HTTPS ที่กระจายโหลดและมี TLS อัตโนมัติ) และ Internal (เข้าถึงได้เฉพาะจากภายในสภาพแวดล้อม Container Apps เดียวกันหรือจากทรัพยากรที่เชื่อมต่อกับ VNet แบบเพียร์) ทางเข้าแบบ Internal ใช้สำหรับบริการแบ็กเอนด์ที่ไม่ควรเปิดเผยต่ออินเทอร์เน็ตไม่ว่าในกรณีใด แอปสามารถเรียกใช้กันได้โดยใช้ชื่อ DNS ภายในที่สร้างขึ้นโดยอัตโนมัติ http://myapi ภายในสภาพแวดล้อมเดียวกัน ทำให้สื่อสารระหว่างบริการได้อย่างง่ายดายโดยไม่ต้องปรับใช้เกตเวย์ API
ตรวจสอบความเข้าใจอย่างรวดเร็ว
ทดสอบความเข้าใจแนวคิด Microsoft Azure Fundamentals (AZ-900) จากบทเรียนนี้
สรุปบทเรียน
ในบทเรียนนี้ คุณได้เรียนรู้ว่า Azure Container Apps ให้บริการโฮสต์คอนเทนเนอร์แบบไร้เซิร์ฟเวอร์ที่สร้างบน Kubernetes และ KEDA โดยไม่ต้องจัดการคลัสเตอร์, ตัวปรับขนาด KEDA ช่วยให้ปรับขนาดจนเหลือศูนย์ตามความลึกของคิว ปริมาณการรับส่งข้อมูล HTTP หรือกำหนดการ cron และการผสานรวม Dapr ช่วยให้การสื่อสารระหว่างไมโครเซอร์วิสและการจัดการสถานะง่ายขึ้น ขั้นถัดไป เราจะเชื่อมโยงทุกอย่างเข้ากับเวิร์กโฟลว์สำหรับนักพัฒนาแบบครบวงจร
คำถามที่พบบ่อย
บทเรียน “Azure Container Apps” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “Azure Container Apps” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Azure Fundamentals ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Azure Fundamentals มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “Azure Container Apps”
นำแอปพลิเคชันไมโครเซอร์วิสไปใช้งานบน Azure Container Apps พร้อมการผสานรวมไซด์คาร์ Dapr กำหนดค่าการรับส่งข้อมูลขาเข้า และใช้การปรับขนาดอัตโนมัติที่ทำงานด้วย KEDA ตามความลึกของคิว Service Bus คุณปฏิบัติ Azure Fundamentals ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Azure Fundamentals หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Azure Fundamentals บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน
บทเรียน “Azure Container Apps” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Azure Fundamentals นี้ได้ไหม
ได้ บทเรียน Azure Fundamentals ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- ข้อมูลประจำตัวที่จัดการเพื่อการยืนยันตัวตนแบบไร้รหัสผ่าน
- Azure Service Bus สำหรับการส่งข้อความแบบแยกส่วน
- Azure Container Apps
- เวิร์กโฟลว์นักพัฒนาแบบต้นจนจบ