Πώς να αλλάξετε το χρονικό όριο στο AWS Lambda

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

Είναι μια υπολογιστική συνάρτηση χωρίς διακομιστή (συνήθως γραμμένη σε γλώσσα προγραμματισμού Node.JS ή Python) την οποία μπορείτε να αναπτύξετε και να εκτελέσετε χωρίς να ξεκινήσετε κανένα σύμπλεγμα backend ή διακομιστή. Μπορείτε να συνδέσετε πολλές λειτουργίες AWS Lambda για να σχηματίσετε πιο περίπλοκες διαδικασίες.

Ωστόσο, μια σημαντική ιδιότητα της συνάρτησης Λάμδα είναι ο περιορισμός της ως προς τη διάρκεια του χρόνου επεξεργασίας. Αυτό τελικά καθορίζει πότε είναι ο σωστός σκοπός να χρησιμοποιήσετε τη λειτουργία AWS Lambda.

Πηγή: aws.amazon.com

Τι είναι το χρονικό διάστημα;

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

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

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

Από προεπιλογή, το χρονικό όριο για μια λειτουργία Lambda έχει οριστεί σε μόλις 3 δευτερόλεπτα. Σε αυτήν την περίπτωση, θα πρέπει να υπολογίζετε στο γεγονός ότι οποιοσδήποτε κώδικας εκτελείτε μέσα σε μια συνάρτηση Lambda πρέπει να τελειώσει μέσα σε τρία δευτερόλεπτα. Αυτό είναι υπέροχο εάν θέλετε να δημιουργήσετε μια αρχιτεκτονική με πραγματικά γρήγορους χρόνους επικοινωνίας και απόκρισης, ενδεχομένως με εκατομμύρια συναλλαγές σε πολύ σύντομο χρονικό διάστημα. Αλλά αυτό θα περιόριζε σημαντικά τις χρήσιμες περιπτώσεις χρήσης της λειτουργίας Lambda, επομένως μπορείτε να αυξήσετε αυτό το όριο έως το μέγιστο των 900 δευτερολέπτων (15 λεπτά). Όταν συμπληρωθεί αυτό το χρονικό όριο, το Lambda θα τερματίσει τη λειτουργία και θα επιστρέψει έναν κωδικό σφάλματος.

  Κορυφαίες 24 καλύτερες εναλλακτικές λύσεις του Outlook

Πώς να ρυθμίσετε τη λειτουργία χρονικού ορίου;

Πηγή: aws.amazon.com

Μπορείτε να ορίσετε το χρονικό όριο για μια λειτουργία Lambda χρησιμοποιώντας την Κονσόλα διαχείρισης AWS, το AWS CLI ή τα AWS SDK.

Ακολουθούν τα συγκεκριμένα βήματα για το πώς να το πετύχετε:

  • Ανοίξτε την Κονσόλα διαχείρισης AWS και μεταβείτε στην υπηρεσία Lambda.
  • Επιλέξτε τη συνάρτηση Lambda που θέλετε να τροποποιήσετε.
  • Στην καρτέλα “Διαμόρφωση”, μετακινηθείτε προς τα κάτω στην ενότητα “Γενικές ρυθμίσεις παραμέτρων” και εντοπίστε τη ρύθμιση “Χρονικό όριο”.
  • Κάντε κλικ στο κουμπί “Επεξεργασία” δίπλα του.
  • Εισαγάγετε τη νέα τιμή χρονικού ορίου σε δευτερόλεπτα (μεταξύ 1 και 900) και κάντε κλικ στο κουμπί “Αποθήκευση”.
  • Κάντε κλικ στο κουμπί “Αποθήκευση” στο επάνω μέρος της σελίδας για να αποθηκεύσετε τις αλλαγές στη συνάρτηση Λάμδα.
  • Μπορείτε επίσης να χρησιμοποιήσετε τη γραμμή εντολών AWS CLI για να ενημερώσετε το χρονικό όριο λήξης μιας συνάρτησης Lambda. Εδώ είναι ένα παράδειγμα εντολής:

    <code>aws lambda update-function-configuration --function-name [My_Lambda_Function_Name] --timeout 900

    Αυτή η εντολή ορίζει το χρονικό όριο για το [My_Lambda_Function_Name] έως 15 λεπτά. Απλώς βάλτε εκεί το πραγματικό σας όνομα της συνάρτησης και την επιθυμητή τιμή χρονικού ορίου σε δευτερόλεπτα.

    Μερικοί συλλογισμοί

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

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

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

    Βέλτιστες πρακτικές

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

      Πώς να χειριστείτε αρχεία στην Python

    Ωστόσο, υπάρχουν ακόμη ορισμένες βέλτιστες πρακτικές που πρέπει να σημειωθούν.

    #1. Καθορίστε την κατάλληλη τιμή

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

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

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

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

    #2. Παρακολούθηση με την πάροδο του χρόνου

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

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

    #3. Ασύγχρονη Επίκληση

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

    #4. Χρησιμοποιήστε τις συναρτήσεις βημάτων για πολύπλοκες διεργασίες

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

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

      Πώς να σταματήσετε αυτόματα το Apple Watch σας από το να ανάβει

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

    #5. Βελτιστοποιήστε τον Κώδικα

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

    Πώς επηρεάζει το χρονικό όριο στη χρέωση;

    Πηγή: aws.amazon.com

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

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

    Ωστόσο, εάν η συνάρτηση δεν καλείται συχνά ή εάν ολοκληρώσει τη διαδικασία νωρίτερα από την επίτευξη της τιμής χρονικού ορίου, ο αντίκτυπος στη χρέωση μπορεί να είναι ελάχιστος.

    Αυτός είναι ο λόγος για τον οποίο η ρύθμιση όλων των λειτουργιών Lambda σε χρονικό όριο 15 λεπτών από προεπιλογή μπορεί να μην είναι ο κύριος λόγος για την αύξηση του κόστους της συνολικής επεξεργασίας σας.

    Ωστόσο, σίγουρα οδηγεί σε έμμεση αύξηση του συνολικού κόστους. Οι προγραμματιστές θα αισθανθούν ότι έχουν κάποιο απόθεμα για χρήση και ενδέχεται να μην βελτιστοποιήσουν τον κώδικα σε τέτοιο βαθμό που θα έκαναν πιθανώς εάν τα χρονικά όρια ήταν πιο περιοριστικά αλλά και πάλι ρεαλιστικά.

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

    Τελικές Λέξεις

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

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

    Στη συνέχεια, ρίξτε μια ματιά στην εισαγωγή στο AWS Lambda για αρχάριους.