פיתוח צינור נתונים ללא שרת (serverless): מהאינטרנט של הדברים לניתוח נתונים

1. סקירה כללית/מבוא

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

מה תפַתחו

ב-codelab הזה תלמדו איך ליצור צינור עיבוד נתוני מזג אוויר שמתחיל במכשיר אינטרנט של הדברים (IoT), משתמש בתור הודעות כדי לקבל ולספק נתונים, משתמש בפונקציה ללא שרת כדי להעביר את הנתונים למחסן נתונים ולאחר מכן יוצר מרכז בקרה שבו מוצג המידע. מכשיר Raspberry Pi עם חיישן מזג אוויר ישמש עבור מכשיר ה-IoT, ומספר רכיבים של Google Cloud Platform ייצרו את צינור הנתונים. פיתוח Raspberry Pi הוא חלק אופציונלי ב-codelab הזה, ואפשר להחליף את נתוני מזג האוויר בסטרימינג בסקריפט.

79cd6c68e83f7fea.png

אחרי שתשלימו את השלבים ב-Codelab הזה, יהיה לך צינור נתונים בסטרימינג שמזין לוח בקרה שמציג טמפרטורה, לחות, נקודת טל ולחץ אוויר.

e28ca9ea4abb1457.png

מה תלמדו

  • איך משתמשים ב-Google Pub/Sub
  • איך פורסים פונקציה ב-Google Cloud
  • איך משתמשים ב-Google BigQuery
  • איך יוצרים מרכז בקרה באמצעות Google Data Studio
  • בנוסף, אם מפתחים את חיישן IoT, לומדים גם איך להשתמש ב-Google Cloud SDK ואיך לאבטח קריאות גישה מרחוק אל Google Cloud Platform.

מה צריך להכין

אם רוצים ליצור את החלק של חיישן ה-IoT בקודלאב הזה במקום להשתמש בנתונים לדוגמה ובסקריפט, צריך גם את הפריטים הבאים (אפשר להזמין אותם כערכה מלאה או כחלקים נפרדים כאן)…

  • Raspberry Pi Zero W עם ספק כוח, כרטיס זיכרון SD ומארז
  • קורא כרטיסים מסוג USB
  • מפצל USB (כדי לאפשר חיבור של מקלדת ועכבר ליציאת ה-USB היחידה ב-Raspberry Pi)
  • חוטי פרויקטור מסוג נקבה-נקבה
  • כותרות פטיש ל-GPIO
  • חיישן BME280
  • ברזל הלחמה עם הלחמה

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

2. תהליך ההגדרה

הגדרת סביבה בקצב אישי

אם אין לכם עדיין חשבון Google (Gmail או G Suite), עליכם ליצור חשבון. לא משנה אם כבר יש לך חשבון Google או לא, הקפד ליהנות מתקופת הניסיון בחינם של 1,200 ש"ח!

נכנסים למסוף Google Cloud Platform ( console.cloud.google.com). אפשר להשתמש בפרויקט ברירת המחדל ("הפרויקט הראשון שלי") בשיעור ה-Lab הזה או ליצור פרויקט חדש. כדי ליצור פרויקט חדש, אפשר להשתמש בדף Manage resources. מזהה הפרויקט צריך להיות שם ייחודי בכל הפרויקטים ב-Google Cloud (המזהה שמוצג למטה כבר תפוס ולא יעבוד). כדאי לרשום את מזהה הפרויקט (כלומר, מזהה הפרויקט יהיה _____), כי יהיה צורך בו בהמשך.

f414a63d955621a7.png

3415e861c09cd06a.png

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

3. יצירת טבלה ב-BigQuery

BigQuery הוא מחסן נתונים (data warehouse) ללא שרת עם יכולת התאמה רחבה במיוחד ועלות נמוכה. הוא יתאים לאחסון נתונים שמועברים בסטרימינג ממכשירי IoT, וגם יאפשר למרכז הבקרה לניתוח נתונים לבצע שאילתות על המידע.

בואו ניצור טבלה שתכלול את כל נתוני מזג האוויר של IoT. בוחרים ב-BigQuery במסוף Cloud. הפעולה הזו תפתח את BigQuery בחלון חדש (אל תסגרו את החלון המקורי כי תצטרכו לגשת אליו שוב).

12a838f78a10144a.png

לוחצים על סמל החץ למטה שלצד שם הפרויקט ובוחרים באפשרות Create new dataset (יצירת מערך נתונים חדש)

27616683b64ce34a.png

מזינים 'weatherData' למערך הנתונים, בוחרים מיקום שבו הוא יישמר ולוחצים על 'אישור'.

62cfcbd1add830ea.png

לוחצים על הסימן '+' לצד מערך הנתונים כדי ליצור טבלה חדשה.

3d7bff6f9843fa3c.png

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

eef352614a5696a7.png

התוצאה אמורה להיראות כך...

7d10e5ab8c6d6a0d.png

עכשיו הגדרתם מחסן נתונים (data warehouse) לקבלת נתוני מזג האוויר.

4. יוצרים נושא Pub/Sub

Cloud Pub/Sub הוא תשתית פשוטה, אמינה וניתנת להתאמה לניתוח נתונים בזמן אמת ולמערכות מחשוב מבוססות-אירועים. לכן, הוא מושלם לטיפול בהודעות IoT נכנסות, ולאחר מכן לאפשר למערכות במורד הזרם לעבד אותן.

אם אתם עדיין בחלון של BigQuery, עוברים חזרה ל-Cloud Console. אם סגרתם את מסוף Cloud, עוברים לכתובת https://console.cloud.google.com

במסוף Cloud, בוחרים באפשרות Pub/Sub ואז באפשרות Topics.

331ad71e8a1ea7b.png

אם מופיעה ההודעה Enable API (הפעלת API), לוחצים על הלחצן Enable API (הפעלת API).

9f6fca9dc8684801.png

לוחצים על הלחצן 'יצירת נושא'.

643670164e9fae12.png

מזינים את "weatherdata" (נתוני מזג אוויר) בתור שם הנושא ולוחצים על 'יצירה'

d7b049bc66a34db6.png

הנושא החדש שיצרתם אמור להופיע.

7c385759f65a1031.png

עכשיו יש לכם נושא Pub/Sub כדי לפרסם בו הודעות IoT וגם לאפשר לתהליכים אחרים לגשת להודעות האלה.

פרסום מאובטח של הנושא

אם אתם מתכננים לפרסם הודעות בנושא Pub/Sub ממשאבים מחוץ למסוף Google Cloud (למשל חיישן IoT), תצטרכו לשלוט בצורה הדוקה יותר בגישה באמצעות חשבון שירות, וכדי להבטיח את האבטחה של החיבור תצטרכו ליצור אישור אמון.

במסוף Cloud, בוחרים באפשרות IAM &Admin ואז ב-Service accounts

8e2f8a1428d0feca.png

לוחצים על הלחצן Create service account (יצירת חשבון שירות).

60892b564e0ac140.png

בתפריט הנפתח Role, בוחרים את התפקיד 'פרסום הודעות ב-Pub/Sub'

31f8c944af11270e.png

מקלידים שם של חשבון שירות (iotWeatherPublisher), מסמנים את התיבה 'ריהוט מפתח פרטי חדש', מוודאים שסוג המפתח מוגדר כ-JSON ולוחצים על 'יצירה'.

7e3f9d7e56a44796.png

ההורדה של מפתח האבטחה תתבצע באופן אוטומטי. יש רק מפתח אחד, לכן חשוב לא לאבד אותו. לחצו על 'סגור'.

60a7da32dd85ba73.png

אמור להופיע חשבון שירות שנוצר ומזהה מפתח שמשויך אליו.

b25f6f5629fe8fd7.png

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

c4414fe61be320a9.png

לחיצה על הלחצן Create Bucket

cde91311b267fc65.png

בוחרים שם לקטגוריית האחסון (השם חייב להיות ייחודי בכל העולם בכל Google Cloud) ולוחצים על הלחצן Create

28c10e41b401f479.png

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

a0f6d069d42cec4b.png

בסיום ההעלאה של המפתח, הוא אמור להופיע בדפדפן של Cloud Storage.

55b25c8b9d73ec19.png

חשוב לזכור את השם של קטגוריית האחסון ואת שם הקובץ של מפתח האבטחה.

5. יצירת פונקציה של Cloud Functions

מחשוב ענן מאפשר מודלים של מחשוב ללא שרת (serverless) שבהם ניתן להפיק לוגיקה על פי דרישה בתגובה לאירועים שמקורם מכל מקום. בשיעור ה-Lab הזה, פונקציה של Cloud Functions תופעל בכל פעם שהודעה מתפרסמת בנושא מזג האוויר, תקרא את ההודעה ואז תאחסן אותה ב-BigQuery.

במסוף Cloud, בוחרים באפשרות Cloud Functions.

a14ac2e4f03bf831.png

אם מופיעה הודעה לגבי API, לוחצים על הלחצן Enable API (הפעלת ה-API).

40ba0a08430e0e8a.png

לוחצים על הלחצן 'יצירת פונקציה'.

5d82d8faeffa55bf.png

בשדה 'שם', מקלידים function-weatherPubSubToBQ. בשדה Trigger (טריגר), בוחרים בנושא Cloud Pub/Sub ובתפריט הנפתח של הנושא, בוחרים באפשרות weather (נתוני מזג אוויר). לקוד מקור, בוחרים באפשרות עורך מוטבע. בכרטיסייה Index.js, מדביקים את הקוד הבא מעל לתוכן בהתחלה. חשוב לשנות את הקבועים של projectId, datasetId ו-tableId כך שיתאימו לסביבה שלכם.

/**
 * Background Cloud Function to be triggered by PubSub.
 *
 * @param {object} event The Cloud Functions event.
 * @param {function} callback The callback function.
 */
exports.subscribe = function (event, callback) {
  const BigQuery = require('@google-cloud/bigquery');
  const projectId = "myProject"; //Enter your project ID here
  const datasetId = "myDataset"; //Enter your BigQuery dataset name here
  const tableId = "myTable"; //Enter your BigQuery table name here -- make sure it is setup correctly
  const PubSubMessage = event.data;
  // Incoming data is in JSON format
  const incomingData = PubSubMessage.data ? Buffer.from(PubSubMessage.data, 'base64').toString() : "{'sensorID':'na','timecollected':'1/1/1970 00:00:00','zipcode':'00000','latitude':'0.0','longitude':'0.0','temperature':'-273','humidity':'-1','dewpoint':'-273','pressure':'0'}";
  const jsonData = JSON.parse(incomingData);
  var rows = [jsonData];

  console.log(`Uploading data: ${JSON.stringify(rows)}`);

  // Instantiates a client
  const bigquery = BigQuery({
    projectId: projectId
  });

  // Inserts data into a table
  bigquery
    .dataset(datasetId)
    .table(tableId)
    .insert(rows)
    .then((foundErrors) => {
      rows.forEach((row) => console.log('Inserted: ', row));

      if (foundErrors && foundErrors.insertErrors != undefined) {
        foundErrors.forEach((err) => {
            console.log('Error: ', err);
        })
      }
    })
    .catch((err) => {
      console.error('ERROR:', err);
    });
  // [END bigquery_insert_stream]


  callback();
};

בכרטיסייה package.json, מדביקים את הקוד הבא מעל לקוד ה-placeholder שמופיע

{
  "name": "function-weatherPubSubToBQ",
  "version": "0.0.1",
  "private": true,
  "license": "Apache-2.0",
  "author": "Google Inc.",
  "dependencies": {
    "@google-cloud/bigquery": "^0.9.6"
  }
}

אם הפונקציה לביצוע מוגדרת כ-'HelloWorld', משנים אותה ל-'subscribe'. לחיצה על הלחצן 'צור'

3266d5268980a4db.png

יידרשו כ-2 דקות עד שהפונקציה תראה שהיא פרוסה

26f45854948426d0.png

מעולה! חיברת עכשיו את Pub/Sub ל-BigQuery דרך פונקציות.

6. הגדרת חומרת IoT (אופציונלי)

הרכבת Raspberry Pi והחיישן

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

a162e24426118c97.png

מתקינים בזהירות את הפינים של הלחצן הקדמי ב-Raspberry Pi.

a3a697907fe3c9a9.png

מפרמטים את כרטיס ה-SD ומתקינים את מנהל ההתקנה NOOBS (תוכנה חדשה מחוץ לאריזה) לפי השלבים שמפורטים כאן. מכניסים את כרטיס ה-SD ל-Raspberry Pi ומניחים את Raspberry Pi לנרתיק הטעינה שלו.

1e4e2459cd3333ec.png

משתמשים בחוטים של מטריצת החיבורים כדי לחבר את החיישן ל-Raspberry Pi לפי התרשים הבא.

392c2a9c85187094.png

סיכה של Raspberry Pi

חיבור בין חיישנים

סיכה 1 (3.3V)

מספר זיהוי רכב

פין 3 (CPIO2)

SDI

Pin 5 (GPIO3)

SCK

סיכה 9 (יבשתי)

GND

44322e38d467d66a.png

מחברים את המסך (באמצעות מחבר Mini-HDMI), המקלדת/העכבר (עם מפצל ה-USB) ולבסוף, מתאם המתח.

הגדרת Raspberry Pi והחיישן

אחרי שהפעלת Raspberry Pi מסתיימת, בוחרים ב-Raspbian כמערכת ההפעלה הרצויה, מוודאים שהשפה הרצויה נכונה ולוחצים על 'התקנה' (סמל הדיסק הקשיח בפינה הימנית העליונה של החלון).

a16f0da19b93126.png

לוחצים על סמל ה-Wi-Fi (בפינה השמאלית העליונה של המסך) ובוחרים רשת. אם זו רשת מאובטחת, צריך להזין את הסיסמה (מפתח ששותף מראש).

17f380b2d41751a8.png

לוחצים על סמל פטל (בצד ימין למעלה במסך), בוחרים באפשרות 'העדפות' ואז באפשרות 'הגדרת Raspberry Pi'. בכרטיסייה 'ממשקים', מפעילים את I2C. בכרטיסייה 'לוקליזציה', מגדירים את הלוקאל ואת אזור הזמן. אחרי הגדרת אזור הזמן, מאפשרים ל-Raspberry Pi לפעול מחדש.

14741a77fccdb7e7.png

אחרי שההפעלה מחדש מסתיימת, לוחצים על סמל Terminal כדי לפתוח חלון טרמינל.

9df6f228f6a31601.png

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

  sudo i2cdetect -y 1

התוצאה אמורה להיראות כך – ודאו שכתוב 77.

cd35cd97bee8085a.png

התקנת Google Cloud SDK

כדי להשתמש בכלים בפלטפורמת Google Cloud, צריך להתקין את Google Cloud SDK ב-Raspberry Pi. ערכת ה-SDK כוללת את הכלים הנדרשים לניהול ולשימוש ב-Google Cloud Platform, והיא זמינה בכמה שפות תכנות.

פותחים חלון טרמינל ב-Raspberry Pi, אם הוא עדיין לא פתוח, ומגדירים משתנה סביבה שיתאים את גרסת ה-SDK למערכת ההפעלה ב-Raspberry Pi.

  export CLOUD_SDK_REPO="cloud-sdk-$(lsb_release -c -s)"

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

  echo "deb http://packages.cloud.google.com/apt $CLOUD_SDK_REPO main" |  sudo tee -a /etc/apt/sources.list.d/google-cloud-sdk.list

מוסיפים את המפתח הציבורי מאוסף החבילות של Google כדי ש-Raspberry Pi יבדוק את האבטחה ויאמין לתוכן במהלך ההתקנה

  curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -

צריך לוודא שכל התוכנות ב-Raspberry Pi מעודכנות ולהתקין את הליבה של Google Cloud SDK

  sudo apt-get update && sudo apt-get install google-cloud-sdk

כשמוצגת השאלה 'האם ברצונך להמשיך?', מקישים על Enter.

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

  pip install tendo

מוודאים שהחבילות של Google Cloud PubSub ו-OAuth2 ל-Python מותקנות ומעודכנות באמצעות מנהל החבילות של Python

  sudo pip install --upgrade google-cloud-pubsub
  sudo pip install --upgrade oauth2client

איך מפעילים את Google Cloud SDK

ה-SDK מאפשר גישה מרחוק מאומתת ל-Google Cloud. הוא ישמש כדי לגשת לקטגוריית האחסון כדי שיהיה אפשר להוריד את מפתח האבטחה ל-Raspberry Pi.

משורת הפקודה ב-Raspberry Pi, מקישים על

  gcloud init --console-only

כשתופיע השאלה 'האם ברצונך להתחבר (Y/n)?', מקישים על Enter.

כשמוצגת ההודעה 'צריך לעבור לקישור הבא בדפדפן:' ואחריה כתובת URL ארוכה שמתחילה ב-https://accounts.google.com/o/oauth?‎..., מעבירים את העכבר מעל כתובת ה-URL, לוחצים לחיצה ימנית ובוחרים באפשרות 'העתקת כתובת ה-URL'. לאחר מכן פותחים את דפדפן האינטרנט (סמל הגלובוס הכחול בפינה הימנית העליונה של המסך), לוחצים לחיצה ימנית על סרגל הכתובות ולוחצים על 'הדבקה'.

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

תוצג הודעה על כך ש-Google Cloud SDK רוצה לגשת לחשבון Google שלכם. לוחצים על הלחצן 'אישור'.

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

אם מופיעה הבקשה "Choose Cloud project to use:", מזינים את המספר של הפרויקט שבו השתמשתם ב-Codelab הזה ואז מקישים על Enter.

אם מופיעה בקשה להפעיל את Compute API, לוחצים על הלחצן Enter כדי להפעיל אותו. לאחר מכן, תתבקשו לקבוע את ההגדרות של Google Compute Engine. מקישים על Enter. תוצג לכם רשימה של אזורים או תחומים פוטנציאליים – בוחרים אזור או תחום שנמצאים קרוב אליכם, מזינים את המספר המתאים ומקישים על Enter.

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

התקנת התוכנה של החיישן והסקריפט של מזג האוויר

משורת הפקודה ב-Raspberry Pi, משכפלים את החבילות הדרושות לקריאת מידע מסיכות הקלט/פלט.

  git clone https://github.com/adafruit/Adafruit_Python_GPIO

התקנת החבילות שהורדתם

  cd Adafruit_Python_GPIO

  sudo python setup.py install

  cd ..

שכפול של קוד הפרויקט שמפעיל את חיישן מזג האוויר

  git clone https://github.com/googlecodelabs/iot-data-pipeline

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

  cd iot-data-pipeline/third_party/Adafruit_BME280

  mv Adafruit_BME280.py ../..

  cd ../..

עורכים את הסקריפט באמצעות הקלדה...

  nano checkWeather.py

משנים את הפרויקט למזהה הפרויקט ואת הנושא לשם של נושא ה-Pub/Sub (המזהה והשם צוינו בקטעים 'הכנות' ו'יצירת נושא Pub/Sub' בקודלאב הזה).

משנים את הערכים של sensorID,‏ sensorZipCode,‏ sensorLat ו-sensorLong לערך הרצוי. ערכי קו הרוחב וקו האורך של מיקום או כתובת ספציפיים מופיעים כאן.

כשמסיימים לבצע את השינויים הנדרשים, מקישים על Ctrl-X כדי לצאת מעורך nano. מקישים על Y כדי לאשר.

# constants - change to fit your project and location
SEND_INTERVAL = 10 #seconds
sensor = BME280(t_mode=BME280_OSAMPLE_8, p_mode=BME280_OSAMPLE_8, h_mode=BME280_OSAMPLE_8)
credentials = GoogleCredentials.get_application_default()
project="myProject" #change this to your Google Cloud project id
topic = "myTopic" #change this to your Google Cloud PubSub topic name
sensorID = "s-Googleplex"
sensorZipCode = "94043"
sensorLat = "37.421655"
sensorLong = "-122.085637"

התקנת מפתח האבטחה

מעתיקים את מפתח האבטחה (מהקטע 'פרסום מאובטח לנושא') ל-Raspberry Pi.

אם השתמשתם ב-SFTP או ב-SCP כדי להעתיק את מפתח האבטחה מהמכונה המקומית ל-Raspberry Pi (לספרייה ‎/home/pi), תוכלו לדלג על השלב הבא ולעבור ישירות לייצוא הנתיב.

אם הוספתם את מפתח האבטחה לקטגוריית אחסון, תצטרכו לזכור את השם של קטגוריית האחסון ואת שם הקובץ. משתמשים בפקודה gsutil כדי להעתיק את מפתח האבטחה. פקודה זו יכולה לגשת לאחסון של Google (למה היא נקראת gsutil ולמה הנתיב לקובץ מתחיל ב-gs://). חשוב לשנות את הפקודה הבאה כדי לקבל את שם הקטגוריה ושם הקובץ.

  gsutil cp gs://nameOfYourBucket/yourSecurityKeyFilename.json .

אמורה להופיע הודעה על כך שהקובץ מועתק, ואז הודעה על כך שהפעולה הושלמה.

משורת הפקודה ב-Raspberry Pi, מייצאים נתיב למפתח האבטחה (משנים את שם הקובץ בהתאם לשם שיש לכם)

  export GOOGLE_APPLICATION_CREDENTIALS=/home/pi/iot-data-pipeline/yourSecurityKeyFilename.json

עכשיו יש לכם חיישן מזג אוויר של IoT מוכן לשדר נתונים ל-Google Cloud.

7. הפעלת צינור הנתונים

ייתכן שיהיה צורך להפעיל את Compute API

סטרימינג של נתונים מ-Raspberry Pi

אם יצרתם חיישן מזג אוויר ב-IoT של Raspberry Pi, עליכם להפעיל את הסקריפט שיקרא את נתוני מזג האוויר וידחו אותם אל Google Cloud Pub/Sub. אם אתם לא נמצאים בספרייה ‎/home/pi/iot-data-pipeline, צריך לעבור אליה קודם.

  cd /home/pi/iot-data-pipeline

התחלת התסריט של מזג האוויר

  python checkWeather.py

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

סטרימינג של נתונים מדומים

אם לא פיתחתם את חיישן מזג האוויר ב-IoT, תוכלו לדמות את סטרימינג הנתונים באמצעות מערך נתונים ציבורי שנשמר ב-Google Cloud Storage ולהזין אותו לנושא Pub/Sub הקיים. ייעשה שימוש ב-Google Dataflow ובתבנית ש-Google סיפקה לקריאה מ-Cloud Storage ופרסום ב-Pub/Sub.

כחלק מהתהליך, צריך ליצור ל-Dataflow מיקום אחסון זמני. לכן צריך ליצור קטגוריית אחסון למטרה הזו.

במסוף Cloud, לוחצים על 'אחסון' ואז על 'דפדפן'.

c4414fe61be320a9.png

לחיצה על הלחצן Create Bucket

cde91311b267fc65.png

בוחרים שם לקטגוריית האחסון (חשוב לזכור שזה חייב להיות שם ייחודי גלובלי בכל Google Cloud) ולוחצים על הלחצן Create. חשוב לזכור את השם של קטגוריית האחסון הזו, כי הוא יהיה נחוץ לכם בקרוב.

1dad4cfbccfc96b1.png

במסוף Cloud, בוחרים באפשרות Dataflow.

43ec245b47ae2e78.png

לוחצים על 'יצירת משימה מתבנית' (בחלק העליון של המסך).

da55aaf2a1b0a0d0.png

ממלאים את פרטי המשרה כפי שמוצג בהמשך, ושימו לב לפרטים הבאים:

  • יש להזין שם משימה של dataflow-gcs-to-pubsub
  • האזור אמור להיבחר באופן אוטומטי בהתאם למקום שבו הפרויקט מתארח, ואין צורך לשנות אותו.
  • בחירת תבנית של Cloud Dataflow של טקסט GCS ל-Cloud Pub/Sub
  • בשביל קובצי קלט של Cloud Storage, מזינים gs://codelab-iot-data-pipeline-sampleweatherdata/*.json (זהו מערך נתונים ציבורי)
  • בנושא Pub/Sub של הפלט, הנתיב המדויק יהיה תלוי בשם הפרויקט, והוא ייראה בערך כך: "projects/yourProjectName/topics/weatherdata".
  • מגדירים את המיקום הזמני לשם הקטגוריה ב-Google Cloud Storage שיצרתם יחד עם קידומת של שם הקובץ 'tmp'. הוא אמור להיראות כך: "gs://myStorageBucketName/tmp".

אחרי שממלאים את כל הפרטים (ראו בהמשך), לוחצים על הלחצן Run job (הרצת המשימה).

5f8ca16672f19d9b.png

המשימה ב-Dataflow אמורה להתחיל לפעול.

e020015c369639ad.png

השלמת המשימה ב-Dataflow תימשך כדקה.

218a3ff7197dcf75.png

8. בדיקה שהנתונים מועברים

יומני Cloud Functions

מוודאים שהפונקציה של Cloud Functions מופעלת על ידי Pub/Sub

  gcloud beta functions logs read function-weatherPubSubToBQ

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

d88f7831dabc8b3f.png

נתונים מ-BigQuery

בודקים שהנתונים מועברים לטבלה ב-BigQuery. נכנסים ל-BigQuery (bigquery.cloud.google.com) דרך מסוף Cloud.

85627127d58f1d2e.png

מתחת לשם הפרויקט (בצד שמאל של החלון), לוחצים על מערך הנתונים (נתוני מזג אוויר), ואז על הטבלה (weatherDataTable) ואז לוחצים על הלחצן 'טבלת שאילתות'

44dc0f765a69580c.png

מוסיפים כוכבית להצהרת ה-SQL כך שהיא תיראה כך: SELECT * FROM… כפי שמוצג בהמשך, ואז לוחצים על הלחצן RUN QUERY (הרצת השאילתה).

b3a001e11c2902f2.png

אם מופיעה בקשה, לוחצים על הלחצן 'הרצת שאילתה'.

2c894d091b789ca3.png

אם מוצגות תוצאות, סימן שהנתונים מועברים בצורה תקינה.

c8a061cebb7b528a.png

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

9. יצירת מרכז בקרה של Data Studio

ב-Google Data Studio, הנתונים מומרים לדוחות ולמרכזי בקרה אינפורמטיביים, שקל לקרוא, לשתף ולהתאים אישית.

בדפדפן האינטרנט, עוברים לכתובת https://datastudio.google.com

10f8c27060cd7430.png

בקטע 'יצירת דוח חדש', לוחצים על 'ריק' ואז על הלחצן 'שנתחיל?'.

df1404bc0047595e.png

מסמנים את התיבה כדי לאשר את התנאים, לוחצים על הלחצן 'הבא', בוחרים את האימיילים שרוצים לקבל ולוחצים על הלחצן 'סיום'. שוב, בקטע "יצירת דוח חדש", לוחצים על 'ריק'

55e91d3dd88b05ca.png

ללחוץ על הלחצן 'יצירת מקור נתונים חדש'

a22f3fac05774fc9.png

לוחצים על BigQuery, ואז על הלחצן Authorize (מתן הרשאה) ובוחרים את חשבון Google שבו רוצים להשתמש ב-Data Studio (זה אמור להיות אותו חשבון שבו השתמשתם בקודלאב).

5ab03f341edc8964.png

לוחצים על הלחצן 'אישור'.

22bcdbb5f5f1d30c.png

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

dc6b6b0ed9ced509.png

משנים את שדות הסוג כפי שמתואר בהמשך (כל השדות צריכים להיות מספרים, מלבד timecollected ו-sensorID). חשוב לזכור שאיסוף הזמן מוגדר כשעה בתאריך (ולא רק כתאריך). משנים את שדות הצבירה כפי שמוצג בהמשך (נקודות הטל, הטמפרטורה, הלחות והלחץ צריכים להיות ממוצעים, ולכל השאר צריך להגדיר את הערך 'None'). לוחצים על הלחצן 'יצירת דוח'.

c60887e29c3bdf9b.png

מאשרים בלחיצה על הלחצן 'הוספה לדוח'.

5ec3888dfdd85095.png

אם תתבקשו לבחור את חשבון Google שלכם, עשו זאת ולאחר מכן לחצו על הלחצן 'אישור' כדי לאפשר ל-Data Studio לאחסן את הדוחות ב-Google Drive.

7b8006a813b3defa.png

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

c7cd97354e1cde04.png

מציירים מלבן בפינה הימנית העליונה של הגיליון הריק. היא צריכה לתפוס כ-1⁄4 מהגיליון הריק הכולל.

e0e82cb19921f835.png

בצד שמאל של החלון, בוחרים בכרטיסייה 'סגנון'. משנים את האפשרות 'נתונים חסרים' מ'שורה לאפס' ל'פסיקים בין שורות'. בקטע 'ציר Y שמאלי', מוחקים את הערך 0 מ-Axis Min כדי לשנות אותו ל-(Auto).

c7620bfe734d546.png

לוחצים על התרשים בגיליון ומעתיקים ומדביקים (Ctrl-C/Ctrl-V) 3 פעמים. מיישרים את התרשימים כך שכל אחד מהם יתפוס ¼ מהפריסה.

9a7d3faa28996219.png

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

d29b21cac9e1ef5d.png

fda75a2f2a77a323.png

עכשיו יש לכם לוח בקרה בסיסי.

8f59e8f4d44b8552.png

10. מעולה!

יצרתם צינור עיבוד נתונים שלם! בתהליך הזה למדתם איך להשתמש ב-Google Pub/Sub, איך לפרוס פונקציה ללא שרת (serverless), איך להשתמש ב-BigQuery ואיך ליצור מרכז בקרה לניתוח נתונים באמצעות Data Studio. בנוסף, ראיתם איך אפשר להשתמש ב-Google Cloud SDK באופן מאובטח כדי להעביר נתונים ל-Google Cloud Platform. לבסוף, עכשיו יש לכם ניסיון מעשי עם תבנית ארכיטקטונית חשובה שיכולה להתמודד עם נפחים גדולים תוך שמירה על זמינות.

79cd6c68e83f7fea.png

ניקוי תלונות

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

אם יצרתם את חיישן IoT, עליכם לכבות אותו. לוחצים על Ctrl-C בחלון הטרמינל כדי להפסיק את הסקריפט, ואז מקלידים את הפקודה הבאה כדי לכבות את Raspberry Pi

  shutdown -h now

עוברים אל Cloud Functions, לוחצים על תיבת הסימון שלצד function-weatherPubSubToBQ ואז לוחצים על Delete.

ae95f4f7178262e0.png

עוברים אל Pub/Sub, לוחצים על 'נושא', מסמנים את התיבה שלצד הנושא weatherdata ולוחצים על 'מחיקה'.

6fb0bba3163d9a32.png

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

9067fb2af9f907f4.png

עוברים אל bigquery.cloud.google.com, לוחצים על החץ למטה לצד שם הפרויקט, לוחצים על החץ למטה שמשמאל למערך הנתונים weatherData ואז לוחצים על Delete dataset (מחיקת מערך הנתונים).

a952dfeec49248c4.png

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

6310b1cc8da31a77.png