תחילת העבודה עם ‎ .NET

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

מטרות

עלויות

במסמך הזה משתמשים ברכיבים הבאים של Google Cloud, והשימוש בהם כרוך בתשלום:

ההוראות במסמך הזה נועדו לוודא שהשימוש במשאבים יהיה במסגרת המגבלות של התוכנית בחינם של Google Cloud. כדי להעריך את ההוצאות בהתאם לתחזית השימוש שלכם, אתם יכולים להיעזר במחשבון העלויות.

משתמשים חדשים של Google Cloud ? יכול להיות שאתם זכאים לתקופת ניסיון בחינם.

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

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

  1. נכנסים לחשבון Google Cloud . אם אתם משתמשים חדשים ב- Google Cloud, צרו חשבון כדי שתוכלו להעריך את הביצועים של המוצרים שלנו בתרחישים מהעולם האמיתי. לקוחות חדשים מקבלים בחינם גם קרדיט בשווי 300$ להרצה, לבדיקה ולפריסה של עומסי העבודה.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  5. Verify that billing is enabled for your Google Cloud project.

  6. כדי ליצור מסד נתונים של Firestore במצב Native, פועלים לפי השלבים הבאים:
    1. נכנסים לדף Firestore create database במסוף Google Cloud .

      מעבר ליצירת מסד נתונים ב-Firestore

    2. במסך Select a Cloud Firestore mode (בחירת מצב Cloud Firestore), לוחצים על Select Native Mode (בחירת מצב מקורי).
    3. בוחרים מיקום למסד הנתונים של Firestore. הגדרת המיקום הזו היא מיקום ברירת המחדל Google Cloud של משאבים בפרויקט Google Cloud . המיקום הזה משמש את השירותים בפרויקט שדורשים הגדרת מיקום, במיוחד את קטגוריית Cloud Storage שמוגדרת כברירת מחדל ואת אפליקציית Cloud Run.
    4. לוחצים על יצירת מסד נתונים.
  7. מפעילים את ממשקי ה-API של Cloud Run,‏ Cloud Storage JSON,‏ Cloud Logging ו-Error Reporting.

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

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

    הפעלת ממשקי ה-API

  8. משכפלים את מאגר הדוגמה ופותחים את אפליקציית הדוגמה ב-Cloud Shell:
    מעבר אל Cloud Shell

    ‫Cloud Shell נותנת גישה למשאבים שלכם ב-Google Cloud בממשק שורת פקודה ישירות מהדפדפן. Google Cloud

  9. כדי להוריד את הקוד לדוגמה ולעבור לספריית האפליקציה, לוחצים על המשך.
  10. ב-Cloud Shell, מגדירים את הכלי gcloud כך שישתמש בפרויקט החדש Google Cloud :

    # Configure gcloud for your project
    gcloud config set project PROJECT_ID

    מחליפים את PROJECT_ID במזהה הפרויקט שיצרתם באמצעות מסוף Google Cloud . Google Cloud

    Google Cloud CLI היא הדרך העיקרית לאינטראקציה עם משאבי Google Cloud משורת הפקודה. במדריך הזה נשתמש בכלי gcloud כדי לפרוס את האפליקציה ולעקוב אחריה.

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

  1. מריצים את האפליקציה:
    GOOGLE_CLOUD_PROJECT=PROJECT_ID dotnet run
    
    מחליפים את PROJECT_ID במזהה הפרויקט שיצרתם ב- Google Cloud .
  2. ב-Cloud Shell, לוחצים על תצוגה מקדימה באינטרנט , ובוחרים באפשרות תצוגה מקדימה ביציאה 8080. ייפתח חלון חדש עם האפליקציה הפועלת.

פריסת האפליקציה ב-Cloud Run

‫Google Cloud יש כמה אפשרויות להרצת הקוד. בדוגמה הזו, משתמשים ב-Cloud Run כדי לפרוס אפליקציה ניתנת להרחבה ב- Google Cloud. ב-Cloud Run אין צורך בניהול שרתים, כך שאתם יכולים להתמקד בכתיבת קוד. בנוסף, Cloud Run מתאים את עצמו לעומס באופן אוטומטי כדי לתמוך בעליות חדות בתעבורת הנתונים.

קובץ ה-Dockerfile מציין ל-Cloud Run איך להריץ את האפליקציה:

FROM mcr.microsoft.com/dotnet/core/aspnet:2.1
COPY . /app
WORKDIR /app
ENTRYPOINT ["dotnet", "Bookshelf.dll"]

Dockerfiles יכולים להיות מורכבים יותר, אבל ההגדרה הזו מתאימה להרבה אפליקציות.

‫Cloud Run מגדיר את משתנה הסביבה PORT כדי לציין לאפליקציה באיזו יציאה להאזין. הקוד של Program.cs כולל קוד לצפייה במשתנה PORT ולהאזנה ביציאה הזו:

using Google.Cloud.Diagnostics.AspNetCore;
using Microsoft.AspNetCore;
using Microsoft.AspNetCore.Hosting;
using System;

namespace Bookshelf
{
    public class Program
    {
        public static void Main(string[] args)
        {
            CreateWebHostBuilder(args).Build().Run();
        }

        public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
            WebHost.CreateDefaultBuilder(args)
                .UseGoogleDiagnostics(Startup.GetProjectId(), "Bookshelf", "0.01")
                .UseStartup<Startup>().UsePortEnvironmentVariable();
    }

    static class ProgramExtensions
    {
        // Google Cloud Run sets the PORT environment variable to tell this
        // process which port to listen to.
        public static IWebHostBuilder UsePortEnvironmentVariable(
            this IWebHostBuilder builder)
        {
            string port = Environment.GetEnvironmentVariable("PORT");
            if (!string.IsNullOrEmpty(port))
            {
                builder.UseUrls($"http://0.0.0.0:{port}");
            }
            return builder;
        }
    }
}

בחלון הטרמינל, פורסים את האפליקציה ב-Cloud Run באמצעות ה-CLI של gcloud:

  1. מבצעים build של האפליקציה באופן מקומי.
    dotnet publish -c Release
  2. במדריך הזה תלמדו איך ליצור קונטיינר Docker באמצעות Cloud Build ולפרסם אותו ב-Container Registry.
    gcloud builds submit --tag gcr.io/PROJECT_ID/bookshelf \
        bin/Release/netcoreapp2.1/publish
  3. מריצים את הקונטיינר באמצעות Cloud Run.
    gcloud run deploy bookshelf --region us-central1 --platform managed \
        --image gcr.io/PROJECT_ID/bookshelf --allow-unauthenticated
    עכשיו אפשר לראות את האפליקציה בכתובת ה-URL שמוצגת בפלט של gcloud run:
    Service [bookshelf] revision [bookshelf-00001] has been deployed and is serving traffic at
    https://bookshelf-lwuhslogjlnpofsxugoc.a.run.app
  4. מעתיקים את כתובת ה-URL לדפדפן האינטרנט כדי לראות את האפליקציה. דף הבית של אפליקציית מדף הספרים

מידע נוסף על פריסה ב-Cloud Run זמין במאמרי העזרה בנושא Cloud Run.

שמירת הנתונים באמצעות Firestore

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

‫Google Cloud יש כמה אפשרויות לאחסון הנתונים. בדוגמה הזו, משתמשים ב-Firestore כדי לאחסן את הנתונים של כל ספר. ‫Firestore הוא מסד נתונים מנוהל, בלי שרת (serverless) ולא יחסי (NoSQL) של מסמכים, שמאפשר לאחסן נתונים ולהריץ עליהם שאילתות. ‫Firestore מתרחב באופן אוטומטי כדי לענות על הצרכים של האפליקציה, ומתכווץ לאפס כשלא משתמשים בו. מוסיפים עכשיו את הספר הראשון.

  1. כדי ליצור ספר לאפליקציה שפרסתם, לוחצים על הוספת ספר.

    הוספת ספר לאפליקציית מדף הספרים
  2. בשדה Title, מזינים Moby Dick.
  3. בשדה Author (מחבר), מזינים Herman Melville.
  4. לוחצים על Save. עכשיו יש רשומה לאפליקציית Bookshelf.

    רשומה באפליקציית מדף הספרים של מובי דיק
  5. במסוף Google Cloud , עוברים אל Cloud Firestore. כניסה ל-Cloud Firestore

    הנתונים מופיעים ב-Firestore. אפליקציית Bookshelf מאחסנת כל ספר כמסמך Firestore עם מזהה ייחודי, וכל המסמכים האלה מאוחסנים באוסף Firestore. לצורך המדריך הזה, האוסף נקרא books.

    דוגמה למסמך ב-Firestore

‫Firestore מאחסן את הספרים באמצעות ספריית הלקוח של Firestore. דוגמה לאחזור מסמך Firestore:

using Google.Cloud.Firestore;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

namespace Bookshelf.Models
{
    class FirestoreBookStore : IBookStore
    {
        private FirestoreDb _firestore;
        private CollectionReference _books;

        public FirestoreBookStore(string projectId)
        {
            _firestore = FirestoreDb.Create(projectId);
            _books = _firestore.Collection("Books");
        }

מידע נוסף על השימוש ב-Firestore זמין במאמר בנושא הוספת נתונים ל-Firestore.

אחסון של קבצים שהועלו ב-Cloud Storage

אחרי שהוספתם ספר, הגיע הזמן להוסיף את תמונת השער של הספר. אי אפשר לאחסן קבצים במופעים. מסד נתונים הוא לא הבחירה הנכונה לקובצי תמונות. במקום זאת, משתמשים ב-Cloud Storage.

Cloud Storage הוא מאגר ה-Blob הראשי של Google Cloud. אתם יכולים להשתמש ב-Cloud Storage כדי לארח נכסי אפליקציה שאתם רוצים לשתף בין Google Cloud. כדי להשתמש ב-Cloud Storage, צריך ליצור קטגוריה של Cloud Storage, שהיא קונטיינר בסיסי לשמירת הנתונים.

  1. נכנסים לדף Cloud Storage Browser במסוף Google Cloud .

    כניסה לדף Cloud Storage Browser

  2. לוחצים על Create bucket.
  3. בתיבת הדו-שיח Create bucket, מזינים שם לקטגוריה על ידי הוספת Google Cloud מזהה הפרויקט למחרוזת _bucket, כך שהשם ייראה כמו YOUR_PROJECT_ID_bucket. השם הזה צריך לעמוד בדרישות למתן שמות של קטגוריות. אפשר להשאיר את כל שאר השדות בערכי ברירת המחדל שלהם.
  4. לוחצים על יצירה.
  5. אחרי שיוצרים את הקטגוריה, צריך להגדיר את האובייקטים כנגישים באופן ציבורי כדי שהמשתמשים יוכלו לראות אותם. במאמר הגדרת נתונים כציבוריים מוסבר איך להגדיר את האובייקטים כנגישים באופן ציבורי.
  6. לוחצים על עריכת הספר ובוחרים תמונה להעלאה ככריכת הספר. לדוגמה, אפשר להשתמש בתמונה הזו של דומיין ציבורי:
    כריכה של הספר מובי דיק
  7. לוחצים על Save. תועברו לדף הבית, שבו יש רשומה של אפליקציית מדף הספרים.
    רשומה באפליקציית מדף הספרים של מובי דיק

אפליקציית מדף הספרים שולחת קבצים שהועלו ל-Cloud Storage באמצעות ספריית הלקוח של Cloud Storage.

using Google.Cloud.Storage.V1;
using Microsoft.AspNetCore.Http;
using System;
using System.Threading.Tasks;
using System.Web;

namespace Bookshelf.Services
{
    public class ImageUploader
    {
        private readonly string _bucketName;
        private readonly StorageClient _storageClient;

        public ImageUploader(string bucketName)
        {
            _bucketName = bucketName;
            _storageClient = StorageClient.Create();
        }

מידע נוסף על השימוש ב-Cloud Storage זמין במאמר מבוא ל-Cloud Storage.

מעקב אחרי האפליקציה באמצעות Google Cloud Observability

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

מעקב אחרי יומנים באמצעות Cloud Logging

  1. ב Google Cloud, עוברים אל Logs Explorer.

    כניסה לדף Logs Explorer

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

    Stackdriver Log Viewer
  2. ברשימה הנפתחת משאב, בוחרים באפשרות Cloud Run Revision, bookshelf.

מעקב אחר שגיאות באמצעות Error Reporting

  1. נכנסים לדף Error Reporting במסוף Google Cloud .
    מעבר לדף Error Reporting
    בדף Error Reporting מוצגות שגיאות וחריגים באפליקציה, ואפשר להגדיר התראות לגביהם.
  2. בדפדפן, עוברים אל /Home/Throw כתובת ה-URL באפליקציה.
    לדוגמה, אם האפליקציה מתארחת בכתובת https://bookshelf-lwuhslogjlnpofsxugoc.a.run.app, אז עוברים אל https://bookshelf-lwuhslogjlnpofsxugoc.a.run.app/Home/Throw.

    פעולה זו יוצרת חריגה חדשה לבדיקה ושולחת אותה אל Google Cloud Observability.

  3. במסוף Google Cloud , חוזרים לדף Error Reporting. אחרי כמה רגעים השגיאה החדשה תופיע. לוחצים על טעינה אוטומטית מחדש כדי שלא תצטרכו לרענן את הדף באופן ידני.

    הודעת שגיאה מ-Error Reporting.

הסרת המשאבים

כדי להימנע מחיובים בחשבון Google Cloud בגלל השימוש במשאבים שנעשה במסגרת המדריך הזה, אפשר למחוק את הפרויקט שמכיל את המשאבים, או להשאיר את הפרויקט ולמחוק את המשאבים בנפרד.

מחיקת הפרויקט

  1. במסוף Google Cloud , נכנסים לדף Manage resources.

    כניסה לדף Manage resources

  2. ברשימת הפרויקטים, בוחרים את הפרויקט שרוצים למחוק ולוחצים על Delete.
  3. כדי למחוק את הפרויקט, כותבים את מזהה הפרויקט בתיבת הדו-שיח ולוחצים על Shut down.

המאמרים הבאים