ถ้าคุณกำลังมองหาวิธีที่รวดเร็วและไม่ซับซ้อนในการ Run Web application บนคลาวด์ อาจต้องลองใช้ Azure Web App บริการที่ช่วยให้คุณสามารถ Web application บน Azure โดยไม่ต้องจัดการเรื่องเซิร์ฟเวอร์ virtual machines หรือ containers ซึ่งสามารถอัปโหลด source code, กำหนดค่าการตั้งค่า แล้วให้ Azure จัดการส่วนที่เหลือได้ แต่ก็เหมือนกับบริการคลาวด์ทั่วไป มีบางข้อที่คุณต้องระวังเมื่อใช้ Azure Web App
ในบทความนี้ จะแชร์ 5 ข้อผิดพลาดที่พบบ่อย ๆ ที่นักพัฒนาทำเมื่อใช้ Azure Web App และแนะนำวิธีการป้องกัน เช่น วิธีการ deploy, การตั้งค่าแอป และ Connection Strings ด้วยการปฏิบัติตามคำแนะนำเหล่านี้ คุณจะสามารถหลีกเลี่ยงปัญหาที่เกิดขึ้นเมื่อใช้ Azure Web App และได้รับประโยชน์จากบริการที่มีประสิทธิภาพนี้ ได้อย่างเต็มที่
Quick Suggest
ถ้าสนใจอยากรู้เพิ่มเติม ขอแนะนำบทความ
1. ระบบปฏิบัติการและ Runtimes
หนึ่งในคุณสมบัติที่ดีที่สุดของ Azure Web App คือการรองรับเฟรมเวิร์กและรันไทม์รวมถึง .NET, Java, Ruby, JavaScript, PHP และ Python สำหรับผู้ที่ยังคงพัฒนาบน .NET Framework ข้อผิดพลาดทั่วไปที่เกิดขึ้นเมื่อติดตั้ง Azure Web App คือการสร้างแอปพลิเคชันที่ใช้งานบนระบบปฏิบัติการ Linux ซึ่งจะทำให้เกิดปัญหาเนื่องจากแอปพลิเคชันจะต้องใช้ไลบรารีและความต้องการที่เฉพาะเจาะจงกับ Windows จึงจะสามารถทำงานได้ ดังนั้น เมื่อทำการ deploy ควรเลือกระบบปฏิบัติการและรันไทม์ที่ถูกต้องสำหรับแอปพลิเคชัน
มีสองตัวเลือกระบบปฏิบัติการเมื่อสร้าง Azure Web App คือ Windows และ Linux ส่วนใหญ่สามารถ deploy แอปพลิเคชันได้ทั้งสองระบบปฏิบัติการ แต่ควรตรวจสอบความ match กันของรันไทม์และเฟรมเวิร์กของคุณ โดยเฉพาะถ้าคุณกำลังรันแอปพลิเคชันที่อาศัย .NET Framework
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับระบบปฏิบัติการใน Azure web app คุณสามารถอ่านบทความเกี่ยวกับการทำงานของระบบปฏิบัติการได้ ที่นี่
2. App Settings และ Environment Variables
ข้อผิดพลาดทั่วไปที่เกิดขึ้นได้กับนักพัฒนาคือ เมื่อ deploy แอปพลิเคชัน แล้วลืมอัปเดตการตั้งค่าแอปพลิเคชันจากค่าที่อยู่ในเครื่อง (local) ไปยังค่าที่อยู่ในคลาวด์
ตัวอย่าง คุณกำลังโหลดไฟล์ .csv เพื่ออ่านข้อมูลในแอปพลิเคชันของคุณเพื่อ seed data โดยส่วนใหญ่จะทำจากไฟล์ดิสก์ที่อยู่ในเครื่องและนำมาใส่ในไฟล์ appsetting.json/web.config (ถ้าคุณเขียนด้วย .NET) บางครั้งนักพัฒนาจะลืมอัปเดตค่านี้เป็นค่าที่อยู่ในคลาวด์ – เช่น ไฟล์ .csv เดียวกันแต่อยู่ใน Azure Storage หรือในโซลูชันการเก็บข้อมูลบนคลาวด์อื่น ๆ และแอปพลิเคชันจะทำงานไม่สำเร็จ
ถ้าเป็นไปได้ การตั้งค่าแอปพลิเคชันในเครื่อง, ตัวแปรสภาพแวดล้อม หรือการกำหนดค่า ควรไม่ถูก commit หรือ deploy พร้อมกับโค้ด แต่ว่าการตั้งค่าแอปพลิเคชันและตัวแปรสภาพแวดล้อมสำหรับแอปพลิเคชันที่คุณ deploy ควรจะถูกกำหนดค่าในแอปพลิเคชัน โดย deploy ไปยัง web app ในส่วนของกระบวนการ CICD ของคุณ หรือนำไปใส่ใน app configuration/secret store อย่าง Azure Key Vault
3. Connection Strings
อีกข้อผิดพลาดที่พบบ่อยคือ connection strings ซึ่งต่อเนื่องจากข้อก่อนหน้านี้ ในส่วนมากเมื่อนักพัฒนา (locally) โดย นักพัฒนาจะเชื่อมต่อกับฐานข้อมูลในเครื่อง เช่น Microsoft SQL Server ที่ localhost และconnection strings ฐานข้อมูลประมาณนี้
“ConnectionStrings”: {
“DefaultConnection”: “Server=.;Database=DaraDB;Trusted_Connection=True;MultipleActiveResultSets=true”
}
แต่เมื่อเปิดใช้งาน โดยเฉพาะผ่านวิธี “Right-Click-Deploy” บ่อยครั้งที่นักพัฒนาลืมตั้งค่า connection strings ใน Azure Portal ซึ่งบางครั้งทำให้เสียเวลาแก้ปัญหาโดยเปล่าประโยชน์
เพื่อหลีกเลี่ยงสิ่งนี้ แนะนำให้ถ้ายังคงใช้ right-click-deploy แก้ไข connection strings ฐานข้อมูลให้เป็นอันที่ Azure Web App สามารถเข้าถึงได้บนหน้าการกำหนดค่าการเปิดใช้งาน
ดูด้านล่างนี้ จะเห็นว่า Visual Studio ตรวจพบการเชื่อมต่อบริการกับฐานข้อมูลและแนะนำว่าควรเพิ่มเข้าไปในแอปพลิเคชันเว็บใน Azure
เมื่อคุณคลิกที่ปุ่ม “+” คุณจะได้รับการแจ้งเตือนเพื่อเพิ่มบริการต่าง ๆ คุณจึงจำเป็นต้องเลือก Azure SQL database
หลังจากที่คุณเลือกฐานข้อมูลของคุณ คุณจะได้รับการแจ้งเตือนให้ป้อนรายละเอียดการเข้าสู่ระบบและตำแหน่งที่ต้องการเพื่อบันทึกค่า connection string
ถ้าคุณใช้ Azure SQL database คุณจะต้อง “Allow Azure services” ให้เข้าถึงไฟร์วอลล์ของเซิร์ฟเวอร์ฐานข้อมูล หรือตั้งค่า virtual network เพื่อให้มีการเชื่อมต่อส่วนตัวระหว่างสองบริการ
4. การจัดเก็บไฟล์ในเครื่อง (Local File Storage)
เมื่อทำการแก้ไขปัญหา (debugging) ในแอปพลิเคชันในเครื่อง บางครั้งเราต้องอัปโหลดไฟล์ต่าง ๆ เช่น รูปภาพ, เอกสาร, ไฟล์เสียง และวิดีโอ มีการตั้งค่าที่กำหนดในการเขียน code ตัวอย่างเช่น ใน .NET โดยใช้ File.MapPath(localFilePath.ext) ที่นำไฟล์เหล่านี้ไปไว้ในโฟลเดอร์ source code สิ่งเหล่านี้มักจะถูก committed และ deployed ร่วมกับ code ของแอปพลิเคชันไปยัง Azure Web App ซึ่งปกติแล้วไม่ควรเป็นอย่างนั้น ทำให้พื้นที่เก็บข้อมูลใน Azure Web App เต็ม และบางทำให้พื้นที่จัดเก็บข้อมูลเต็มและ
แอปพลิเคชันทำงานได้ไม่เต็มประสิทธิภาพ
สิ่งที่ควรทำในกรณีนี้คือการใช้วิธีการจัดเก็บข้อมูล เช่น Azure Blob Storage แม้แต่ในระหว่าง local development และแน่ใจว่าไฟล์ที่ถูกโหลดเข้าไปในหน่วยความจำได้ถูกลบออกหลังจากที่การอัปโหลดสำเร็จแล้ว
5. การโยกย้ายฐานข้อมูล (Database Migrations)
ความผิดพลาดที่พบบ่อยเมื่อ deploy และใช้งาน Azure web applications คือบ่อยครั้งที่นักพัฒนาเพิ่มการโยกย้ายฐานข้อมูล (migrations) เข้าไปในแอปพลิเคชันของตัวเอง โดยปกติจะปรับปรุงฐานข้อมูลและเรียกใช้แอปพลิเคชัน เมื่อทุกอย่างดูดีจึงจะ deploy ตามที่มันควรจะเป็น แต่เมื่อแอปพลิเคชันถูกโหลด จะไม่สามารถเริ่มทำงานได้เนื่องจากมันพยายามเชื่อมต่อกับฐานข้อมูลที่มี migrations ที่ล้าสมัย มีวิธีการแก้ไขความผิดพลาดนี้สองวิธีคือ:
- ใช้การโยกย้ายฐานข้อมูลแบบอัตโนมัติเมื่อแอปพลิเคชันของคุณเริ่มทำงาน
- ให้การโยกย้ายฐานข้อมูลทำงานเป็นส่วนหนึ่งของกระบวนการ CICD
แหล่งที่มา: Microsoft