Azure Functions עם פייתון בקלות



יכולת מאוד חזקה ומגניבה שקיימת ב Azure (ובשאר ספקי הענן) היא functions. בפוסט הזה נדבר על מה זה functions, למה זה טוב, מתי נרצה להשתמש בזה, ובנוסף נראה דוגמה פשוטה של functions ב Azure.

יש כל מיני דרכים ליצור function ב azure, היום אני אסביר על הקלה והגנרית בעיני - ה CLI.
azure cli הוא כלי עוצמתי מאוד שנותן לעשות עם api די אחיד ונוח כמעט כל פעולה שאנחנו רוצים לעשות על סביבת הענן שלנו.

מה זה Azure Functions?

Azure functions זה שירות ענן שמאפשר לנו הרצה on demand של קטע קוד שנבחר (פונקציה) בעוד שהוא מתחזק עבורנו את כל מה שנדרש על מנת להריץ את הפונקציה הזו.
כלומר, איננו צריכים לדאוג לתשתית או לגרסאות מעודכנות של התלויות שלנו. כל שעלינו צריכים לעשות זה לספק את הקונפיגורציה הנדרשת לנו ואת הקוד אותו אנחנו רוצים שירוץ, ו Azure דואג לכל השאר עבורנו. 

באמצעות functions ניתן לבנות web APIs, להריץ קוד בעת שינויים בבסיס נתונים, להרשם תורי הודעות ועוד...
יתרון נוסף שיש לפונקציות ענן הוא auto-scaling. באופן מובנה, כאשר יגיעו פניות רבות לפונקציה שלנו, מופעים נוספים של הפונקציה יקומו וכשירד הצורך המופעים ירדו.

הקונספט מתקשר כמובן ל serveless, משום שאיננו צריכים לדאוג לשרת או המכונה עליה ירוץ הקוד אלא רק לקוד עצמו.

Azure Functions עם פייתון

במדריך הנוכחי אני כותב את הפקודות באופן מותאם ל bash מטעמי נוחות

דרישות קדם

- פייתון בגרסה 3.7

נוודא שכל הגרסאות שלנו מעודכנות באמצעות הרצת הפקודות הבאות:
func --version (4.x)
az --version (2.4 )
python --version (3.7 )

יצירת הפונקציה הראשונה

1. תחילה נתחבר למשתמש שלנו בazure באמצעות הפקודה az login
2. ניצור סביבה וירטואלית בפייתון ונפעיל אותה:
python -m venv .venv
source .venv/bin/activate
3. כעת ניצור ״פרויקט פונקציה״ עם הפקודה func init first_py_func --python
נכנס לתיקייה (cd first_py_func) ונראה שנוצרה לנו תיקייה עם מספר קבצים בתוכם.
4. נוסיף פונקציה חדשה לפרויקט שלנו:
func new --name HttpExample --template "HTTP trigger" --authlevel "anonymous"
  • הפרמטר name יגיד מה שם הפונקציה שלנו (בקוד ובפורטל)
  • הפרמטר template יגיד לפי איזה טריגר אנחנו רוצים לגרום לפונקציה לרוץ (יש המון אפשרויות שאפשר לראות אם נריץ func template list)
  • הפרמטר authlevel יגיד איזו אותנטקציה נדרשת על מנת להריץ את הפונקציה (במקרה שלנו anonymous אומר שלא נדרשת אותנטיקציה)
כעת נוכל לראות שנוצרה תיקיה חדשה עם שם הפונקציה שלנו (HttpExample)

הסבר על הקבצים שנוצרו

נתרכז בקבצים החשובים שיותר סביר שנערוך ידנית בהמשך - ואלו הקבצים.
  1. requirements.txt - התלויות הפייתוניות שהפונקציה שלנו צריכה.
  2. HttpExample/__init__.py - שם תהיה פונקציית ה main שלנו והיא זו שתוטרג בהרצת הפונקציה.
    כברירת מחדל אפשר לראות שיש לנו פונקציה שיודעת לקבל http request, להוציא ממנה את הפרמטר name ולהחזיר אותו עם הודעה יפה.
    כמובן שאנחנו יכולים בקטע הקוד הזה להריץ כל מה שנרצה
  3. HttpExample/function.json - כאן נראה את ההגדרות של הפונקציה איתה אנחנו עובדים (רובן ניתנים לעריכה ביצירת הפונקציה)

בדיקת הפונקציה לוקאלית

ניתן להריץ את הפונקציה לוקאלית לבדיקה באמצעות הפקודה: func start

ולאחר מכן לראות לגלוש אל http://localhost:7071/api/HttpExample?name=TomerCode ולראות כתגובה שהפונקציה עבדה בהצלחה.

דחיפת הפונקציה ל Azure

בכדי לדחוף ל Azure את הפונקציה ועל מנת שתוכל לרוץ שם בהצלחה יש כל מיני משאבים (resources) שעלינו להגדיר קודם לכן. את זאת נעשה באמצעות az cli עליו דיברנו קודם.
(שימו לב שיתכן שאת שם הפונקציה תצטרכו לשנות - אני בחרתי בשם FirstPyFunc)


כדי לוודא שהכל נוצר כמו שצריך נתחבר לפורטל ב https://portal.azure.com ונחפש את שם הפונקציה שלנו בחיפוש הראשי (FirstPyFunc), בתיבת החיפוש אנחנו אמורים לראות מספר resources שנוצרו.

עד כה יצרנו את המשאבים התומכים עבור הפונקציה שלנו וכעת אפשר לדחוף את הפונקציה עצמה באמצעות הפקודה: func azure functionapp publish FirstPyFunc

ועכשיו נגלוש אל הפונקציה שלנו ונראה שהפלט מתקבל כראוי:

דרך נוספת לבדוק:
  1. היא להכנס תחת המשאב שיצרנו מסוג Function App
  2. נלחץ על Functions בתפריט בצד שמאל
  3. נלחץ על הפונקציה אותה אנחנו רוצים לבדוק
  4. נלחץ על Code Test בתפריט בשמאל
ואז נגיע אל מסך בו נוכל להריץ את הפונקציה שלנו ולראות את הלוגים שלה בפשטות.


סיכום

בפוסט דיברנו על מה היא פונקציית ענן והקמנו פונקציה אחת ב Azure שיודעת לענות לבקשות http.

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

נתראה בפוסט הבא :)


תגובות

פוסטים פופולריים מהבלוג הזה

מהם קבצי DLL ואיך להשתמש בהם?

תכנות מונחה עצמים | Dependency Inversion Principle

מה ההבדל בין אוטומציה לפיתוח רגיל