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

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

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

מה תפַתחו

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

79cd6c68e83f7fea.png

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

e28ca9ea4abb1457.png

מה תלמדו

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

מה תצטרכו

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

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

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

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

הגדרת סביבה בקצב עצמי

אם עדיין אין לכם חשבון Google (Gmail או G Suite), אתם צריכים ליצור חשבון. בין אם כבר יש לכם חשבון Google ובין אם לא, כדאי לכם לנצל את תקופת הניסיון בחינם בשווי 300$.

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

f414a63d955621a7.png

3415e861c09cd06a.png

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

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

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

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

12a838f78a10144a.png

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

27616683b64ce34a.png

מזינים weatherData בשדה Dataset, בוחרים מיקום שבו הוא יישמר ולוחצים על OK.

62cfcbd1add830ea.png

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

3d7bff6f9843fa3c.png

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

eef352614a5696a7.png

אמורה להתקבל תוצאה כזו…

7d10e5ab8c6d6a0d.png

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

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

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

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

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

331ad71e8a1ea7b.png

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

9f6fca9dc8684801.png

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

643670164e9fae12.png

מזינים weatherdata כשם הנושא ולוחצים על Create (יצירה).

d7b049bc66a34db6.png

הנושא החדש אמור להופיע

7c385759f65a1031.png

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

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

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

במסוף Cloud, בוחרים באפשרות IAM & Admin (ניהול הרשאות גישה ואדמין) ואז באפשרות Service accounts (חשבונות שירות).

8e2f8a1428d0feca.png

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

60892b564e0ac140.png

בתפריט הנפתח Role (תפקיד), בוחרים בתפקיד Pub/Sub Publisher (פרסום ב-Pub/Sub).

31f8c944af11270e.png

מקלידים שם לחשבון השירות (iotWeatherPublisher), מסמנים את תיבת הסימון Furnish a new private key (הקצאת מפתח פרטי חדש), מוודאים שסוג המפתח מוגדר ל-JSON ולוחצים על Create (יצירה).

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 Console, בוחרים באפשרות Cloud Functions.

a14ac2e4f03bf831.png

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

40ba0a08430e0e8a.png

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

5d82d8faeffa55bf.png

בשדה Name (שם), מקלידים function-weatherPubSubToBQ. בקטע Trigger, בוחרים באפשרות Cloud Pub/Sub topic ובתפריט הנפתח Topic בוחרים באפשרות weatherdata. כדי לערוך את קוד המקור, בוחרים באפשרות 'עורך מוטבע'. בכרטיסייה 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 באמצעות Functions.

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

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

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

a162e24426118c97.png

מתקינים בזהירות את פיני הכותרת של הפטיש ב-Raspberry Pi.

a3a697907fe3c9a9.png

מפרמטים את כרטיס ה-SD ומתקינים את תוכנת ההתקנה NOOBS (New Out Of Box Software) לפי השלבים שמוסברים כאן. מכניסים את כרטיס ה-SD ל-Raspberry Pi ומכניסים את ה-Raspberry Pi למארז שלו.

1e4e2459cd3333ec.png

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

392c2a9c85187094.png

Raspberry Pi pin

חיבור חיישן

פין 1 (3.3V)

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

Pin 3 (CPIO2)

SDI

Pin 5 (GPIO3)

SCK

Pin 9 (Ground)

GND

44322e38d467d66a.png

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

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

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

a16f0da19b93126.png

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

17f380b2d41751a8.png

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

14741a77fccdb7e7.png

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

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)"

עכשיו מוסיפים את המיקום שבו מאוחסנות חבילות Google Cloud SDK, כדי שכלי ההתקנה ידעו איפה לחפש כשהם מתבקשים להתקין את ה-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. ב-codelab הזה, הוא ישמש לגישה לקטגוריית האחסון כדי שיהיה אפשר להוריד בקלות את מפתח האבטחה ל-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 verification code:" (הזנת קוד האימות), לוחצים לחיצה ימנית עם העכבר ובוחרים באפשרות 'הדבקה'. לוחצים על Enter.

אם מוצגת ההודעה 'Pick cloud project to use:' (בחירת פרויקט בענן לשימוש), מזינים את המספר שמתאים לשם הפרויקט שבו השתמשתם ב-codelab ולוחצים על Enter.

אם מוצגת בקשה להפעיל את ה-API של Compute, לוחצים על 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 Storage (זו הסיבה לשם 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

אם הרכבתם חיישן מזג אוויר של Raspberry Pi IoT, מריצים את הסקריפט שיקרא את נתוני מזג האוויר ויעביר אותם אל 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, בוחרים באפשרות Storage ואז באפשרות Browser.

c4414fe61be320a9.png

לוחצים על הלחצן Create Bucket (יצירת מאגר).

cde91311b267fc65.png

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

1dad4cfbccfc96b1.png

ב-Cloud Console, בוחרים באפשרות Dataflow.

43ec245b47ae2e78.png

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

da55aaf2a1b0a0d0.png

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

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

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

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. ב-Cloud Console, עוברים אל BigQuery ‏ (bigquery.cloud.google.com).

85627127d58f1d2e.png

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

44dc0f765a69580c.png

מוסיפים כוכבית להצהרת ה-SQL כך שהיא תיראה כמו בדוגמה שלמטה, ואז לוחצים על הלחצן 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 (זה צריך להיות אותו חשבון שבו השתמשתם ב-codelab).

5ab03f341edc8964.png

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

22bcdbb5f5f1d30c.png

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

dc6b6b0ed9ced509.png

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

c60887e29c3bdf9b.png

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

5ec3888dfdd85095.png

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

7b8006a813b3defa.png

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

c7cd97354e1cde04.png

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

e0e82cb19921f835.png

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

c7620bfe734d546.png

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

9a7d3faa28996219.png

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

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, לוחצים על Topic, מסמנים את תיבת הסימון שליד הנושא weatherdata ואז לוחצים על Delete.

6fb0bba3163d9a32.png

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

9067fb2af9f907f4.png

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

a952dfeec49248c4.png

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

6310b1cc8da31a77.png