Αν διαβάζεις το δεύτερο, στην νέα σειρά άρθρων σχετικά με το AWS, μάλλον σε ενδιαφέρει ο τομέας του Cloud Computing. Στο σημερινό άρθρο θα κάνουμε μια γενική επισκόπηση των υπηρεσιών που μπορείς να χρησιμοποιήσει ως SysAdmin, DevOPs και IT consultant.
Καταρχάς να πω ότι ήδη ίσως χρησιμοποιείτε αρκετά cloud services και πιθανόν να μην το γνωρίζετε.
Το Gmail είναι ένα e-mail cloud service. Το Dropbox, είναι ένα storage on demand, το οποίο τρέχει στο AWS. To Netflix, το οποίο τρέχει εξολοκλήρου σε AWS. Το AirBNB τα ίδια. Αρκετά services της NASA επίσης. κ.α.
Το πρώτο μέρος της νέας σειράς είναι Amazon Web Services |0| Εισαγωγή στο cloud computing με AWS
Όλοι η σειρά άρθρων
Amazon Web Services
είναι διαθέσιμη στον παρακάτω σύνδεσμο (tag : aws-intro)
Ιστορία του AWS
Το AWS ξεκίνησε το 2002 και στα αρχικά της στάδια, η πλατφόρμα αποτελούνταν από λίγα μόνο εργαλεία και υπηρεσίες. Στα τέλη του 2003, η ιδέα του AWS αναδιατυπώθηκε δημοσίως όταν οι Chris Pinkham και Benjamin Black παρουσίασαν ένα paper με ένα όραμα για την υποδομή «λιανικής πληροφορικής της Amazon» που ήταν πλήρως τυποποιημένη, πλήρως αυτοματοποιημένη και θα βασίζονταν σε μεγάλο βαθμό σε υπηρεσίες Web για εργαλεία όπως ο αποθηκευτικός χώρος κλπ. Προς στο τέλος του paper τους, ανέφεραν τη δυνατότητα πώλησης πρόσβασης σε εικονικούς διακομιστές ως υπηρεσία, προτείνοντας ότι η εταιρεία θα μπορούσε να αποφέρει έσοδα από τη νέα επένδυση σε υποδομές.
Τον Νοέμβριο του 2004, ξεκίνησε η πρώτη υπηρεσία AWS για δημόσια χρήση: Simple Queue Service (SQS). Στη συνέχεια, o Pinkham και ο κύριος προγραμματιστής Christopher Brown ανέπτυξαν την υπηρεσία Amazon EC2, με μια ομάδα στο Κέιπ Τάουν της Νότιας Αφρικής.
Σήμερα το AWS θεωρείται ο βασιλιάς του public cloud. Πίσω του ακολουθούν (αρκετά μέτρα πίσω) η Microsoft και πίσω της βρίσκεται η Google.
Μιλώντας με νούμερα, το οικονομικό έτος του 2019 το AWS είχε 35.2 δις έσοδα. Είχε το 47% της αγοράς, με την Microsoft να βρίσκεται δεύτερη στο 22%. Το 2020 έχει μεγαλώσει αρκετά το νούμερο, και αρκετοί πελάτες δεν ήταν ευχαριστημένοι με τους άλλους παρόχους και κάνουν migrate στο AWS, οπότε τα έσοδα του για το 2020, παρά την πανδημία, αναμένονται μεγαλύτερα.
Οι μικρότεροι παίκτες, πχ Google, προσπαθούν να μπουν στο παιχνίδι δίνοντας δωρεάν vouchers για να χρησιμοποιεί κάποιος τις υπηρεσίες τους, με ελπίδα να συνεχίσει να τις χρησιμοποιεί. Ωστόσο ακολουθούν μία αρκετά aggressive πολιτική στο κομμάτι αυτό, αφού δίνουν πολλά περισσότερα for free με σκοπό να δελεάσουν τον κόσμο. To AWS κυριαρχεί λοιπόν στο public cloud και έχει πάνω από 1.000.000 ενεργούς χρήστες.
Τα 3 βασικά είδη cloud computing
Το Cloud Computing, μπορεί να παρέχεται ως υπηρεσία με βάση τις ανάγκες του κάθε πελάτη. Σε γενικές γραμμές κατηγοριοποιείται σε:
- IaaS (Infrastructure As A service): Είναι όλα τα μηχανήματα, τα virtual machines, το storage, το networking, οι servers. Ο,τι χρειάζεστε δηλαδή για να τρέξετε software πάνω σε αυτό. Πόσες φορές πήγατε να φτιάξε ένα site και στο τέλος σπαταλήσατε άπειρο χρόνο στο provisioning και σετάρισμα του server; No more! πχ στο Amazon έχουμε το EC2 (θα το δούμε αργότερα), ενώ σε άλλα public cloud έχουμε
Google GCP
,Digital Ocean
,Linode
ή και εκτός public cloud αλλά on-premise έχουμε πχ τηνRackspace
. - PaaS (Platform As A Service) είναι όλα τα παραπάνω + Operating System και οποιαδήποτε middleware. Ένα λειτουργικό σύστημα δηλαδή optimized για το workload. Στο AWS έχουμε εδώ το
Elastic Beanstalk
, το οποίο στήνει ολόκληρο το pipeline (webservers, storage, databases, monitoring, cost payment, scaling, ο,τι θες) για να μην κάτσεις και ασχοληθείς με αυτά. Εκτός του AWS, άλλα παραδείγματα είναι το Heroku, Google App Engine στο GCP, Windows Azure (Microsoft). - SaaS (Software As A service) είναι όλα τα παραπάνω + Application και τα data αυτής. Για παράδειγμα είσαι ερευνητής και θες να κάνεις machine learning, όποτε θες optimized hardware για να τρέχεις και να εκπαιδεύεις το νευρωνικό δίκτυο. Στο AWS υπάρχουν άπειρα optimized/special services, πχ το Recognition. Αντίστοιχα παρόμοιες υπηρεσίες εκτός AWS είναι πχ το Gmail, το Dropbox, το Zoom, κλπ.
Για να πάρετε μία ιδέα για το global infrastructure του AWS, πηγαίνετε τώρα στο https://infrastructure.aws/ και κάντε το virtual tour ;) Αυτό θα σας βοηθήσει να ξεκαθαρίσετε μερικούς όρους. Ένα ακόμα site είναι το https://aws.amazon.com/about-aws/global-infrastructure/
Οι παρεχόμενες υποδομές του AWS
Εγώ θα σας μιλήσω για τα core services του AWS, δηλαδή αυτά που πρέπει να ξέρουν όλοι ή τουλάχιστον να έχουν ακούσει για αυτά, είναι τα εξής (κατά τη γνώμη μου πάντα):
Elastic Compute Cloud (EC2)
Είναι το μέρος που φτιάχνετε virtual machines που τρέχουν στο cloud. πχ αν θελω ενα Ubuntu server ο οποίος να είναι διαθέσιμος από οπουδήποτε τον κόσμο, θα πάω στο EC2 και θα κάνω generate ενα instance ενός virtual server.
Simple Storage Service (s3)
Πού αποθηκεύει τα δεδομένα του ο παραπάνω server που έφτιαξα στο EC2; Το S3 είναι ένα redundant storage, το οποίο σημαίνει ότι, ό,τι αποθηκεύω σε αυτό, τότε αυτόματα αντιγράφεται 2 φορές.
Δηλαδή το s3 bucket είναι μία περιοχή που μπορείτε να αποθηκεύσετε δεδομένα, όπως πχ τα mp3 σας. Κάτι σαν το dropbox δηλαδή ή το GoogleDrive, με την διαφορά όμως ότι είναι redundant, δηλαδή όταν θα κάνε upload το mp3 αρχείο σας (λέμε τώρα…) τότε αυτό γράφεται (αποθηκεύεται) ταυτόχρονα σε 2 διαφορετικά μέρη μέσα στο s3 bucket, στο storage destination 1 και στο storage destination 2. Το “write” operation του mp3 δεν θα επιστρέψει “success” μέχρι να δημιουργηθούν επιτυχημένα και τα δύο αυτά αρχεία. Διαφορετικά η αντιγραφή του mp3 που κάνατε, θα αποτύχει. Αλλά … εξαιτίας αυτού (της διπλής αντιγραφής) το s3 είναι αρκετά αργό!
Τι ίσχυε πριν μερικά χρόνια:
Οταν φτιάχνουμε λοιπόν το instance μας, δημιουργείτε μαζί του και το s3 bucket. Όλο μαζί, αυτό λέγεται AMI.
Στο s3 υπάρχει λοιπόν το image/template από το οποίο φορτώνει τo instance για να ξεκινήσει.
Το instance φορτώνει από το image που βρίσκεται στο s3 bucket, αλλά όταν τρέχει αυτό το image θα χρησιμοποιεί ένα άλλο storage service που λέγεται ephemeral storage, η οποία είναι πολύ πιο γρήγορη από το s3. Το storage αυτό βρίσκεται στο ίδιο το physical server που τρέχει πάνω του το virtual machine. Συνήθως είναι κάτι πολύ γρήγορο, σαν RAID5, αλλά δεν είναι permanent …
Πάμε ξανά, καθώς είναι σημαντικό: Αν αποθηκεύσετε κάτι στην ephemeral storage και κάνετε shutdown το instance, ΠΟΥΦ. Πάει, χάθηκαν τα δεδομένα σας. Την επόμενη φορά που θα ξεκινήσετε το instance θα φορτώσει ξανά το image/template που βρίσκεται στο s3 bucket και προφανώς δεν θα έχει τα δεδομένα που είχατε αποθηκεύσει (κακώς) στην ephemeral storage.
Με λίγα λόγια οι πελάτες ήταν αρκετά δυσαρεστημένοι γιατί θέλανε κάτι το οποίο να είναι ΚΑΙ γρήγορο ΚΑΙ να έχει και redundancy. Θα μπορούσαν δηλαδή οι τύποι στο Amazon, να φτιάξουν ένα τρόπο όπου η ephemeral storage να μιλάει με το s3 bucket και του λέει: “πάρε και αποθήκευσε αυτά, γιατί είναι σημαντικά data”.
Τι ισχύει τώρα:
Η λύση λέγεται Elastic Block Store
(EBS). Αυτό έχει να κάνει με το horizontal scaling που συζητήσαμε πριν και στην ουσία είναι μία permanent storage η οποία είναι ΠΙΟ ΓΡΗΓΟΡΗ από το s3 bucket.
Οπότε ανακεφαλαιώνουμε:
- Έχουμε την virtual machine instance. Το image αυτής (λέγεται AMI), βρίσκεται στο s3 bucket. Είναι extremely stable και redundant αλλά είναι αρκετά αργό.
- Όταν μπουτάρεις το instance από αυτό το image (AMI) τότε σε ρωτάει ποια από τις άλλες δύο storages θες να χρησιμοποιήσεις: την Ephemeral Storage (η οποία βρίσκεται πάνω στον ίδιο τον physical server (hypervisor) που τρέχει το virtual machine, οπότε είναι υπερβολικά γρήγορο αλλά όταν κλείσεις τον server τότε θα χαθούν όλα τα δεδομένα σου) ή η άλλη επιλογή είναι να το τρέξεις στο EBS (το οποίο είναι ένα μικρό group από server, το οποίο σου δίνει πιο γρήγορο performance από το s3, και πιο αργό από το ephemeral, και ΔΕΝ χάνονται τα δεδομένα.
- Το EBS κοστίζει λεφτά γιατί το AWS πρέπει να κρατάει τα δεδομένα σας, ενώ το ephemeral storage είναι τζάμπα.
Cloudwatch
Είναι το monitoring όλων των παραπάνω.
Για παράδειγμα, κάθε 5 λεπτά θέλω να ξέρω πόσο storage έχω free, πόση επεξεργαστική ισχύ, πόση RAM, κλπ. Εδώ τώρα έρχονται μερικοί πελάτες και λένε ότι θέλουν ακόμα πιο γρήγορο monitoring όπου πχ αν γεμίσει ο δίσκος μου, θέλω να το ξέρω το επόμενο δευτερόλεπτο και όχι 5 λεπτά αργότερα. Οπότε μπορούν να μειώσουν τους timers.
Όσο τους πειράζεις και τους κατεβάζεις, τόσο πιο ακριβό είναι το service. Το default timer
είναι δωρεάν.
SimpleDB/DynamoDB/RDS
Τo AWS προσφέρει και database services. Η SimpleDB σχεδιάστηκε για να είναι μικρή, αργή (access) αλλά είναι αρκετά φθηνή και εύκολη στο σετάρισμα.
Η DynamoDB είναι scalable και πολύ γρήγορη και αρκετά μεγάλη, αλλά κοστίζει.
Η RDS είναι η relational database (όπως η MariaDB/MySQL). Η καθεμία έχει τα δικά της ±.
Route53
Είναι το DNS.
Εκεί μπορείτε να φτιάξετε name records για τα domain σας. πχ έστω ότι έχω το cerebrux.net. Μπορώ να το βάλω στο Route53. Οπότε όποιος πάει στο www.erebrux.net τότε θα τον ανακατευθύνει στο κατάλληλο webserver που τρέχει. Μπορώ να φτιάξω s3.cerebrux.netr που θα πηγαίνει σε κάποιο άλλο location, κλπ. Εκεί γράφουμε όλα μας τα DNS records.
Virtual Private Cloud (VPC)
Αυτό είναι killer feature. Σου επιτρέπει να ελέγξεις το δίκτυο που τρέχουν τα instances του EC2.
Όταν φτιάχνεις instances, το AWS σετάρει αυτόματα το network από πίσω. Το routing, τα hostnames, οι public IP addresses, οι private IP address, κλπ. Αν λοιπόν κάποιος θέλει να τα κάνει μόνος του ή να πει “οκ, Αμαζον, ευχαριστώ για το service αλλά θέλω να δώσω εγώ καρφωτά τις IP που θέλω εγώ στους servers μου” ή αυτό που έχουν σχεδόν ΟΛΕΣ οι εταιρείες ιδιαίτερα σήμερα λόγω covid: “θέλω να έχω site-to-site VPN οπού τρέχουν οι servers στο cloud”.
Σκεφτείτε το εξής: έχετε τα γραφεία σας στην Θεσσαλονίκη και οι servers σας βρίσκονται στο AWS. Το VPC μπορεί να σετάρει ένα private connection μεταξύ των γραφείων σας στην Θεσσαλονίκη και των server σας, έτσι ώστε μόνο όσοι έχουν πρόσβαση στο εταιρικό δίκτυο της Θεσσαλονίκης να μπορούν να έχουν πρόσβαση στους servers αυτούς. Ναι προφανώς θέλουμε ο υπόλοιπος κόσμος να μπορεί να επικοινωνεί με αυτά τα services, αλλά εδώ μιλάμε για την full private access στο backend, δηλαδή SSH στον ίδιο τον server να μπορεί να γίνει μόνο αυτό τον το τρόπο. Ή για παράδειγμα να έχετε Hybrid Cloud: δηλαδή να έχετε κάποιος secure servers στη Θεσσαλονίκη οι οποίο να είναι διαθέσιμοι μόνο από το VPN την εταιρείας, και μέσω του VPC Peering να μιλάνε με το AWS, χωρίς να γίνονται exposed.
Εδώ θα παίξουμε με multi-tenancy. Αυτό το feature είναι από τα πιο δυνατά feature: Virtual Private Cloud κυρίες και κύριοι.
Auto Scaling
Επιτρέπει στο Amazon να προσθέτει επιπλέον instances όταν τα χρειάζεστε και να τα αφαιρεί όταν δεν τα χρειάζεστε. Μπορεί να ορίσετε ένα threshold και να πείτε: “Όταν το load φτάνει στο 80% CPU για 5 λεπτά συνεχόμενα, τότε σήκωσε 2 instances”. Αυτό είναι αυτόματο horizontal scaling, grow as needed.
Cloud Formation
Σας επιτρέπει να φτιάξετε templates για τους servers σας. Είναι ένα πιο advanced customized configuration, το οποίο λείπει από το EC2.
Με το EC2
και το Auto scaling μπορώ να φτιάξω ένα AMI
(το οποίο, όπως έχουμε πει είναι η ονομασία ενός virtual machine στο AWS) για τον webserver μου, ή την database μου ή ο,τι θέλω και να γίνεται auto-clone όταν υπάρχει ανάγκη. Αλλά με το Cloud Formation
μπορώ να φτιάξω templates of templates. Δηλαδή εφόσον για να σηκώσω ένα service χρειάζομαι: 2 webservers, 3 databases, 1 linux και ένα windows server, τότε μπορώ να ορίσω όλα αυτά στο cloud formation και να “σηκώσει” ολόκληρο το pipeline, ένα full-blown σύστημα.
Γιατί να το θέλω αυτό; Γιατί μπορεί να θέλω να αντιγράψω ολόκληρο το σύστημά μου σε κάποιο άλλο datacenter (availability zone) ή σε κάποιο άλλο region. Για αυτό χρειάζομαι ένα cloud formation template. Κάποιες είναι δωρεάν (για κάτι απλό) πχ για ένα wordpress site ή ένα ecommerce store. Έχουν δηλαδή κάποια preconfigured templates δωρεάν, κι αν πληρώσεις μπορείς να στήσεις ότι θες.
IAM (Identity and Access Management)
Έχετε την δυνατότητα να φτιάξετε όλων των ειδών τα credentials, από πρόσβαση σε storage s3 buckets, από απλά password, public key, μέχρι blockchain tokens και ό,τι είδους access σύστημα σκέφτεστε θα το βρείτε εδώ.
Θα το μελετήσουμε στο επόμενο άρθρο.
Elastic Load Balancing (ELB)
Έστω ότι έχετε 4 webservers και θέλετε κάνετε load balancing ώστε να μοιράσετε τον φόρτο εργασίας του.
Το AWS μπορεί να φτιάξει ένα loadbalancer μπροστά από το website σας, τον FTP server σας, το remote desktop, το οτιδήποτε service σας τέλος πάντων, όπου παίρνει το request (το οποίο έρχεται από το internet) και το στέλνει πρώτα στον ELB. Ο ELB με την σειρά του το δίνει σε κάποιον από τους server σας. Σε ποιόν όμως; Αυτό εξαρτάται από τις ρυθμίσεις το ELB. Μπορεί να το έχετε σε round-robin ή να πείτε το 50% των requests να πηγαίνουν στον τάδε server, το 10% στον άλλον, κλπ. Μπορείτε να ορίσετε δηλαδή το πως γίνεται το load balancing.
Δημιουργία δωρεάν λογαριασμού στο AWS
Φυσικά υπάρχουν … ΠΟΛΛΑ περισσότερα services. Αυτά νομίζω όμως είναι τα απολύτως βασικά όπου μπορεί να ξεκινήσει κάποιος και από κει και πέρα να ψαχτεί μόνος του για το τι παραπάνω μπορεί να πετύχει. Αυτά ήταν απλά η κορυφή του παγόβουνου. To AWS έχει ΠΑΝΩ ΑΠΟ 200 services
Να σημειώσω ότι μόνο κάποια από τα τα services είναι Global Scope. πχ το IAM, Route53, CloudFront, WAF. Όλα τα υπόλοιπα είναι region-based, οπότε αναλόγως το region που χρησιμοποιείτε θα έχετε (ή δεν θα έχετε) μερικά services. Για την λίστα των services που παρέχονται ανά region δείτε εδώ: https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/
Θα συνεχίσω γράφοντας για το πως μπορούμε να χρησιμοποιήσουμε το καθένα από τα παραπάνω services συγκεκριμένα. Μπορείτε να ακολουθήσετε τις οδηγίες μου και το πιο πιθανό είναι να μην σας χρεώσει τίποτα.
- Πάτε στο: https://aws.amazon.com/free – εκεί μπορείτε να δείτε όλα τα services και να δείτε πόσο κοστίζει το καθένα και πόσο free είναι το καθένα. πχ.
- Για 12 μήνες, μπορείτε να τρέξετε δωρεάν:
- 750 hours per month of Linux, RHEL, or SLES t2.micro or t3.micro instance dependent on region
- 5 GB storage
- Windows licences for free ( :) )
- 30 GB Amazon EBS storage
- και άλλα …
Αν πληρώσετε, τότε πάτε σε Paid Tier, όπου σας χρεώνει ανά ώρα. Για παράδειγμα ας υποθέσουμε ότι η μία ώρα για τον τάδε server κοστίζει 1 Ευρώ. Ακόμα κι αν εσείς τρέξετε για 10 λεπτά, θα χρεωθείτε μια ολόκληρη ώρα.
Φυσικά υπάρχουν διαφορετικές χρεώσεις και λογική ανάλογα το service, το configuration αυτού, το region που τρέχει και το availability zone. Οπότε όσοι πάτε σε paid tier, ψάξτε το, γιατί στο τέλος μπορεί να σας έρθει φουσκωμένος λογαριασμός … μπορείτε να συμβουλευτείτε το Amazon Cost Calculator: https://calculator.s3.amazonaws.com/index.html
Φυσικά η συμβουλή μου είναι να μείνετε στο free tier
Οπότε:
- Φτιάξτε ένα account (ναι θέλετε πιστωτική κάρτα κ verification μέσω τηλεφώνου σαν 2FA)
- Διαβάστε για τα επιμέρους services και ψάξτε το λίγο μόνοι σας επιπλέον.
- Δοκιμάστε τα. Είναι δωρεαν για έναν χρόνο.
Παραπομπές:
πες με pedantic αλλα πρέπει να προσθέσεις ενα «s» στο «service»…εχω bookmarked τα posts για τα AWS και μου πάει συνέχεια το βλέμμα το missing «s».
θα μου πείς οτι μπορώ να αλλάξω εγώ το bookmark – αλλα νομίζω ενδιαφέρει και άλλους.
Ευχαριστώ, και συνέχισε την καλή δουλειά που κάνεις.
Fixed :P