Λεπτομερής ανάλυση του AWS Lambda

Η μετάφραση του άρθρου ετοιμάστηκε ειδικά για τους φοιτητές του μαθήματος "Υπηρεσίες Cloud". Ενδιαφέρεστε να αναπτυχθείτε προς αυτή την κατεύθυνση; Παρακολουθήστε το master class από τον Egor Zuev (TeamLead στο InBit) "Υπηρεσία AWS EC2" και εγγραφείτε στην επόμενη ομάδα μαθημάτων: ξεκινά στις 26 Σεπτεμβρίου.

Λεπτομερής ανάλυση του AWS Lambda

Περισσότεροι άνθρωποι μεταναστεύουν στο AWS Lambda για επεκτασιμότητα, απόδοση, εξοικονόμηση πόρων και τη δυνατότητα χειρισμού εκατομμυρίων ή ακόμα και τρισεκατομμυρίων αιτημάτων το μήνα. Για να το κάνετε αυτό, δεν χρειάζεται να διαχειριστείτε την υποδομή στην οποία εκτελείται η υπηρεσία. Και η αυτόματη κλιμάκωση σάς επιτρέπει να εξυπηρετείτε χιλιάδες ταυτόχρονες αιτήσεις ανά δευτερόλεπτο. Νομίζω ότι το AWS Lambda μπορεί δικαίως να ονομαστεί μια από τις πιο δημοφιλείς υπηρεσίες AWS.

AWS Lambda

Το AWS Lambda είναι μια υπολογιστική υπηρεσία χωρίς διακομιστή που βασίζεται σε συμβάντα που σας επιτρέπει να εκτελείτε κώδικα χωρίς παροχή ή διαχείριση διακομιστών και να επεκτείνετε άλλες υπηρεσίες AWS χρησιμοποιώντας προσαρμοσμένη λογική. Το Lambda ανταποκρίνεται αυτόματα σε διάφορα συμβάντα (που ονομάζονται triggers), όπως αιτήματα HTTP μέσω του Amazon API Gateway, αλλαγές σε δεδομένα σε κάδους Amazon S3 ή πίνακες Amazon DynamoDB. ή μπορείτε να εκτελέσετε τον κώδικά σας μέσω κλήσεων API χρησιμοποιώντας το AWS SDK και μεταβάσεις κατάστασης στις AWS Step Functions.

Η Lambda εκτελεί κώδικα σε μια εξαιρετικά διαθέσιμη υπολογιστική υποδομή και είναι πλήρως υπεύθυνη για τη διαχείριση της υποκείμενης πλατφόρμας, συμπεριλαμβανομένης της συντήρησης διακομιστή και λειτουργικού συστήματος, παροχής πόρων, αυτόματης κλιμάκωσης, παρακολούθησης κώδικα και καταγραφής. Δηλαδή, χρειάζεται απλώς να ανεβάσετε τον κωδικό σας και να ρυθμίσετε πώς και πότε θα πρέπει να εκτελείται. Με τη σειρά της, η υπηρεσία θα φροντίσει για την εκκίνησή της και θα εξασφαλίσει υψηλή διαθεσιμότητα της εφαρμογής σας.

Πότε να μεταβείτε στο Lambda;

Το AWS Lambda είναι μια βολική υπολογιστική πλατφόρμα που είναι κατάλληλη για ποικίλες περιπτώσεις χρήσης, εφόσον η γλώσσα και ο χρόνος εκτέλεσης του κώδικά σας υποστηρίζονται από την υπηρεσία. Εάν θέλετε να εστιάσετε στον κώδικα και τη λογική της επιχείρησής σας ενώ αναθέτετε τη συντήρηση, την παροχή και την κλιμάκωση διακομιστή με λογικό κόστος, το AWS Lambda είναι σίγουρα ο καλύτερος τρόπος.

Το Lambda είναι ιδανικό για τη δημιουργία διεπαφών προγραμματισμού και όταν χρησιμοποιείται σε συνδυασμό με το API Gateway, μπορείτε να μειώσετε σημαντικά το κόστος και να φτάσετε στην αγορά πιο γρήγορα. Υπάρχουν διάφοροι τρόποι χρήσης των συναρτήσεων και των επιλογών Lambda για την οργάνωση μιας αρχιτεκτονικής χωρίς διακομιστή - ο καθένας μπορεί να επιλέξει κάτι κατάλληλο με βάση τον στόχο του.

Το Lambda σάς επιτρέπει να εκτελείτε ένα ευρύ φάσμα εργασιών. Έτσι, χάρη στην υποστήριξη CloudWatch, μπορείτε να δημιουργήσετε αναβαλλόμενες εργασίες και να αυτοματοποιήσετε μεμονωμένες διαδικασίες. Δεν υπάρχουν περιορισμοί σχετικά με τη φύση και την ένταση χρήσης της υπηρεσίας (λαμβάνονται υπόψη η κατανάλωση μνήμης και ο χρόνος) και τίποτα δεν σας εμποδίζει να εργάζεστε συστηματικά σε μια ολοκληρωμένη microservice που βασίζεται στο Lambda.

Εδώ μπορείτε να δημιουργήσετε ενέργειες προσανατολισμένες σε υπηρεσίες που δεν εκτελούνται συνεχώς. Χαρακτηριστικό παράδειγμα είναι η κλίμακα εικόνας. Ακόμη και στην περίπτωση των κατανεμημένων συστημάτων, οι λειτουργίες Lambda παραμένουν σχετικές.

Επομένως, εάν δεν θέλετε να ασχοληθείτε με την κατανομή και τη διαχείριση υπολογιστικών πόρων, δοκιμάστε το AWS Lambda. Εάν δεν χρειάζεστε βαρείς υπολογισμούς με ένταση πόρων, δοκιμάστε επίσης το AWS Lambda. Εάν ο κώδικάς σας εκτελείται περιοδικά, αυτό είναι σωστό, θα πρέπει να δοκιμάσετε το AWS Lambda.

Ασφάλεια

Μέχρι στιγμής δεν υπάρχουν παράπονα για την ασφάλεια. Από την άλλη πλευρά, καθώς πολλές από τις εσωτερικές διεργασίες και τα χαρακτηριστικά υλοποίησης αυτού του μοντέλου είναι κρυμμένα από τον χρήστη του διαχειριζόμενου περιβάλλοντος χρόνου εκτέλεσης AWS Lambda, ορισμένοι γενικά αποδεκτοί κανόνες ασφάλειας cloud γίνονται άσχετοι.

Όπως οι περισσότερες υπηρεσίες AWS, το Lambda παρέχεται σε βάση κοινής ασφάλειας και συμμόρφωσης μεταξύ του AWS και του πελάτη. Αυτή η αρχή μειώνει τη λειτουργική επιβάρυνση του πελάτη, καθώς το AWS αναλαμβάνει τα καθήκοντα συντήρησης, διαχείρισης και παρακολούθησης στοιχείων υπηρεσίας - από το λειτουργικό σύστημα κεντρικού υπολογιστή και το επίπεδο εικονικοποίησης έως τη φυσική ασφάλεια των στοιχείων υποδομής.

Συγκεκριμένα, μιλώντας για το AWS Lambda, το AWS είναι υπεύθυνο για τη διαχείριση της υποκείμενης υποδομής, των σχετικών υποκείμενων υπηρεσιών, του λειτουργικού συστήματος και της πλατφόρμας εφαρμογών. Ενώ ο πελάτης είναι υπεύθυνος για την ασφάλεια του κώδικά του, την αποθήκευση εμπιστευτικών δεδομένων, τον έλεγχο της πρόσβασης σε αυτόν, καθώς και στην υπηρεσία και τους πόρους Lambda (Identity and Access Management, IAM), συμπεριλαμβανομένων των ορίων των χρησιμοποιούμενων λειτουργιών.

Το παρακάτω διάγραμμα δείχνει το μοντέλο κοινής ευθύνης όπως ισχύει για το AWS Lambda. Το AWS Responsibility είναι πορτοκαλί και το Customer Responsibility είναι μπλε. Όπως μπορείτε να δείτε, το AWS αναλαμβάνει μεγαλύτερη ευθύνη για τις εφαρμογές που αναπτύσσονται στην υπηρεσία.

Λεπτομερής ανάλυση του AWS Lambda

Μοντέλο κοινής ευθύνης που ισχύει για το AWS Lambda

Λάμδα εκτέλεσης

Το κύριο πλεονέκτημα του Lambda είναι ότι εκτελώντας μια λειτουργία για λογαριασμό σας, η ίδια η υπηρεσία διαθέτει τους απαραίτητους πόρους. Μπορείτε να αποφύγετε τη σπατάλη χρόνου και προσπάθειας στη διαχείριση του συστήματος και να εστιάσετε στην επιχειρηματική λογική και την κωδικοποίηση.

Η υπηρεσία Λάμδα χωρίζεται σε δύο επίπεδα. Το πρώτο είναι το επίπεδο ελέγχου. Σύμφωνα με τη Wikipedia, το επίπεδο ελέγχου είναι το τμήμα του δικτύου που είναι υπεύθυνο για τη μεταφορά της κυκλοφορίας σηματοδότησης και τη δρομολόγηση. Είναι το κύριο στοιχείο που λαμβάνει παγκόσμιες αποφάσεις σχετικά με την παροχή, την εξυπηρέτηση και τη διανομή του φόρτου εργασίας. Επιπλέον, το επίπεδο ελέγχου λειτουργεί ως τοπολογία δικτύου του παρόχου λύσεων, υπεύθυνος για τη δρομολόγηση και τη διαχείριση της κυκλοφορίας.

Το δεύτερο επίπεδο είναι το επίπεδο δεδομένων. Όπως και το επίπεδο ελέγχου, έχει τα δικά του καθήκοντα. Το επίπεδο ελέγχου παρέχει API για τη διαχείριση συναρτήσεων (CreateFunction, UpdateFunctionCode) και ελέγχει τον τρόπο επικοινωνίας του Lambda με άλλες υπηρεσίες AWS. Το επίπεδο δεδομένων ελέγχει το Invoke API, το οποίο εκτελεί τις λειτουργίες Lambda. Μετά την κλήση μιας συνάρτησης, το επίπεδο ελέγχου εκχωρεί ή επιλέγει ένα υπάρχον περιβάλλον χρόνου εκτέλεσης που είναι προ-προετοιμασμένο για αυτήν τη συνάρτηση και, στη συνέχεια, εκτελεί τον κώδικα σε αυτό.

Το AWS Lambda υποστηρίζει μια ποικιλία γλωσσών προγραμματισμού, συμπεριλαμβανομένων των Java 8, Python 3.7, Go, NodeJS 8, .NET Core 2 και άλλων, μέσω των αντίστοιχων περιβαλλόντων χρόνου εκτέλεσης. Το AWS τα ενημερώνει τακτικά, διανέμει ενημερώσεις κώδικα ασφαλείας και εκτελεί άλλες δραστηριότητες συντήρησης σε αυτά τα περιβάλλοντα. Το Lambda σάς επιτρέπει να χρησιμοποιείτε και άλλες γλώσσες, με την προϋπόθεση ότι εφαρμόζετε μόνοι σας τον κατάλληλο χρόνο εκτέλεσης. Και τότε θα πρέπει να φροντίσετε για τη συντήρησή του, συμπεριλαμβανομένης της παρακολούθησης της ασφάλειάς του.

Πώς λειτουργούν όλα αυτά και πώς θα εκτελέσει η υπηρεσία τις λειτουργίες σας;

Κάθε συνάρτηση εκτελείται σε ένα ή περισσότερα αποκλειστικά περιβάλλοντα, τα οποία υπάρχουν μόνο για τη διάρκεια ζωής αυτής της λειτουργίας και στη συνέχεια καταστρέφονται. Κάθε περιβάλλον πραγματοποιεί μόνο μία κλήση κάθε φορά, αλλά επαναχρησιμοποιείται εάν υπάρχουν πολλές σειριακές κλήσεις στην ίδια λειτουργία. Όλα τα περιβάλλοντα χρόνου εκτέλεσης εκτελούνται σε εικονικές μηχανές με εικονικοποίηση υλικού - τα λεγόμενα microVM. Κάθε microVM έχει εκχωρηθεί σε έναν συγκεκριμένο λογαριασμό AWS και μπορεί να επαναχρησιμοποιηθεί από περιβάλλοντα για την εκτέλεση διαφορετικών λειτουργιών σε αυτόν τον λογαριασμό. Τα MicroVM συσκευάζονται σε δομικά στοιχεία της πλατφόρμας υλικού Lambda Worker, η οποία ανήκει και λειτουργεί από την AWS. Ο ίδιος χρόνος εκτέλεσης δεν μπορεί να χρησιμοποιηθεί από διαφορετικές λειτουργίες, ούτε τα microVM είναι μοναδικά για διαφορετικούς λογαριασμούς AWS.

Λεπτομερής ανάλυση του AWS Lambda

Μοντέλο απομόνωσης λάμδα AWS

Η απομόνωση περιβαλλόντων χρόνου εκτέλεσης υλοποιείται χρησιμοποιώντας διάφορους μηχανισμούς. Στο ανώτερο επίπεδο κάθε περιβάλλοντος υπάρχουν ξεχωριστά αντίγραφα των παρακάτω στοιχείων:

  • Κωδικός λειτουργίας
  • Οποιαδήποτε επίπεδα Lambda έχουν επιλεγεί για τη συνάρτηση
  • Περιβάλλον εκτέλεσης συναρτήσεων
  • Ελάχιστος χώρος χρήστη με βάση το Amazon Linux

Οι ακόλουθοι μηχανισμοί χρησιμοποιούνται για την απομόνωση διαφορετικών περιβαλλόντων εκτέλεσης:

  • cgroups - περιορίστε την πρόσβαση σε CPU, μνήμη, αποθήκευση και πόρους δικτύου για κάθε περιβάλλον χρόνου εκτέλεσης.
  • Χώροι ονομάτων - ομαδοποίηση αναγνωριστικών διεργασιών, αναγνωριστικών χρηστών, διεπαφών δικτύου και άλλων πόρων που διαχειρίζεται ο πυρήνας Linux. Κάθε χρόνος εκτέλεσης εκτελείται στον δικό του χώρο ονομάτων.
  • seccomp-bpf - περιορίζει τις κλήσεις συστήματος που μπορούν να χρησιμοποιηθούν στο χρόνο εκτέλεσης.
  • iptables και πίνακες δρομολόγησης - απομόνωση περιβαλλόντων εκτέλεσης μεταξύ τους.
  • chroot - παρέχει περιορισμένη πρόσβαση στο υποκείμενο σύστημα αρχείων.

Σε συνδυασμό με τις ιδιόκτητες τεχνολογίες απομόνωσης AWS, αυτοί οι μηχανισμοί εξασφαλίζουν αξιόπιστο διαχωρισμό χρόνου εκτέλεσης. Τα περιβάλλοντα που απομονώνονται με αυτόν τον τρόπο δεν μπορούν να έχουν πρόσβαση ή να τροποποιήσουν δεδομένα από άλλα περιβάλλοντα.

Αν και πολλαπλοί χρόνοι εκτέλεσης του ίδιου λογαριασμού AWS μπορούν να εκτελούνται σε ένα μόνο microVM, σε καμία περίπτωση δεν μπορούν να μοιράζονται τα microVM μεταξύ διαφορετικών λογαριασμών AWS. Το AWS Lambda χρησιμοποιεί μόνο δύο μηχανισμούς για την απομόνωση των microVM: περιπτώσεις EC2 και Firecracker. Η απομόνωση επισκεπτών στο Λάμδα με βάση τις περιπτώσεις EC2 υπάρχει από το 2015. Το Firecracker είναι ένας νέος υπερεπόπτης ανοιχτού κώδικα που σχεδιάστηκε ειδικά από την AWS για φόρτους εργασίας χωρίς διακομιστή και παρουσιάστηκε το 2018. Το φυσικό υλικό που εκτελεί microVM μοιράζεται μεταξύ φόρτου εργασίας σε διαφορετικούς λογαριασμούς.

Αποθήκευση περιβαλλόντων και καταστάσεων διεργασίας

Αν και οι χρόνοι εκτέλεσης Lambda είναι μοναδικοί για διαφορετικές λειτουργίες, μπορούν να καλέσουν την ίδια λειτουργία επανειλημμένα, πράγμα που σημαίνει ότι ο χρόνος εκτέλεσης μπορεί να επιβιώσει για αρκετές ώρες πριν καταστραφεί.

Κάθε χρόνος εκτέλεσης Lambda έχει επίσης ένα εγγράψιμο σύστημα αρχείων προσβάσιμο μέσω του καταλόγου /tmp. Δεν είναι δυνατή η πρόσβαση στα περιεχόμενά του από άλλους χρόνους εκτέλεσης. Όσον αφορά την επιμονή της κατάστασης διεργασίας, τα αρχεία που είναι γραμμένα στο /tmp υπάρχουν για ολόκληρο τον κύκλο ζωής του περιβάλλοντος χρόνου εκτέλεσης. Αυτό επιτρέπει τη συσσώρευση των αποτελεσμάτων πολλαπλών κλήσεων, κάτι που είναι ιδιαίτερα χρήσιμο για δαπανηρές λειτουργίες, όπως η φόρτωση μοντέλων μηχανικής εκμάθησης.

Μεταφορά δεδομένων κλήσης

Το Invoke API μπορεί να χρησιμοποιηθεί σε δύο λειτουργίες: λειτουργία συμβάντος και λειτουργία αίτησης-απόκρισης. Στη λειτουργία συμβάντος, η κλήση προστίθεται σε μια ουρά για μεταγενέστερη εκτέλεση. Στη λειτουργία αίτησης-απόκρισης, η συνάρτηση καλείται αμέσως με το παρεχόμενο ωφέλιμο φορτίο, μετά την οποία επιστρέφεται η απάντηση. Και στις δύο περιπτώσεις, η συνάρτηση εκτελείται σε περιβάλλον Lambda, αλλά με διαφορετικές διαδρομές ωφέλιμου φορτίου.

Κατά τις κλήσεις απόκρισης αιτήματος, το ωφέλιμο φορτίο ρέει από ένα API επεξεργασίας αιτημάτων (API Caller), όπως το AWS API Gateway ή το AWS SDK, στο πρόγραμμα εξισορρόπησης φορτίου και, στη συνέχεια, στην υπηρεσία κλήσης Lambda (Υπηρεσία Invoke). Το τελευταίο καθορίζει το κατάλληλο περιβάλλον για την εκτέλεση της συνάρτησης και μεταβιβάζει το ωφέλιμο φορτίο εκεί για να ολοκληρώσει την κλήση. Το πρόγραμμα εξισορρόπησης φορτίου λαμβάνει κίνηση που προστατεύεται με TLS μέσω του Διαδικτύου. Η κίνηση εντός της υπηρεσίας Lambda —μετά τον εξισορροπητή φορτίου— διέρχεται μέσω ενός εσωτερικού VPC σε μια συγκεκριμένη περιοχή AWS.

Λεπτομερής ανάλυση του AWS Lambda

Μοντέλο επεξεργασίας κλήσεων AWS Lambda: Λειτουργία αιτήματος-απόκρισης

Οι κλήσεις συμβάντων μπορούν να πραγματοποιηθούν αμέσως ή να προστεθούν σε μια ουρά. Σε ορισμένες περιπτώσεις, η ουρά υλοποιείται χρησιμοποιώντας το Amazon SQS (Amazon Simple Queue Service), το οποίο μεταβιβάζει τις κλήσεις στην υπηρεσία εκπλήρωσης κλήσεων Lambda μέσω μιας εσωτερικής διαδικασίας δημοσκόπησης. Η μεταδιδόμενη κίνηση προστατεύεται από TLS και δεν υπάρχει πρόσθετη κρυπτογράφηση δεδομένων που είναι αποθηκευμένα στο Amazon SQS.

Οι κλήσεις συμβάντων δεν επιστρέφουν απαντήσεις — το Lambda Worker απλώς αγνοεί οποιαδήποτε πληροφορία απόκρισης. Οι κλήσεις που βασίζονται σε συμβάντα από το Amazon S3, το Amazon SNS, το CloudWatch και άλλες πηγές επεξεργάζονται από το Lambda σε λειτουργία συμβάντος. Οι κλήσεις από ροές Amazon Kinesis και DynamoDB, ουρές SQS, Application Load Balancer και κλήσεις API Gateway υποβάλλονται σε επεξεργασία με τρόπο απόκρισης αιτήματος.

Παρακολούθηση

Μπορείτε να παρακολουθείτε και να ελέγχετε τις λειτουργίες Lambda χρησιμοποιώντας μια ποικιλία μηχανισμών και υπηρεσιών AWS, συμπεριλαμβανομένων των παρακάτω.

amazoncloudwatch
Συλλέγει διάφορα στατιστικά στοιχεία, όπως τον αριθμό των αιτημάτων, τη διάρκεια των αιτημάτων και τον αριθμό των αιτημάτων που απέτυχαν.

Amazon CloudTrail
Σας επιτρέπει να καταγράφετε, να παρακολουθείτε συνεχώς και να διατηρείτε πληροφορίες δραστηριότητας λογαριασμού που σχετίζονται με την υποδομή AWS σας. Θα έχετε ένα πλήρες ιστορικό ενεργειών που εκτελούνται χρησιμοποιώντας την Κονσόλα διαχείρισης AWS, το AWS SDK, τα εργαλεία γραμμής εντολών και άλλες υπηρεσίες AWS.

Ακτινογραφία AWS
Παρέχει πλήρη ορατότητα σε όλα τα στάδια επεξεργασίας αιτημάτων στην αίτησή σας με βάση έναν χάρτη των εσωτερικών στοιχείων της. Σας επιτρέπει να αναλύετε εφαρμογές κατά την ανάπτυξη και σε περιβάλλοντα παραγωγής.

Διαμόρφωση AWS
Θα μπορείτε να παρακολουθείτε τις αλλαγές στη διαμόρφωση της λειτουργίας Lambda (συμπεριλαμβανομένης της διαγραφής) και τους χρόνους εκτέλεσης, τις ετικέτες, τα ονόματα χειριστή, το μέγεθος κώδικα, την κατανομή μνήμης, τις ρυθμίσεις χρονικού ορίου λήξης και τις ρυθμίσεις ταυτόχρονης χρήσης, καθώς και τον ρόλο εκτέλεσης Lambda IAM, το υποδικτύωμα και τις δεσμεύσεις ομάδων ασφαλείας .

Συμπέρασμα

Το AWS Lambda προσφέρει ένα ισχυρό σύνολο εργαλείων για τη δημιουργία ασφαλών και επεκτάσιμων εφαρμογών. Πολλές από τις πρακτικές ασφάλειας και συμμόρφωσης στο AWS Lambda είναι οι ίδιες με άλλες υπηρεσίες AWS, αν και υπάρχουν εξαιρέσεις. Από τον Μάρτιο του 2019, το Lambda συμμορφώνεται με τα SOC 1, SOC 2, SOC 3, PCI DSS, νόμο περί φορητότητας και λογοδοσίας ασφάλισης υγείας (HIPAA) και άλλους κανονισμούς. Επομένως, όταν σκέφτεστε να εφαρμόσετε την επόμενη εφαρμογή σας, σκεφτείτε την υπηρεσία AWS Lambda - μπορεί να είναι η καλύτερη για την εργασία σας.

Πηγή: www.habr.com

Προσθέστε ένα σχόλιο