DynamoDB Streams με Lambda

Dynamodb Streams Me Lambda



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

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

Μπορείτε να χρησιμοποιήσετε το Lambda για να γράψετε τον κώδικα σε Node.js, Python, Java ή C# για να επεξεργαστείτε τις εγγραφές ροής και να κάνετε τις κατάλληλες ενέργειες. Το κύριο πλεονέκτημα της ενσωμάτωσης των ροών DynamoDB με το Lambda είναι ότι το Lambda σάς επιτρέπει να εκτελείτε τις υποστηριζόμενες υπηρεσίες ή τους κωδικούς εφαρμογών χωρίς την ανάγκη διαχείρισης.







Πώς να χρησιμοποιήσετε τις ροές AWS DynamoDB με το Lambda

Ενώ είναι δυνατό να δημιουργήσετε μια συνάρτηση Lambda που καταναλώνει τα συμβάντα και τα συμβάντα από μια ροή DynamoDB, η διαδικασία μπορεί να είναι αρκετά απαιτητική, ιδιαίτερα στην πρώτη σας προσπάθεια. Τα παρακάτω βήματα θα βοηθήσουν:



Βήμα 1: Βεβαιωθείτε ότι το σύστημά σας πληροί τις προϋποθέσεις

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



Η δεύτερη προϋπόθεση που αξίζει να εξεταστεί είναι η επιβεβαίωση της έκδοσης AWS του συστήματός σας. Μπορείτε να χρησιμοποιήσετε την ακόλουθη εντολή:





aws – έκδοση

Το αποτέλεσμα για την παρεχόμενη εντολή θα πρέπει να μοιάζει με αυτό:

aws-cli/ 2 .x.x Python/ 3 .x.x Linux/ 4 .x.x-xxx-std botocore/ 2 .χ.χ

Το δεδομένο δείγμα απάντησης περιέχει την εγκατεστημένη έκδοση του AWS CLI ( aws-cli/2.x.x ), την έκδοση Python ( Python/3.x.x ), και το λειτουργικό σύστημα ( Linux/4.x.x-xxx-std ). Το τελευταίο μέρος της απάντησης ορίζει την έκδοση της βιβλιοθήκης Botocore στην οποία εκτελείται το AWS CLI ( botocore/2.x.x ).



Επομένως, θα καταλήξετε σε κάτι σαν αυτό:

Βήμα 2: Δημιουργήστε έναν ρόλο εκτέλεσης

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

Μπορείτε να δημιουργήσετε έναν ρόλο χρησιμοποιώντας την ακόλουθη εντολή:

aws iam δημιουργία-ρόλος \

--role-name LambdaDynamoDBEexecutionRole \

--assume-role-policy-document file://assume-role-policy.json \

--περιγραφή 'AWSLambdaDynamoDBEexecutionRole' \

--service-name lambda.amazonaws.com

Η προηγούμενη εντολή είναι μια εντολή AWS CLI για τη δημιουργία ενός ρόλου. Μπορείτε επίσης να χρησιμοποιήσετε την Κονσόλα διαχείρισης του Amazon για να δημιουργήσετε έναν ρόλο. Μόλις βρεθείτε στην κονσόλα IAM, ανοίξτε το Ρόλοι σελίδα και κάντε κλικ στο Δημιουργία ρόλου κουμπί.

Συνεχίστε για να εισάγετε τα ακόλουθα:

  • Αξιόπιστη οντότητα: Λάμδα
  • Όνομα ρόλου: lambda-dynamodb-role
  • Δικαιώματα: AWSLambdaDynamoDBEexecutionRole

Μπορείτε επίσης να χρησιμοποιήσετε την Python εγκαθιστώντας πρώτα το AWS SDK για Python:

pip install boto3

Βήμα 3: Ενεργοποιήστε τις ροές DynamoDB στο τραπέζι σας

Πρέπει να ενεργοποιήσετε τις ροές DynamoDB στο τραπέζι σας. Για αυτήν την απεικόνιση, χρησιμοποιούμε το Boto3, AWS SDK για Python. Η ακόλουθη εντολή θα βοηθήσει:

εισαγωγή boto3

# Συνδεθείτε στην υπηρεσία DynamoDB
dynamodb = boto3.client( 'dynamodb' )

# Ενεργοποιήστε τις ροές DynamoDB στον πίνακα 'my-table'.
answer = dynamodb.update_table(
Όνομα πίνακα= 'mytable' ,
StreamSpecification={
'Ενεργοποιημένη ροή' : Αλήθεια,
'StreamViewType' : 'NEW_AND_OLD_IMAGES'
}
)

# Ελέγξτε την απάντηση για να βεβαιωθείτε ότι η ροή ενεργοποιήθηκε με επιτυχία
αν απαντήσω[ 'StreamSpecification' ][ 'Ενεργοποιημένη ροή' ]:
Τυπώνω( 'Η ροή DynamoDB ενεργοποιήθηκε με επιτυχία' )
αλλού:
Τυπώνω( 'Σφάλμα κατά την ενεργοποίηση της ροής DynamoDB' )

Αυτός ο κώδικας ενεργοποιεί τη ροή DynamoDB στον πίνακα 'mytable' που μεταδίδει τόσο τις νέες όσο και τις παλιές εικόνες των αντικειμένων αμέσως μόλις πραγματοποιηθούν αλλαγές. Μπορείτε να επιλέξετε να μεταδίδονται μόνο οι νέες εικόνες σε ροή μόλις το StreamViewType στο 'NEW_IMAGE'.

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

Βήμα 4: Δημιουργήστε τη συνάρτηση Lambda

Το επόμενο βήμα είναι η δημιουργία μιας συνάρτησης Lambda που ενεργοποιεί τη ροή DynamoDB. Τα παρακάτω βήματα θα πρέπει να βοηθήσουν:

  • Ανοίξτε την κονσόλα AWS Lambda και κάντε κλικ στην καρτέλα 'Δημιουργία συνάρτησης'. Στη σελίδα 'Δημιουργία συνάρτησης', επιλέξτε 'Συγγραφέας από την αρχή' και εισαγάγετε ένα όνομα για τη λειτουργία σας. Πρέπει επίσης να εισαγάγετε το χρόνο εκτέλεσης σε αυτό το σημείο. Επιλέξαμε την Python για αυτήν την απεικόνιση.
  • Στην ενότητα 'Επιλογή ή δημιουργία ρόλου εκτέλεσης', επιλέξτε 'Δημιουργία νέου ρόλου με βασικά δικαιώματα Lambda' για να δημιουργήσετε έναν ρόλο IAM με τα απαραίτητα δικαιώματα για τη λειτουργία Lambda.
  • Κάντε κλικ στο κουμπί 'Δημιουργία λειτουργίας' για να δημιουργήσετε τη συνάρτηση Λάμδα.
  • Στη σελίδα 'Διαμόρφωση' για τη λειτουργία σας, κάντε κύλιση προς τα κάτω στην ενότητα 'Σχεδιαστής' και κάντε κλικ στην καρτέλα 'Προσθήκη ενεργοποίησης'.
  • Στο πλαίσιο 'Διαμόρφωση σκανδάλης' που εμφανίζεται, επιλέξτε 'DynamoDB' από το αναπτυσσόμενο μενού 'Ενεργοποίηση'.
  • Επιλέξτε τον πίνακα DynamoDB που θέλετε να χρησιμοποιήσετε για να ενεργοποιήσετε τη λειτουργία. Μόλις τελειώσετε, επιλέξτε εάν θέλετε να ενεργοποιείται η λειτουργία σε όλες τις ενημερώσεις στον πίνακα ή μόνο σε συγκεκριμένες ενημερώσεις (όπως ενημερώσεις σε συγκεκριμένες στήλες).
  • Κάντε κλικ στο κουμπί 'Προσθήκη' για να δημιουργήσετε το έναυσμα.
  • Στο πρόγραμμα επεξεργασίας 'Κώδικας συνάρτησης', γράψτε τον κώδικα Python για τη συνάρτησή σας. Μπορείτε να χρησιμοποιήσετε το αντικείμενο συμβάντος που μεταβιβάζεται στη συνάρτησή σας για πρόσβαση στα δεδομένα που ενεργοποιούν τη συνάρτηση.
  • Κάντε κλικ στο κουμπί 'Αποθήκευση' για να αποθηκευτεί η λειτουργία.

Αυτό είναι το μόνο που συμβαίνει κατά τη δημιουργία μιας συνάρτησης Λάμδα! Η λειτουργία σας ενεργοποιείται πλέον κάθε φορά που υπάρχουν ενημερώσεις στον καθορισμένο πίνακα DynamoDB.

Ακολουθεί ένα παράδειγμα μιας απλής συνάρτησης Python που μπορεί να ενεργοποιήσει η ροή DynamoDB:

def lambda_handler(συμβάν, περιβάλλον):

για ρεκόρ σε εκδήλωση[ 'Ρεκόρ' ]:

εκτύπωση(εγγραφή[ 'dynamodb' ][ 'Νέα εικόνα' ])

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

Βήμα 5: Δοκιμάστε τη λειτουργία λάμδα

Για να ελέγξετε μια συνάρτηση Lambda που μπορεί να ενεργοποιήσει μια ροή DynamoDB, μπορείτε να χρησιμοποιήσετε το boto3 βιβλιοθήκη για πρόσβαση στο DynamoDB API και το επικαλούμαι μέθοδος του Λάμδα πελάτη για να ενεργοποιήσει τη λειτουργία.

Ακολουθεί ένα παράδειγμα για το πώς να το κάνετε:

εισαγωγή boto3

# Συνδεθείτε στην υπηρεσία DynamoDB
dynamodb = boto3.client( 'dynamodb' )

# Συνδεθείτε στην υπηρεσία Lambda
lambda_client = boto3.client( 'λάμδα' )

# Εισαγάγετε ένα στοιχείο στον πίνακα 'my-table'.
answer = dynamodb.put_item(
Όνομα πίνακα= 'mytable' ,
Στοιχείο={
'ταυτότητα' :{ 'Ν' : '123' },
'όνομα' :{ 'ΜΙΚΡΟ' : 'Joel Austin},
'
ηλικία ':{' Ν ':' 3. 4 '}
}
)

# Ελέγξτε την απάντηση για να βεβαιωθείτε ότι το στοιχείο εισήχθη με επιτυχία
αν απαντήσω['
ResponseMetadata '][' Κωδικός κατάστασης HTTPS '] == 200:
print ('Το στοιχείο εισήχθη με επιτυχία')
αλλού:
print ('Σφάλμα κατά την εισαγωγή στοιχείου')

# Ενεργοποιήστε τη συνάρτηση λάμδα που είναι εγγεγραμμένη στο «
το τραπέζι μου τραπέζι
answer = lambda_client.invoke(
Function,
InvocationType='
Εκδήλωση ',
LogType='
Ουρά ',
ωφέλιμο φορτίο='
{ 'Ρεκόρ' :[{ 'dynamodb' :{ 'Νέα εικόνα' :{ 'ταυτότητα' :{ 'Ν' : '123' }, 'όνομα' :{ 'ΜΙΚΡΟ' : 'Τζόελ Όστιν' }, 'ηλικία' :{ 'Ν' : '3. 4' }}}}]} '
)

# Ελέγξτε την απόκριση για να βεβαιωθείτε ότι η λειτουργία ενεργοποιήθηκε με επιτυχία
αν απαντήσω['
Κωδικός κατάστασης '] == 202:
εκτύπωση ('Η λειτουργία λάμδα ενεργοποιήθηκε με επιτυχία')
αλλού:
print ('Σφάλμα ενεργοποίησης της λειτουργίας Lambda')

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

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

συμπέρασμα

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