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

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

מה תלמדו
- איך משתמשים ב-Google Pub/Sub
- איך פורסים פונקציה של Cloud Functions ב-Google Cloud
- איך להשתמש ב-Google BigQuery
- איך יוצרים מרכז בקרה באמצעות Google Data Studio
- בנוסף, אם תבנו את חיישן ה-IoT, תלמדו גם איך להשתמש ב-Google Cloud SDK ואיך לאבטח קריאות לגישה מרחוק ל-Google Cloud Platform.
מה תצטרכו
- חשבון ב-Google Cloud Platform. משתמשים חדשים ב-Google Cloud Platform זכאים לתקופת ניסיון בחינם בשווי 300$.
אם רוצים לבנות את החלק של חיישן ה-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 (המזהה שמוצג למטה כבר נמצא בשימוש ולא יתאים לכם). חשוב לשים לב למזהה הפרויקט (כלומר, מזהה הפרויקט יהיה _____) כי תצטרכו אותו בהמשך.


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

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

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

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

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

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

עכשיו יש לכם מחסן נתונים שמוגדר לקבלת נתוני מזג האוויר.
4. יוצרים נושא Pub/Sub
Cloud Pub/Sub הוא פלטפורמה פשוטה, אמינה וניתנת להרחבה לניתוח נתונים בזמן אמת ולמערכות מחשוב מבוססות-אירועים. כתוצאה מכך, הוא מושלם לטיפול בהודעות IoT נכנסות, ואז מאפשר למערכות במורד הזרם לעבד אותן.
אם אתם עדיין בחלון של BigQuery, צריך לחזור ל-Cloud Console. אם סגרתם את Cloud Console, עוברים אל https://console.cloud.google.com
במסוף Cloud, בוחרים באפשרות Pub/Sub ואז באפשרות Topics.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

בשדה 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. לחיצה על הלחצן 'צור'

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

מעולה! הרגע קישרתם בין Pub/Sub ל-BigQuery באמצעות Functions.
6. הגדרת ציוד IoT (אופציונלי)
הרכבת Raspberry Pi והחיישן
אם יש יותר מ-7 סיכות, צריך לצמצם את הכותרת ל-7 סיכות בלבד. מלחמים את פיני הכותרת ללוח החיישן.

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

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

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

Raspberry Pi pin | חיבור חיישן |
פין 1 (3.3V) | מספר זיהוי רכב |
Pin 3 (CPIO2) | SDI |
Pin 5 (GPIO3) | SCK |
Pin 9 (Ground) | GND |

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

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

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

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

מקלידים את הפקודה הבאה כדי לוודא שהחיישן מחובר בצורה נכונה.
sudo i2cdetect -y 1
התוצאה צריכה להיראות כך – חשוב לוודא שהיא 77.

התקנת 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.

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

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

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

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

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

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

השלמת עבודת Dataflow אמורה להימשך כדקה.

8. בדיקה שהנתונים מוזרמים
יומנים של Cloud Functions
מוודאים שהפונקציה של Cloud Functions מופעלת על ידי Pub/Sub
gcloud beta functions logs read function-weatherPubSubToBQ
ביומנים צריך להופיע שהפונקציה מופעלת, שהנתונים מתקבלים ושהם מוכנסים ל-BigQuery

נתוני BigQuery
בודקים שהנתונים מוזרמים לטבלה ב-BigQuery. ב-Cloud Console, עוברים אל BigQuery (bigquery.cloud.google.com).

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

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

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

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

אחרי שהנתונים זורמים, אפשר להתחיל ליצור לוח בקרה של ניתוח נתונים.
9. יצירת לוח בקרה ב-Data Studio
בעזרת Google Data Studio, הנתונים שלכם מסודרים בדוחות ובמרכזי בקרה אינפורמטיביים, נוחים לקריאה ולשיתוף, וניתנים להתאמה אישית.
בדפדפן האינטרנט, נכנסים לכתובת https://datastudio.google.com

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

ניקוי תלונות
אחרי שתסיימו להתנסות בנתוני מזג האוויר ובצינור הניתוח, תוכלו להסיר את המשאבים הפועלים.
אם יצרתם את חיישן ה-IoT, כדאי לכבות אותו. מקישים על Ctrl-C בחלון הטרמינל כדי לעצור את הסקריפט, ואז מקלידים את הפקודה הבאה כדי לכבות את Raspberry Pi
shutdown -h now
עוברים אל Cloud Functions, לוחצים על תיבת הסימון לצד function-weatherPubSubToBQ ואז לוחצים על Delete (מחיקה).

עוברים אל Pub/Sub, לוחצים על Topic, מסמנים את תיבת הסימון שליד הנושא weatherdata ואז לוחצים על Delete.

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

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

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