Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
Automatisches Archivieren von Elementen in Amazon S3 mithilfe von DynamoDB TTL
Erstellt von Tabby Ward (AWS)
Code-Repository: Elemente mithilfe von DynamoDB TLL in S3 archivieren | Umgebung: PoC oder Pilotprojekt | Technologien: Modernisierung; Datenbanken; Serverless; Speicher und Backup; Kostenmanagement |
Workload: Open-Source | AWS-Services: Amazon S3; Amazon DynamoDB ;Amazon Kinesis ;AWS Lambda |
Übersicht
Dieses Muster enthält Schritte zum Entfernen älterer Daten aus einer Amazon-DynamoDB-Tabelle und zum Archivieren in einem Amazon Simple Storage Service (Amazon S3)-Bucket auf Amazon Web Services (AWS), ohne eine Serverflotte verwalten zu müssen.
Dieses Muster verwendet Amazon DynamoDB Time to Live (TTL), um alte Elemente automatisch zu löschen, und Amazon DynamoDB Streams, um die TTL-abgelaufenen Elemente zu erfassen. Anschließend verbindet es DynamoDB Streams mit AWS Lambda, das den Code ausführt, ohne Server bereitzustellen oder zu verwalten.
Wenn dem DynamoDB-Stream neue Elemente hinzugefügt werden, wird die Lambda-Funktion initiiert und schreibt die Daten in einen Amazon-Data-Firehose-Bereitstellungsdatenstrom. Firehose bietet eine einfache, vollständig verwaltete Lösung zum Laden der Daten als Archiv in Amazon S3.
DynamoDB wird häufig verwendet, um Zeitreihendaten zu speichern, z. B. Clickstream-Daten von Webseiten oder Internet der Dinge (IoT)-Daten von Sensoren und verbundenen Geräten. Anstatt Elemente zu löschen, auf die weniger häufig zugegriffen wird, möchten viele Kunden sie zu Prüfungszwecken archivieren. TTL vereinfacht diese Archivierung, indem Elemente basierend auf dem Zeitstempelattribut automatisch gelöscht werden.
Elemente, die durch TTL gelöscht wurden, können in DynamoDB Streams identifiziert werden. Dabei wird eine zeitlich geordnete Abfolge von Änderungen auf Elementebene erfasst und die Abfolge bis zu 24 Stunden lang in einem Protokoll gespeichert. Diese Daten können von einer Lambda-Funktion genutzt und in einem Amazon S3-Bucket archiviert werden, um die Speicherkosten zu senken. Um die Kosten weiter zu senken, können Amazon S3-Lebenszyklusregeln erstellt werden, um die Daten (sobald sie erstellt werden) automatisch in kostengünstige Speicherklassen
Voraussetzungen und Einschränkungen
Voraussetzungen
Ein aktives AWS-Konto.
AWS Command Line Interface (AWS CLI) 1.7 oder höher, installiert und konfiguriert unter macOS , Linux oder Windows.
Python 3.7
oder höher. Boto3
, installiert und konfiguriert. Wenn Boto3 noch nicht installiert ist, führen Sie den python -m pip install boto3
Befehl aus, um es zu installieren.
Architektur
Technologie-Stack
Amazon DynamoDB
Amazon DynamoDB Streams
Amazon Data Firehose
AWS Lambda
Amazon S3
![](images/pattern-img/9dbc833f-cf3c-4574-8f09-d0b81134fe41/images/50d9da65-5398-4a99-bc8f-58afc80e9d7b.png)
Elemente werden durch TTL gelöscht.
Der DynamoDB-Stream-Auslöser ruft die Lambda-Stream-Prozessorfunktion auf.
Die Lambda-Funktion speichert Datensätze im Firehose-Bereitstellungs-Stream im Batch-Format.
Datensätze werden im S3-Bucket archiviert.
Tools
AWS CLI – Die AWS Command Line Interface (AWS CLI) ist ein einheitliches Tool zur Verwaltung Ihrer AWS-Services.
Amazon DynamoDB – Amazon DynamoDB ist eine Schlüsselwert- und Dokumentdatenbank, die eine einstellige Millisekunden-Leistung in jeder Größenordnung bietet.
Amazon DynamoDB Time to Live (TTL) – Mit Amazon DynamoDB TTL können Sie einen Zeitstempel pro Element definieren, um zu bestimmen, wann ein Element nicht mehr benötigt wird.
Amazon DynamoDB Streams – Amazon DynamoDB Streams erfasst eine zeitlich geordnete Abfolge von Änderungen auf Elementebene in jeder DynamoDB-Tabelle und speichert diese Informationen bis zu 24 Stunden lang in einem Protokoll.
Amazon Data Firehose – Amazon Data Firehose ist die einfachste Möglichkeit, Streaming-Daten zuverlässig in Data Lakes, Datenspeicher und Analyseservices zu laden.
AWS Lambda – AWS Lambda führt Code aus, ohne dass Server bereitgestellt oder verwaltet werden müssen. Sie zahlen nur für die tatsächlich aufgewendete Zeit.
Amazon S3 – Amazon Simple Storage Service (Amazon S3) ist ein Objektspeicherservice, der branchenweit führende Skalierbarkeit, Datenverfügbarkeit, Sicherheit und Leistung bietet.
Code
Der Code für dieses Muster ist im GitHub Archivieren von Elementen in S3 mithilfe des DynamoDB-TTL
Sekunden
Aufgabe | Beschreibung | Erforderliche Fähigkeiten |
---|---|---|
Erstellen Sie eine DynamoDB-Tabelle. | Verwenden Sie die AWS CLI, um eine Tabelle in DynamoDB mit dem Namen zu erstellen
| Cloud-Architekt, App-Entwickler |
Aktivieren Sie DynamoDB TTL. | Verwenden Sie die AWS CLI, um DynamoDB TTL für das
| Cloud-Architekt, App-Entwickler |
Aktivieren Sie einen DynamoDB-Stream. | Verwenden Sie die AWS CLI, um einen DynamoDB-Stream für die
Dieser Stream enthält Datensätze für neue Elemente, aktualisierte Elemente, gelöschte Elemente und Elemente, die durch TTL gelöscht werden. Die Datensätze für Elemente, die durch TTL gelöscht werden, enthalten ein zusätzliches Metadatenattribut, um sie von Elementen zu unterscheiden, die manuell gelöscht wurden. Das In diesem Muster werden nur die durch TTL gelöschten Elemente archiviert, aber Sie können nur die Datensätze | Cloud-Architekt, App-Entwickler |
Aufgabe | Beschreibung | Erforderliche Fähigkeiten |
---|---|---|
Erstellen Sie einen S3-Bucket. | Verwenden Sie die AWS CLI, um einen S3-Ziel-Bucket in Ihrer AWS-Region zu erstellen, und ersetzen Sie durch
Stellen Sie sicher, dass der Name des S3-Buckets global eindeutig ist, da der Namespace von allen AWS-Konten gemeinsam genutzt wird. | Cloud-Architekt, App-Entwickler |
Erstellen Sie eine 30-tägige Lebenszyklusrichtlinie für den S3-Bucket. |
| Cloud-Architekt, App-Entwickler |
Aufgabe | Beschreibung | Erforderliche Fähigkeiten |
---|---|---|
Erstellen und konfigurieren Sie einen Firehose-Bereitstellungs-Stream. | Laden Sie das Dieser Code ist in Python geschrieben und zeigt Ihnen, wie Sie einen Firehose-Bereitstellungs-Stream und eine AWS Identity and Access Management (IAM)-Rolle erstellen. Die IAM-Rolle verfügt über eine Richtlinie, mit der Firehose in den S3-Ziel-Bucket schreiben kann. Verwenden Sie den folgenden Befehl und die folgenden Befehlszeilenargumente, um das Skript auszuführen. Argument 1= Argument 2= Ihr Firehose-Name (Dieses Pilotprojekt verwendet Argument 3= Ihr IAM-Rollenname (Dieses Pilotprojekt verwendet
Wenn die angegebene IAM-Rolle nicht vorhanden ist, erstellt das Skript eine Übernahmerolle mit einer Vertrauensbeziehungsrichtlinie sowie eine Richtlinie, die ausreichende Amazon S3-Berechtigung gewährt. Beispiele für diese Richtlinien finden Sie im Abschnitt Zusätzliche Informationen. | Cloud-Architekt, App-Entwickler |
Überprüfen Sie den Firehose-Bereitstellungsdatenstrom. | Beschreiben Sie den Firehose-Bereitstellungsdatenstrom mithilfe der AWS CLI, um zu überprüfen, ob der Bereitstellungsdatenstrom erfolgreich erstellt wurde.
| Cloud-Architekt, App-Entwickler |
Aufgabe | Beschreibung | Erforderliche Fähigkeiten |
---|---|---|
Erstellen Sie eine Vertrauensrichtlinie für die Lambda-Funktion. | Erstellen Sie eine Vertrauensrichtliniendatei mit den folgenden Informationen.
Dadurch erhält Ihre Funktion die Berechtigung, auf AWS-Ressourcen zuzugreifen. | Cloud-Architekt, App-Entwickler |
Erstellen Sie eine Ausführungsrolle für die Lambda-Funktion. | Führen Sie den folgenden Code aus, um die Ausführungsrolle zu erstellen.
| Cloud-Architekt, App-Entwickler |
Fügen Sie der Rolle die Berechtigung hinzu. | Verwenden Sie den
| Cloud-Architekt, App-Entwickler |
Erstellen Sie eine Lambda-Funktion. | Komprimieren Sie die
Wenn Sie die Lambda-Funktion erstellen, benötigen Sie den ARN der Lambda-Ausführungsrolle. Führen Sie den folgenden Code aus, um den ARN abzurufen.
Führen Sie den folgenden Code aus, um die Lambda-Funktion zu erstellen.
| Cloud-Architekt, App-Entwickler |
Konfigurieren Sie den Lambda-Funktionsauslöser. | Verwenden Sie die AWS CLI, um den Auslöser (DynamoDB Streams) zu konfigurieren, der die Lambda-Funktion aufruft. Die Batchgröße von 400 soll vermeiden, dass Probleme mit der Lambda-Gleichzeitigkeit auftreten.
| Cloud-Architekt, App-Entwickler |
Aufgabe | Beschreibung | Erforderliche Fähigkeiten |
---|---|---|
Fügen Sie der Tabelle Reservierung Elemente mit abgelaufenen Zeitstempeln hinzu. | Um die Funktionalität zu testen, fügen Sie der Die Lambda-Funktion wird bei DynamoDB-Stream-Aktivitäten initiiert und filtert das Ereignis, um Der Firehose-Bereitstellungs-Stream überträgt Elemente an einen Ziel-S3-Bucket mit dem Wichtig: Um den Datenabruf zu optimieren, konfigurieren Sie Amazon S3 mit den | Cloud-Architekt |
Aufgabe | Beschreibung | Erforderliche Fähigkeiten |
---|---|---|
Löschen Sie alle Ressourcen. | Löschen Sie alle Ressourcen, um sicherzustellen, dass Ihnen keine Gebühren für Services berechnet werden, die Sie nicht verwenden. | Cloud-Architekt, App-Entwickler |
Zugehörige Ressourcen
Zusätzliche Informationen
Erstellen und Konfigurieren eines Firehose-Bereitstellungsdatenstroms – Richtlinienbeispiele
Beispieldokument für eine Firehose-Richtlinie für vertrauenswürdige Beziehungen
firehose_assume_role = { 'Version': '2012-10-17', 'Statement': [ { 'Sid': '', 'Effect': 'Allow', 'Principal': { 'Service': 'firehose.amazonaws.com' }, 'Action': 'sts:AssumeRole' } ] }
Beispiel für eine S3-Berechtigungsrichtlinie
s3_access = { "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Action": [ "s3:AbortMultipartUpload", "s3:GetBucketLocation", "s3:GetObject", "s3:ListBucket", "s3:ListBucketMultipartUploads", "s3:PutObject" ], "Resource": [ "{your s3_bucket ARN}/*", "{Your s3 bucket ARN}" ] } ] }
Testen der Funktionalität – Amazon S3-Konfiguration
Die Amazon S3-Konfiguration mit dem folgenden Prefix
und ErrorOutputPrefix
wird zur Optimierung des Datenabrufs ausgewählt.
prefix
firehosetos3example/year=! {timestamp: yyyy}/month=! {timestamp:MM}/day=! {timestamp:dd}/hour=!{timestamp:HH}/
Firehose erstellt zunächst einen Basisordner mit dem Namen firehosetos3example
direkt unter dem S3-Bucket. Anschließend werden die Ausdrücke !{timestamp:yyyy}
, !{timestamp:MM}
!{timestamp:dd}
, und !{timestamp:HH}
auf Jahr, Monat, Tag und Stunde im Java-DateTimeFormatter
Ein ungefährer Ankunftszeitstempel von 1604683577 in der Unix-Epochenzeit ergibt beispielsweise year=2020
, month=11
day=06
, und hour=05
. Daher wird der Speicherort in Amazon S3, an den Datensätze übermittelt werden, als ausgewertetfirehosetos3example/year=2020/month=11/day=06/hour=05/
.
ErrorOutputPrefix
firehosetos3erroroutputbase/!{firehose:random-string}/!{firehose:error-output-type}/!{timestamp:yyyy/MM/dd}/
Das ErrorOutputPrefix
führt zu einem Basisordner mit dem Namen firehosetos3erroroutputbase
direkt unter dem S3-Bucket. Der Ausdruck !{firehose:random-string}
wird zu einer zufälligen Zeichenfolge mit 11 Zeichen ausgewertet, z. B. ztWxkdg3Thg
. Der Speicherort für ein Amazon S3-Objekt, an das fehlgeschlagene Datensätze übermittelt werden, könnte zu ausgewertet werdenfirehosetos3erroroutputbase/ztWxkdg3Thg/processing-failed/2020/11/06/
.