NSSL logo

תדריך למעבדת (ניסוי) מחשוב ענן של אמאזון - AWS
הכנה למפגש רשון


תדריך כללי

מבנה הניסויי

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

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

הארכיטקטורה של המערכת נראית כך:

Widget examples

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

לניסוי יש 2 חלקים, אשר בכל חלק אתם תקבלו משימות שונות. חלקו הראשון של הניסוי יתמקד יותר בחלק השמאלי של ההתקשרות בין ה- Pi לבין הענן, בעיקר בעזרת טכנולוגיות IoT.

במפגש השני תעבדו יותר על הצד הימני של אתר האינטרנט, ופה הדגש יהיה על טכנולוגיות Web בענן.

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

מחשוב ענן - מבוא

מחשוב ענן הינו תשתית מחשוב, אליה ניתן להגיע דרך האינטרנט, וממנה ניתן לרכוש משאבי מחשוב שונים, ובראשם כח עיבוד (compute), ושרותי אחסון (Storage) .

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

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

שרותי הענן של אמזון

תשתית הענן מפוזרת בחוות שרתים ענקיו ת הנקראות גם Data Center (או בקיצור DC). נכון לשנת 2021 , חוות השרתים נמצאות ב- 24 אזורים שונים בעולם. בכל איזור כזה יש בין 2 ל- 5 חוות שרתים הנמצאות במקומות נפרדים אחד מהשני, כך ש במקרה של אסון טבע או כל דבר אחר שיכול לפגוע בחוות השרתים, רק אזור אחד ייפגע . כל איזור כזה נקרא Availability Zone וקיימת תשתית תקשורת מאד מהירה בין Availability Zones שונים באותו איזור . בכל Availability Zone יכול להיות DC אחד או יותר .

ניתן לראות מפה של פיזור האתרים השונים כאן:   https://aws.amazon.com/about-aws/global-infrastructure

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

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

  • 24 אזורים
  • 77 Availability Zones
  • כ- 5 מליון שרתי ם (לפי הערכות שונות)
  • 55 אלף עד 80 אלף שרתים בכל Data Center
  • קיבולת הרשת היוצאת מכל DC היא בערך 100Tbps

סוגי מחשוב ענן

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

IaaS – Infrastructure as a Service

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

שרותי מחשוב – EC2

Elastic Compute Cloud או בקיצור EC2 - שרותי מחשוב הענן של AWS . מאפשרים להריץ   מכונות וירטואליו תבגדלים וסוגים שונים .

המכונה הכי חלשה (Nano) הינה בעלת ליבה אחת, 1GB - RAM , זיכרון דיסק 8GB וחיבור רשת באיכות נמוכה .המכונה הכי חזקה (32xlarge) מורכבת מ- 128 ליבות, 3904GB - RAM זיכרון דיסק 2X1920GB וחיבור רשת של 25 גיגה .

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

המכונות מסוגלות להריץ מערכות הפעלה שונות והתשלום עליהן הוא לפי שעות שימוש. ניתן להריץ מכונות EC2 באזורים גאוגרפיים שונים בעולם .

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

שרותי אחסון

במודל של Iaas המשתמשים יכולים לשכור שטח אחסון על דיסקים, בדרך כלל SSD . דיסקים כאלו יכולים להיות משויכי ם מראש למכונת EC2 או להיות חופשיים (כמו דיסק נייד) ואז אפשר להדביק אותם לשרתים שונים בהתאם לצורך.
סוג אחסון זה הוא המהיר ביותר, אבל גם היקר ביותר, ובפער גדול. שירותי אכסון יכולים לספק גם אבסטרקציה של "דיסק" (S3 , Glacier) וגם אבסטרקציות מורכבות יותר כמו מסדי נתונים (DynamoDB).

Serverless Computing

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

הניסוי שלנו כולו מבוסס על Serverless , ולכן נבי א כמה דוגמאו ת רלוונטיות .

Lambda

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

כדי שקוד יתחיל לרוץ, צריך להגדיר עבורו trigger , כלומר אירוע שגורם לתחילת ההרצה .

עם ה- trigger יכולים להגיע פרמטרים, ובתום הריצה הלמבדה יכולה להחזיר תוצאות .

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

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

פרוטוקול MQTT

זהו הפרוטוקול הנפוץ ביותר כיום לתקשורת עם מכשירים ב - IoT . פרוטוקול MQTT עובד גם במודל publish-subscribe

pub/sub model

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

הברוקר מחזיק טבלה עם ה- subscribers לכל טופיק, ומנתב הודעות בהתאם לטבלה.

Pub/Sub

כל מכשיר יכול להיות גם publisher וגם subscriber . ענן ה- AWS משמש כ- Broker , ובמקרים מסו ימים (אותם אנחנו נתרגל) שי רותים של AWS יהיו publishers או subscribers.

מבנה topic

לנוש א יש מבנה היררכי, כאשר קו נטוי "/" מפריד בין הרמות השונות בהיררכיה (כמו במערכת קבצים). בנוסף יש שימוש בתווים חופשיים (wildcards) אשר יכולים להחליף כל תו אחר .

תו + יכול להחליף שכבה בודדת בכל חלק של ה- topic

תו # יכול להחליף כל מספר של היררכיות. אפשר להשתמש בו רק בקצה המחרוזת .

Payload

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

Dynamo DB

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

Simple Storage Service

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

אמזון מבטיחה 99.999999999 אחוז עמידות מפני אובדן מידע (Durability), ו - 99.99 אחוז זמינות של המידע (Availability),

הגישה אל המידע שמאוחסן הוא באופי של גישה מרחוק, בעזרת פקודות Upload ו - Download

Code Commit

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

סיכום – שירותי אמזון בהם נעשה שימוש בניסוי

הרוב המכריע של השירותים הללו יהיה בשימוש רק במפגש השני

פתיחת משתמש באמזון

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

כחלק מההכנה אתם אמורים לקבל מייל המזמין אתכם להצטרף ל- Aws Educate . אחרי שתמלאו את ההוראות במייל, יוגדר עבורכם חשבון Aws Starter

פתיחת משתמש באמזון

סביבת העבודה שבה מפעילים שרותי AWS נקראת AWS Console . בחשבון Starter הגישה ל- console היא מסורבלת למדי, ועוברת דרך 2 תחנות ביניים, AWS Educate ו - Vocareum שזו החברה שמפעילה את החשבונות האלו עבור AWS

לכן אתם צריכים לבצע את הצעדים הבאים :

  1. היכנסו לדף Aws Educate בלינק    https://www.awseducate.com/student/s
  2. בחרו בלשונית My Classroom ולחצו על הלחצן Go to classroom

    בכיתת הלימוד תראו חלון ה- Vocareum שבחלקו הימני כתובים השדות הללו :

    AWS account status

  3. לחצו על כפתור AWS Console . כדי להי כנס ל- console

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

אנחנו נעבוד באזו ר US East 1 שנקרא גם N.Virginia . אם זה לא האיזור שרשום לכם, החליפו לאיזור זה .

בכיתת הלימוד תראו חלון ה- Vocareum שבחלקו הימני כתובים השדות הללו :

AWS account status

מגבלת שעה ב- console

אחרי שפתחתם console (פעולה 3 למעלה), תוכלו לעבוד במש ך שעה רצוף. אחרי שעה תקבלו הודעה על המסך שנראית כך :

AWS account status

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

הצעד הבא יהיה לחזור לחלון vocarium (שלב 2 למעלה) ולפתוח מחדש את AWS Console (מה שביצעתם בשלב 3 למעלה) ואת כל השרותים שהיו פתוחים לכם קודם. למרות שזהו תהליך מעצבן, הנחמה היחידה היא שרק לעיתים נדירות הולך מידע לאיבו ד בסגירה ופתיחה מחדש של החלונות .

מגבלת 3 שעות ב - vocarium

כאשר תפתחו לראשונה את חלון ה-vocarium תראו שדה של מגבלת זמן של 2:60 שעות, שזו דרך יצירתית לכתוב 3 שעות. הזמן גם כאן נספר אחורה, וכאשר מגיע לאפס גם חלון ה-vocarium אינו שמיש יותר. סיגרו את הלשונית הזו, חיזרו לחלון AWS Educate (ציור 1), רעננו את העמו ד בדפדפן, וחיזרו על פעולות 2 ו-3

ניווט בממשק ה- AWS

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

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

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

SSH

Secure Shell (בראשי תיבות: SSH) הוא פרוטוקול לתקשור ת מחשבים המאפשר ביצוע פעולו ת על מחש ב מרוח ק לאחר תהליך הזדהות (login). הוא נוע ד לאפשר תקשורת מאובטחת ומוצפנת בין שני מחשבים לא תלויים ברשתות לא מאובטחות. SSH פועל מעל TCP , והפורט הסטנדרטי שלו הוא 22

תהליך ההזדהות ב- SSH יכול להתבצע ב- 2 אופנים. הראשון והיותר מוכר – בעזרת שם משתמש וסיסמא. השני, בו אנחנו נשתמש, הוא באמצעות החלפת מפתחות Key Pair . בשיטה הזו השרת בענן מחזיק מפתח אחד הנקרא מפתח ציבורי, והמחשב שלכם ממנו אתם מתחברים מחזיק מפתח שנקרא מפתח פרטי. במהלך ההתחברות השרת מצפין מסרים בע זרת המפתח הציבורי, והמחשב שלכם מפענח אותם בעזרת המפתח הפרטי. כאן לא נדרשת סיסמא, אבל כן נדרש שם משתמש .

שימוש ב- SSH (מחשבי Windows בלבד)

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

התקינו את הגרסה החינמית מהלינק הז  :    http://mobaxterm.mobatek.net/download.html

יצירת Key Pair (כל מערכות הפעלה)

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

  1. היכנסו ל- AWS Console
  2. תחת Services בחרו EC2
  3. בתפריט השירות משמאל, תחת Network and Security, בחרו Key Pairs
  4. לחצו על הכפתור של Create Key Pair, תנו שם למפתח שלכ ם ובחרו בסיומת pem
  5. המפתח נוצר, הענן שומר אצלו את המפתח הציבורי, ובמקביל מוריד בעזרת הדפדפן קובץ עם שם. המפתח שלכם וסיומת pem. זהו המפתח הפרטי .

התרגילים

תרגיל 1 : שירות EC2

מטרת התרגיל

בתרגיל זה נגדיר ונריץ לראשונה מחשב וירטואלי בענן. נלמד כיצד להעלות מחשבי EC2 , ואיך ליצור security groups ו -key pairs שיאפשרו לנו לגשת את המכונות האלו מרחוק בעזרת פרוטוקול SSH. בסיום התרגיל יהיה לכם מחשב וירטואלי רץ בענן. תוכלו להתחב ר למחשב וכן לגשת אליו ב- ping,

מבוא

Elastic Compute Cloud או בקיצו ר EC2 - שרותי מחשוב הענן של AWS . מאפשרים להריץ מכונות וירטואליות בגדלים וסוגים שונים.

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

הנה כמה דוגמאות לצורך במערכת כזו:

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

דוגמא אחרת, יותר קרובה אלינו, נניח שאני רוצה להריץ סימולציית MATLAB מאד גדולה למשך 5 ימים עם 10 מחשבים חזקים. כל מחשב כזה עולה בענן בערך חצי דולר לשעה. כלומר העלות הכוללת שלי היא באזו ר ה- 300 דולר. גם אם זה נשמע הרבה, עדיין זה יותר זול מלהשקיע 20 אלף דולר בשרתים, להוסיף תשתית מיזוג, אל- פסק, ארונות, למצוא להם מקום ולתחזק אותם .

דוגמא אחרונה, נניח שאני כותב אפליקציה Web , ומחשב אחד יספיק לי מבחינת קיבולת. שני אתגרים ש קיימים בשלב ה- deployment הינם :

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

גם כאן, הענן יפתור את שתי הבעיות. הגדרות נכונות של ה- EC2 )כפי שנראה מיד( נותנות לי מענה לסעיף הראשון, והבטחת הזמינות של AWS עומדת על 99.99% מהזמן, מה שפו תר לחלוטין את הבעיה השנייה מבלי שנצטרך בכלל לעשות משהו בנידון.

עבודה באזור (Region) מסוים

אפשר להגדיר מכונה וירטואלית בכל אחד מהאזורים. אולם ברגע שהגדרנו מחשב באזו ר מסו ים, הוא זמין רק שם, ולא ניתן לראות את המחשב כאשר עובדים באזור אחר. אנחנו נעבוד לאורך כל הניסוי באזור us-east-1 , שלפעמים נקרא גם US Standard ולפעמים נקרא N. Virginia .

(Application Machine Images (AMIs

כאשר מעלים מחשב וירטואלי, אין צורך להתקין מערכת הפעלה. אמאזון מספקת מספר גדול של images מוכנים, שכוללים מערכת הפעלה, ובמקרים מסוימי ם גם תוכנות נוספות בהתאם למטרות של המחשב הווירטואלי. למשל, מי שרוצה להעלות מחשב בשביל Database , יכול להשתמש ב image עם MSSQL Server על ווינדוס או MySQL על לינוקס וכך הלאה, ובכך לחסוך זמן רב על התקנות .

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

ה- Image בו נשתמש בתרגילים הבאים נקרא Amazon Linux AMI. זהו מחשב על מערכת הפעלה לינוקס (מבוסס RedHat למי שמכיר).
שם המשתמש הוא ec2-user . סיסמא, כאמור לא צריכים .

Security Groups

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

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

לדוגמא, מחשב שיהיה נגיש בפרוטוקול SSH רק מרשת הטכניון ויהיה נגיש בפרוטוקול FTP לציבור הרחב יגדיר הגדרות security כאלה :

פרוטוקול טווח פורטים מקור התעבורה
SSH TCP 22 רשת 132.68.0.0/16
FTP TCP 20-21 כל מקום (רשת 0.0.0.0.0/0)

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

הפעלת מכונת לינוקס

  1. היכנסו לדף הבית
  2. תחת Services בחרו EC2
  3. לחצו על Launch Instance
  4. בשלב זה הגעתם לאשף הגדרת שרת. האשף הזה מורכב מ- 7 שלבים. בחלק העליון של הדף ניתן לראות את כל השלבים, ומתחת לזה באיזה שלב אתם נמצאים כרגע. המבנה הזה חוזר על עצמו גם בהגדרות אחרות. על מנת להקל על ההתמצאות של ההוראות כאן למטה, בכל הוראה נתייחס לשלב בו אנו נמצאים כרגע .
  5. שלב 1 : בחרו את ה - AMI בשם - Amazon Linux AMI . אם יש 2 כאלו, בחרו אחד מהם, לפי מה שנראה לכם הגיוני (כנראה שכולם יעבדו טוב באותה מידה).
  6. עתה נבחר גודל של מכונה, כפי שהוסבר מקודם .

  7. שלב 2: בחרו t2.micro (הערך הדיפולטי והחינמי לסטודנטים),
  8. לחצו על Next: Configure Instance Details
  9. בהמשך נתעכב יותר על השלב הזה. כרגע נסתפק בכך שנתן לשרת כתובת public , על מנת שנוכל לתקשר איתו ישירות מהעולם החיצון .

  10. שלב 3: שנו את השדה Auto Assign Public IP ל-Enable
  11. שלב 3: לחצו על Next: Add Storage                 
    כרגע לא נעשה כלום בשלב הזה.
  12. שלב 4: לחצו על Next: Add Tags
  13. שלב 5: לחצו על Add Tag . עבור Key כתבו את המילה Name , הכניסו את השם שאתם רוצים לתת למכונה ב- Value
  14. שלב 5: לחצו על Next: Configure Security Group
  15. כדי שתהיה גישה גם ל- ping , צריך לאפשר גי שה ל- ICM

  16. שלב 6: לחצו על Add Rule
  17. הוסיפו כניסה של All ICMP – Ipv4, כאשר ה- source הוא Anywhere (עקרונית רעיון גרוע אבל בשביל התרגיל הראשון מותר לנו).
  18. שלב 6: לחצו על Review and Launch ובדף הבא (שלב 7) על Launch בשלב הזה עולה חלון בו אתם צריכים לבחור Key Pair . אם יצרתם key pair אחד, הוא כבר יופיע בחלון ב- drop down list התחתון.
  19. סמנו וי בהודעה בתחתית החלון ולחצו על Launch Instance . מופיע חלון הודעה גדול מאד, ובפינה הימנית תחתונה כפתור View Instances . לחצו עליו כדי לעבור אל הרשימה של המחשבים שהרצתם. כרגע אמור להיות רק מחשב אחד ברשימה. אם הלכתם לאיבוד, אתם יכולים להגיע לאותה רשימה ע"י בחירת Services->EC2 , ולחיצה על Instances->Instances בתפריט השירות
  20. מבנה הדף של רשימת ה- Instances דומה קצת לאאוטלוק. כאשר בוחרים instance , ניתן לראות פרטים עליו בחלק התחתון של המסך. אתם מוזמנים להסתכל ולהתרשם .
  21. חפשו את הערך public IP של השרת שהגדרתם. הוא מופיע גם ברשימה למעלה וגם תחת הלשונית Details . לכתו בת הזו ננסה להתחבר .
  22. בשלב ראשון בצעו ping מה- PC שלכם )עשו זאת מתוך חלון command ( לכתובת הזו. מכיוון שהרשינו ICMP , אתם צריכים לקבל תשובה .
  23. בשלב הזה נתחבר ב- ssh למכונה. ההוראות כאן הן שונות בין משתמשי ווינדוס לאחרים. עיקבו אחרי ההוראות שמתאימות לכם. זיכרו ששם המשתמש של המכונה הוא ממש "ec2-user". השתמשו בשם משתמש זה ואל תחליפו אותו בהוראות עם שם המשתמש שלכם .
  24. משתמשי Windows בלב ד

  25. הריצו MobaXterm . לחצו על Session )הכפתור השמאלי בסרגל הכלים(, ובחלון שנפתח לחצו על SSH . תחת Remote host כיתבו את הכתובת הציבורית של השרת שלכם. הדליקו את Specify username ורשמו בשדה שלו "ec2-user"
  26. לחצו על הלשונית של Advanced SSH settings . סמנו Use Private key , ובחרו את קובץ ה- pem שהורדתם בשלב יצירת ה- key pair
  27. לחצו על OK . אם הכל הלך כשורה, מזל טוב, אתם בתוך השרת החדש שלכם .
  28. משתמשי לינוקס ומק

  29. פיתחו טרמינל, ועיברו לתיקיה בה נמצא קובץ המפתח שלכם
  30. שנו הרשאות לקובץ, לקריאה וכתיבה ע"י בעל הקובץ בלבד, בעזרת הפקודה:

  31. 				chmod 600 <key file name>
    			

  32. רישמו את הפקודה :

  33. 				ssh -i <key file name> ec2-user@<public IP>
    			

    חלון הטרמינל אמור להיראות כך :

    AWS account status

    עבודה עם קבצים

    העלאה והורדה של קבצים

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

    משתמשי לינוקס ומק

    אנו נשתמש בפרוטוקול scp להעברת קבצים. פקודת scp מגיעה עם מערכת ההפעלה, והתחביר שלה משלב ssh ו - cp . גם כאן צריך את ה- key בתור פרמטר .

    לדוגמא: העתקת קובץ מהמחשב שלי לתיקית MyFiles מתחת ל- home:

    				scp –i aws_key.pem TheFile ec2-user@52.53.54.55:~/MyFiles
    			

    גם הכיוון השני הולך, כלומר להעתיק מהמחשב הרחוק אלי :

    				scp –i aws_key.pem ec2-user@52.53.54.55:~/MyFiles/TheFile .
    			

    משתמשי Window

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

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

    שתי תוכנות עריכה מקובלות הן nano ו - vim . מי שמכיר vim , זה העורך המומלץ. לאלו שזו ההתנסות הראשונה שלהם במו ד כזה של עבודה, nano יותר אינטואיטיבי .

  34. העתיקו קובץ טקסט כלשהו למחשב המרוחק
  35. השתמשו ב -nano כדי לערוך את קובץ הטקסט. הוסיפו שורות, מחקו כמה, ולבסוף שימרו את הקובץ

תרגיל 2 : Simple Storage Service

בתרגיל זה נגדיר מקום אחסון בסיסי לקבצים העזרת השרות Simple Storage Service (או בקיצור S3) .

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

אפשר לבצע העלאה והורדה של קבצים דרך דפדפן או בעזרת פקודות CLI . אנחנו נתנסה ב- 2 האפשרויות .

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

    הגדרת bucket

  1. בתפריט Services, תחת Storage & Content Delivery, בחרו S3
  2. לחצו על הכפתור Create Bucket
  3. תנו לו שם, וב- region תבחרו את זה שלנו ולחצו Create bucket בתחתית הדף.
  4. העלאת והורדת קבצים

    בשלב ראשון נעלה קבצים דרך הדפדפן.

  5. היכנסו ל- bucket ולחצו על כפתור ה- upload ותעלו קובץ מהמחשב שלכם .
  6. בשלב שני, נהפוך את הקובץ לציבורי, ונוריד אותו עם הדפדפן לא דרך ה - Console .

  7. סמנו את הקובץ שהעליתם
  8. וודאו בחלון ה Permissions ש Block all public access הוא במצב off
  9. לחצו על Actions ואח"כ Make public
  10. כאשר הקובץ מסומן, באזור הכהה מימין יופיע לינק.
  11. העתיקו את הלינק ופתחו אותו בדפדפן אחר (או שסתם תלחצו על הלינק). צרפו צילום מסך לדו "ח ההכנה.
  12. עכשיו נחסום את הקובץ לציבור

  13. חיזרו ל- S3. באזור ה- Permissions שנו את Block all public access ל on
  14. רפרשו את הדף עם הקובץ. מה קיבלתם? צרפו צילום מסך לדו"ח ההכנה.

תרגיל 3 : הכנה קצרה בפייתון

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

  1. הדפיסו למסך מחרוזת עם השמות הפרטיים והמשפחה שלכם
  2. הדפיסו את השמות שלכם, הפעם משולבים בתוך המשפט הזה :
    			My fist name is ____ and my last name is ____ !!!
    			
  3. בנו dictionary שמייצג גיליון ציונים )הוא לא צריך להיות אמיתי(. כתבו לולאה שמדפיסה את ממוצע הציונים, לא משוקלל.
  4. בעזרת אותו dictionary , מצאו את הציון הגבוה ביותר ואת הציון הנמוך ביותר. הדפיסו את המשפטים הבאים :
    			My lowest grade this semester was <low_grade>
    My highest grade this semester was <high_grade>
    			
  5. השתמשו בדוגמא מהנספח המצורף של אובייקט JSON
    1. הוסיפו עוד אובייקט של place למערך places
    2. הדפיסו את ה- longitude של 3 האובייקטים

תרגיל 4: שירות IoT Core

בתרגיל זה נתוודע לממשק שאותו מספקת אמזון עבור IoT . בשלב ההכנה ה" thing " יהיה סקריפט שרץ במחשב שלכם. הכנסו לשירות מתוך לשונית “services” בממשק של AWS . בחרו Onboard בתפריט ובחרו באופציה Get started תחת " Onboard a device ". עקבו אחר שלושת השלבים. בחרו שם שרירותי (לא נשתמש ב- thing זה יותר), ובחרו במערכת ההפעלה שלכם ובשפת פייתון. הורידו את הקובץ וחלצו את הקבצים מהארכיון. בצעו את שלושת השלבים במסך הבא :

AWS IoT

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

אם התכנית רצה כהלכה, אתם תקבלו הדפסות מ הסוג הזה:

			Received a new message: 
			New Message 94 
			from topic: 
			sdk/test/Python
			

אם אתם מקבלים הודעת שגיאה בסגנון הבא :

			from AWSIoTPythonSDK.MQTTLib import AWSIoTMQTTClient 
			ModuleNotFoundError: No module named 'AWSIoTPythonSDK'
			

יש לכם בעיה עם python path

פתחו את הקובץ aws-iot-device-sdk-python/samples/basicPubSub/basicPubSub.py לעריכה, והוסיפו בראש הקובץ את השורות האלו :

			import os, sys
			sys.path.append(os.path.join(os.path.dirname(__file__), "../.."))
			

שמרו צילום מסך של ריצה תקינה של הסקריפט

תרגיל 4: שירות IoT Core

מטרת התרגיל הוא לספק הכירות מאד ראשונית עם שירות ה- IoT וליצור תשתית שתשמש אתכם בניסוי.

התקנת מכונה וירטואלית

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

לשם כך, מי שעדיין אין לו, צריך להתקין VirtualBox , מהאתר הבא:   https://www.virtualbox.org

קובץ המכונה זמין להורדה   כאן

נפח הקובץ הוא כ- 1.6html גיגה .

  • הריצו את ה - VirtualBox . בצעו import , ובחרו את הקובץ ova שזה עתה הורדתם .
  • הריצו את המכונה הו וירטואלי ת
  • תפתחו טרמינל הרצה (Systems Tools ->LXTerminal)
  • הגדירו תיקייה חדשה מתחת לתיקיית הבית שלכם, נניח בשם iot
  • הסיסמא למכונה: 123456

שירות Iot Core

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

  • התקינו דפדפן כרום ע"י הפקודה .
  • 			sudo apt-get install chromium-browser
    			
  • עדיף לפני הצעד הבא לבצע reboot
  • פיתחו דפדפן כרום בתוך המכונה הו וירטואלית ובצעו לוגין ל- AWS Console דרך AWS Educate
  • הכנסו לשירות IoT Core מתוך לשונית “services” בממשק של AWS
  • בחרו Onboard בתפריט ובחרו באופציה Get started תחת " Onboard a device"
  • עקבו אחר שלושת השלבים. בחרו שם ל- thing שלכ ם, ובחרו במערכת ההפעלה לינוק ס ובשפת פייתון. הורידו את הקובץ לתוך התיקייה שהגדרתם , וחלצו את הקבצים מהארכיון. בצעו את שלושת השלבים במסך הבא :

AWS IoT

הערה: לפעמים start.sh נותן שגיאה permission denied בריצה ראשונה, ואז בריצה שניה זה מסתדר. אם בהרצה שניה זה לא מסתדר, צרו קשר עם המדריך כדי שיעזור לכם עם הסביבה .

להגשה

הגישו בלאבאדמין בתוך קובץ zip יחיד :

  1. תרגילי הפייתון (ניתן לאחד לסקריפט יחיד) + צילום מסך של התוצאות .
  2. צילום מסך של ריצה תקינה של הסקריפט start מהחלק הקודם .
  3. צילומי מסך מתרגיל S3 (שני צילומי מסך)
  4. קראו על פרוטוקול MQTT (למשל   כאן או   כאן) והסבירו מדוע הוא שימושי באפליקציות IoT . הדגימו באמצעות דוגמה פשוטה .
  5. הסבירו מהי פונקציית Callback ומדוע היא חשובה ביישומי IoT.
  6. קראו   כאן על שירות הלמבדה של AWS . ציינו ייתרון אחד של שירות זה על פני שימוש בשרת עבור אפליקציית IoT והסבירו מדוע זהו ייתרון .

בוחן כניסה

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

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

נספח: מבוא בסיסי ל- Python

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

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

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

דקדוק ואינדנטציה

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

דוגמא להגדרת פונקציה :

			def hello_world(): 
				print ("hello world ")
			

טיפוסים

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

לדוגמא :

			>>> i=2
			>>> j=3
			>>> i+j
			5
			

דוגמא למחרוזות :

			>>> i='two'
			>>> j='three'
			>>> i+j
			'twothree'
			

נוסף למשתנים הפשוטים כמו string ו - int , אפשר להגדיר מערכים

			>>> myList=[1,2,3,4,5,6]
			>>> myList[2]
			3 
			>>> myList[3:]
			[4, 5, 6]
			

הטיפוס השימושי ביותר עבור ניסוי הוא Dictionary . הוא דומה ל- map בשפות אחרות, כלומר ההכנסה והשליפה מבוצעות לפי key ו - value . כאן יש צורך בהגדרת המשתנה מראש .

למשל :

			>>> age={}
			>>> age['moti']=16
			>>> age['sara']=22
			>>> age['avi']=4
			>>> age {'moti': 16, 'sara': 22, 'avi': 4}
			

גישה ישירה לאיבר במילון תהיה כך :

			>>> age['sara'] 
			22
			

אין הכרח שכל ה- values ב- dictionary יהיו מאותו טיפוס. יכול למשל להיות מצב ש - value של מפתח מסוים הוא int , וזה של מפתח אחר הוא array .

איטרציות על מערכים ומילונים

איטרציה על מערכים מאפשרת לנו לבצע פעולות בלולאה על כל איבר במערך .

במערך זה נראה כך :

			>>> arr = ['a', 'b', 'c', 'd', 'e'] 
			>>> for letter in arr: 
			... 	print (letter, end =" ") 
			... 
			a b c d e
			

איטרציה על שניהם :

			>>> d = {'x': 1, 'y': 2, 'z': 3} 
			>>> for r, m in d.items():
			... 	print ("{0}->{1} ".format(r, m), end =" ") 
			... 
			y->2 x->1 z->3
			

הדפסת מחרוזת שמכילה משתנים

המקבילה של הפקודה הבאה ב- c

			printf("There are %d students in %s class \n", num_students,class_name );
			

יכולה להיכתב בפיתון כך :

			print ("There are {0} students in {1} class \n".format(num_students,class_name))
			

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

קצת על JSON ופייתו ן

JSON הינו פורמט לייצוג מבני נתונים, מבוסס טקסט. למשל אובייקט person עם שדות first_name ו - last_name ייראה כך :

			obj={“first_name”:”Roy”, “last_name”:”Mitrany”}
			

בפייתון, ניתן להמיר את המבנה הזה ל - dictionary , ואז הגישה אליו היא כזו :

			name= obj[“last_name”]
			print name 
			>>> Mitrany
			

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

למשל

(דוגמא מהרשת)

			data = {
			"country abbreviation": "US",
			"places": [
				{
					"place name": "Belmont", 
					"longitude": "-71.4594", 
					"post code": "02178", 
					"latitude": "42.4464" 
				}, 
				{ 
					"place name": "Belmont", 
					"longitude": "-71.2044", 
					"post code": "02478", "latitude": 
					"42.4128" 
				} 
			], 
			"country": "United States", 
			"place name": "Belmont", 
			"state": "Massachusetts", 
			"state abbreviation": "MA" 
			}
			

האובייקט הראשי הוא בעל 6 שדות. השדה השני, places הוא מערך של אובייקטים. כדי להדפיס את השדה המסומן בצהוב, צריך לכתוב :

			print data['places'][1]['post code'] 
			>>> 02478
			

זאת כי :

  • [data[places מחזיר מערך של אובייקטים
  • [data[‘places’][1 מחזיר את האיבר השני במערך
  • [data[‘places’][1][‘post code’ מחזיר את הערך עבור השדה post code עבור אובייקט זה .