גם אתם יכולים להקים תשתית בכמה שורות, ובשפה שלכם
עולם המחשוב הולך ומשתנה בקצב מהיר, רוב השירותים שאנחנו צורכים או מפתחים רצים על מכונות וירטואליות בארגון או בענן, כאשר המעבר ממכונות פיזיות לווירטואליות הביא גם בשורה אשר אפשרה להקים ולהגדיר תשתיות עבור הפיתוח שלנו בעזרת קוד, או בקיצור, IaC – Infrastructure as code.
כלומר, אנחנו יכולים להקים את מערכת ההפעלה, ה-DB, שרת ה-Web, ה-Proxy ואת יתר הרכיבים הנחוצים למערכות שלנו בלחיצת כפתור (או כמה פקודות ב-CLI לרציניים שבינינו), דבר המאפשר הקמה של סביבות במהירות וכמובן מאפשר לשמור על אחידות בין הסביבות השונות (למשל בין סביבת הבדיקות לסביבת הייצור).
קיימים מספר כלים אשר מאפשרים לעשות זאת, ביניהם ניתן למנות את Terraform, Chef, Puppets, AWS Cloud Formation ועוד כלים נוספים.
בקיצור, נשמע חלום שהתגשם, אך החסרון של רוב הכלים האלו הוא שצריך ללמוד את השפה שלהם וכיצד הם עובדים, מה שמקשה על המפתחים. לפער הזה, נכנס איש ה-DevOps שאמור לגשר בין הידע והצורך של המפתח לבין בניית האוטומציה של התשתית.
התהליך הזה בין המפתח לאיש ה-DevOps לא תמיד עובד בצורה חלקה, לא תמיד המפתח יודע להסביר את הצורך המלא של האפליקציה,
ואת הפער הזה ניתן יהיה לפתור כאשר המפתח יתעמק בתשתית, יבין את רכיבי המערכת וידע גם לכתוב את הקוד שיגדיר את התשתית וכל זה בשפה שהוא כבר מכיר.
לכאן נכנס AWS CDK – AWS Cloud Development Kit, כלי שהוא בעצם מעטפת לקוד פתוח מבוסס NodeJS אשר מאפשר כתיבת IaC עבור AWS (נכון לכתיבת שורות אלו) בשפות שרוב המפתחים מכירים: JavaScript, TypeScript, Java, Python ו- #C.
שימוש בשפות אלו מקנה שליטה טובה יותר למפתחים, מאפשר שימוש באובייקטים ומחלקות, דבר אשר מוריד את פשטות הקוד ומכיוון שהוא כתוב בקוד פתוח, מפתחים אחרים יכולים לתרום מהידע והזמן שלהם לשיפור הכלי.
לצורך הדגמה של הפשטות שלו, נבנה RestAPI שמחזיר את תוכן הקובץ my_file.txt מ-S3 Bucket.
לצורך כך אנחנו צריכים:
1 Lambda Function
1 API Gateway
1 S3 Bucket
לאחר הורדה והגדרה של ה-CDK (לינק להסבר בסוף הפוסט),
ניצור תיקייה עבור הפרויקט ונאתחל אותה ע”י הרצה של הפקודה:
מקרה הזה, בחרתי להשתמש ב- Python, אבל אתם יכולים לבחור בשפה אחרת כמובן.
נתקין את הספריות הרלוונטיות לפרויקט שלנו שמטפלות ב: S3, Lambda ו- APIGateWay:
נעבור על חלק מהקוד, את הקוד המלא יהיה ניתן להוריד מה-Git שלי:
בחלק הראשון של הקוד, הגדרנו את ה- Lambda שלנו, קבענו שסביבת הריצה שלה היא Python 3.8,
הקוד שלה כתוב בקובץ mylambda אשר נמצא בתיקייה lambda תחת הפרוייקט.
לאחר מכן, יצרנו S3 Bucket ונתנו הרשאת קריאה ל- Lambda,
ה-CDK ידע להוסיף לRole של ה Lambda הרשאת קריאה מה-Bucket בצורה אוטומטית, וכל זה בשורת קוד אחת.
מכיוון שאנחנו לא יודעים מה יהיה שם ה-Bucket עד לרגע היצירה, נוסיף את שם ה- Bucket למשתנה המערכת של ה- Lambda.
בחלק האחרון, הגדרנו את ה API Gateway Endpoint עבור ה- Lambda שלנו.
נעלה את מה שכתבו לחשבון ה-AWS שלנו באמצעות הפקודה
מרגע זה, ה-CDK מבצע השוואה בין המצב הקיים בענן לקוד, הוא מבצע המרה של הקוד שלנו.
ל- AWS CloudFormation, מעלה אותו ואת כל שאר הרכיבים שכתבנו, כמו קוד ה- Lambda ל- S3 Bucket ייעודי עבור ה- CDK ולסיום מפעיל את ה- CloudFormation אשר מבצע בפועל את ההגדרה של כל הרכיבים.
פקודות נוספות:
- cdk diff – מבצעת השוואה בין הקוד שלנו למה שקיים בפועל, ניתן להריץ אותה בזמן הפיתוח כדי לוודא שאנחנו נוגעים ברכיבים הנכונים.
- cdk synth – מבצעת המרה של הקוד שכתבנו ל- CloudFormation, ניתן לקבל את התוצאה בפורמט JSON או YAML.
- cdk destroy – מוחקת את כל הרכיבים מהענן ומחזירה את המצב לקדמותו.
- cdk bootstrap – מכינה את החשבון שלנו לעבודה עם ה- cdk.
קישורים שימושיים:
https://github.com/idanshemesh/cdk_s3__lambda_example – קוד המקור לדוגמא.
https://docs.aws.amazon.com/cdk – מדריך למפתח.
https://cdkworkshop.com – סדנא מעולה, שמסבירה בפשטות כיצד עובדים ומגדרים את ה- CDK.
המאמר נכתב ע”י עידן שמש, ארכיטקט בכיר, CloudBuzz
לפרטים נוספים, ניתן לפנות אלינו למייל: Info@cloudbuzz.co.il
המאמר פורסם במקור ב Israel Cloud
לינק למאמר