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

Thank you! Your submission has been received!

Oops! Something went wrong while submitting the form

המדריך לייעול תהליכי בניה והפצה בענן עם Rocketsam

נדב גולדשטיין
|
קלה
|
May 30, 2019
alt="facebook"alt="linkedin"להרשמה לניוזלטר

אז יש לכם רעיון לשרת - בחזון שלכם הוא יהיה microservice המבוסס על פונקציות serverless.


כיום, AWS היא הבחירה הטבעית להרמת שירות כזה, בעזרת הכלים הייעודים כמו Lambda ו-ApiGateway. ישנן דרכים רבות להעלות שירותים כאלו, אך אנו נתמקד בתוכנה שפיתחתי שמטרתה להקל בו בזמן לייעל את תהליך הבנייה וההפצה של microservices בענן, הלא הוא Rocketsam.
הכלי מבוסס על SAM של אמזון, שהוא בעצמו מבוסס על cloudformation.

דרישות סף:


AWS CLI with IAM account configured
AWS SAM cli
Docker
Node and Npm

כמו כן, הכרה מוקדמת של SAM או template של cloudformation יעזרו להבנת המדריך.

לפני שנתחיל, כמה עובדות על rocketsam:


● התוכנה משתמשת ב-caching per function, כך שפונקציות שלא השתנו לא יעלו לענן כל פעם
● ה-template העצום שמאפיין microservices שנבנו ב-SAM פוצל ל-yaml פר resource בענן, מדלי ב-s3 עד לפונקציית lambda
● ישנה אופציה לשתף קוד בין פונקציות בעזרת תיקיית common, הסבר ניתן למצוא בעמוד הגיטהב של ה-cli

נתחיל בהתקנת התוכנה:

לאחר ההתקנה אפשר לוודא את ההצלחה בעזרת בדיקת הגרסה:

אוקיי, אז הכל מותקן ומוכן, כעת נבנה פרויקט חדש המציג הודעה פשוטה למשתמש, חשוב לציין שה-microservice שנבנה יהיה חינמי - קישור לפרויקט המלא

נתחיל בשלד הראשוני, יש ליצור תיקייה ומתוכה להריץ rocketsam init ולעקוב אחרי השלבים:

כעת נוצרו לנו בתיקייה הריקה כמה קבצים, במהירות נעבור על כל אחד:


● rocketsam.yaml - הקונפיגורציה הכללית של הפרויקט, מכילה את שם ה-stack ושם הדלי שישמש לאחסון הקוד של הפונקציות.
● app/common - הקבצים בתוך התיקייה הזו יכולים להיות משותפים בין פונקציות.
● app/functions - יכיל תיקייה לכל פונקציה ב-microservice
● app/resources - תכיל קובץ לכל resource שאינו פונקציה
● template-skeleton.yaml - השלד שממנו יבנה ה-template הסופי אוטומטית

לאחר מכן נבנה את הפונקציה הראשונה שלנו:


שימו לב שנוצרה תיקייה ב-app/functions, תוכנה מורכב מ:

● function.py - הקוד של הפונקציה
● requirements.txt - רשימת הספריות החיצונית של הפונקציה (רלוונטי ל-python)
● template.yaml - ה-template של הפונקציה, מכיל פרטים כמו ה-endpoint של הפונקציה

נפתח את הקוד של הפונקציה ונשנה אותו שיציג הודעה לאורח:

כמו כן נוסיף endpoint לפונקציה בעזרת ה-cli:

הפעולה פשוט הוסיפה ל-yaml של הפונקציה חלק שמודיע על ה-endpoint (החלק החדש מסומן באדום):

כעת לאחר שהוספנו פונקציה והוספנו ל- endpoint, נבנה אותה ונעלה את ה-microservice הנוכחי לענן בעזרת שתי פעולות פשוטות:
rocketsam build all
rocketsam deploy

בהנחה שרשום success בסוף ה-deploy מזל טוב! הmicroservice שבנית זמין בענן.
ניתן לגלות את ה-url שבאמצעותו ניגש לפונקציה בעזרת ה-cli

ובאמת שניגש ל-url הזה תתגלה ההודעה שרשמנו:


ניתן לראות את ה-microservice ב-gui של AWS:

ואת הקוד שהועלה ל-s3

לבסוף, כדי להוריד את ה-microservice מהענן יש להריץ את הפעולה הבאה:


ברגע ש DELETE_IN_PROGRESS התחלף ב-REMOVED, השירות שלנו כבר לא באוויר (התוכן ב-s3 עדיין שם, אותו ניתן למחוק ידנית).

ה-cli הוא work in progress, מוזמנים להציע שינויים ולעשות fork ב-github (ולעשות כוכב מאוד יעזור!)
https://github.com/nadav96/rocketsam

מאת: נדב גולדשטיין, מפתח צד-לקוח עם 4 אפליקציות פרודקשן מלאות (כולל יס פלנט וסינוורלד)

אז יש לכם רעיון לשרת - בחזון שלכם הוא יהיה microservice המבוסס על פונקציות serverless.


כיום, AWS היא הבחירה הטבעית להרמת שירות כזה, בעזרת הכלים הייעודים כמו Lambda ו-ApiGateway. ישנן דרכים רבות להעלות שירותים כאלו, אך אנו נתמקד בתוכנה שפיתחתי שמטרתה להקל בו בזמן לייעל את תהליך הבנייה וההפצה של microservices בענן, הלא הוא Rocketsam.
הכלי מבוסס על SAM של אמזון, שהוא בעצמו מבוסס על cloudformation.

דרישות סף:


AWS CLI with IAM account configured
AWS SAM cli
Docker
Node and Npm

כמו כן, הכרה מוקדמת של SAM או template של cloudformation יעזרו להבנת המדריך.

לפני שנתחיל, כמה עובדות על rocketsam:


● התוכנה משתמשת ב-caching per function, כך שפונקציות שלא השתנו לא יעלו לענן כל פעם
● ה-template העצום שמאפיין microservices שנבנו ב-SAM פוצל ל-yaml פר resource בענן, מדלי ב-s3 עד לפונקציית lambda
● ישנה אופציה לשתף קוד בין פונקציות בעזרת תיקיית common, הסבר ניתן למצוא בעמוד הגיטהב של ה-cli

נתחיל בהתקנת התוכנה:

לאחר ההתקנה אפשר לוודא את ההצלחה בעזרת בדיקת הגרסה:

אוקיי, אז הכל מותקן ומוכן, כעת נבנה פרויקט חדש המציג הודעה פשוטה למשתמש, חשוב לציין שה-microservice שנבנה יהיה חינמי - קישור לפרויקט המלא

נתחיל בשלד הראשוני, יש ליצור תיקייה ומתוכה להריץ rocketsam init ולעקוב אחרי השלבים:

כעת נוצרו לנו בתיקייה הריקה כמה קבצים, במהירות נעבור על כל אחד:


● rocketsam.yaml - הקונפיגורציה הכללית של הפרויקט, מכילה את שם ה-stack ושם הדלי שישמש לאחסון הקוד של הפונקציות.
● app/common - הקבצים בתוך התיקייה הזו יכולים להיות משותפים בין פונקציות.
● app/functions - יכיל תיקייה לכל פונקציה ב-microservice
● app/resources - תכיל קובץ לכל resource שאינו פונקציה
● template-skeleton.yaml - השלד שממנו יבנה ה-template הסופי אוטומטית

לאחר מכן נבנה את הפונקציה הראשונה שלנו:


שימו לב שנוצרה תיקייה ב-app/functions, תוכנה מורכב מ:

● function.py - הקוד של הפונקציה
● requirements.txt - רשימת הספריות החיצונית של הפונקציה (רלוונטי ל-python)
● template.yaml - ה-template של הפונקציה, מכיל פרטים כמו ה-endpoint של הפונקציה

נפתח את הקוד של הפונקציה ונשנה אותו שיציג הודעה לאורח:

כמו כן נוסיף endpoint לפונקציה בעזרת ה-cli:

הפעולה פשוט הוסיפה ל-yaml של הפונקציה חלק שמודיע על ה-endpoint (החלק החדש מסומן באדום):

כעת לאחר שהוספנו פונקציה והוספנו ל- endpoint, נבנה אותה ונעלה את ה-microservice הנוכחי לענן בעזרת שתי פעולות פשוטות:
rocketsam build all
rocketsam deploy

בהנחה שרשום success בסוף ה-deploy מזל טוב! הmicroservice שבנית זמין בענן.
ניתן לגלות את ה-url שבאמצעותו ניגש לפונקציה בעזרת ה-cli

ובאמת שניגש ל-url הזה תתגלה ההודעה שרשמנו:


ניתן לראות את ה-microservice ב-gui של AWS:

ואת הקוד שהועלה ל-s3

לבסוף, כדי להוריד את ה-microservice מהענן יש להריץ את הפעולה הבאה:


ברגע ש DELETE_IN_PROGRESS התחלף ב-REMOVED, השירות שלנו כבר לא באוויר (התוכן ב-s3 עדיין שם, אותו ניתן למחוק ידנית).

ה-cli הוא work in progress, מוזמנים להציע שינויים ולעשות fork ב-github (ולעשות כוכב מאוד יעזור!)
https://github.com/nadav96/rocketsam

מאת: נדב גולדשטיין, מפתח צד-לקוח עם 4 אפליקציות פרודקשן מלאות (כולל יס פלנט וסינוורלד)

Thank you! Your submission has been received!
Oops! Something went wrong while submitting the form.
נדב גולדשטיין
בואו נעבוד ביחד
support@israelclouds.com
צרו קשר