להקים הכל מאפס

13/7/2021, לפני 3 חודשים

הבלוג הזה, כפי שכתוב כאן למטה, מופעל באמצעות Gatsby. גטסבי הוא כלי המאפשר יצירה של אתר סטטי - כלומר, אתר שכולו בצד לקוח, בדפדפן, ולא שולח בקשות לשום שרת. האתר “מתארח” באמצעות GitHub Pages, שמאפשרים אירוח חינמי של אתרים סטטיטיים. הבעיה עם אתר סטטי, באופן טבעי, זה שהוא סטטי, כלומר, אין לו איפה לשמור תגובות, ולכן אי אפשר להוסיף תגובות. אז מה עושים? מוסיפים בקאנד!

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

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

אבל, מכיוון שאנחנו בשנת 2021, וכפי שיש דרך מודרנית לכתוב קוד, אז יש גם דרך מודרנית להקים תשתית: Infrastructure as Code. או בקיצור, IaC.

רגע, אבל מה זה אומר בכלל תשתית כקוד?

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

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

resource "azurerm_resource_group" "rg" {
  name     = var.resource_group_name
  location = var.resource_group_location
}

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

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

אז מה הייתי צריך להגדיר:

  • יצירה של הבסיס באז’ור: רשתות, Resource group וכו’
  • דאטה בייס של פוסטגרס
  • קוברנטיס מנוהל - AKS - יארח את השירות שיאפשר את הגישה לדאטה בייס.
  • שהכל יעבוד

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

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


הערות, מענות וכו'
נכתב על ידי אסף ספיר מתכנת, לשעבר פרמדיק ואח.
© Assaf Sapir, 2021, Built with Gatsby. Hosted with GitHub Pages.
Source code on my GitHub.