1. סקירה כללית/מבוא
אפליקציות מרובות שכבות שמכילות אינטרנט, שרת אפליקציות ומסד נתונים הן הבסיס לפיתוח אינטרנט והן נקודת ההתחלה של הרבה אתרים, אבל לרוב הצלחה כזו מובילה לאתגרים שקשורים להתאמה לעומס, לשילוב ולזריזות. לדוגמה, איך אפשר לטפל בנתונים בזמן אמת, ואיך אפשר להפיץ אותם לכמה מערכות עסקיות מרכזיות? יחד עם הדרישות של אפליקציות בקנה מידה אינטרנטי, יצרנו את הצורך במערכת מבוזרת להעברת הודעות, ויצרנו דפוס ארכיטקטוני של שימוש בצינורות נתונים כדי להשיג מערכות עמידות בזמן אמת. לכן, חשוב מאוד למפתחים וגם לאדריכלים להבין איך לפרסם נתונים בזמן אמת במערכת מבוזרת להעברת הודעות, ואיך לפתח צינור נתונים.
מה תפַתחו
ב-codelab הזה תלמדו איך ליצור צינור עיבוד נתוני מזג אוויר שמתחיל במכשיר אינטרנט של הדברים (IoT), משתמש בתור הודעות כדי לקבל ולספק נתונים, משתמש בפונקציה ללא שרת כדי להעביר את הנתונים למחסן נתונים ולאחר מכן יוצר מרכז בקרה שבו מוצג המידע. מכשיר Raspberry Pi עם חיישן מזג אוויר ישמש עבור מכשיר ה-IoT, ומספר רכיבים של Google Cloud Platform ייצרו את צינור הנתונים. פיתוח Raspberry Pi הוא חלק אופציונלי ב-codelab הזה, ואפשר להחליף את נתוני מזג האוויר בסטרימינג בסקריפט.
אחרי שתשלימו את השלבים ב-Codelab הזה, יהיה לך צינור נתונים בסטרימינג שמזין לוח בקרה שמציג טמפרטורה, לחות, נקודת טל ולחץ אוויר.
מה תלמדו
- איך משתמשים ב-Google Pub/Sub
- איך פורסים פונקציה ב-Google Cloud
- איך משתמשים ב-Google BigQuery
- איך יוצרים מרכז בקרה באמצעות Google Data Studio
- בנוסף, אם מפתחים את חיישן IoT, לומדים גם איך להשתמש ב-Google Cloud SDK ואיך לאבטח קריאות גישה מרחוק אל Google Cloud Platform.
מה צריך להכין
- חשבון ב-Google Cloud Platform. משתמשים חדשים ב-Google Cloud Platform זכאים לתקופת ניסיון בחינם בשווי 300$.
אם רוצים ליצור את החלק של חיישן ה-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 (המזהה שמוצג למטה כבר תפוס ולא יעבוד). כדאי לרשום את מזהה הפרויקט (כלומר, מזהה הפרויקט יהיה _____), כי יהיה צורך בו בהמשך.
השלמת הקודלאב הזה לא אמורה לעלות יותר מכמה דולרים, אבל העלות עשויה להיות גבוהה יותר אם תחליטו להשתמש במשאבים נוספים או להשאיר אותם פועלים. חשוב לעבור על הקטע 'ניקוי' בסוף הקוד.
3. יצירת טבלה ב-BigQuery
BigQuery הוא מחסן נתונים (data warehouse) ללא שרת עם יכולת התאמה רחבה במיוחד ועלות נמוכה. הוא יתאים לאחסון נתונים שמועברים בסטרימינג ממכשירי IoT, וגם יאפשר למרכז הבקרה לניתוח נתונים לבצע שאילתות על המידע.
בואו ניצור טבלה שתכלול את כל נתוני מזג האוויר של IoT. בוחרים ב-BigQuery במסוף Cloud. הפעולה הזו תפתח את BigQuery בחלון חדש (אל תסגרו את החלון המקורי כי תצטרכו לגשת אליו שוב).
לוחצים על סמל החץ למטה שלצד שם הפרויקט ובוחרים באפשרות Create new dataset (יצירת מערך נתונים חדש)
מזינים 'weatherData' למערך הנתונים, בוחרים מיקום שבו הוא יישמר ולוחצים על 'אישור'.
לוחצים על הסימן '+' לצד מערך הנתונים כדי ליצור טבלה חדשה.
בשביל נתוני מקור, בוחרים יצירת טבלה ריקה. בשדה 'שם טבלת היעד', מזינים weatherDataTable. בקטע סכימה, לוחצים על הלחצן הוספת שדה עד שיוצגו 9 שדות בסך הכול. ממלאים את השדות כפי שמתואר בהמשך, ומוודאים שבוחרים גם את הסוג המתאים לכל שדה. בסיום, לוחצים על הלחצן יצירת טבלה.
התוצאה אמורה להיראות כך...
עכשיו הגדרתם מחסן נתונים (data warehouse) לקבלת נתוני מזג האוויר.
4. יוצרים נושא Pub/Sub
Cloud Pub/Sub הוא תשתית פשוטה, אמינה וניתנת להתאמה לניתוח נתונים בזמן אמת ולמערכות מחשוב מבוססות-אירועים. לכן, הוא מושלם לטיפול בהודעות IoT נכנסות, ולאחר מכן לאפשר למערכות במורד הזרם לעבד אותן.
אם אתם עדיין בחלון של BigQuery, עוברים חזרה ל-Cloud Console. אם סגרתם את מסוף Cloud, עוברים לכתובת https://console.cloud.google.com
במסוף Cloud, בוחרים באפשרות Pub/Sub ואז באפשרות Topics.
אם מופיעה ההודעה Enable API (הפעלת API), לוחצים על הלחצן Enable API (הפעלת API).
לוחצים על הלחצן 'יצירת נושא'.
מזינים את "weatherdata" (נתוני מזג אוויר) בתור שם הנושא ולוחצים על 'יצירה'
הנושא החדש שיצרתם אמור להופיע.
עכשיו יש לכם נושא Pub/Sub כדי לפרסם בו הודעות IoT וגם לאפשר לתהליכים אחרים לגשת להודעות האלה.
פרסום מאובטח של הנושא
אם אתם מתכננים לפרסם הודעות בנושא Pub/Sub ממשאבים מחוץ למסוף Google Cloud (למשל חיישן IoT), תצטרכו לשלוט בצורה הדוקה יותר בגישה באמצעות חשבון שירות, וכדי להבטיח את האבטחה של החיבור תצטרכו ליצור אישור אמון.
במסוף Cloud, בוחרים באפשרות IAM &Admin ואז ב-Service accounts
לוחצים על הלחצן Create service account (יצירת חשבון שירות).
בתפריט הנפתח Role, בוחרים את התפקיד 'פרסום הודעות ב-Pub/Sub'
מקלידים שם של חשבון שירות (iotWeatherPublisher), מסמנים את התיבה 'ריהוט מפתח פרטי חדש', מוודאים שסוג המפתח מוגדר כ-JSON ולוחצים על 'יצירה'.
ההורדה של מפתח האבטחה תתבצע באופן אוטומטי. יש רק מפתח אחד, לכן חשוב לא לאבד אותו. לחצו על 'סגור'.
אמור להופיע חשבון שירות שנוצר ומזהה מפתח שמשויך אליו.
כדי שתוכלו לגשת למפתח בקלות בשלב מאוחר יותר, נאחסן אותו ב-Google Cloud Storage. במסוף Cloud, בוחרים באפשרות Storage ואז ב-Browser.
לחיצה על הלחצן Create Bucket
בוחרים שם לקטגוריית האחסון (השם חייב להיות ייחודי בכל העולם בכל Google Cloud) ולוחצים על הלחצן Create
מאתרים את מפתח האבטחה שהורדתם באופן אוטומטי וגוררים אותו או מעלים אותו לקטגוריית האחסון.
בסיום ההעלאה של המפתח, הוא אמור להופיע בדפדפן של Cloud Storage.
חשוב לזכור את השם של קטגוריית האחסון ואת שם הקובץ של מפתח האבטחה.
5. יצירת פונקציה של Cloud Functions
מחשוב ענן מאפשר מודלים של מחשוב ללא שרת (serverless) שבהם ניתן להפיק לוגיקה על פי דרישה בתגובה לאירועים שמקורם מכל מקום. בשיעור ה-Lab הזה, פונקציה של Cloud Functions תופעל בכל פעם שהודעה מתפרסמת בנושא מזג האוויר, תקרא את ההודעה ואז תאחסן אותה ב-BigQuery.
במסוף Cloud, בוחרים באפשרות Cloud Functions.
אם מופיעה הודעה לגבי API, לוחצים על הלחצן Enable API (הפעלת ה-API).
לוחצים על הלחצן 'יצירת פונקציה'.
בשדה 'שם', מקלידים 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'. לחיצה על הלחצן 'צור'
יידרשו כ-2 דקות עד שהפונקציה תראה שהיא פרוסה
מעולה! חיברת עכשיו את Pub/Sub ל-BigQuery דרך פונקציות.
6. הגדרת חומרת IoT (אופציונלי)
הרכבת Raspberry Pi והחיישן
אם יש יותר מ-7 סיכות, צריך לקצר את הכותרת ל-7 סיכות בלבד. מבצעים הלחמה של פינים של כותרת ללוח החיישן.
מתקינים בזהירות את הפינים של הלחצן הקדמי ב-Raspberry Pi.
מפרמטים את כרטיס ה-SD ומתקינים את מנהל ההתקנה NOOBS (תוכנה חדשה מחוץ לאריזה) לפי השלבים שמפורטים כאן. מכניסים את כרטיס ה-SD ל-Raspberry Pi ומניחים את Raspberry Pi לנרתיק הטעינה שלו.
משתמשים בחוטים של מטריצת החיבורים כדי לחבר את החיישן ל-Raspberry Pi לפי התרשים הבא.
סיכה של Raspberry Pi | חיבור בין חיישנים |
סיכה 1 (3.3V) | מספר זיהוי רכב |
פין 3 (CPIO2) | SDI |
Pin 5 (GPIO3) | SCK |
סיכה 9 (יבשתי) | GND |
מחברים את המסך (באמצעות מחבר Mini-HDMI), המקלדת/העכבר (עם מפצל ה-USB) ולבסוף, מתאם המתח.
הגדרת Raspberry Pi והחיישן
אחרי שהפעלת Raspberry Pi מסתיימת, בוחרים ב-Raspbian כמערכת ההפעלה הרצויה, מוודאים שהשפה הרצויה נכונה ולוחצים על 'התקנה' (סמל הדיסק הקשיח בפינה הימנית העליונה של החלון).
לוחצים על סמל ה-Wi-Fi (בפינה השמאלית העליונה של המסך) ובוחרים רשת. אם זו רשת מאובטחת, צריך להזין את הסיסמה (מפתח ששותף מראש).
לוחצים על סמל פטל (בצד ימין למעלה במסך), בוחרים באפשרות 'העדפות' ואז באפשרות 'הגדרת Raspberry Pi'. בכרטיסייה 'ממשקים', מפעילים את I2C. בכרטיסייה 'לוקליזציה', מגדירים את הלוקאל ואת אזור הזמן. אחרי הגדרת אזור הזמן, מאפשרים ל-Raspberry Pi לפעול מחדש.
אחרי שההפעלה מחדש מסתיימת, לוחצים על סמל Terminal כדי לפתוח חלון טרמינל.
מקלידים את הפקודה הבאה כדי לוודא שהחיישן מחובר בצורה תקינה.
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)"
עכשיו צריך להוסיף את המיקום שבו מאוחסנות חבילות ה-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, לוחצים על 'אחסון' ואז על 'דפדפן'.
לחיצה על הלחצן Create Bucket
בוחרים שם לקטגוריית האחסון (חשוב לזכור שזה חייב להיות שם ייחודי גלובלי בכל Google Cloud) ולוחצים על הלחצן Create. חשוב לזכור את השם של קטגוריית האחסון הזו, כי הוא יהיה נחוץ לכם בקרוב.
במסוף Cloud, בוחרים באפשרות Dataflow.
לוחצים על 'יצירת משימה מתבנית' (בחלק העליון של המסך).
ממלאים את פרטי המשרה כפי שמוצג בהמשך, ושימו לב לפרטים הבאים:
- יש להזין שם משימה של 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 (הרצת המשימה).
המשימה ב-Dataflow אמורה להתחיל לפעול.
השלמת המשימה ב-Dataflow תימשך כדקה.
8. בדיקה שהנתונים מועברים
יומני Cloud Functions
מוודאים שהפונקציה של Cloud Functions מופעלת על ידי Pub/Sub
gcloud beta functions logs read function-weatherPubSubToBQ
ביומני הפעילות אמורים להופיע דיווחים על כך שהפונקציה פועלת, שהנתונים מתקבלים והם מוכנסים ל-BigQuery.
נתונים מ-BigQuery
בודקים שהנתונים מועברים לטבלה ב-BigQuery. נכנסים ל-BigQuery (bigquery.cloud.google.com) דרך מסוף Cloud.
מתחת לשם הפרויקט (בצד שמאל של החלון), לוחצים על מערך הנתונים (נתוני מזג אוויר), ואז על הטבלה (weatherDataTable) ואז לוחצים על הלחצן 'טבלת שאילתות'
מוסיפים כוכבית להצהרת ה-SQL כך שהיא תיראה כך: SELECT * FROM… כפי שמוצג בהמשך, ואז לוחצים על הלחצן RUN QUERY (הרצת השאילתה).
אם מופיעה בקשה, לוחצים על הלחצן 'הרצת שאילתה'.
אם מוצגות תוצאות, סימן שהנתונים מועברים בצורה תקינה.
עכשיו, כשהנתונים מתחילים לזרום, אתם מוכנים ליצור לוח בקרה לניתוח נתונים.
9. יצירת מרכז בקרה של Data Studio
ב-Google Data Studio, הנתונים מומרים לדוחות ולמרכזי בקרה אינפורמטיביים, שקל לקרוא, לשתף ולהתאים אישית.
בדפדפן האינטרנט, עוברים לכתובת https://datastudio.google.com
בקטע 'יצירת דוח חדש', לוחצים על 'ריק' ואז על הלחצן 'שנתחיל?'.
מסמנים את התיבה כדי לאשר את התנאים, לוחצים על הלחצן 'הבא', בוחרים את האימיילים שרוצים לקבל ולוחצים על הלחצן 'סיום'. שוב, בקטע "יצירת דוח חדש", לוחצים על 'ריק'
ללחוץ על הלחצן 'יצירת מקור נתונים חדש'
לוחצים על BigQuery, ואז על הלחצן Authorize (מתן הרשאה) ובוחרים את חשבון Google שבו רוצים להשתמש ב-Data Studio (זה אמור להיות אותו חשבון שבו השתמשתם בקודלאב).
לוחצים על הלחצן 'אישור'.
בוחרים את שם הפרויקט, מערך הנתונים והטבלה. לאחר מכן לוחצים על הלחצן 'התחברות'.
משנים את שדות הסוג כפי שמתואר בהמשך (כל השדות צריכים להיות מספרים, מלבד timecollected ו-sensorID). חשוב לזכור שאיסוף הזמן מוגדר כשעה בתאריך (ולא רק כתאריך). משנים את שדות הצבירה כפי שמוצג בהמשך (נקודות הטל, הטמפרטורה, הלחות והלחץ צריכים להיות ממוצעים, ולכל השאר צריך להגדיר את הערך 'None'). לוחצים על הלחצן 'יצירת דוח'.
מאשרים בלחיצה על הלחצן 'הוספה לדוח'.
אם תתבקשו לבחור את חשבון Google שלכם, עשו זאת ולאחר מכן לחצו על הלחצן 'אישור' כדי לאפשר ל-Data Studio לאחסן את הדוחות ב-Google Drive.
יוצג לכם קנבס ריק שבו תוכלו ליצור את מרכז הבקרה. בשורה העליונה של הסמלים, בוחרים באפשרות 'פעולות על ציר הזמן'.
מציירים מלבן בפינה הימנית העליונה של הגיליון הריק. היא צריכה לתפוס כ-1⁄4 מהגיליון הריק הכולל.
בצד שמאל של החלון, בוחרים בכרטיסייה 'סגנון'. משנים את האפשרות 'נתונים חסרים' מ'שורה לאפס' ל'פסיקים בין שורות'. בקטע 'ציר Y שמאלי', מוחקים את הערך 0 מ-Axis Min כדי לשנות אותו ל-(Auto).
לוחצים על התרשים בגיליון ומעתיקים ומדביקים (Ctrl-C/Ctrl-V) 3 פעמים. מיישרים את התרשימים כך שכל אחד מהם יתפוס ¼ מהפריסה.
לוחצים על כל תרשים, בקטע 'מאפיינים ונתונים של סדרת זמן' לוחצים על המדד הקיים (נקודת הטל), בוחרים מדד אחר שיוצג עד שכל ארבעת נתוני מזג האוויר (נקודת הטל, הטמפרטורה, הלחות והלחץ) יהיו עם תרשים משלהם.
עכשיו יש לכם לוח בקרה בסיסי.
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, לוחצים על 'נושא', מסמנים את התיבה שלצד הנושא weatherdata ולוחצים על 'מחיקה'.
עוברים אל Storage, מסמנים את התיבות לצד הקטגוריות של האחסון ולוחצים על Delete.
עוברים אל bigquery.cloud.google.com, לוחצים על החץ למטה לצד שם הפרויקט, לוחצים על החץ למטה שמשמאל למערך הנתונים weatherData ואז לוחצים על Delete dataset (מחיקת מערך הנתונים).
כשמופיעה בקשה, מקלידים את מזהה מערך הנתונים (נתוני מזג האוויר) כדי לסיים את מחיקת הנתונים.