ניהול תשתיות בענן עם AWS CloudFormation.

ניהול תשתיות בענן עם AWS CloudFormation.

AWS CloudFormation לניהול תשתיות בענן

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

הקדמה ל-AWS CloudFormation

AWS CloudFormation הוא שירות של Amazon Web Services שמאפשר להגדיר ולנהל תשתיות בענן באמצעות קבצי תצורה. בקבצים אלו, שנקראים תבניות (Templates), ניתן להגדיר את כל המשאבים הנדרשים לפרויקט שלכם, כולל שרתים, רשתות, מסדי נתונים, ואחסון. לאחר מכן, ניתן להשתמש ב-CloudFormation כדי לפרוס את התשתיות הללו בצורה אוטומטית, לנהל את הגרסאות שלהן, ולבצע שינויים בצורה מבוקרת.

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

התקנה והגדרת AWS CLI

לפני שנוכל להתחיל להשתמש ב-CloudFormation, יש להגדיר את AWS CLI (Command Line Interface) במחשב שלכם. AWS CLI מאפשר לנהל את שירותי AWS דרך שורת הפקודה, כולל יצירה וניהול של תבניות CloudFormation.

להתקנת AWS CLI, השתמשו בפקודות הבאות:

curl "https://awscli.amazonaws.com/AWSCLIV2.pkg" -o "AWSCLIV2.pkg"
sudo installer -pkg AWSCLIV2.pkg -target /

לאחר ההתקנה, תוכלו להגדיר את AWS CLI באמצעות הפקודה aws configure ולהזין את פרטי החשבון שלכם ב-AWS (Access Key ו-Secret Key).

יצירת תבנית (Template) ראשונה ב-CloudFormation

תבניות ב-CloudFormation נכתבות בפורמט JSON או YAML, והן מכילות את ההגדרות של המשאבים שברצונכם ליצור. להלן דוגמה לתבנית פשוטה ב-YAML שמגדירה שרת EC2:

AWSTemplateFormatVersion: '2010-09-09'
Resources:
  MyEC2Instance:
    Type: 'AWS::EC2::Instance'
    Properties:
      InstanceType: t2.micro
      ImageId: ami-0c55b159cbfafe1f0
      KeyName: my-key-pair

בתבנית הזו, אנחנו יוצרים משאב מסוג EC2 Instance עם סוג t2.micro ומשתמשים ב-AMI מסוים ליצירת השרת. התבנית כוללת גם את שם מפתח הגישה (Key Pair) המשמש לחיבור לשרת.

כדי לפרוס את התשתית המוגדרת בתבנית, יש להריץ את הפקודה הבאה ב-AWS CLI:

aws cloudformation create-stack --stack-name MyFirstStack --template-body file://my-template.yaml

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

ניהול גרסאות של תשתיות

אחד היתרונות של ניהול תשתיות כקוד עם CloudFormation הוא היכולת לנהל גרסאות של התשתיות שלכם בצורה מבוקרת. כל שינוי שנעשה בתבנית ניתן לשחזור, והיסטוריית השינויים מתועדת. לדוגמה, אם אתם רוצים לשדרג את ה-EC2 Instance מ-t2.micro ל-t2.medium, כל שעליכם לעשות הוא לעדכן את התבנית ולהפעיל את הפקודה הבאה:

aws cloudformation update-stack --stack-name MyFirstStack --template-body file://my-template.yaml

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

שימוש בפרמטרים (Parameters) ותפוקות (Outputs)

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

להלן דוגמה לתבנית עם פרמטרים:

AWSTemplateFormatVersion: '2010-09-09'
Parameters:
  InstanceTypeParameter:
    Type: String
    Default: t2.micro
    AllowedValues:
      - t2.micro
      - t2.small
      - t2.medium
Resources:
  MyEC2Instance:
    Type: 'AWS::EC2::Instance'
    Properties:
      InstanceType: !Ref InstanceTypeParameter
      ImageId: ami-0c55b159cbfafe1f0
      KeyName: my-key-pair

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

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

להלן דוגמה להוספת Outputs לתבנית:

Outputs:
  InstanceId:
    Description: "The Instance ID"
    Value: !Ref MyEC2Instance
  PublicIP:
    Description: "The Public IP of the EC2 instance"
    Value: !GetAtt MyEC2Instance.PublicIp

Outputs אלו יציגו את ה-Instance ID ואת הכתובת ה-IP הציבורית של השרת שנוצר לאחר פריסת הסטאק.

שימוש ב-StackSets לניהול סביבות מרובות

בארגונים גדולים עם מספר רב של סביבות (Production, Staging, Development וכו'), נדרש לנהל את אותן תשתיות בסביבות שונות. AWS CloudFormation StackSets מאפשר לפרוס ולנהל תשתיות זהות במספר חשבונות או אזורים (Regions) של AWS.

להלן דוגמה לשימוש ב-StackSets:

1. הגדירו את התבנית שברצונכם לפרוס במספר סביבות.

2. צרו StackSet חדש דרך AWS Management Console או AWS CLI:

aws cloudformation create-stack-set --stack-set-name MyStackSet --template-body file://my-template.yaml

3. הוסיפו פריסה חדשה (stack instance) לכל סביבה שבה תרצו לפרוס את התבנית:

aws cloudformation create-stack-instances --stack-set-name MyStackSet --accounts 123456789012 --regions us-east-1 us-west-2

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

שימוש במודולים (Modules) לשימוש חוזר

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

להלן דוגמה ליצירת מודול ב-CloudFormation:

AWSTemplateFormatVersion: '2010-09-09'
Resources:
  MyVPC:
    Type: 'AWS::EC2::VPC'
    Properties:
      CidrBlock: 10.0.0.0/16
      Tags:
        - Key: Name
          Value: MyVPC

  MySubnet:
    Type: 'AWS::EC2::Subnet'
    Properties:
      VpcId: !Ref MyVPC
      CidrBlock: 10.0.1.0/24
      MapPublicIpOnLaunch: true
      Tags:
        - Key: Name
          Value: MySubnet

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

סיכום

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

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

שתפו את הפוסט

דילוג לתוכן