01. מבוא ל-AWS ויצירת EC2
מבוא
למה צריך בכלל מיחשוב ענן?
ישנן מספר סיבות לכך, בין השאר:
- בחירת עוצמת המחשב
- בחירת גודל זיכרון
- ניהול משאבים כמו DB עם קלאסטרים
- מנגנוני אבטחה קיימים
- שירותים רבים בתשלום\חינם
בבואנו לבחור ספק שירותי ענן, נוכל לבחון מספר חלופות, המוכרים שביניהם: אמזון (AWS), גוגל (GCP), מיקרוסופט (Azure), וגם חברות קטנות יותר כמו Hiroku ו-Pythonanywhere.
במדריך זה נבחר לעבוד עם AWS של אמזון, שנכון לזמן כתיבת שורות אלו הינה ספקית תשתיות הענן הגדולה בעולם.
מעבר לשירותי הענן הבסיסיים (מחשב-שרת), השירותים של AWS הם רבים, ביניהם שירותי DB, שירותי אימיילים, שרתי אחסון (S3) ועוד הרבה.
במדריך זה נתמקד בשלושה-ארבעה שירותים מרכזיים הנדרשים עבור אפליקציית אינטרנט (אתר אינטרנט) סטנדרטי – שירות EC2 לצורך מיחשוב, שירות S3 לצורך אחסון קבצים סטטיים, ושירות RDS לצורך ניהול DB רלציוני.
השירותים של AWS הינם בתשלום, בשיטת תשלום לפי שימוש.
אמנם למשתמשים חדשים מציעה אמזון שנה ראשונה של שימושים בסיסיים בחינם (כל עוד לא נחרוג מהמגבלות). למרות תקופת ה-“חינם” ישנה דרישה להוספת כרטיס אשראי לחשבון כבר בשלב ההרשמה.
אז שלב ראשון נבצע הרשמה דרך הקישור.
בדף שייפתח נכניס אימייל ושם משתמש, נבצע אימות לאימייל (קוד שיישלח אלינו) ואז נבחר בסיסמה.
במסך אח”כ, נבחר בסוג השימוש (תבחרו Personal) ונכניס את הפרטים שלנו , ונמשיך.
במסך הבא נתבקש להזין פרטי אשראי. שימו לב לכך שבהודעה שרשומה בצד אמזון מעדכנת שייתכן וייגבו מאיתנו דולר אחד שגם יוחזר אלינו לאחר מכן, וזאת רק לצורך וידוא הזהות שלנו.
במסך הבא, אמזון תבקש את פרטי הטלפון שלנו לצורך זיהוי נוסף (שליחת SMS), אז נעשה זאת. כנראה שגם תתבקשו להזין קוד מתמונה לוודא שאנחנו לא רובוט…
במסך הבא והאחרון, נרצה לבחור את סוג החשבון שלנו. אם אין לנו כסף מיותר נוכל לבחור ב-Basic support – free, שלא עולה כסף. ונלחץ על סיום ההרשמה.
יופיע לנו המסך הבא:
נלחץ על הכפתור המודגש המוביל ל-Management Console, שיוביל אותנו לדף התחברות.
נשאיר את הסימון העליון על Root user, ונכניס את האימייל שנרשמנו איתו, ובמסך הבא את הסיסמה.
לאחר מכן נגיע לדשבורד של AWS. דרכו נוכל להוסיף שירותים שונים ולנהל אותם.
נזהה במסך הדשבורד מספר כפתורים:
- כפתור בשם services, לחיצה עליו תציג את רשימת השירותים ש-AWS מאפשרת.
- כפתור עם שם המשתמש. בו נוכל לבצע הגדרות נוספות, כמו הגדרות שירותי התשלום, וכן הגדרות נוספות, כמו העדפת שפה, ואזור (region).
מה הכוונה איזור? AWS הוא שירות שעובד בכל העולם, ולכן ישנן חוות שרתים באזורים רבים. כשנבחר שירות כלשהו, נרצה לשייך אותו לאזור מסוים. בהגדרות כאן, נוכל לבחור את ה-region – אזור הדיפולטיבי. אגב, די לאחרונה התווסף אזור region חדש עבור ישראל.
שירות מחשוב ענן EC2
שירות המחשוב של AWS הסטנדרטי נקרא EC2, למעשה מדובר במחשב עם מעבד, זיכרון רם, קצת דיסק, כתובת IP וכו’.
ישנן ווריאציות שונות של השירות, כמו בחירת עוצמת המעבד והזיכרון וכו’, וכל ווריאציה יש לה עלות משלה. ככל שהמחשב יותר חזק, נשלם עליו יותר.
מכיוון שאנו מכוונים כרגע להיכרות בסיסית עם השירותים, נבחר בשירות המתאים לגישה החינמית למשתמשים חדשים.
אז בואו ניצור שרת כזה עבורינו.
אגב, הכינויים לשרת כמו EC2 של אמזון, יכולים להיות “instance” מלשון מופע של השירות. וכן “קופסה” או “מכונה” שזה יותר סלנגי. במהלך הקורס נשתמש גם אנו בכינויים אלו.
במסך הדשבורד של AWS, נלחץ על services לצפייה ברשימת השירותים, ונזהה בצד שמאל את “compute”, כשנלחץ עליו, ייפתח לנו מימין מספר אופציות לבחירת שירות “מיחשוב”, אז נבחר ב- EC2.
אפשר גם להזין בשורת החיפוש “EC2” ונראה את השירות הזה. בנוסף, נוכל גם לסמן את הכוכב המופיע בסמוך לשם השירות, בשביל להוסיף אותו למועדפים (לגישה מהירה יותר אח”כ).
לאחר לחיצה על השירות, המסך הבא שייפתח לנו הוא מסך הניהול של שירותי EC2.
במסך זה נוכל לראות כמה שרתים פעילים יש לנו (Instances (running שכרגע זה כמובן 0, וכן נתונים נוספים שנבין בהמשך.
בשביל להרים מכונה חדשה (אינסטנס של EC2), נלחץ על הכפתור למטה Launch instance. (מן הסתם מיקום הכפתור עשוי להשתנות ולהופיע במקום אחר בדף).
בדף הבא שייפתח, נצטרך לבחור הגדרות עבור המכונה החדשה.
שם (Name) – ניתן לה שם כלשהו. אם יהיה לנו כמה מכונות, יהיה לנו קל להבדיל ביניהן אם לכל מכונה יהיה שם שמצביע על אופי הפעילות שרץ בה.
לאחר מכן, נצטרך לבחור את מערכת ההפעלה שתגיע עם המכונה (שזה נקרא גם לבחור את ה-Image של האינסטנס, או במונחים של AWS זה: AMI).
ברירת המחדל המוצע לנו זה גרסת Linux של אמזון, אבל אני דווקא מעדיף לעבוד עם גרסת לינוקס פופולארית בשם Ubuntu, אז בואו נבחר בה. (זה לא כזה משנה תכלס…).
אם יש לכם סיבה לעבוד עם מערכת חלונות או Mac, אז לכו על זה.
משהו חשוב לשים לב אליו – לאחר שבחרנו מערכת הפעלה נרצה לוודא שהיא עומדת בתנאים של המסלול החינמי (Free tier eligible).
נגלול הלאה להמשך ההגדרות, נשאיר את הגדרת Architecture כברירת מחדל של 64-bit. זה הגדרות למעבד, ולא אמורה להיות לנו סיבה לבחור משהו אחר.
בהגדרה הבאה נצטרך לבחור את סוג האינסטנס.
כפי שהקדמנו, ההבדלים בין האינסטנסים השונים באים לידי ביטוי בעוצמת מעבד, גודל זיכרון ודיסק, ובהתאם גם במחיר.
אם נשאיר את המוצע לנו כברירת מחדל, זה אומר שנבחר באינסנטס מסוג micro (כנראה t3 או t2, לפי מה שיוצע לנו), שזו מכונה בסיסית שאמורה להיות בסדר גמור בשביל להתחיל לעבוד איתה.
בשלב הבא (Key pair) אנו נצטרך ליצור מפתחות אבטחה באמצעותן נוכל בהמשך להתחבר למכונה. אז נלחץ בצד על Create new key pair, וייפתח המסך:
במסך שנפתח, נבחר שם כלשהו למפתחות, זה לא ממש משנה מה תבחרו, בינתיים תוכלו לבחור למשל בשם – my_key_pair.
נשאיר את ההגדרות הבאות כברירת מחדל (RSA ו-pem), המציינות את מנגנון הקידוד ואופן ההתחברות, ונלחץ על הכפתור Create key pair. כתגובה, יפתח לנו חלון לשמירת קובץ. הקובץ הזה מכיל את המפתח הפרטי באמצעותו נתחבר בהמשך למכונה. אז תשמרו אותו איכנשהו במחשב, ותזכרו איפה שמרתם אותו.
נגלול הלאה בהגדרות יצירת האינסטנס, וכעת ידרשו מאיתנו להגדיר דברים שקשורים לאבטחה של הרשת של המכונה שאנו יוצרים.
מנגנוני האבטחה ב-AWS פועלים על ידי ניהול קבוצות אבטחה, שיוך שירותים שונים לקבוצות שונות. קבוצת אבטחה (security group) הינה אוסף הגדרות של הרשאות כלשהן. ושיוך שירות לקבוצה בעצם מחיל את ההגדרות של הקבוצה גם על השירות.
בשלב הזה מכיוון שטרם הגדרנו קבוצה, אז נשאיר את ההגדרה “Create security group” מה שאומר שההגדרות הבאות שנבחר יחולו על קבוצה חדשה שאוטומטית תשויך גם לשירות ה-EC2 שאנו יוצרים.
ההגדרות שבדף המוצגות לנו כוללות 3 דברים (לפי הצ’קבוקס).
ההגדרה הראשונה אומרת שאנו מאפשרים התחברות למכונה באמצעות SSH. שזה פרוטוקול שנכיר בהמשך דרכו נוכל להתחבר למכונה מהמחשב שלנו, ולבצע בה פעולות. המפתחות שקודם יצרנו ושמרנו במחשב, הן אלו שדרכן נוכל לבצע התחברות ב-SSH. ההגדרה כאן בעצם מציינת שאנו מאפשרים התחברות SSH מכל מחשב שהוא (anywhere – כמופיע מימין).
אם אנו יודעים מראש שכל העבודה שנבצע מול השרת תתבצע מאיזושהי כתובת IP ספציפית, נוכל להגדיר זאת כאן. כנראה שזה לא המקרה שלנו, אז נשאיר זאת כברירת מחדל.
שתי האופציות הנוספות לסימון, הינן האם לאפשר תעבורת HTTP לשרת שלנו. אם המטרה שלנו הינה לשתול שרת אינטרנט על האינסטנס, אז נרצה לסמן לסמן את 2 האפשרויות הבאות גם כן. האחת עבור http והשניה עבור https.
אגב, את ההגדרות הללו של האינסטנס נוכל לשנות גם בהמשך במידה ונרצה.
נגלול הלאה בהגדרות ובשלב הבא ישנן הגדרות מתקדמות על מבנה הדיסק של האינסטנס, אין סיבה שניגע בהם. נרצה רק לציין שהאינסטנס יגיע עם 8GB (עקרונית אפשר להרחיב עד 20 או 30 במסגרת החינמית).
קצת רקע:
- שירותי הדיסק באמזון נקראים גם EBS, מלשון elastic block store, וכל המידע שמכונת ה-EC2 משתמשת בו, מגובה על ידי שירות זה, ולכן גם אם נעצור זמנית את המכונה, הזיכרון יישמר.
- ישנם סוגי זיכרון שונים ש-EBS עובד איתם, למשל, כברירת המחדל אנו נעבוד עם gp2 שהוא דיסק מבודד על SSD, שזה מהיר וטוב לצרכים כלליים סטנדרטים. ישנן אופציות נוספות, כמו io1 שנועד לביצועים מאוד מהירים, ועוד סוגים שונים. תוכלו לקרוא עליהם בדוקומטציה.
ישנן הגדרות נוספות שנוכל לגשת אליהן תחת הלשונית Advanced details, אך בשלב הזה נוכל פשוט לדלג עליהם.
נתבונן בסיכום לראות שלא פספסנו שום דבר. בסיכום מופיע גם מידע על מה אנו נקבל בחינם.
לסיום, נלחץ על Launch instance.
אגב, אם שמתם לב, ישנו כפתור בשם Review commands שמופיע תחת כפתור Launch. אם תסתקרנו ותלחצו עליו, תראו שכל הפעולות שביצענו באמצעות בחירת אופציות באתר, ניתנות להגדרה גם כקוד באמצעות API. אנשי דבאופס (DevOps) שמנהלים בארגונים וחברות את השרתים, בדרך כלל מנהלים סקריפטים להגדרות האינסטנסים והשירותים השונים. כך שבאמצעות קוד אפשר ליצור ולהשמיד אינסטנסים לפי דרישה. הסקריפטים משתמשים ב-API שאמזון מספקת, ובין השאר, כל מה שעשינו ידנית, היה יכול להתבצע כסקריפט.
אם לחצנו וקיבלנו הודעת שגיאה בסגנון:
אז כנראה זה נובע בגלל שאתם משתמש חדש.
אתם יכולים לכתוב אימייל לכתובת המופיעה שם, וכנראה שגם בלי זה, במהלך ה-24 שעות הראשונות מאז יצירת החשבון, תקבלו הודעה שהחשבון הוא “validated”, ואז יצירת האינסטנס תעבור חלק. מניסיון, תנסו שוב בעוד כחצי שעה וזה כנראה יסתדר כבר.
בשלב הזה כבר יש לכם מכונה, ואנו יכולים להתחבר אליה ולהריץ עליה דברים, אבל לפני כן, כדאי שנגדיר usage alerts, הגדרת התראה במידה ופתאום יהיו לנו עלויות שלא ציפינו להם.
אז נוכל ללכת לדף הבא.
(זה גם מופיע לנו בסיום יצירת האינסטנס, תחת Create billing and free tier usage alerts)
ולהגדיר תחת Alert Preference שאנו מעוניינים לקבל התראה במידה ונתקרב לחריגה מהמגבלות החינמיות:
טיפ: לעיתים קרובות, משתמשים חדשים מבצעים טעות כזו או אחרת בהגדרות ומופתעים מאוד לקבל פתאום חשבון חודשי של אפילו מאות דולרים (!). אם שגינו בהגדרות, אך הגדרנו נכון את ההתראות, זה כנראה יחסוך לנו כאב ראש. אם בכל זאת קיבלתם חשבון מנופח ולא מתוכנן, פנו לתמיכה של AWS, ורוב הסיכויים שיבואו לקראתכם ויבטלו חיובים לא צפויים.
שימוש במכונה
לאחר שיצרנו אינסטנס, נרצה להשתמש בו. אז תחילה בואו נחזור לדשבורד של EC2, ונזהה שכעת חלק מהנתונים שם התעדכנו:
יש לנו כעת אינסטנס אחד, שהוא גם פעיל, וכן זוג אחד של מפתחות התחברות, מופע אחד של EBS (דיסק) וכן 2 קבוצות אבטחה (אחת דיפולטיבית, והאחת שיצרנו). אם נלחץ על כל אחד מהנ”ל, נוכל לראות נתונים נוספים שלו.
למשל, אם נלחץ על ה-Volume, נראה את הדיסק שהגדרנו (8GB של gp2). אם נלחץ על ה-security-groups, נראה את הקבוצה שנוצרה לנו (בנוסף ל-default) עם הגדרות הגישה ל-SSH וכן לתעבורה (טראפיק) מ-http. (זה מופיע למטה תחת כרטיסיה בשם Inbound rules – הגדרות גישה פנימה).
בואו נלחץ על האינסטנסים, ובתוך הדף שנפתח, נזהה שיש לנו אינסטנס אחד פעיל:
אגב, מהדשבורד הזה נוכל גם לסמן את האינסטנס, ואז למחוק אותו או להפסיק אותו זמנית, בעזרת הלשונית למעלה בשם “Instance state”.
אם נלחץ על הקישור תחת ה-id של האינסטנס שלנו, נוכל לראות את ההגדרות השונות שלו:
למעלה נראה מידע כמו סוג האינסטנס וכן כתובת IP שהוא קיבל וכו’.
בכרטיסיות למטה יש מידע נוסף, למשל נוכל ללחוץ על security, ונזהה שם את ה-security-group שנוצר לנו עם יצירת האינסטנס.
התחברות למכונה
כאמור, פרוטוקול SSH מאפשר לנו התחברות בין מחשבים שונים. במקרה שלנו, הקופסה שיצרנו הינה מחשב מרוחק “בענן” שנרצה כעת להתחבר אליו.
וכזכור, הגדרנו בעת יצירת האינסטנס שאפשר יהיה להתחבר עליו ב-SSH אז זה מה שנעשה כעת.
אז נפתח טרמינל (cmd או powershell או כל דבר דומה) במחשב הפרטי שלנו, ונריץ את הפקודה הבאה:
ssh -i ubuntu@
תצטרכו להחליף את path-to-key בכתובת המלאה של הקובץ-מפתח ששמרתם ביצירת האינסטנס (אם איבדתם אותו, תצטרכו ליצור מפתחות חדשים, תכף ארחיב על זה קצת), ובמקום ip4-address נצטרך לציין את כתובת ה-IP של האינסטנס שלנו.
לדוגמה:
ssh -i C:\Users\ori\keys\my_key_pair.pem ubuntu@16.170.219.207
משמעות הפקודה היא להתחבר למחשב המרוחק היושב על ה-IP שצוין, תוך כדי שימוש במפתח האבטחה (הקובץ שציינו את כתובתו) דרך משתמש בשם ubuntu שקיים במחשב המרוחק.
המשתמש ubuntu הוא המשתמש הראשי שנוצר לנו עם יצירת האינסטנס.
לאחר הרצת הפקודה הנ”ל, אנו נהיה מחוברים למכונה, נצפה לראות פלט בסגנון:
המשמעות היא, שכל פקודה שעכשיו נריץ, תתבצע על השרת, שהוא כאמור “מחשב מרוחק בענן”.
נוכל להקליד למשל את הפקודה whoami המדפיסה את המשתמש המחובר, ונראה כפלט ubuntu, שזהו כפי שהקדמנו, שם המשתמש הדיפולטיבי.
בשביל לצאת מהמכונה, נוכל לפקוד:
exit
עוד קצת על SSH
התקשרות באמצעות SSH, (שזה קיצור של Secured SHell) מתאפשרת באמצעות מפתח פרטי ששמור במחשב שלנו ומפתח “ציבורי” ששמור על המכונה אליה אנו מתחברים.
ספציפית, המפתח הציבורי שמור במכונה תחת הקובץ הבא:
/home/ubuntu/.ssh/authorized_keys
כשיצרנו את האינסטנס, AWS דאגו לשים בקובץ הנ”ל את המפתח הציבורי התואם למפתח הפרטי שנוצר עבורנו וששמרנו על המחשב. ולכן אנו יכולים להתחבר באמצעות המפתח הפרטי שלנו אל המכונה.
אם איבדנו את המפתח הפרטי, נצטרך לשחזר גישה למכונה על ידי יצירת מפתח חדש.
במידה ונרצה ליצור מפתח חדש, נוכל ליצור אותו באמצעות הפקודה:
ssh-keygen -t rsa
הפקודה הזו יוצרת 2 קבצים, קובץ-מפתח פרטי, וקובץ-מפתח ציבורי.
תוך כדי שהפקודה מתבצעת, אנו נתבקש לציין כתובת עם שם הקובץ שנרצה שיכיל את המפתח הפרטי. אם נציין רק שם של קובץ, אז הוא יישמר בתיקייה הנוכחית שממנה הרצנו את הפקודה.
כמו כן, יוצע לנו להוסיף passphrase, שזו שכבת אבטחה נוספת (סיסמה) על החיבור. אפשר לבחור סיסמה כלשהי או לחילופין אפשר להשאיר את זה ריק.
כאמור, בסוף הפעולה, יווצרו שני קבצים, האחד עם השם שבחרנו, והשני עם אותו שם וסיומת pub, שזהו הקובץ עם המפתח ה “ציבורי”.
בשלב הבא, בשביל שהמפתח הפרטי ששמור אצלינו יוכל להיות בשימוש לצורך התחברות למכונה, נרצה להוסיף את המפתח הציבורי שזה עתה העתקנו למכונה, בתוך קובץ ה-authorized_keys.
לשם כך נצטרך “לערוך” את הקובץ authorized_keys.
אמנם טרם למדנו לערוך קבצים, אבל עקרונית מה שנרצה לעשות זה להוסיף את הטקסט שמופיע בתוך המפתח הציבורי, לתוך הקובץ הקיים authorized_keys בשורה חדשה.
בהזדמנות זו אספר לכם גם שבאמצעות SSH אפשר גם להעביר קבצים בין המחשב שלנו לבין המכונה:
scp -i private_key.pem some_file ubuntu@:
את ה-ip נחליף בכתובת ה-ip של המכונה, ואת destination נחליף בכתובת כלשהי בצד המכונה.
לדוגמה:
scp -i private_key.pem new_key.pub ubuntu@18.159.202.26:/home/ubuntu/temp
הקובץ כעת יופיע במכונה בכתובת שציינו.
הערה: אם נוסיף את הפרמטר r-, אז זה יאפשר לנו להעביר גם תיקייה עם התוכן שלה.
אם נציין את שם הקובץ בסוף הפקודה במקום באמצע , אז הפעולה תהיה הפוכה – תבוצע העתקה מתוך המקור שצויין בשרת, אל המקור שציינו בסוף הפקודה (אם נרצה להעתיק קבצים מהשרת אלינו).
בפרק הבא, נלמד על עבודה עם פקודות של linux. אם כבר יש לכם ניסיון בפקודות כאלו, ואתם מרגישים בנוח עם עורך קוד כלשהו (vim או nano), ואתם יודעים לפתוח/לסגור/למחוק קבצים, ותיקיות, לבצע חיפוש בסיסי וכו’, אז אתם יכולים לדלג על הפרק הבא.
בפרק שלאחריו, אנו נחזור ללמוד על דברים שקשורים להגדרות ענן, אם זה שירותים נוספים של AWS, או עבודה עם תוכנות-שרת, כמו ngnix וכדומה.
