✕ סגור 
צור קשר
תודה על ההתעניינות .

Thank you! Your submission has been received!

Oops! Something went wrong while submitting the form

פשטות בניהול גרסאות וסביבות אפליקציות עם Azure App Service & Deployment Slots

עומר יפהר
|
בינונית
|
Dec 10, 2016
alt="facebook"alt="linkedin"
להרשמה לניוזלטר

בפוסט הקודם בנושא Docker Containers, קיבלנו הצצה לסביבות פיתוח, DevOps והכנסת גרסאות מהירה לייצור. וגם הפוסט הזה נותן הצצה לתחום אנשי ה DevOps. הפעם החלטתי לתת הצצה הכוללת Step By Step ליצירת אפליקציה (דף אינטרנט) בסביבת ייצור ופרסומה לתוך Azure App Service כאתר אינטרנט בסביבת Azure. נראה כיצד ליצור מסביבה זו עותק משני עבור סביבת Stage ולבצע השינויים ופריסה מחודשת לייצור, חזרה ל rollback והכל באופן שקוף למשתמש ללא השבתה.בעבר, צוות ה Release, אנשי האופרציה, היו מקבלים גרסאות מצוות הפיתוח, מתאמים השבתה ומטמיעים את הקוד החדש בשרתי האפליקציה. בצוות שאני עבדתי בו לא היו קבצי exe להתקנה אוטומטית אלא הרבה מאוד סקריפטים. כל הטמעה שכזו גררה השבתה (בסביבה שנמדדת על השבתות). כל שדרוג אפליקציה והכנסת שינויים בין סביבת פיתוח, stage, ייצור הייתה אופרציה מסורבלת ואם היה צורך ב rollback אז כבר נכנסת לשעות הלילה. וזו הייתה השגרה שלנו.Azure AppService הינו שירות PaaS המאגד בתוכו גם אתרי אינטרנט ואפליקציות וגם תומך בגישת ה CI / CD.באפליקצה הרצה בסביבת Azure AppService ישנה אפשרות להעתיק את האפליקציה וליצור ממנה סביבה נוספת.כל סביבה כזו מכילה בתוכה הגדרות יחודיות (נניח קישור לבסיס נתונים אחר, URL שונה) - Deployment Slots.ולייתר דיוק, כל Deployment Slots הינו אינסטנס נפרד של אפליקציה (סביבת ייצור, פיתוח, Stage). מאחורי הקלעים, כל סביבה של האפליקציה, Slots, חולקים את אותם המשאבים של ה VM (ה Service Plan). לכן לא חושב שמומלץ לבצע בדיקות עומסים על אותם Slots. ה Deployment Slot  הראשי נקרא Default, וניתן ליצור עוד כארבעה סביבות, Slots בStandard SKU.תהליך זה מאפשר לנו לבדוק בסביבת ה Stage את הגרסה החדשה, בלחיצת כפתור (או פקודה) להעביר את הגרסה החדשה לייצור ואת הגרסה הישנה שהייתה בייצור, להעביר לסביבת ה Stage. תהליך הנקרא Swap. הכל באופן שקוף למשתמש וללא השבתות. תשאלו מדוע להעביר את הסביבה הישנה לStage? מפני שתהליך זה מאפשר לי לבצע Roll Back מיידי במקרה שמשהו בקוד לא פועל כפי שצריך.מה שחשוב לי שתקחו מהפוסט הזה היא הגמישות והפשטות המירבית המופקת בעבודה עם כלים כגון Visual Studio ו Azure. את ההדגמה ביצעתי עם Visual Studio 2015 אבל ניתן להקים מערכים כאלו בPowerShell וגם להעלות דרך FTP וכו'.Azure App Service ו Azure בכלל זו פלטפורמה מדהימה שקצב הפיתוח והיכולות מגיעים בקצב מסחרר. שווה להתעדכן.

בואו נראה את התהליך from A to Z:

1. נבנה אפליקציה מינימאלית דרך Visual Studio 2015 ונפרסם אותה ב Azure.

2. נגדיר Custom Domain

3. נגדיר סביבת Stage ע"י Deployment slots ונפרסם אפליקציית Stage ע"י Visual Studio 2015

4. נבצע תהליך הנקרא Swap. הכנסה לייצור את גרסת ה Stage - version 1.1, וסביבת הייצור הישנה, version 1.0, נעביר לסביבת ה Stage

הקמת אפליקציה

אצלי מוגדר visual studio 2015 comunity עם Azure sdk https://blogs.msdn.microsoft.com/microsoftimagine/2015/07/20/welcome-to-visual-studio-2015-with-azure/

  • נפתח את VS ונגדיר file > new > web site
  • נגדיר asp.net empty web site

  • ניצור קובץ index.html ונגדיר אותו כדף This is PROD!

  • ‍עמוד על הקובץ index.html (בצד שמאל - solution explorer) 

  • ‍נכניס את השינויים המסומנים בצהוב
  • ‍לאחר מכן נעמוד על MyProd ב solution explorer > קליק ימני > publis web app

  • ‍ נבחר את ה subscription הרלוונטי ונבחר new

  • ‍web app name זהו שם יחודי שנצטרך לבחור. זהו האתר
  • ‍מומלץ לבחור recorse group חדש
  • app service plan - זהו הרישוי וכח העיבוד של אתר או אוסף האתרים. ניתן בשלב זה לבחור free (בשלב יותר מאוחר נהיה חייבים לשדרג ל standard ע"מ לקבל יכולות מתקדמות)
  • ‍ללחוץ create לסיום

  • לוודא את נתיב ה URL וללחוץ publish להקמת האפליקציה ב Azure app service

  • ‍ האתר נפתח ותקין
  • עכשיו נגדיר את הDomain הרצוי ולא הגנרי של Azure

  • ‍הלכתי ל DNS שלי (אפשר גם לקבל את השירות ישירות מ Azure) והגדרתי CNAME. שמח וטוב לב הכנסתי את הנתיב myprod.yfhar.com וקיבלתי את המסך הזה... ומדוע? 

גם בשרתי אינטרנט iis, apache יש צורך להגדיר אילו דומיינים מקושרים לאותו השרת.

  • לבחור Custom Domains
  • ‍במקרה שלי הקמתי את הService Plan עם רישוי Free ולכן מבקש ממני רישוי נוסף. על מנת לקבל את כל האפשרויות הרלוונטיות, נבחר standard sku

  • ‍ נבחר Add hostname
  • ‍יש לרשום את ה FQDN אותו ה cname שהגדרנו ב DNS
  • ‍לבחור validate
  • ‍לבחור Add hostname

  • ‍ והנה אנו גולשים ל myprod.yfhar.com

הגדרה של Deployment Slots וביצוע Swap

ראשית עלנו להקים את תשתית סביבת ה Stage. בדף האפליקציה ניגש ל Deployment Slots > Add Slot. אם אין אופציה כזו, יש לוודא שאנו ברישוי Standard או Premium

נקרא לסביבה stage וניתן להעתיק את הקונפיגורציה של האפליקציה בייצור או לבנות חדשה. בהמשך נראה איך מתמודדים עם שינוי הגדרות בין הסביבות.

לצערי מחקתי את סביבת ההדגמה ולא הספקתי לצלם את המסך, אולם בסיום, יווצר Slot עם URL:

http://myprod-stage.azurewebsite.net

כעת יש ליצור את האפליקציה עצמה עבור סביבת ה Stage. ניתן לעשות זאת במספר דרכים. אנחנו נעשה זאת דרך VS.

  • ‍נפתח בחזרה את Visual Studio 2015
  • ‍מצד ימין, ב Solution Explorer, נבחר את קובץ ה index.html אשר פבלשנו מקודם ונשנה את ה title וה body מprod ל stage
  • ‍נלחץ קליק ימני על MyProd ונבחר Publish Web App עבור פיבלושו לStage Slot שיצרנו מקודם

  • ‍נבחר profile מצד שמאל
  • נבחר Microsoft Azure App Service

שימו לב. תחת ה Resource Group שלי יש מספר אתרים. ישנו גם ה MyProd, האפליקציה שיצרנו. מתחתיה יש את ה Deployment Slots והנה ה Stage Slot שיצרנו מקודם.

  • נבחר את ה Stage לסיום התהליך ופבלוש האפליקציה של ה Stage

 הנה, נוצרה לנו אפליקציית ה stage בנתיב http://myprod-stage.azurewebsites.net

 עכשיו כשיש לנו סביבת ייצור בגרסה 1.0 וסביבת stage בגרסת 1.1 הגיע הזמן להכניסה לייצור!

  • ‍ניגש לאפליקציה MyProd
  • ‍נבחר את Deployment Slots
  • נלחץ על סביבת ה Stage

 בסביבת ה Stage  נלחץ על כפתור ה Swap

ישנן מספר אופציות לביצוע Swap. ניתן לביצוע דרך סקריפט, PowerShell. ניתן לביצוע בpreview mode ואז נצטרך להגדיר complete swap לסיום

 בסיום התהליך נקבל את גרסת הStage ב URL של הייצור ואת גרסת הייצור הישנה בסביבת הStage

לא עבר תקין? התגלה באג? ניתן להחליף את הגרסאות באותה הדרך - ע"י Swap

שינוי הגדרות בין הסביבות

להלן רשימת ההגדרות שעוברות ואלו שאינן בין הסביבות (Slots):

Settings that are swapped:

  • ‍General settings - such as framework version, 32/64-bit, Web sockets
  • ‍App settings (can be configured to stick to a slot)
  • ‍Connection strings (can be configured to stick to a slot)
  • ‍Handler mappings
  • ‍Monitoring and diagnostic settings
  • ‍WebJobs content

Settings that are not swapped:

  • ‍Publishing endpoints
  • ‍Custom Domain Names
  • ‍SSL certificates and bindings
  • ‍Scale settings
  • ‍WebJobs schedulers

 עבור הגדרות App settings והגדרות Connection Strings נוכל להצמידן ל Slot הנוכחי. במקרה זה לא נצטרך לבצע שינוי לאחר או לפני תהליך ה Swap. זה יכול להיות מאוד שימושי במיוחד בקישור לבסיס נתונים בייצור ובסביבת ה Stage

בפוסט הקודם בנושא Docker Containers, קיבלנו הצצה לסביבות פיתוח, DevOps והכנסת גרסאות מהירה לייצור. וגם הפוסט הזה נותן הצצה לתחום אנשי ה DevOps. הפעם החלטתי לתת הצצה הכוללת Step By Step ליצירת אפליקציה (דף אינטרנט) בסביבת ייצור ופרסומה לתוך Azure App Service כאתר אינטרנט בסביבת Azure. נראה כיצד ליצור מסביבה זו עותק משני עבור סביבת Stage ולבצע השינויים ופריסה מחודשת לייצור, חזרה ל rollback והכל באופן שקוף למשתמש ללא השבתה.בעבר, צוות ה Release, אנשי האופרציה, היו מקבלים גרסאות מצוות הפיתוח, מתאמים השבתה ומטמיעים את הקוד החדש בשרתי האפליקציה. בצוות שאני עבדתי בו לא היו קבצי exe להתקנה אוטומטית אלא הרבה מאוד סקריפטים. כל הטמעה שכזו גררה השבתה (בסביבה שנמדדת על השבתות). כל שדרוג אפליקציה והכנסת שינויים בין סביבת פיתוח, stage, ייצור הייתה אופרציה מסורבלת ואם היה צורך ב rollback אז כבר נכנסת לשעות הלילה. וזו הייתה השגרה שלנו.Azure AppService הינו שירות PaaS המאגד בתוכו גם אתרי אינטרנט ואפליקציות וגם תומך בגישת ה CI / CD.באפליקצה הרצה בסביבת Azure AppService ישנה אפשרות להעתיק את האפליקציה וליצור ממנה סביבה נוספת.כל סביבה כזו מכילה בתוכה הגדרות יחודיות (נניח קישור לבסיס נתונים אחר, URL שונה) - Deployment Slots.ולייתר דיוק, כל Deployment Slots הינו אינסטנס נפרד של אפליקציה (סביבת ייצור, פיתוח, Stage). מאחורי הקלעים, כל סביבה של האפליקציה, Slots, חולקים את אותם המשאבים של ה VM (ה Service Plan). לכן לא חושב שמומלץ לבצע בדיקות עומסים על אותם Slots. ה Deployment Slot  הראשי נקרא Default, וניתן ליצור עוד כארבעה סביבות, Slots בStandard SKU.תהליך זה מאפשר לנו לבדוק בסביבת ה Stage את הגרסה החדשה, בלחיצת כפתור (או פקודה) להעביר את הגרסה החדשה לייצור ואת הגרסה הישנה שהייתה בייצור, להעביר לסביבת ה Stage. תהליך הנקרא Swap. הכל באופן שקוף למשתמש וללא השבתות. תשאלו מדוע להעביר את הסביבה הישנה לStage? מפני שתהליך זה מאפשר לי לבצע Roll Back מיידי במקרה שמשהו בקוד לא פועל כפי שצריך.מה שחשוב לי שתקחו מהפוסט הזה היא הגמישות והפשטות המירבית המופקת בעבודה עם כלים כגון Visual Studio ו Azure. את ההדגמה ביצעתי עם Visual Studio 2015 אבל ניתן להקים מערכים כאלו בPowerShell וגם להעלות דרך FTP וכו'.Azure App Service ו Azure בכלל זו פלטפורמה מדהימה שקצב הפיתוח והיכולות מגיעים בקצב מסחרר. שווה להתעדכן.

בואו נראה את התהליך from A to Z:

1. נבנה אפליקציה מינימאלית דרך Visual Studio 2015 ונפרסם אותה ב Azure.

2. נגדיר Custom Domain

3. נגדיר סביבת Stage ע"י Deployment slots ונפרסם אפליקציית Stage ע"י Visual Studio 2015

4. נבצע תהליך הנקרא Swap. הכנסה לייצור את גרסת ה Stage - version 1.1, וסביבת הייצור הישנה, version 1.0, נעביר לסביבת ה Stage

הקמת אפליקציה

אצלי מוגדר visual studio 2015 comunity עם Azure sdk https://blogs.msdn.microsoft.com/microsoftimagine/2015/07/20/welcome-to-visual-studio-2015-with-azure/

  • נפתח את VS ונגדיר file > new > web site
  • נגדיר asp.net empty web site

  • ניצור קובץ index.html ונגדיר אותו כדף This is PROD!

  • ‍עמוד על הקובץ index.html (בצד שמאל - solution explorer) 

  • ‍נכניס את השינויים המסומנים בצהוב
  • ‍לאחר מכן נעמוד על MyProd ב solution explorer > קליק ימני > publis web app

  • ‍ נבחר את ה subscription הרלוונטי ונבחר new

  • ‍web app name זהו שם יחודי שנצטרך לבחור. זהו האתר
  • ‍מומלץ לבחור recorse group חדש
  • app service plan - זהו הרישוי וכח העיבוד של אתר או אוסף האתרים. ניתן בשלב זה לבחור free (בשלב יותר מאוחר נהיה חייבים לשדרג ל standard ע"מ לקבל יכולות מתקדמות)
  • ‍ללחוץ create לסיום

  • לוודא את נתיב ה URL וללחוץ publish להקמת האפליקציה ב Azure app service

  • ‍ האתר נפתח ותקין
  • עכשיו נגדיר את הDomain הרצוי ולא הגנרי של Azure

  • ‍הלכתי ל DNS שלי (אפשר גם לקבל את השירות ישירות מ Azure) והגדרתי CNAME. שמח וטוב לב הכנסתי את הנתיב myprod.yfhar.com וקיבלתי את המסך הזה... ומדוע? 

גם בשרתי אינטרנט iis, apache יש צורך להגדיר אילו דומיינים מקושרים לאותו השרת.

  • לבחור Custom Domains
  • ‍במקרה שלי הקמתי את הService Plan עם רישוי Free ולכן מבקש ממני רישוי נוסף. על מנת לקבל את כל האפשרויות הרלוונטיות, נבחר standard sku

  • ‍ נבחר Add hostname
  • ‍יש לרשום את ה FQDN אותו ה cname שהגדרנו ב DNS
  • ‍לבחור validate
  • ‍לבחור Add hostname

  • ‍ והנה אנו גולשים ל myprod.yfhar.com

הגדרה של Deployment Slots וביצוע Swap

ראשית עלנו להקים את תשתית סביבת ה Stage. בדף האפליקציה ניגש ל Deployment Slots > Add Slot. אם אין אופציה כזו, יש לוודא שאנו ברישוי Standard או Premium

נקרא לסביבה stage וניתן להעתיק את הקונפיגורציה של האפליקציה בייצור או לבנות חדשה. בהמשך נראה איך מתמודדים עם שינוי הגדרות בין הסביבות.

לצערי מחקתי את סביבת ההדגמה ולא הספקתי לצלם את המסך, אולם בסיום, יווצר Slot עם URL:

http://myprod-stage.azurewebsite.net

כעת יש ליצור את האפליקציה עצמה עבור סביבת ה Stage. ניתן לעשות זאת במספר דרכים. אנחנו נעשה זאת דרך VS.

  • ‍נפתח בחזרה את Visual Studio 2015
  • ‍מצד ימין, ב Solution Explorer, נבחר את קובץ ה index.html אשר פבלשנו מקודם ונשנה את ה title וה body מprod ל stage
  • ‍נלחץ קליק ימני על MyProd ונבחר Publish Web App עבור פיבלושו לStage Slot שיצרנו מקודם

  • ‍נבחר profile מצד שמאל
  • נבחר Microsoft Azure App Service

שימו לב. תחת ה Resource Group שלי יש מספר אתרים. ישנו גם ה MyProd, האפליקציה שיצרנו. מתחתיה יש את ה Deployment Slots והנה ה Stage Slot שיצרנו מקודם.

  • נבחר את ה Stage לסיום התהליך ופבלוש האפליקציה של ה Stage

 הנה, נוצרה לנו אפליקציית ה stage בנתיב http://myprod-stage.azurewebsites.net

 עכשיו כשיש לנו סביבת ייצור בגרסה 1.0 וסביבת stage בגרסת 1.1 הגיע הזמן להכניסה לייצור!

  • ‍ניגש לאפליקציה MyProd
  • ‍נבחר את Deployment Slots
  • נלחץ על סביבת ה Stage

 בסביבת ה Stage  נלחץ על כפתור ה Swap

ישנן מספר אופציות לביצוע Swap. ניתן לביצוע דרך סקריפט, PowerShell. ניתן לביצוע בpreview mode ואז נצטרך להגדיר complete swap לסיום

 בסיום התהליך נקבל את גרסת הStage ב URL של הייצור ואת גרסת הייצור הישנה בסביבת הStage

לא עבר תקין? התגלה באג? ניתן להחליף את הגרסאות באותה הדרך - ע"י Swap

שינוי הגדרות בין הסביבות

להלן רשימת ההגדרות שעוברות ואלו שאינן בין הסביבות (Slots):

Settings that are swapped:

  • ‍General settings - such as framework version, 32/64-bit, Web sockets
  • ‍App settings (can be configured to stick to a slot)
  • ‍Connection strings (can be configured to stick to a slot)
  • ‍Handler mappings
  • ‍Monitoring and diagnostic settings
  • ‍WebJobs content

Settings that are not swapped:

  • ‍Publishing endpoints
  • ‍Custom Domain Names
  • ‍SSL certificates and bindings
  • ‍Scale settings
  • ‍WebJobs schedulers

 עבור הגדרות App settings והגדרות Connection Strings נוכל להצמידן ל Slot הנוכחי. במקרה זה לא נצטרך לבצע שינוי לאחר או לפני תהליך ה Swap. זה יכול להיות מאוד שימושי במיוחד בקישור לבסיס נתונים בייצור ובסביבת ה Stage

בואו נעבוד ביחד
צרו קשר