Τα AWS Lambda MicroVMs είναι ένα νέο serverless compute primitive που σας δίνει απομόνωση επιπέδου εικονικής μηχανής, σχεδόν στιγμιαία εκκίνηση από snapshot και εκτέλεση με κατάσταση που μπορείτε να αναστείλετε και να συνεχίσετε. Τρέχει πάνω στο Firecracker, την ίδια ελαφριά εικονικοποίηση που ήδη υποστηρίζει περισσότερες από 15 τρισεκατομμύρια κλήσεις Lambda τον μήνα. Με λίγα λόγια: το Lambda απέκτησε μόλις την ικανότητα να δίνει σε κάθε session το δικό του αποκλειστικό, απομονωμένο, μακρόβιο sandbox, και να το κάνει χωρίς να διαχειρίζεστε εσείς καμία εικονικοποίηση.

Αν έχετε ποτέ προσπαθήσει να τρέξετε με ασφάλεια κώδικα που δεν έγραψε η ίδια σας η εφαρμογή, εκτέλεση κώδικα πολλαπλών ενοίκων, διαδραστικά notebooks, σαρωτές ευπαθειών, ξέρετε ήδη γιατί έχει σημασία. Η ειλικρινής απάντηση μέχρι τώρα ήταν "σήκωσε containers ή VMs και φτιάξε μόνος σου την ενορχήστρωση, την απομόνωση και τις σωληνώσεις κύκλου ζωής." Τα MicroVMs τα συμπυκνώνουν όλα αυτά σε μια κλήση API.

Τι είναι πραγματικά καινούργιο

Οι κανονικές συναρτήσεις Lambda είναι stateless, σύντομης διάρκειας και event-driven. Είναι εξαιρετικές γι' αυτό. Είναι επίσης λάθος εργαλείο όταν χρειάζεστε ένα session που ζει για λεπτά ή ώρες, κρατάει κατάσταση στη μνήμη και απομονώνει μη έμπιστο κώδικα σε επίπεδο πυρήνα. Τα MicroVMs είναι ένα διαφορετικό primitive μέσα στην ίδια υπηρεσία, στοχευμένο ακριβώς σε αυτό το κενό. Η AWS το παρουσιάζει ως τρεις δυνατότητες που καμία μεμονωμένη υπηρεσία compute της AWS δεν πρόσφερε μαζί πριν από σήμερα.

1. Απομόνωση επιπέδου VM

Κάθε session τρέχει στο δικό του αποκλειστικό MicroVM, χωρίς κοινό πυρήνα και χωρίς κοινούς πόρους μεταξύ χρηστών. Αυτή είναι η εγγύηση του Firecracker: μη έμπιστος κώδικας από έναν ένοικο περιορίζεται στο δικό του περιβάλλον, χωρίς διαδρομή προς άλλα περιβάλλοντα ή τον host. Τα containers μοιράζονται πυρήνα, ένα MicroVM όχι. Για να τρέξεις κώδικα που δεν έγραψες, αυτό το όριο είναι ολόκληρο το νόημα.

2. Εκκίνηση και επαναφορά ταχύτητας snapshot

Το μοντέλο είναι image-then-launch. Φτιάχνετε ένα MicroVM Image από ένα Dockerfile συν ένα code artifact στο Amazon S3. Το Lambda τρέχει το Dockerfile, αρχικοποιεί την εφαρμογή σας και παίρνει ένα snapshot Firecracker της κατάστασης της μνήμης και του δίσκου που τρέχει. Κάθε MicroVM που εκκινείται από αυτό το image επαναφέρεται από το προ-αρχικοποιημένο snapshot αντί να κάνει cold boot. Ακόμη και ένα διαδραστικό session πολλών gigabyte επανέρχεται αρκετά γρήγορα ώστε να φαίνεται ζωντανό. Αυτή είναι η ιδέα του SnapStart οδηγημένη στο λογικό της τέρμα: δεν ξεκινάτε μια διεργασία, επαναφέρετε μία που ήδη τρέχει.

3. Εκτέλεση με κατάσταση, με δυνατότητα αναστολής

Ένα MicroVM που τρέχει διατηρεί τη μνήμη, τον δίσκο και τις διεργασίες του καθ' όλη τη διάρκεια του session. Όταν μένει αδρανές, μπορεί να ανασταλεί με την κατάσταση ανέπαφη και να συνεχίσει όταν επιστρέψει η κίνηση. Τα εγκατεστημένα πακέτα, τα φορτωμένα δεδομένα και τα αρχεία εργασίας είναι όλα ακόμη εκεί. Τα MicroVMs υποστηρίζουν έως 8 ώρες συνολικού χρόνου εκτέλεσης και αναστέλλονται αυτόματα μετά από ένα διαμορφώσιμο παράθυρο αδράνειας. Αυτό είναι το κομμάτι που σπάει την παλιά υπόθεση του stateless serverless, με καλό τρόπο.

Πώς είναι στην πράξη η λειτουργία του

Δύο κλήσεις CLI φέρουν το μεγαλύτερο μέρος της ροής εργασίας. Πρώτα, χτίστε το image:

aws lambda-microvms create-microvm-image \
  --code-artifact uri=<path/to/s3/artifact.zip> \
  --name my-sandbox \
  --base-image-arn arn:aws:lambda:us-east-1:aws:microvm-image:al2023-1 \
  --build-role-arn <build role ARN>

Τα logs του build ρέουν στο CloudWatch κάτω από το /aws/lambda/microvms/<image-name>, και το ολοκληρωμένο image εμφανίζεται με το δικό του ARN και version. Έπειτα εκκινήστε ένα MicroVM από αυτό:

aws lambda-microvms run-microvm \
  --image-identifier arn:aws:lambda:<region>:<acct>:microvm-image:my-sandbox \
  --execution-role-arn arn:aws:iam::<acct>:role/MicroVMExecutionRole \
  --idle-policy '{"maxIdleDurationSeconds":900,"suspendedDurationSeconds":300,"autoResumeEnabled":true}'

Το Lambda επιστρέφει ένα μοναδικό MicroVM ID και ένα αποκλειστικό endpoint URL, με την εφαρμογή ήδη να τρέχει επειδή επανήλθε από το snapshot. Δεν χρειάζεται να διαμορφώσετε δικτύωση. Το idle-policy είναι εκεί που βρίσκεται ο έλεγχος του κύκλου ζωής: πόσο να μείνει αδρανές πριν την αναστολή, πόσο να μείνει σε αναστολή πριν τον τερματισμό, και αν θα γίνει αυτόματη επαναφορά στο επόμενο αίτημα.

Πού ταιριάζει και πού όχι

Πιάστε MicroVMs ότανΜείνετε στο κανονικό Lambda όταν
Τρέχετε μη έμπιστο κώδικα ή κώδικα που παρέχεται από χρήστη και χρειάζεστε απομόνωση επιπέδου πυρήναΟ κώδικάς σας είναι έμπιστος και η εργασία είναι ένας σύντομος, stateless μετασχηματισμός
Ένα session χρειάζεται να κρατήσει κατάσταση στη μνήμη για λεπτά ή ώρεςΚάθε κλήση είναι ανεξάρτητη και ολοκληρώνεται σε δευτερόλεπτα
Θέλετε αποκλειστικά περιβάλλοντα ανά χρήστη χωρίς να τρέχετε εσείς τον στόλοΔεν σας πειράζει να μοιράζεστε ένα διαχειριζόμενο περιβάλλον εκτέλεσης
Οι περίοδοι αδράνειας είναι κανονικές και θέλετε suspend-resume αντί να πληρώνετε για να μένετε αδρανείςΗ κίνηση είναι σταθερή και το request-response είναι όλο το σχήμα

Τα MicroVMs δεν αντικαθιστούν τις συναρτήσεις και δεν είναι φθηνός τρόπος να τρέξετε έναν 24/7 server. Το όριο των 8 ωρών και το μοντέλο suspend-resume είναι φτιαγμένα για sessions: ένα coding sandbox που ανοίγει ένας χρήστης και το αφήνει, ένα scan που τρέχει για δέκα λεπτά, μια εργασία analytics που δουλεύει για δύο ώρες και μετά σιωπά. Αν το φορτίο σας είναι μια συνεχώς απασχολημένη υπηρεσία μακράς διάρκειας, αυτό παραμένει έδαφος του ECS ή του EC2.

Η επιφύλαξη του snapshot που αξίζει να ξέρετε

Επειδή κάθε MicroVM επανέρχεται από ένα προ-αρχικοποιημένο snapshot, οτιδήποτε κάνει η εφαρμογή σας κατά την αρχικοποίηση που υποθέτει φρεσκάδα μπορεί να σας ξαφνιάσει. Μοναδικά IDs που παράγονται στην εκκίνηση, δικτυακές συνδέσεις που ανοίγουν στο boot, random seeds, ή εφήμερα δεδομένα που φορτώνονται μία φορά, όλα μπορούν να παγώσουν μέσα στο snapshot και να επαναχρησιμοποιηθούν σε όλες τις εκκινήσεις. Αυτή είναι η ίδια κατηγορία παγίδας που γνωρίζουν ήδη οι χρήστες του SnapStart: αν κάτι πρέπει να είναι μοναδικό ή φρέσκο ανά session, παράξτε το μετά την επαναφορά, όχι κατά την αρχικοποίηση. Η AWS εκθέτει hooks για αυτό, και θα τα θέλετε για οτιδήποτε αφορά συνδέσεις ή ευαίσθητο στην ασφάλεια.

Το συμπέρασμα

Τα Lambda MicroVMs είναι το πιο ξεκάθαρο σήμα μέχρι τώρα ότι το serverless έχει πάψει να είναι μόνο stateless και σύντομης διάρκειας. Τώρα αποκτάτε ένα διαχειριζόμενο sandbox Firecracker με πραγματική απομόνωση, εκκινήσεις ταχύτητας snapshot και κατάσταση suspend-resume, εκτεθειμένα ως δύο κλήσεις API και μια πολιτική αδράνειας. Για όποιον χτίζει εκτέλεση κώδικα πολλαπλών ενοίκων, αυτό αφαιρεί το πιο δύσκολο, λιγότερο διαφοροποιημένο κομμάτι της δουλειάς: τις σωληνώσεις απομόνωσης και κύκλου ζωής. Χτίστε το προϊόν, αφήστε το Lambda να τρέξει τον στόλο των microVM.

Διαβάστε αυτό στη συνέχεια

Για την οπτική γωνία του AI και των agents πάνω στην ίδια κυκλοφορία, για το γιατί τα MicroVMs είναι φτιαγμένα να τρέχουν κώδικα παραγόμενο από AI, δείτε τις σημειώσεις πεδίου στο ercan.ai. Για συμβουλευτική σε AWS, serverless και δουλειά πλατφόρμας, ή απλώς για ένα γεια, ξεκινήστε από το ercanermis.com.