קצת על קוברנטיס (Kubernetes)

קצת על קוברנטיס (Kubernetes)

קוברנטיס הוא כלי לאוטומטציה וניהול של קונטיינרים.

ההיררכיה בקוברנטיס היא:
Cluster – > Node – > Pod

למה אנחנו צריכים אותו?

  • לאפשר לקונטיינרים לתקשר בניהם כאשר הם נמצאים בNODES שונים
  • למנוע כפילות של כתובת IP זהה בין דוקרים שממוקמים בNODES שונים
  • כשמחליפים קונטיינר – הוא בדרכ יקבל כתובת IP חדשה שזה מצב שאנו לא תמיד מעוניינים בו.
  • היחידה הקטנה ביותר בקוברנטיס נקראת POD,
    הPOD יכול להכיל קונטיינר אחד או קבוצה של קונטיינרים. כל הקויינטנרים שנמצאים באותו POD יקבלו את אותה כתובת IP, וכל POD שממוקם בקלסטר יקבל כתובת IP ייחודית באותו IP SPACE.
  • כל הקונטיינרים יכולים לתקשר עם קונטיינרים אחרים ללא NAT.
  • כתובת הIP שהקונטיינר מזהה ככתובת IP ששייכת לו היא אותה כתובת IP שהקונטיינרים האחרים רואים כשייכת להם.

הNetwork Overlay אחראי על חלוקת כתובת הIP.
הEtcd הוא Key-Value דאטאבייס לאובייקטים של קוברנטיס
הKubelet הוא הסרביס של קוברנטיס שרץ על כל הנודים בקלסטר – גם במאסטר וגם בWORKERS.


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

kubectl get pods -n kube-system

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

kube-apiserver
זהו הAPI הראשי של קוברנטיס. הוא מבוסס REST. למשל הפקודה שהרצנו מקודם – kubectl get pods מבצעת למעשה פנייה לAPI.

etcd
מנהל את נושא המידע – סטורג של הקלסטר. לא מדובר בסטורג' שמאחסן בתוכו את האתר את הקבצים שלנו למשל, מדובר בסטורג שמחזיק את הדאטא שקשור לכמה PODS רצים כרגע, NODES, איזה כתובת IP יש לכל אחד וכו – כל המידע שדרוש לקוברנטיס בשביל לנהל ולהחזיק את הקלסטר שלנו.
במידה ויש לנו יותר מMASTER אחד, etcd ידאג שהדאטא הזה יהיה מסונכרן בין כל הMasters שלנו.

kube-controller-manager
מאחד בתוכו רכיבים שונים לחבילה אחת.
הוא מחזיק בתוכו את כל השירותים והספריות הדרושות לקוברנטיס. אם אנו מתייחסים ל jube-apiserver כפרונט של קוברנטיס, אזי ה kube-controller-manager הוא למעשה הבקאנד של קוברנטיס.

kube-scheduler
אחראי על יצירת הPODS, מתי להריץ אותם, מתי לכבות אותם, באיזה Node עצמאי להריץ אותם וכו.

kube-proxy
כל NODE זקוק לkube-proxy שלנו, הוא אחראי על התקשורת בין הNODES השונים על ידי הוספת כללי Firewall. כאשר POD בNODE X צריך לדבר עם POD שממוקם בNODE Y חייב להיות ROUTE וRULE שמאפשר את זה.

kubelet
הAGENT שמריץ את הקונטיינרים שלנו בכל NODE. הוא בעצם המתווך בין הAPI של קוברנטיס לדוקר. (Docker במקרה שלנו, אגב קוברנטיס תומך לא רק בדוקר).
הוא רץ כSERVICE ולא כPOD (כי הוא אחראי למעשה על הרצת הקונטיינר) ולכן הוא לא מופיע לנו ברשימת הPODS. כדי לראות אותו נריץ את הפקודה:

sudo systemctl status kubelet

מצאתם טעות? הערות? שאלות? הסתדרתם? נתקעתם? כתבו לי בתגובות!

מה זה Node וקלסטרינג בקוברנטיס

באחד המדריכים, יצרנו קוברנטיס קלסטר עם 3 Nodes, כל Node הוא בעצם שרת/מכונה שמריץ קונטיינרים (Pod).

לכל קוברנטיס קלסטר חייב להיות לפחות Node אחד שהוא יהיה הNode המנהל – הוא מריץ בתוכו את הKubernetes API ואת שאר כלי הניהול של קוברנטיס, שאר הNodes מכונים Workers.

כל Node מורכב מPod אחד או יותר.

כדי לראות את רשימת הNodes שלנו נריץ את הפקודה הבאה:

kubectl get nodes

כדי לקבל פרטים נוספים על Node ספציפי נריץ את הפקודה הבאה:

kubectl describe node $our_node_name

כאשר $our_node_name מייצג את שם הNode הספציפי.



מצאתם טעות? הערות? שאלות? הסתדרתם? נתקעתם? כתבו לי בתגובות!

מה זה Kubernetes Pod?

Pods הוא היחידה הבסיסית ביותר של קוברנטיס. כל Pod מורכב מקונטיינר אחד או יותר (בדרכ יש קונטיינר אחד בכל POD אבל ניתן שיהיה יותר מקונטיינר אחד), כתובת IP בתוך הקוברנטיס קלסטר ואיחסון (Storage).
כל Pod אחד או יותר יוצרים ביחד Node. קלסטר מורכב מNode אחד או יותר.

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

כדי ליצור POD, אנו משתמשים בקובץ YAML שמכיל את הפרטים של אותו POD.
לדוגמא, אם נירצה ליצור POD שמריץ קונטיינר Nginx ניצור קובץ בשם ourtamlefilename.yaml לדוגמא עם הפרטים הבאים:

apiVersion: v1
kind: Pod
metadata:
  name: nginx
spec:
  containers:
  - name: nginx
    image: nginx

בקובץ הנל, אנו בעצם מבקשים ליצור POD בשם nginx, ובנוסף מבקשים לבנות בו דוקר קונטיינר בשם nginx כאשר אנו מציינים לדוקר להשתמש בimage של nginx.

ואז נריץ את הפקודה

kubectl create -f ouryamlfilename.yaml

ניתן לדלג על שלב יצירת הקובץ על ידי העברה של התוכן ישירות לkubectl על ידי הפקודה הבאה לדוגמא:

cat << EOF | kubectl create -f -
apiVersion: v1
kind: Pod
metadata:
  name: nginx
spec:
  containers:
  - name: nginx
    image: nginx
EOF

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

כדי לראות את כל הPods הקיימים שלנו נריץ את הפקודה

kubectl get pods

וכדי לראות פרטים נוספים אודות POD נריץ את הפקודה הבאה כאשר במקרה שלנו nginx זהו שם הPod שלנו

kubectl describe pod nginx

למחיקת הPOD שלנו נשתמש בפקודה הבאה:

kubectl delete pod nginx

מצאתם טעות? הערות? שאלות? הסתדרתם? נתקעתם? כתבו לי בתגובות!

יצירת kubernetes קלסטר בסיסי בקלות

מדריך ליצירת kubernetes קלסטר בסיסי בקלות

לא יודעים מה זה קוברנטיס? ליחצו כאן


פירוט השלבים:
שלב 1: התקנת DOCKER
שלב 2: התקנת kubeadm, kubelet ו kubectl
שלב 3: הפעלת המסטר נוד (Master Node) שלנו
שלב 4: צירוף 2 הNODES שלנו לקלסטר
שלב 5: הגדרות רשת עם Flannel

מכונה = Node
לשם ההדגמה אנו ניצור kubernetes קלסטר שמורכב מ3 מכונות , 2 מכונות שיהיו הNODES ומכונה אחת שתהיה הNode Master שלנו.
לשרת המסטר שלנו נקרא k8master , לשרת NODE הראשון נקרא k8node1 ולשני k8node2
ההפצה שבחרתי לעבוד איתה בהדגמה היא Ubuntu 18 LTS

בMASTER שלנו אנו נתקין:
* Docker
* Kubeadm
* Kubelet
* Kubectl
* Control Plane

בנודים שלנו נתקין:
* Docker
* Kubeadm
*Kybelet
*Kubectl

ולשם קישוריות רשת נשתמש בFlannel


השלב הראשון – התקנת DOCKER

השלב הראשון הוא להתקין DOCKER בכל אחת מהמכונות שלנו (במקרה שלנו 3 מכונות שמריצות אובונטו), להסבר איך להתקין ניתן ללחוץ כאן


השלב השני: התקנת kubeadm, kubelet ו kubectl

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


השלב השלישי: הפעלת המסטר נוד (Master Node) שלנו

בשרת המסטר שלנו נריץ את הפקודה הבאה: (לוקח לה בדרכ כמה דקות עד שהפקודה מסיימת את הפעולה)

sudo kubeadm init --pod-network-cidr=10.244.0.0/16

אחרי כמה דקות, נקבל פלט שמכיל את הפקודה אותה אני נצטרך להריץ אחכ בכל Node שלנו על מנת שהוא יוכל להצטרף לקלסטר. חשוב לשמור את הפקודה ואת הטוקן – כי בלעדיו לא תוכלו לצרף Nodes לCluster שלכם. במקרה שלי הפלט שהתקבל הוא

kubeadm join 172.31.20.227:6443 --token k1vs3a.4i3zgo4zw725o3y7 --discovery-token-ca-cert-hash sha256:c94bb285d99e80c3674d8cc8951f957231b35431d5e0be982d4c0e9618156e06

לאחר מכן נריץ את הפקודה הבאה:

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

ולבסוף נוודא שהכל בוצע במסטר שלנו על ידי הפקודה:

kubectl version

כאשר הפלט שאנו נקבל אמור להיות דומה ל:


Client Version: version.Info{Major:"1", Minor:"12", GitVersion:"v1.12.7", GitCommit:"6f482974b76db3f1e0f5d24605a9d1d38fad9a2b", GitTreeState:"clean", BuildDate:"2019-03-25T02:52:13Z", GoVersion:"go1.10.8", Compi3f1e0f5d24605a9d1d38fad9a2b", GitTreeState:"clean", BuildDate:"2019-03-25T02:52:13Z", GoVersion:"go1.10.8", Compiler:"gc", Platform:"linux/amd64"}                                                  dea457638b614ee17ef234dc34a6", GitTreeState:"clean", BuildDate:"2019-07-08T03:40:54Z", GoVersion:"go1.10.8", Comp
Server Version: version.Info{Major:"1", Minor:"12", GitVersion:"v1.12.10", GitCommit:"e3c134023df5dea457638b614ee17ef234dc34a6", GitTreeState:"clean", BuildDate:"2019-07-08T03:40:54Z", GoVersion:"go1.10.8", Compiler:"gc", Platform:"linux/amd64"}

אם נריץ את הפקודה הבאה במסטר שלנו

kubectl get nodes

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

user@servername:~$ kubectl get nodes
NAME                          STATUS     ROLES    AGE    VERSION
servername.serverdomain.com   NotReady   master   4m3s   v1.12.7

השלב הרביעי: צירוף 2 הNODES שלנו לקלסטר

בכל אחד מהשרתים האחרים שלנו, k8node1 ו k8node2 נריץ את הפקודה שקיבלנו (בשלב 3) מקודם שמכילה את הטוקן. במקרה שלי היא הייתה:

kubeadm join MYIPADDRESS:6443 --token k1vs3a.4i3zgo4zw725o3y7 --discovery-token-ca-cert-hash sha256:c94bb285d99e80c3674d8cc8951f957231b35431d5e0be982d4c0e9618156e06

אחרי שהרצנו את הפקודה ב2 השרתים (ייתכן ותתבקשו להוסיף sudo) נריץ בשרת הMaster שלנו (k8master) שוב את הפקודה הבאה:

user@servername:~$ kubectl get nodes

NAME                          STATUS     ROLES    AGE   VERSION
servername1.serverdomain.com   NotReady   master   10m   v1.12.7
servername2.serverdomain.com   NotReady   <none>   40s   v1.12.7
servername3.serverdomain.com   NotReady   <none>   85s   v1.12.7

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


השלב החמישי: הגדרות רשת עם Flannel

לקריאה מקדימה על networking בקוברנטיס:

בכל 3 המכונות (Nodes) – כולל מכונת הMaster שלנו נריץ את הפקודות הבאות

echo "net.bridge.bridge-nf-call-iptables=1" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p

בשרת הMaster שלנו – ורק בו! נריץ את הפקודה הבאה:

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/bc79dd1505b0c8681ece4de4c0d86c5cd2643275/Documentation/kube-flannel.yml

לאחר מכן, כשנריץ את הפקודה:

kubectl get nodes

שוב, אנו אמורים לראות את 3 המכונות שלנו אבל הפעם כולן יהיו בסטטוס Ready.
נוכל להריץ גם את הפקודה הבאה:

kubectl get pods -n kube-system

שתאפשר לנו לראות גם את הPods שקשורים לFlannel


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



מצאתם טעות? הערות? שאלות? הסתדרתם? נתקעתם? כתבו לי בתגובות!

התקנת kubeadm, kubelet ו kubectl בשרת Ubuntu 18 LTS

מה זה kubeadm?

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

מה זה kubelet?

kubelet הוא שירות (Agent) שרץ בכל קוניינר שקיים בכל Node שלנו, כל שרת שיריץ קונטיינר זקוק לשירות kubelet.

מה זה kubectl?

kubectl הוא כלי command line שמאפשר לנו לתקשר עם הקלסטר (Cluster) שלנו ולנהל אותו.


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

curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -

cat << EOF | sudo tee /etc/apt/sources.list.d/kubernetes.list
deb https://apt.kubernetes.io/ kubernetes-xenial main
EOF

sudo apt-get update

sudo apt-get install -y kubelet=1.12.7-00 kubeadm=1.12.7-00 kubectl=1.12.7-00

sudo apt-mark hold kubelet kubeadm kubectl

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

kubeadm version

סיימתם!


קצת הסברים

הפקודה הזאת מוסיפה את מפתח הPGP

curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -

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

cat << EOF | sudo tee /etc/apt/sources.list.d/kubernetes.list
deb https://apt.kubernetes.io/ kubernetes-xenial main
EOF

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

sudo apt-mark hold kubelet kubeadm kubectl

מצאתם טעות? הערות? שאלות? הסתדרתם? נתקעתם? כתבו לי בתגובות!

איך מתקינים DOCKER באובונטו 18 LTS

איך להתקין DOCKER באובונטו 18 LTS

הפקודות הראשונות שנריץ הן:

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

sudo add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
   $(lsb_release -cs) \
   stable"

sudo apt-get update

sudo apt-get install -y docker-ce=18.06.1~ce~3-0~ubuntu

sudo apt-mark hold docker-ce

ולאחר מכן נריץ את הפקודה הבאה על מנת לבדוק שDOCKER הותקן בהצלחה, הפקודה אמורה להציג לנו את מס הגירסה של הדוקר שהתקנו

sudo docker version

ככה פשוט!
לפרטים נוספים באתר Docker ליחצו כאן


קצת הסברים

בפקודה הזאת אנו מוסיפים את מפתח הPGP של החבילה

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

הפקודה הבאה מתקינה את גירסת הקהילה של DOCKER, אני בחרתי להתקין גירסה ספציפית – במקרה שלכם יכול להיות שתירצו להתקין גירסה אחרת

sudo apt-get install -y docker-ce=18.06.1~ce~3-0~ubuntu

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

sudo apt-mark hold docker-ce

מצאתם טעות? הערות? שאלות? הסתדרתם? נתקעתם? כתבו לי בתגובות!

תמיד רציתם כלי GUI שיאפשר לכם לנהל את הקונטיינרים שלכם בצורה נוחה? תכירו את Portainer

תמיד רציתם ממשק GUI שתוכלו לנהל באמצעות את הדוקרים שלכם ואת Docker Swarm? אז תכירו את Portainer!

בעיקרון כמעט כל מה שאתם יכולים לעשות דרך הDocker Command Line אתם יכולים לעשות באמצעות Portainer והבונוס שPortainer בגירסה הקהילתית שלו הוא חינמי לחלוטין

Portainer למעשה הוא קונטיינר בעצמו, לכן ניצור לו קונטיינר שיוכל לרוץ עליו.

הדבר הראשון שנעשה הוא ליצור Volume לPortainer, נריץ את הפקודה:

docker volume create portainer_data

בשלב הבא ניצור את הקונטיינר עצמו ל Portainer

docker container run -d --name portainer -p 8080:9000 \
--restart=always \
-v /var/run/docker.sock:/var/run/docker.sock \
-v portainer_data:/data portainer/portainer

בשורה הזאת אנו מגדירים לקונטיינר שלנו את הVolume הראשון שלו שהוא בעצם חיבור הSocket לשרת DOCKER שלנו.

-v /var/run/docker.sock:/var/run/docker.sock \

שימו לב לשורה הזאת

v portainer_data:/data portainer/portainer

שבה בעצם אנו מגדירים לקונטיינר לעשות שימוש בVolume שיצרנו בשבילו. את זה אנחנו עושים בשביל לוודא שהתוכן של הקונטיינר שלנו יהיה persistence.
כמו כן, אנו חושפים את פורט 9000 בקונטיינר של Portainer לפורט 8080 במחשב שלנו (או בשרת DOCKER).

נריץ את הפקודה הבאה כדי לראות את הקונטיינרים שלנו

docker container ls
צפייה ברשימת הקונטיינרים שלנו
ואכן אנו רואים את הקונטיינר שיצרנו.

ניכנס לכתובת: http://localhost:8080 (במידה ואנו במחשב הפיתוח שלנו) או לכתובת הIP הציבורית של שרת הDocker שלנו ונקבל את המסך בו אנו צריכים להגדיר שם משתמש וסיסמא לפאנל של Portainer

יצירת משתמש ראשון לPortainer

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

הגדרת Portainer להתחבר לשרת Docker לוקלאי

והרי לנו מסך הבית של Portainer שכבר מציג לנו את שרת הDocker הלוקלאי שלנו

והרי לנו מסך הבית של Portainer שכבר מציג לנו את שרת הDocker הלוקלאי שלנו

נלחץ לדוגמה על שרת הדוקר הלוקאלי שלנו ונקבל מידע מהיר

נלחץ לדוגמה על שרת הדוקר הלוקאלי שלנו ונקבל מידע מהיר

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

כדי ליצור קונטיינר חדש לדוגמה, נלחץ על Containers

כדי ליצור קונטיינר חדש לדוגמה, נלחץ על Containers

ובמסך הבא נלחץ על Add Container

ובמסך הבא נלחץ על Add Container

ומשם נוכל ליצור את הקונטיינר שלנו.
ממליץ לכם לחקור את כל האפשרויות המדהימות שPortainer נותן לנו ליצירה וניהול. מדובר בלי נוח ומומלץ בחום!

טופס יצירת קונטיינר חדש ב Portainer

מצאתם טעות? הערות? שאלות? הסתדרתם? נתקעתם? כתבו לי בתגובות!

יצירת טריגר CodeCommit לAWS SNS על מנת לקבל התראות CodeCommit

SNS – הוא שירות שמנהל שליחת הודעות, לדוגמה הודעות SMS, מיילים וכו.

את הטריגרים אנחנו יכולים ליצור באמצעות הAWS Console וגם כמובן באמצעות הAWS Cli, בהתאם למה שנוח לנו ובהתאם למה שנכון למיקרה והם מאפשרים לנו בעצם לקבל התראות על פעולות שקרו בGit Repo שלנו.

על מנת שנוכל ליצור טריגר לSNS כדי לקבל התראות CodeCommit עלינו לעמוד בתנאים הבאים:
1. הריפו שלנו בCodeCommit חייב להיות ממוקם באותו Region של הSNS Topic שלנו.
2. חייב להיות לנו SNS Topic קיים, ואם אין, אז כמובן צריכים ליצור אותו.


לצורך ההדגמה, יצרתי בCodeCommit ריפו בשם "GitRepoWithTriggersDemo"

יצרנו גיט ריפו בשם GitRepoWithTriggersDemo לשם ההדגמה.

עכשיו ניצור SNS Topic אליו נחבר את הטריגר שלנו:
ניכנס לAWS SNS ונלחץ על הכפתור Create Topic

מסך AWS SNS
נכנס לAWS SNS ונילחץ על הכפתור Create Topic על מנת ליצור "נושא" חדש

נבחר שם לנושא שלנו, במיקרה שלי בחרתי את השם המקורי "MyDemoTopic", נגלול את המסך למטה ונלחץ על הכפתור הכתום "Create Topic"

יצירת AWS SNS Topic חדש
נבחר שם לנושא שלנו, במיקרה שלי בחרתי את השם המקורי "MyDemoTopic"

אחרי שיצרנו את הSNS Topic, אנו צריכים לבחור את ה"מנויים" לנושא שלנו, "מנויים" הם אלו שיקבלו למעשה את ההודעות שאנו נפרסם בTopic. בדוגמה שלנו אנו נגדיר מנויים מסוג "דואר אלקטרוני", באותה מידה יכלנו כמובן להגדיר "SMS" אם היינו רוצים שהם יקבלו הודעת SMS. כדי להגדיר אותם נלחץ בתפריט הצדדי על Subscriptions ואז נלחץ על הלחצן "Create Subscription"

יצירת Subscriptions לSNS Topic מסך ראשון
כדי להגדיר אותם נלחץ בתפריט הצדדי על Subscriptions ואז נלחץ על הלחצן "Create Subscription"

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

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

הודעת מייל תישלח לכתובת מייל שהזמנו שמבקשת מאיתנו לאשר את המינוי לAWS Notifications לSNS Topic.

אישור רישום בדואל לנושא SNS
הודעת מייל תישלח לכתובת מייל שהזמנו שמבקשת מאיתנו לאשר את המינוי לAWS Notifications לSNS Topic.

עכשיו ניכנס בחזרה למסך הRepo שלנו בCodeCommit, נלחץ על Settings, נבחר את הטאב Triggers ונלחץ על Create Trigger

הוספת טריגר לריפו שלנו בCodeCommit

נבחר שם לטריגר החדש שלנו, אני בחרתי "NewBranch", נסמן את סוג האירוע (EVENT) שאנו מעוניינים שהטריגר שלנו יאזין לו, במקרה שלנו "Create Branch Or Tag". בסוג השירות אליו אנו מעוניינים שהטריגר שלנו ייתחבר נבחר "Amazon SNS" – ואז נבחר את הSNS Topic הרלוונטי – במקרה שלנו קראנו לו MyDepoTopic

נלחץ על Test Trigger וניגש לתיבת הדואל שהגדרנו בשלב הקודם (למנוי) ונוודא שקיבלנו הודעת מייל. ואכן קיבלנו הודעה.

נלחץ על לחצן "Create Trigger" כדי לשמור ולהפעיל את הטריגר החדש שיצרנו.

הטריגר שלנו נוצר בהצלחה.

עכשיו, בכל פעם שניצור Branch חדש בריפו שלנו, כל מי שרשום לSNS Topic שמקשור לטריגר שלנו יקבל על כך הודעה.

קלי קלות!

מצאתם טעות? הערות? שאלות? הסתדרתם? נתקעתם? כתבו לי בתגובות!


להמשיך לקרוא יצירת טריגר CodeCommit לAWS SNS על מנת לקבל התראות CodeCommit

מה הם טריגרים לAWS CodeCommit?

הטריגרים בCodeCommit הם למעשה הייתרון המשמעותית ביותר לשימוש בCodeCommit לניהול הקוד שלנו לעומת שירותים כגון GitHub, GitLab, BitBucket וכו.

טריגרים מאפשרים לנו לבצע פעולות בצורה אוטומטיות כאשר קרה EVENT מסויים בקוד ריפו שלנו ולמעשה הם מופעלים בתגובה לאירועים שקורים בקוד שלנו. לדוגמה, כאשר מישהו דחף (GIT PUSH) שינויים לקוד, או כאשר נוצר(או נמחק) Branch (או (GIT TAG) חדש ועוד נוכל אנחנו והצוות שלנו או כל מי שנירצה לקבל על כך התראה.

דוגמאות:

* יצירת BRANCH חדש יכולה להפעיל טריגר SNS topic על מנת להודיע לכל האנשים הרלוונטיים בצוות שלנו שנוצר Branch חדש כדי שהחברים שלנו יידעו שכדאי להם לעשות git pull למחשב הפיתוח שלהם.

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

* פונקציות למבדה (Lambada Functions) – וואו, כאן ניתן לעשות כבר דברים מדהימים!
* SNS – AWS Simple Notification Service (שליחת הודעה בדואל, SMS וכו), אחד הייתרונות בחיבור לSNS הוא שזה מאפשר לנו להתחבר למעשה לכל השירותים אליהם SNS מתחבר כמו AWS SQS לדוגמה (Aws Simple Queue Service)


להמשיך לקרוא מה הם טריגרים לAWS CodeCommit?

העברת GIT REPO מGitHub לCodeCommit, הכיצד??

העברת REPO מGitHub ל AWS CodeCommit בקלי קלות.

במידה ויש לנו כבר GIT REPO באחד מהספקים הפופולארים כמו GitHub,GitLab,BitBucket וכו ואנו מעוניינים להעביר את ניהול הקוד לCodeCommit,
AWS מאפשרים לנו מספר אפשרויות:

1. העברת כל הREPO שלנו
2. העברת רק חלק מהBRANCHES
3. אנו יכולים להתחיל בהעברת רק חלק מהBRANCES ולאחר מכן להעביר את כל הREPO במידה ונירצה (הגירה בשלבים).

שימו לב! במידה וגודל הREPO שלנו גדול מ2GB,או שהREPO שלנו מכיל קבצים גדולים שלא ניתן לכווץ אותם (COMPRESS) בצורה טובה, ההמלצה היא להגר בשלבים ולא בבת אחת.


השלבים להעתקת ריפו מGITHUB לAWS CodeCommit

  1. ניצור משתמש בAWS עם הרשאות מתאימות ל CodeCommit
  2. נעתיק (CLONE) את הREPO שאנו רוצים להעביר מGITHUB למחשב שלנו.
  3. ניצור REPO חדש בCodeCommit דרך הAWS CLI
  4. ניצור למשתמש שלנו בAWS שם משתמש וסיסמא לCodeCommit
  5. נדחוף את הREPO שלנו מהמחשב לREPO בCodeCommit.

על מנת לעבוד עם CodeCommit יש ליצור משתמש בAWS עם ההרשאות המתאימות.

שימו לב, על מנת לעבוד עם CodeCommit יש ליצור משתמש בAWS עם ההרשאות המתאימות.

העתקת הREPO שלנו מGITHUB למחשב

למטרות הדגמה, עשיתי FORK בGITHUB שלי לרפו נחמד של Design Patterns בPHP בכתובת: https://github.com/avivronen/DesignPatternsPHP שאותו אעביר לCodeCommit.

השלב הבא הוא לבצע CLONE לREPO שאנו רוצים להעביר מGitHub לCodeCommit למחשב שלנו, אני כבר עשיתי את זה.

git clone --mirror <repourl> <mylocaltempdir>

החליפו את <repourl> בכתובת הריפו שלכם בGitHub
ואת <mylocaltempdir> במיקום התיקייה במחשב שלכם שאליה אתם מעוניינים להוריד את הREPO.

כפי שניתן לראות כרגע במחשב קיימת לי REPO בשם DesignPatternsPHP


יצירת REPO חדש בCodeCommit אליה נעתיק את הREPO מGITHUB

לאחר שיצרנו CLONE של הREPO שאנו רוצים להעביר במחשב שלנו, אנחנו ניצור REPO חדש בCodeCommit באמצעות הAWS CLI (אם טרם הגדרת את הAWS CLI במחשב שלכם, ליחצו כאן להסבר איך עושים את זה) על ידי הפקודה הבאה:

aws codecommit create-repository --repository-name avivtest --repository-description "aviv"

שם הריפו שבחרתי: avivtest
התיאור: aviv
התשובה שאנו אמורים לקבל צריכה להיות דומה למה שקיבלתי:

נוכל לוודא את זה על ידי כניסה לCodeCommit דרך ממשק AWS ושם ניראה את הREPO החדש שיצרנו.


יצירת שם משתמש וסיסמא למשתמש שלנו בAWS לCodeCommit

בנוסף, ניצור למשתמש שלנו בAWS שם משתמש וסיסמא לCodeCommit. לא לשכוח לתת למשתמש שלנו הרשאות לCodeCommit.
נלחץ על IAM, ושם ניראה את רשימת המשתמשים הקיימים, ונלחץ על המשתמש שלנו, במיקרה שלי שם המשתמש הוא codecommit.

נלחץ על Security Credentials

ונגלול למטה עד לחלק של "HTTPS Git credentials for AWS CodeCommit" ונלחץ על "Generate"

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


דחיפת הREPO מהמחשב שלנו לREPO החדש בCodeCommit

עכשיו אנחנו צריכים לדחוף את הREPO מהמחשב שלנו לREPO שיצרנו בCodeCommit.

ניכנס לתיקייה בה ממוקמת הREPO שהורדנו למחשב. במקרה שלי שם התיקייה הוא DesignPatternsPHP

cd DesignPatternsPHP

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

git push https://git-codecommit.us-east-1.amazonaws.com/v1/repos/avivtest --all

כאשר https://git-codecommit.us-east-1.amazonaws.com/v1/repos/avivtest
זאת הכתובת של הREPO שלי ב CodeCommit.


כדי לדעת מה הכתובת של הREPO שלכם בCodeCommit ניתן להיכנס למסך הREPOS של CodeCommit, ושם נלחץ על HTTPS ליד שם הREPO שלנו, זה יעתיק לנו את הכתובת.

זהו! ככה פשוט, עכשיו כשניכנס דרך AWS לREPO שלנו בCodeCommit נוכל לראות שהREPO שלנו כבר הועתקה לשם.
עכשיו הREPO שלנו יושב בCodeCommit ונוכל להממשק באמצעות לשלל שירותי ה CI/CD של AWS בקלי קלות.


מצאתם טעות? הערות? שאלות? הסתדרתם? נתקעתם? כתבו לי בתגובות!