יצירה ופריסה של פונקציית HTTP Cloud Run באמצעות Python (דור ראשון)

במדריך הזה נסביר איך לכתוב פונקציית Cloud Run באמצעות זמן הריצה של Python. יש שני סוגים של פונקציות Cloud Run:

  • פונקציית HTTP, שמפעילים אותה מבקשות HTTP רגילות.
  • פונקציה מבוססת-אירועים, שמשמשת לטיפול באירועים מהתשתית של Cloud, כמו הודעות בנושא Pub/Sub או שינויים בקטגוריה של Cloud Storage.

בדוגמה מוצג איך ליצור פונקציית HTTP פשוטה.

לפני שמתחילים

  1. נכנסים לחשבון Google Cloud . אם אתם משתמשים חדשים ב- Google Cloud, צרו חשבון כדי שתוכלו להעריך את הביצועים של המוצרים שלנו בתרחישים מהעולם האמיתי. לקוחות חדשים מקבלים בחינם גם קרדיט בשווי 300$ להרצה, לבדיקה ולפריסה של עומסי העבודה.
  2. התקינו את ה-CLI של Google Cloud.

  3. אם אתם משתמשים בספק זהויות חיצוני (IdP), קודם אתם צריכים להיכנס ל-CLI של gcloud באמצעות המאגר המאוחד לניהול זהויות.

  4. כדי לאתחל את ה-CLI של gcloud, הריצו את הפקודה הבאה:

    gcloud init
  5. יוצרים או בוחרים Google Cloud פרויקט.

    תפקידים שנדרשים כדי לבחור או ליצור פרויקט

    • Select a project: כדי לבחור פרויקט לא צריך תפקיד IAM ספציפי – אפשר לבחור כל פרויקט שקיבלתם בו תפקיד.
    • יצירת פרויקט: כדי ליצור פרויקט, צריך את התפקיד Project Creator (יצירת פרויקטים) (roles/resourcemanager.projectCreator), שכולל את ההרשאה resourcemanager.projects.create. איך מקצים תפקידים
    • יוצרים Google Cloud פרויקט:

      gcloud projects create PROJECT_ID

      מחליפים את PROJECT_ID בשם של פרויקט Google Cloud שיוצרים.

    • בוחרים את הפרויקט שיצרתם: Google Cloud

      gcloud config set project PROJECT_ID

      מחליפים את PROJECT_ID בשם הפרויקט ב- Google Cloud .

  6. מוודאים שהחיוב מופעל בפרויקט Google Cloud .

  7. מפעילים את Cloud Functions API ואת Cloud Build API:

    תפקידים שנדרשים להפעלת ממשקי API

    כדי להפעיל ממשקי API, צריך את תפקיד ה-IAM 'אדמין של Service Usage' (roles/serviceusage.serviceUsageAdmin), שכולל את ההרשאה serviceusage.services.enable. איך מקצים תפקידים

    gcloud services enable cloudfunctions cloudbuild.googleapis.com
  8. התקינו את ה-CLI של Google Cloud.

  9. אם אתם משתמשים בספק זהויות חיצוני (IdP), קודם אתם צריכים להיכנס ל-CLI של gcloud באמצעות המאגר המאוחד לניהול זהויות.

  10. כדי לאתחל את ה-CLI של gcloud, הריצו את הפקודה הבאה:

    gcloud init
  11. יוצרים או בוחרים Google Cloud פרויקט.

    תפקידים שנדרשים כדי לבחור או ליצור פרויקט

    • Select a project: כדי לבחור פרויקט לא צריך תפקיד IAM ספציפי – אפשר לבחור כל פרויקט שקיבלתם בו תפקיד.
    • יצירת פרויקט: כדי ליצור פרויקט, צריך את התפקיד Project Creator (יצירת פרויקטים) (roles/resourcemanager.projectCreator), שכולל את ההרשאה resourcemanager.projects.create. איך מקצים תפקידים
    • יוצרים Google Cloud פרויקט:

      gcloud projects create PROJECT_ID

      מחליפים את PROJECT_ID בשם של פרויקט Google Cloud שיוצרים.

    • בוחרים את הפרויקט שיצרתם: Google Cloud

      gcloud config set project PROJECT_ID

      מחליפים את PROJECT_ID בשם הפרויקט ב- Google Cloud .

  12. מוודאים שהחיוב מופעל בפרויקט Google Cloud .

  13. מפעילים את Cloud Functions API ואת Cloud Build API:

    תפקידים שנדרשים להפעלת ממשקי API

    כדי להפעיל ממשקי API, צריך את תפקיד ה-IAM 'אדמין של Service Usage' (roles/serviceusage.serviceUsageAdmin), שכולל את ההרשאה serviceusage.services.enable. איך מקצים תפקידים

    gcloud services enable cloudfunctions cloudbuild.googleapis.com
  14. מכינים את סביבת הפיתוח.

    מעבר למדריך ההגדרה של Python

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

  1. יוצרים ספרייה במערכת המקומית לקוד הפונקציה:

    ‫Linux או Mac OS X

    mkdir ~/helloworld
    cd ~/helloworld
    

    Windows

    mkdir %HOMEPATH%\helloworld
    cd %HOMEPATH%\helloworld
    
  2. יוצרים קובץ main.py בספרייה helloworld עם התוכן הבא:

    
    import functions_framework
    
    
    from markupsafe import escape
    
    @functions_framework.http
    def hello_http(request):
        """HTTP Cloud Function.
        Args:
            request (flask.Request): The request object.
            <https://flask.palletsprojects.com/en/1.1.x/api/#incoming-request-data>
        Returns:
            The response text, or any set of values that can be turned into a
            Response object using `make_response`
            <https://flask.palletsprojects.com/en/1.1.x/api/#flask.make_response>.
        """
        request_json = request.get_json(silent=True)
        request_args = request.args
    
        if request_json and "name" in request_json:
            name = request_json["name"]
        elif request_args and "name" in request_args:
            name = request_args["name"]
        else:
            name = "World"
        return f"Hello {escape(name)}!"
    
    

    הפונקציה לדוגמה הזו מקבלת שם שסופק בבקשת ה-HTTP ומחזירה ברכה, או "Hello World!‎" אם לא סופק שם.

ציון יחסי תלות

יחסי תלות ב-Python מנוהלים באמצעות pip ומופיעים בקובץ מטא-נתונים בשם requirements.txt. הקובץ הזה צריך להיות באותה ספרייה שבה נמצא קובץ main.py שמכיל את קוד הפונקציה.

לא צריך ליצור requirements.txt כדי להריץ את הדוגמה הספציפית הזו, אבל נניח שרוצים להוסיף תלויות משלכם. כך עושים זאת:

  1. יוצרים קובץ requirements.txt בספרייה helloworld.

  2. מוסיפים את התלות של הפונקציה לקובץ requirements.txt, לדוגמה:

    # An example requirements file, add your dependencies below
    sampleproject==2.0.0
    

פריסת הפונקציה

כדי לפרוס את הפונקציה עם טריגר HTTP, מריצים את הפקודה הבאה בספרייה helloworld:

gcloud functions deploy hello_http --no-gen2 --runtime python314 --trigger-http --allow-unauthenticated

הדגל --allow-unauthenticated מאפשר להגיע לפונקציה ללא אימות. כדי לדרוש אימות, לא מציינים את הדגל.

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

  1. אחרי שהפונקציה מסיימת את הפריסה, רושמים את המאפיין httpsTrigger.url או מאתרים אותו באמצעות הפקודה הבאה:

    gcloud functions describe hello_http
    

    הוא אמור להיראות כך:

    https://GCP_REGION-PROJECT_ID.cloudfunctions.net/hello_http
  2. נכנסים לכתובת ה-URL הזו בדפדפן. אמורה להופיע ההודעה Hello World!‎.

    אפשר לנסות להעביר שם בבקשת ה-HTTP, למשל באמצעות כתובת ה-URL הבאה:

    https://GCP_REGION-PROJECT_ID.cloudfunctions.net/hello_http?name=NAME

    ההודעה "Hello NAME!‎" אמורה להופיע.

צפייה ביומנים

אפשר לראות את היומנים של פונקציות Cloud Run באמצעות Google Cloud CLI ובממשק המשתמש של Cloud Logging.

שימוש בכלי שורת הפקודה

כדי להציג את היומנים של הפונקציה באמצעות ה-CLI של gcloud, משתמשים בפקודה logs read ואחריה בשם הפונקציה:

gcloud functions logs read hello_http

הפלט אמור להיראות כך:

LEVEL  NAME        EXECUTION_ID  TIME_UTC                 LOG
D      hello_http  pdb5ys2t022n  2019-09-18 23:29:09.791  Function execution started
D      hello_http  pdb5ys2t022n  2019-09-18 23:29:09.798  Function execution took 7 ms, finished with status code: 200

שימוש בלוח הבקרה של הרישום ביומן

אפשר גם לצפות ביומנים של פונקציות Cloud Run ממסוףGoogle Cloud .