אז יש לכם רעיון לשרת - בחזון שלכם הוא יהיה 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
אז יש לכם רעיון לשרת - בחזון שלכם הוא יהיה 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
הודעתך לא התקבלה - נסה שוב מאוחר יותר
Oops! Something went wrong while submitting the form