שחזור אוטומטי (rollback) לפריסת ECS Fargate כושלת ללא סקריפטים מותאמים אישית.
→הפעל את ECS deployment circuit breaker עם שחזור אוטומטי בשירות ה-ECS.
למה: תכונה מובנית של ECS שמבצעת שחזור אוטומטי אם משימות חדשות לא מצליחות להתייצב. תקורה תפעולית מינימלית בהשוואה ל-CodeBuild polling מותאם אישית או הגדרות CodeDeploy מורכבות.
מקור↗
פרוס לאזור ראשי, אמת באמצעות בדיקות אוטומטיות, ולאחר מכן פרוס לאזורים אחרים במקביל.
→השתמש ב-CodePipeline יחיד עם שלבים עוקבים: (1) פריסה לאזור A, (2) שלב בדיקה של CodeBuild המבצע אימות, (3) שלב פריסה מקבילה לאזורים B ו-C.
למה: CodeBuild משמש כשער אוטומטי ותכנותי. Pipeline יחיד פשוט יותר מאשר תזמור מספר Pipelines עם Step Functions.
סקריפט אימות ארוך טווח ב-CodeDeploy lifecycle hook גורם להצלחת פריסה מוקדמת.
→הגדל את מאפיין `timeout` עבור סקריפט ה-lifecycle hook הספציפי בקובץ `AppSpec.yml`א.
למה: ה-timeout מוגדר לכל hook בקובץ ה-AppSpec, לא ברמת קבוצת הפריסה. זה מבטיח שלסקריפט האימות יהיה מספיק זמן להשלמה.
האצת בניית תמונות Docker איטית ב-CodeBuild הנגרמת על ידי הורדה מחדש של תלויות ושכבות תמונה בכל הרצה.
→בתצורת פרויקט CodeBuild, הפעל את `LOCAL_DOCKER_LAYER_CACHE` והגדר מטמון S3 עבור ספריות תלויות (לדוגמה, `.m2`, `node_modules`).
למה: מתמודד ישירות עם שני מקורות האיטיות. מטמון שכבות Docker עושה שימוש חוזר בשכבות תמונה שלא השתנו; מטמון S3 עושה שימוש חוזר בתלויות יישומים שהורדו.
הטמעת פריסת קנרי (canary deployment) עבור פונקציית Lambda עם שחזור אוטומטי מונחה מדדים.
→השתמש ב-AWS SAM עם `DeploymentPreference` (לדוגמה, סוג `Canary10Percent5Minutes`). הוסף אזעקת CloudWatch על מדד `Errors` כטריגר לשחזור.
למה: SAM משתלב באופן מובנה עם CodeDeploy עבור Lambda, ומאפשר אוטומציה של העברת תעבורת כינויים, ניטור ושחזור ללא סקריפטים מותאמים אישית.
מקור↗
הגדר IAM עבור CodePipeline בחשבון A כדי לפרוס משאבים לחשבון B.
→תפקיד ה-Pipeline (חשבון A) מניח תפקיד פעולה (חשבון B). תפקיד הפעולה ב-B סומך על תפקיד ה-Pipeline ויש לו הרשאות פריסה. לדלי ה-S3 ולמפתח ה-KMS ב-A חייבות להיות מדיניות משאבים המעניקה גישה לתפקיד הפעולה ב-B.
למה: זוהי תבנית הגישה הסטנדרטית והמאובטחת בין חשבונות: הנחת תפקיד לפעולות, מדיניות מבוססת משאבים לגישה לנתונים.
הטמעת זרימת עבודה של GitOps עבור EKS שבה מצב האשכול מתיישר אוטומטית וברציפות עם מאגר Git.
→פרוס בקר GitOps (לדוגמה, Flux, ArgoCD) באשכול EKS. הגדר אותו לנטר את מאגר ה-Git וליישם/ליישר שינויים.
למה: זוהי תבנית ה-GitOps הסטנדרטית מבוססת "pull". הבקר שבתוך האשכול מטפל ביישור רציף ובזיהוי סחף, שהוא העיקרון המרכזי של GitOps.
אפשר לפרויקט CodeBuild בחשבון כלים מרכזי לפרוס מניפסטים של Kubernetes לאשכולות EKS בחשבונות עומס עבודה נפרדים.
→בכל חשבון עומס עבודה, צור תפקיד IAM חוצה חשבונות שאותו בוטח תפקיד ה-CodeBuild. מפה תפקיד חדש זה לקבוצת Kubernetes RBAC ב-ConfigMap `aws-auth` של אשכול EKS. סקריפט ה-CodeBuild מניח את התפקיד לפני הרצת `kubectl`.
למה: זוהי תבנית הגישה הסטנדרטית והמאובטחת ל-EKS בין חשבונות. היא פועלת לפי עקרון הפריבילגיה המינימלית על ידי יצירת תפקיד ייעודי ומהימן למטרה זו.
בצע הגירת סכימה מורכבת של RDS PostgreSQL או MySQL עם השבתה אפסית או כמעט אפסית.
→השתמש בתכונת Amazon RDS Blue/Green Deployments. צור סביבת ביניים (green) מסונכרנת, החל עליה שינויי סכימה, ולאחר מכן בצע מעבר כדי לקדם אותה לייצור.
למה: זהו השירות המנוהל והייעודי לעדכוני RDS בטוחים וללא השבתה. הוא מטפל בשיבוט, סנכרון, ומעבר מהיר (פחות מדקה) עם אמצעי הגנה מובנים.
פרוס גרסה חדשה של יישום דף יחיד (SPA) ל-S3/CloudFront וודא שמשתמשים יקבלו את הגרסה החדשה באופן מיידי עם עלויות ביטול מטמון מינימליות.
→השתמש ב-hashing מבוסס תוכן עבור שמות קבצי נכסים (לדוגמה, `app.a1b2c3d4.js`). לאחר פריסת נכסים חדשים, בטל את תוקף המטמון (invalidate) רק של הקובץ `index.html` בהפצת CloudFront.
למה: שמות קבצים עם hash הם ייחודיים, ולכן CloudFront מתייחס אליהם כאובייקטים חדשים ושולף אותם מהמקור, תוך עקיפת המטמון. רק קובץ נקודת הכניסה היחיד (`index.html`) דורש ביטול תוקף מטמון, וזה זול משמעותית מביטול תוקף מטמון עם תו כללי (`/*`).
הטמעת pipeline של CI/CD עבור יישום AWS CDK שמתעדכן אוטומטית כאשר הגדרת ה-pipeline עצמה משתנה.
→השתמש בקונסטרוקציה CDK Pipelines (`pipelines.CodePipeline`). קונסטרוקציה זו יוצרת pipeline הכולל שלב `SelfMutate` כברירת מחדל.
למה: CDK Pipelines היא קונסטרוקציה ברמה גבוהה שנבנתה במיוחד עבור תבנית זו. שלב ה-`SelfMutate` מבטיח שה-pipeline תמיד ישקף את ההגדרה העדכנית ביותר מהקוד לפני פריסת שינויי יישומים.
פרוס גרסת יישום חדשה הדורשת שינוי סכימת מסד נתונים תואם לאחור (לדוגמה, הוספת עמודות חדשות) עם השבתה אפסית.
→הטמע תבנית "הרחבה וכיווץ" (או שינוי מקביל). ראשית, פרוס את שינויי סכימת מסד הנתונים התוספתיים ותואמי-האחור. שנית, פרוס את גרסת היישום החדשה המשתמשת בסכימה החדשה. גם גרסאות היישום הישנות וגם החדשות יכולות להתקיים יחד עם מסד הנתונים המעודכן.
למה: תבנית זו מפרידה את פריסות מסד הנתונים והיישומים, ומבטיחה שמצב מסד הנתונים תמיד תואם גם לגרסאות היישום הישנות וגם לחדשות, ובכך מאפשרת פריסות ללא השבתה.
השק בהדרגה תכונה חדשה לפלחי משתמשים ספציפיים ומדוד את ההשפעה על מדדים עסקיים (לדוגמה, יחס המרה) באמצעות בדיקות A/B.
→השתמש ב-Amazon CloudWatch Evidently. צור תכונה עם וריאציות מרובות, השקה לשליטה באחוז ההפצה, וניסוי למדידת ההשפעה הסטטיסטית על מדדים מוגדרים.
למה: Evidently הוא שירות ייעודי עבור סימון תכונות וניסויי A/B, המספק לא רק את מנגנון ההפצה אלא גם את מנוע הניתוח הסטטיסטי למדידת השפעה.