Introduction to the Microsoft Azure Well-Architected Framework
- Azure Well-Architected Framework pillars
Key
- Cost optimization มันมีแนวคิด FinOps ช่วยลด
- วางแผนก่อนขึ้น เอาเครื่องมือมาคิด Cost
- เลือกใช้ IAAS (แพง) > PAAS / SAAS (ส่วนใหญ่ถูกกว่า)
- Observability ต้องรู้ก่อนอะไรแพง แล้วถึงจะ Focus ได้
- รูปแบบการจ่ายมีผลนะ Pay As You Go แพงสุด ถ้ารูป Workload ประจำแล้ว ไปจ่ายแบบรายเดือน รายปี (Reserve) และถ้ารูปว่าช่วงไหน Peak ไปซื้อ Spot ไว้ - Operational excellence
- reducer variance and error ลงมือไม่เหมือนกัน / DevOps
- automation - infra as a code
- Observability - Performance efficiency - หา Spike และควบคุมมัน
- bottlenecks in your application - ตัว Code
- storage performance - caching / ลด latency region หรือ cdn ใกล้ๆ
- network performance - คุยใน หรือ คุยนอก นอกจากนี้การเพิ่ม messaging layer - buffer ไม่ให้ Client ค้างรอ
- เร่งด่วน เสียเงิน Scale up (เพิ่ม Spec) scale out (เพิ่ม Machine) - Reliability
- เข้าใจ Recovery point objective (RPO): The maximum duration of acceptable data loss
- และ Recovery time objective (RTO): The maximum duration of acceptable downtime
จากนั้นหาตัวช่วยที่จะมาลด และหาจุด single point of failure - Security - มันมีหลายส่วนเลย App / Credential Expose / Malware / Network / Phishing เป็นต้น
มีแนวคิดทั้ง
Defense in Depth
- Data - encryption
- Applications - SQL injection and cross-site scripting (XSS) / OWASP
- VM/compute - AntiVirus EDR
- Networking - Firewall SSH or RDP
- Perimeter กัน DDoS attacks
- Policies and access - Authentication กันหลุด เช่น พวก OpenID Connect, OAuth, or Kerberos-based authentication such as Active Directory
- Physical security
Zero Trust
อ๋อ แล้วอย่างลืมพวก มาตรฐาน Data | PDPA, GDPR, HIPAA
General design principles
- Enable architectural evolution - ทุกอย่างไม่จำเป็นต้องอยู่แบบเดิมเสมอไปนะ
- Use data to make decisions - Observability
- Educate and enable - เข้าใจของใหม่ และทุกคนนะ จะได้ไม่ต่อต้าน
- Automate - consistency/reduct time cost
สุดท้ายเข้าใจ Shared responsibility IAAS / PAAS / SAAS
Design มัน คือ การ tradeoffs
Knowledge Check
Microsoft Azure Well-Architected Framework - Cost Optimization
- Build a team culture that has an awareness of budget, expenses, reporting, and cost-tracking
✅ ทำ cost model ทำได้จาก ได้ค่าแบบหยาบๆ มาก่อนขึ้นจริง
✅ Estimate realistic budgets มาจากไหน ค่าหยาบๆ + ปัจจัยอื่น เช่น non-negotiable functional and nonfunctional requirements, trainning เป็นต้น อ๋อ และพวก Growth ด้วยนะ เช่น คาดการณ์ว่า 5 ปี เชื่่อมั่นว่า user จะเพิ่ม ต้องบวก เข้าไปด้วยนะ
✅ Encourage upstream communication คุยกันทุกฝ่าย จะได้ปรับได้
A budget is the ultimate financial boundary that drives design and implementation decisions.
- Spend only on what you need to achieve the highest ROI
✅ Measure the workload design's total cost
- consider the ROI as part of the selection process.
- ถ้า APP อาจจะลด Technical Debt ใน Code
- ลองย้ายไปใช้ PAAS เลือกหลายตัว เช่น App > VM หรือ AKS หรือ AppService ตั้งเงื่อนไข + ROI
✅ Refine the design ปรับ Flow ตาม Service ที่มี เช่น
- เดิม VM + IIS มาเป็น Azure App Service
- เดิม มี VM CI/CD มาเป็น GitHub Action และค่อยสร้าง Runner
✅ Design your architecture to support cost guardrails - cost guardrails ดูให้ไม่เกิดที่กำหนด มีหลายท่า
- สอนให้คนใช้ Microsoft Cost Management
- App Service Scale Limit
- Azure Policy
- Storage Tier - to Automation อะไรไม่ใช้ย้าย Tier ลด Cost - Design for usage optimization
✅ Use consumption-based pricing when it's practical เอาตามที่ใช้จริง เช่น พวก Serverless / Azure Function ดีกว่าไปพวก flat-rate billing จองยาวๆ แบบพวก VM
✅ Optimize your high-availability design ขึ้นกับ Requirement
- active-active - ทำต่อเมื่อแบบ มี requirement region fail
- active-only - ดีสุดจ่ายที่น้อย ถ้าตกลงได้ เช่น ยอมเอา Backup ขึ้นแทน รอได้ ตกลง RPO RTO กัน
- active-passive - ไม่ควรทำนะ มันจะจ่ายเงิน passive ด้วย
Keep your cloud environment clean of unused resources and data 5ส
- อะไรที่ไม่ใช่ไปดูจาก Azure Advisor cost recommendations
Maximize the use of resources and operations. Apply them to the negotiated functional and nonfunctional requirements of the solution.
- Design for rate optimization - Increase efficiency without redesigning, renegotiating, or sacrificing functional or nonfunctional requirements.
✅ ถ้ารู้ load แน่นอน ไม่มีกระตุก ไป flat-rate billing จองยาวๆ
✅ Consolidate infrastructure where practical - อะไรที่ใช้ร่วมกันได้ เช่น AKS ไม่ต้องไปแยก Cluster ตัวเองทุกระบบ
✅ Take advantage of reservations and other infrastructure discounts
- reservations จ่ายจองยาวๆ 1 ปี 3 ปี
- Azure Hybrid Benefit ถ้ามี License เอาจากของเดิมมาใช้
- ถ้ามี load แปลก ไปจองเพิ่มจาก Spot - Monitor and optimize over time
✅ Continuously evaluate and optimize your environment and support costs. ดู Cost และตกลง Trade Off ปรับตาม
✅ Continuously review and refine your workload base on ROI
Using the Developer SKU for the Dev/Test environment's เช่น API Management instance cost-effective option
The functional and nonfunctional requirements aren't subject to change based on ROI data
Knowledge Check
- Develop cost-management discipline
- Design with a cost-efficiency mindset
- Design for usage optimization
- Design for rate optimization
- Monitor and optimize over time
Microsoft Azure Well-Architected Framework - Operational excellence
- Embrace DevOps culture
✅ Using a common toolset can make it easier to share knowledge and collaborate by reducing the number of communication and collaboration methods
✅ Embrace continuous improvement
- Blameless postmortems - หาสาเหตุ และปรับปรุง โดยไม่โทษใคร
- knowledge sharing wiki
- import A/B Testing
✅ Codify development and operations procedure
- development เช่น Code Review / Coding Standard / รวมถึง Flow การทำงานด้วยนะ
- single source of truth จะได้หาจากแหล่งเดียวกัน
Standards add predictability to operations and make processes and practices scalable. Validating standards is a great way to draw points of improvement.
Be prepared for emergency and recovery situations by conducting regular drills.
- Establish development standards - Optimize productivity by standardizing development practices, enforcing quality gates, and tracking progress and success through systematic change management.
✅ Adopt industry standards for development - Agile Scrum / ISO / CMMI
✅ Shift left for testing - Testing early / automate / DevOps Quality Gates
✅ Measure development efficiency - ดู Incident / Bug บราๆ โดยใน Azure ก็มี
- velocity most effective in improving their quality and efficiency?
- Azure DevOps Boards มีภาพรวมสรุปใน Repo - Evolve operations with observability - Gain visibility into the system, derive insight, and make data-driven decisions
✅ Observe your workload through telemetry
- OpenTelemetry Lib ได้ทั้ง Log / Trace / Metric มันจะเห็นว่าอะไรที่ช้า App / DB
✅ Visualize monitoring data in dashboards
- Dashboards should be designed to provide the right information to the right people.
- This means that each team should have their own dashboard that provides the information they need to do their job.
✅ Design a robust alerting strategy
- Make alerts actionable
- Alert notifying the accountable roles ไม่ส่งไปทั่ว และมี Pattern ที่ชัดเจน (severity levels/description)
- Tools: Azure Monitor - Deploy with confidence - IaC
✅Use Infrastructure as Code (IaC)
✅ Treat your IaC the same as your application code
- ระวังเรือง Code secret management, access control พวก Supply Chain Attack เป็นต้น
- moving the IaC code to the same repository as the application code, team cut down the risk of security or governance issues by applying the same standards across both codebases.
✅ Standardize deployments on a single manifest
- จะได้เอาไปทำใหม่สะดวก หรือขึ้น DR Site จริงๆ ส่วนตัวเคสมีเคสโดน Ransomware เอาพวก Docker Compose / K8S ขึ้นมาง่ายไว
- หรือ อาจจะใช้ Region อื่นตรงนี้ต้องเตรียม Replicte Data ไป และเอาพวก IaC ไปใช้ - Automate for efficiency - Replace repetitive manual tasks with software automation
✅ Automate flows
- อะไรที่ควร automate จับจาก complexity, effort, frequency, accuracy, timeliness, and lifespan.
✅ Design for automation - เช่น UI Test เราต้องทำให้ Component มี Unique Id ตัว Tools จะได้จับง่ายๆ
✅ Automation should be well-architected
- Automation is integral to the workload, and should be maintained with the same standards as the rest of the workload components.
- จริงๆควรเอาไปอยู่กับ Code นะ - Adopt safe deployment practices - Implement guardrails in the deployment process to minimize the effect of errors or unexpected conditions.
✅ Codify automated deployment standards
- All deployments should be automated through pipelines. This ensures that deployments are consistent and repeatable
✅ Deploy often
- Small, frequent deployments are less risky and easier to roll back
✅ Use a progressive exposure approach
- Feature Flags ลองกับกลุ่มเล็กๆก่อน ถ้าใช้ทั่วไปอาจจะต้องทำ FAQ
- Green Blue / AB Testing
Knowledge Check
- Embrace DevOps culture
- Establish development standards
- Evolve operations with observability
- Deploy with confidence
- Automate for efficiency
- Adopt safe deployment practices
Microsoft Azure Well-Architected Framework - Performance efficiency
- Negotiate realistic performance targets
✅ Prepare to negotiate performance targets
- Understanding your platform's capabilities ก่อน
- ระบบใหม่ insight เช่น input from market analysis/ experts/ industry standards.
- ระบบเก่า usage patterns and bottlenecks จากข้อมูลในอดีต
✅ Negotiate performance targets effectively
- business owners understand user promises ไม่เรื่องของ IT
- performance vs pricing
- ทิศทางธุรกิจด้วยจะ แบบปีแรกจะทำ SEA แต่อีก 5 ปีขยายไป USA / EUROPE แสดงว่า Design ปี1-5 SEA แต่ปี 4-5 เตรียม Scale Design เป็นต้น
✅ Design with a flow-centric focus
- Identify the workload flows and prioritize the flows in the architectural diagram > By breaking down Flow นึกถึง C4 Diagram
- จะได้ Focus และทุ่ม Resource Budget ได้ - Design to meet capacity requirements - Provide enough supply to address anticipated demand.
✅ Design the workload effectively
- right resources across the technology stack
- right-sizing plan
✅ Properly forecast capacity needs
- forecast anticipated changes in capacity that can occur เผื่ออนาคต Scale with Limit
- Consider features that can fulfill the scalability requirements of your workload.
✅ Proof of concept deployment - ตรวจสอบข้อสงสัย อย่าง เช่น ในตัวอย่างจะเป็น Latency - Achieve and sustain performance - Protect against performance degradation
✅ Test for performance in development - Formalize performance tests as quality gates
✅ Optimize through observability
- ลองทำ Synthetic Transactions (Transactions ปลอม มาเทส)
+ real transaction
✅ Handle workload changes intelligently - Tune App ตาม Grow - Improve efficiency through optimization - Improve system efficiency + Increase Value
✅ Prioritize performance optimizations
✅ Look for design improvements - ปรับ Code หรือ เทคนิคใหม่
✅ Analyze telemetry and trends - application performance monitoring (APM) tools and profilers for this purpose มาดูเช่น performance trends / identify execution bottlenecks
Knowledge Check
- Negotiate realistic performance targets
- Design to meet capacity requirements
- Achieve and sustain performance
- Improve efficiency through optimization
Microsoft Azure Well-Architected Framework - Reliability
- Design for business requirements
✅ Identify reliability targets
- ระบบมันมีหลาย Flow นะ แล้วอะไรสำคัญที่สุด และรองลงมา เช่น ระบบ Insurance มองว่าส่วนขอ Claim + Approve สำคัญ
- reliability > security monitoring ไม่ได้อยู่ในส่วนนี้นะ
✅ Understand platform commitments พวก SLA / RTO / RPO
- The Microsoft SLAs for Online Services documentation.
✅ Determine dependencies and their effect on resiliency
- documented all dependencies ว่าระบบมีส่วนประกอบอะไร เราจะได้รู้ว่า อันไหนที่สำคัญ และเลือก Solution ที่เหมาะสม แต่ละอัน รวมถึงถ้าพังแล้วจะเกิดอะไรขึ้น
- นับ Internal + External Compunent - Design for resilience
✅ Determine failure risks
- critical components พังแล้ว user flows / system flows ยังไง
✅ Implement self-preservation mechanisms
- design to isolate faults - เช่น ระบบ Message Queue ทำ Retry Flow
- หา design pattern -
✅ Build comprehensive redundancy and resiliency
- by layer / tier เช่น App / Queue / DB มีส่วน HA คนละชุด หรือ ถ้างบน้อยเน้นส่วน DB
- ทำ Geo-Replication
A failure mode analysis helps you understand how a DDoS attack may affect the workload
- Design for Recovery
💾 Be prepared for disasters
- อะไรที่สำคัญ
- documented recovery plans พวก BCP
- DR Site
💾 Address stateful data พวก App Data เช่น
- DB ทำ Automated Backup / HA ฅ
- NoSQL อย่าง Cosmos ทำ Multi-Region lowers your RTO and RPO
💾 Implement automated self-healing capabilities in the design
- ถ้า K8S กำหนด Replica มันจะทำให้ตามกำหนก
- VM Azure Virtual Machine Scale Set + Application Health Extension
- Azure Monitor actions can be used to automatically perform actions when an alert is triggered. In this case, the action would be to restart the application
Design for Recovery - The workload must be able to anticipate and recover from most failures, of all magnitudes, with minimal disruption to the user experience and business objectives.
- Design for operations - Shift left
🔍 Implement robust monitoring
- Application Insights
- Azure Monitor
🔍 Predict potential malfunctions and anomalous behavior
- automatically scale out + limit
- emergency response plan + Alert
🔍 Test for reliability risks
- synthetic transaction testing / chaos testing แล้วดูผล ตัว App มันตายได้ แต่ต้อง gracefully respond ส่งต่องาน ไม่ใช่งานหายไป
- test degraded state - ใช้ Azure Chaos Studio ได้ - Simulating a component failure in production - Keep it simple - Avoid overengineering
⚙️Minimize the workload components
- Add components to your architecture only if they help you achieve target business values. Keep the critical path lean
⚙️Standardize your software development lifecycle - หาอะไรใหม่มาช่วย
⚙️Minimize your operations and development burden อะไรที่ platform มีให้ใช้ของเค้าไป แต่มันจะ Vendor Lock
Knowledge Check
- Design for business requirements
- Design for resilience
- Design for recovery
- Design for operations
- Keep it simple
แปะ
- Reliability design principles
- Design review checklist for Reliability
- Reliability tradeoffs
- Cloud design patterns that support reliability
Microsoft Azure Well-Architected Framework - Security
- Plan your security readiness - adopt and implement security practices in architectural design decisions and operations with minimal friction
🛡️Optimize security through segmentation
- แบ่งวงตาม network/team / env และคุมด้วย Access Control (least privilege)
- isolate systems that handle personally identifiable information (PII)
🛡️Respond to incidents efficiently
- ทำ incident response plan - preparedness, detection, containment, mitigation, and post-incident activity
🛡️Codify secure operations and development practices
- Shift Left Security มาตั้งแต่ตอน Code > DevSecOps - Design to protect confidentiality
🛡️Strictly limit access (Authen / Authorize)
🛡️Identify confidential data through classification
- Classify data based on its type, sensitivity, and potential risk. Assign a confidentiality level for each ตัวอย่างพวก PDPA กลุ่ม PII ข้อมูลที่ระบุถึงเราได้
- จาก Data > system components
- Data classification is an ongoing process that you should perform regularly
🛡️Apply encryption at every step of the data lifecycle
- Safeguard your data at rest, in transit, and during processing by using encryption, Base confidentiality level - Design to protect integrity
🛡️ Defend your supply chain
- help detect vulnerabilities in your code มีหลายตัวอย่าง Dependency Track ก็ใช่
🛡️ Employ strong cryptographic mechanisms
- Establish trust and verify by using cryptography techniques like code signing, certificates, and encryption
🛡️ Optimize the security of your backups
- Ensure backup data is immutable and encrypted when data is replicated or transferred.
- Azure Storage using the write-once-read-many (WORM) - Design to protect availability
🛡️ Enhance reliability through robust security ทำให้ระบบมันทน
- กันยิงถล่ม DDos
- กันกรอกแปลกแล้วต้าง input validation into the system to sanitize input อันนี้เป็นอีกตัวอย่าง
🛡️Proactively limit attack vectors
- ป้องกัน เช่น ลง EDR / Antivirus หรือ Azure WAF มาช่วย
🛡️Secure your recovery strategy
- DR Site/ Backup ต้องรอด เคยเจอ Ransomware มา แล้ว DR ไปด้วย แต่ยังมี Backup เลย Recover ได้ - Sustain and evolve your security posture
🛡️Perform threat modeling to identify and mitigate potential threats
- ทำ threat modeling
- และหาทางจัดการกับมัน
🛡️Independently verify your controls - Run periodic security tests / Update ระบบ
🛡️Get current, and stay current - Update Patch
Knowledge Check
- Plan your security readiness
- Design to protect confidentiality
- Design to protect integrity
- Design to protect availability
- Sustain and evolve your security posture
Reference
Discover more from naiwaen@DebuggingSoft
Subscribe to get the latest posts sent to your email.