

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
<a name="automatically-archive-items-to-amazon-s3-using-dynamodb-ttl"></a>

*Tabby Ward, Amazon Web Services*

## Zusammenfassung
<a name="automatically-archive-items-to-amazon-s3-using-dynamodb-ttl-summary"></a>

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 Artikel automatisch zu löschen, und Amazon DynamoDB DynamoDB-Streams, um die TTL-abgelaufenen Artikel 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 Artikel hinzugefügt werden, wird die Lambda-Funktion initiiert und schreibt die Daten in einen Amazon Data Firehose-Lieferstream. Firehose bietet eine einfache, vollständig verwaltete Lösung zum Laden der Daten als Archiv in Amazon S3.

DynamoDB wird häufig zum Speichern von Zeitreihendaten verwendet, z. B. Click-Stream-Daten von Webseiten oder IoT-Daten (Internet of Things) von Sensoren und angeschlossenen 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 auf der Grundlage des Timestamp-Attributs automatisch gelöscht werden. 

Durch TTL gelöschte Elemente können in DynamoDB Streams identifiziert werden, wodurch eine zeitlich geordnete Abfolge von Änderungen auf Elementebene erfasst und die Reihenfolge bis zu 24 Stunden in einem Protokoll gespeichert wird. Diese Daten können von einer Lambda-Funktion genutzt und in einem Amazon S3 S3-Bucket archiviert werden, um die Speicherkosten zu senken. Um die Kosten weiter zu senken, können [Amazon S3 S3-Lebenszyklusregeln](https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-lifecycle-mgmt.html) erstellt werden, um die Daten (sobald sie erstellt wurden) automatisch in die kostengünstigsten [Speicherklassen](https://aws.amazon.com/s3/storage-classes/) umzuwandeln.

## Voraussetzungen und Einschränkungen
<a name="automatically-archive-items-to-amazon-s3-using-dynamodb-ttl-prereqs"></a>

**Voraussetzungen**
+ Ein aktives AWS-Konto.
+ [AWS Command Line Interface (AWS CLI) 1.7 oder höher](https://docs.aws.amazon.com/cli/latest/userguide/install-cliv1.html), installiert und konfiguriert auf macOS, Linux oder Windows.
+ [Python 3.7](https://www.python.org/downloads/release/python-370/) oder höher.
+ [Boto3](https://boto3.amazonaws.com/v1/documentation/api/latest/index.html), 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
<a name="automatically-archive-items-to-amazon-s3-using-dynamodb-ttl-architecture"></a>

**Technologie-Stack**
+ Amazon DynamoDB
+ Amazon DynamoDB Streams
+ Amazon Data Firehose
+ AWS Lambda
+ Amazon S3

![\[Vierstufiger Prozess von DynamoDB zum S3-Bucket.\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/images/pattern-img/9dbc833f-cf3c-4574-8f09-d0b81134fe41/images/50d9da65-5398-4a99-bc8f-58afc80e9d7b.png)


1. Elemente werden per TTL gelöscht.

1. Der DynamoDB-Stream-Trigger ruft die Lambda-Stream-Prozessorfunktion auf.

1. Die Lambda-Funktion stellt Datensätze im Firehose-Lieferstream im Batch-Format bereit.

1. Datensätze werden im S3-Bucket archiviert.

## Tools
<a name="automatically-archive-items-to-amazon-s3-using-dynamodb-ttl-tools"></a>
+ [AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html) — Die AWS-Befehlszeilenschnittstelle (AWS CLI) ist ein einheitliches Tool zur Verwaltung Ihrer AWS-Services.
+ [Amazon DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Introduction.html) — Amazon DynamoDB ist eine Schlüsselwert- und Dokumentendatenbank, die in jeder Größenordnung eine Leistung im einstelligen Millisekundenbereich bietet.
+ [Amazon DynamoDB Time to Live (TTL) — Amazon DynamoDB TTL](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/howitworks-ttl.html) unterstützt Sie bei der Definition eines Zeitstempels pro Artikel, um zu bestimmen, wann ein Artikel nicht mehr benötigt wird.
+ [Amazon DynamoDB Streams](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_Types_Amazon_DynamoDB_Streams.html) — Amazon DynamoDB Streams erfasst eine zeitlich geordnete Abfolge von Änderungen auf Elementebene in jeder DynamoDB-Tabelle und speichert diese Informationen bis zu 24 Stunden in einem Protokoll.
+ [Amazon Data Firehose](https://docs.aws.amazon.com/firehose/latest/dev/what-is-this-service.html) — Amazon Data Firehose ist der einfachste Weg, Streaming-Daten zuverlässig in Data Lakes, Datenspeicher und Analysedienste zu laden.
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) — 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](https://docs.aws.amazon.com/AmazonS3/latest/dev/Welcome.html) — Amazon Simple Storage Service (Amazon S3) ist ein Objektspeicherservice, der branchenführende Skalierbarkeit, Datenverfügbarkeit, Sicherheit und Leistung bietet.

**Code**

Der Code für dieses Muster ist im Repository GitHub [Archivieren von Elementen in S3 mithilfe des DynamoDB-TTL-Repositorys](https://github.com/aws-samples/automatically-archive-items-to-s3-using-dynamodb-ttl) verfügbar.

## Epen
<a name="automatically-archive-items-to-amazon-s3-using-dynamodb-ttl-epics"></a>

### Richten Sie eine DynamoDB-Tabelle, TTL und einen DynamoDB-Stream ein
<a name="set-up-a-dynamodb-table-ttl-and-a-dynamodb-stream"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Erstellen Sie eine DynamoDB-Tabelle. | Verwenden Sie die AWS-CLI, um in DynamoDB eine Tabelle mit dem Namen zu erstellen. `Reservation` Wählen Sie Random Read Capacity Unit (RCU) und WCU (WCU) und geben Sie Ihrer Tabelle zwei Attribute: und. `ReservationID` `ReservationDate` <pre>aws dynamodb create-table \<br />--table-name Reservation \<br />--attribute-definitions AttributeName=ReservationID,AttributeType=S AttributeName=ReservationDate,AttributeType=N \<br />--key-schema AttributeName=ReservationID,KeyType=HASH AttributeName=ReservationDate,KeyType=RANGE \<br />--provisioned-throughput ReadCapacityUnits=100,WriteCapacityUnits=100 </pre>`ReservationDate`ist ein Epochenzeitstempel, der verwendet wird, um TTL einzuschalten. | Cloud-Architekt, App-Entwickler | 
| Schalten Sie DynamoDB TTL ein. | Verwenden Sie die AWS-CLI, um DynamoDB-TTL für das Attribut zu aktivieren. `ReservationDate`<pre>aws dynamodb update-time-to-live \<br />--table-name Reservation\<br />  --time-to-live-specification Enabled=true,AttributeName=ReservationDate</pre> | Cloud-Architekt, App-Entwickler | 
| Schalten Sie einen DynamoDB-Stream ein. | Verwenden Sie die AWS-CLI, um mithilfe des Stream-Typs einen DynamoDB-Stream für die `Reservation` Tabelle zu aktivieren. `NEW_AND_OLD_IMAGES` <pre>aws dynamodb update-table \<br />--table-name Reservation \<br />  --stream-specification StreamEnabled=true,StreamViewType=NEW_AND_OLD_IMAGES</pre>Dieser Stream enthält Datensätze für neue Elemente, aktualisierte Elemente, gelöschte Elemente und Elemente, die per TTL gelöscht wurden. Die Datensätze für Elemente, die per TTL gelöscht wurden, enthalten ein zusätzliches Metadatenattribut, um sie von manuell gelöschten Elementen zu unterscheiden. Das `userIdentity` Feld für TTL-Löschungen gibt an, dass der DynamoDB-Dienst die Löschaktion ausgeführt hat. In diesem Muster werden nur die durch TTL gelöschten Elemente archiviert. Sie könnten aber auch nur die Datensätze archivieren, bei denen `eventName` ist `REMOVE` und was enthält. `userIdentity` `principalId` `dynamodb.amazonaws.com` | Cloud-Architekt, App-Entwickler | 

### Erstellen und konfigurieren Sie einen S3-Bucket
<a name="create-and-configure-an-s3-bucket"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Erstellen Sie einen S3-Bucket. | Verwenden Sie die AWS-CLI, um einen Ziel-S3-Bucket in Ihrer AWS-Region zu erstellen. `us-east-1` Ersetzen Sie ihn durch Ihre Region und amzn-s3- demo-destination-bucket durch den Namen Ihres Buckets. <pre>aws s3api create-bucket \<br />--bucket amzn-s3-demo-destination-bucket \<br />--region us-east-1</pre>Stellen Sie sicher, dass der Name Ihres S3-Buckets weltweit eindeutig ist, da der Namespace von allen AWS-Konten gemeinsam genutzt wird. | Cloud-Architekt, App-Entwickler | 
| Erstellen Sie eine 30-Tage-Lebenszyklusrichtlinie für den S3-Bucket. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/automatically-archive-items-to-amazon-s3-using-dynamodb-ttl.html) | Cloud-Architekt, App-Entwickler | 

### Erstellen Sie einen Firehose-Lieferstream
<a name="create-a-akf-delivery-stream"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Erstellen und konfigurieren Sie einen Firehose-Lieferstream. | Laden Sie das `CreateFireHoseToS3.py` Codebeispiel aus dem GitHub Repository herunter und bearbeiten Sie es. Dieser Code ist in Python geschrieben und zeigt Ihnen, wie Sie einen Firehose-Lieferstream und eine AWS Identity and Access Management (IAM) -Rolle erstellen. Die IAM-Rolle wird über eine Richtlinie verfügen, die von Firehose verwendet werden kann, um in den Ziel-S3-Bucket zu schreiben.Verwenden Sie den folgenden Befehl und die folgenden Befehlszeilenargumente, um das Skript auszuführen.Argument 1=`<Your_S3_bucket_ARN>`, das ist der Amazon-Ressourcenname (ARN) für den Bucket, den Sie zuvor erstellt habenArgument 2= Ihr Firehose-Name (Dieser Pilot verwendet`firehose_to_s3_stream`.)Argument 3= Ihr IAM-Rollenname (dieser Pilot verwendet.) `firehose_to_s3`<pre>python CreateFireHoseToS3.py <Your_S3_Bucket_ARN> firehose_to_s3_stream firehose_to_s3</pre>Wenn die angegebene IAM-Rolle nicht existiert, erstellt das Skript eine Rolle annehmen mit einer Richtlinie für vertrauenswürdige Beziehungen sowie eine Richtlinie, die ausreichende Amazon S3 S3-Berechtigungen gewährt. Beispiele für diese Richtlinien finden Sie im Abschnitt *Zusätzliche Informationen*. | Cloud-Architekt, App-Entwickler | 
| Überprüfen Sie den Firehose-Lieferstream. | Beschreiben Sie den Firehose-Lieferstream mithilfe der AWS-CLI, um zu überprüfen, ob der Lieferstream erfolgreich erstellt wurde.<pre>aws firehose describe-delivery-stream --delivery-stream-name firehose_to_s3_stream </pre> | Cloud-Architekt, App-Entwickler | 

### Erstellen Sie eine Lambda-Funktion zur Verarbeitung des Firehose-Lieferdatenstroms
<a name="create-a-lambda-function-to-process-the-akf-delivery-stream"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Erstellen Sie eine Vertrauensrichtlinie für die Lambda-Funktion. | Erstellen Sie eine Vertrauensrichtliniendatei mit den folgenden Informationen.<pre> {<br />     "Version": "2012-10-17",		 	 	 <br />     "Statement": [<br />      {<br />          "Effect": "Allow",<br />          "Principal": {<br />              "Service": "lambda.amazonaws.com"<br />           },<br />           "Action": "sts:AssumeRole"<br />      }<br />    ]<br />  } </pre>Dadurch erhält Ihre Funktion die Erlaubnis, 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.<pre>aws iam create-role --role-name lambda-ex --assume-role-policy-document file://TrustPolicy.json</pre> | Cloud-Architekt, App-Entwickler | 
| Fügen Sie der Rolle eine Berechtigung hinzu. | Verwenden Sie den `attach-policy-to-role` Befehl, um der Rolle eine Berechtigung hinzuzufügen.<pre>aws iam attach-role-policy --role-name lambda-ex --policy-arn arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole<br />aws iam attach-role-policy --role-name lambda-ex --policy-arn arn:aws:iam::aws:policy/service-role/AWSLambdaDynamoDBExecutionRole<br />aws iam attach-role-policy --role-name lambda-ex --policy-arn arn:aws:iam::aws:policy/AmazonKinesisFirehoseFullAccess<br />aws iam attach-role-policy --role-name lambda-ex --policy-arn arn:aws:iam::aws:policy/IAMFullAccess </pre> | Cloud-Architekt, App-Entwickler | 
| Erstellen Sie eine Lambda-Funktion. | Komprimieren Sie die `LambdaStreamProcessor.py` Datei aus dem Code-Repository, indem Sie den folgenden Befehl ausführen.<pre>zip function.zip LambdaStreamProcessor.py</pre>Wenn Sie die Lambda-Funktion erstellen, benötigen Sie den ARN für die Lambda-Ausführungsrolle. Führen Sie den folgenden Code aus, um den ARN abzurufen.<pre>aws iam get-role \<br />--role-name lambda-ex </pre>Führen Sie den folgenden Code aus, um die Lambda-Funktion zu erstellen.<pre># Review the environment variables and replace them with your values.<br /><br />aws lambda create-function --function-name LambdaStreamProcessor \<br />--zip-file fileb://function.zip --handler LambdaStreamProcessor.handler --runtime python3.8 \<br />--role {Your Lamda Execution Role ARN}\<br />  --environment Variables="{firehose_name=firehose_to_s3_stream,bucket_arn = <Your_S3_bucket_ARN>,iam_role_name = firehose_to_s3, batch_size=400}"</pre> | Cloud-Architekt, App-Entwickler | 
| Konfigurieren Sie den Lambda-Funktionstrigger. | Verwenden Sie die AWS-CLI, um den Trigger (DynamoDB Streams) zu konfigurieren, der die Lambda-Funktion aufruft. Die Batchgröße von 400 soll verhindern, dass Lambda-Parallelitätsprobleme auftreten.<pre>aws lambda create-event-source-mapping --function-name LambdaStreamProcessor \<br />--batch-size 400 --starting-position LATEST \<br />--event-source-arn <Your Latest Stream ARN From DynamoDB Console></pre> | Cloud-Architekt, App-Entwickler | 

### Testen Sie die Funktionalität
<a name="test-the-functionality"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Fügen Sie Artikel mit abgelaufenen Zeitstempeln zur Reservierungstabelle hinzu. | Um die Funktionalität zu testen, fügen Sie der Tabelle Artikel mit abgelaufenen Epochenzeitstempeln hinzu. `Reservation` TTL löscht automatisch Elemente auf der Grundlage des Zeitstempels. Die Lambda-Funktion wird bei DynamoDB-Stream-Aktivitäten ausgelöst und filtert das Ereignis, um `REMOVE` Aktivitäten oder gelöschte Elemente zu identifizieren. Anschließend werden Datensätze im Batch-Format in Firehose Firehose-Lieferstream eingefügt.Der Firehose-Lieferstream überträgt Artikel mit dem `firehosetos3example/year=current year/month=current month/ day=current day/hour=current hour/` Präfix an einen S3-Ziel-Bucket.Um den Datenabruf zu optimieren, konfigurieren Sie Amazon S3 mit den `Prefix` und`ErrorOutputPrefix`, die im Abschnitt *Zusätzliche Informationen* detailliert beschrieben werden. | Cloud-Architekt  | 

### Säubere die Ressourcen
<a name="clean-up-the-resources"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Löschen Sie alle Ressourcen. | Löschen Sie alle Ressourcen, um sicherzustellen, dass Ihnen keine Dienste in Rechnung gestellt werden, die Sie nicht nutzen.   | Cloud-Architekt, App-Entwickler | 

## Zugehörige Ressourcen
<a name="automatically-archive-items-to-amazon-s3-using-dynamodb-ttl-resources"></a>
+ [Verwalten Ihres Speicher-Lebenszyklus](https://docs.aws.amazon.com/AmazonS3/latest/user-guide/create-lifecycle.html)
+ [Amazon S3 S3-Speicherklassen](https://aws.amazon.com/s3/storage-classes/)
+ [Dokumentation zum AWS-SDK SDK for Python (Boto3)](https://boto3.amazonaws.com/v1/documentation/api/latest/index.html)

## Zusätzliche Informationen
<a name="automatically-archive-items-to-amazon-s3-using-dynamodb-ttl-additional"></a>

**Einen Firehose-Lieferstream erstellen und konfigurieren — Richtlinienbeispiele**

*Beispieldokument Firehose 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 Sie die Funktionalität — Amazon S3 S3-Konfiguration**

Die Amazon S3 S3-Konfiguration mit den folgenden Optionen `Prefix` wurde ausgewählt, um den Datenabruf zu optimieren. `ErrorOutputPrefix` 

*prefix*

```
firehosetos3example/year=! {timestamp: yyyy}/month=! {timestamp:MM}/day=! {timestamp:dd}/hour=!{timestamp:HH}/
```

Firehose erstellt zunächst einen Basisordner, der `firehosetos3example` direkt unter dem S3-Bucket aufgerufen wird. Anschließend werden die Ausdrücke`!{timestamp:yyyy}`,`!{timestamp:MM}`, und `!{timestamp:HH}` nach Jahr`!{timestamp:dd}`, Monat, Tag und Stunde im [DateTimeFormatter](https://docs.oracle.com/javase/8/docs/api/java/time/format/DateTimeFormatter.html)Java-Format ausgewertet.

Ein ungefährer Ankunftszeitstempel von 1604683577 in der Unix-Epochenzeit ergibt beispielsweise,, und. `year=2020` `month=11` `day=06` `hour=05` Daher wird der Standort in Amazon S3, an den die Datensätze geliefert werden, ausgewertet. `firehosetos3example/year=2020/month=11/day=06/hour=05/`

*ErrorOutputPrefix*

```
firehosetos3erroroutputbase/!{firehose:random-string}/!{firehose:error-output-type}/!{timestamp:yyyy/MM/dd}/
```

Die `ErrorOutputPrefix` Ergebnisse werden in einem Basisordner angezeigt, der `firehosetos3erroroutputbase` direkt unter dem S3-Bucket aufgerufen wird. Der Ausdruck `!{firehose:random-string}` ergibt eine zufällige 11-stellige Zeichenfolge wie. `ztWxkdg3Thg` Der Standort für ein Amazon S3 S3-Objekt, an das fehlerhafte Datensätze übermittelt werden, könnte ausgewertet werden`firehosetos3erroroutputbase/ztWxkdg3Thg/processing-failed/2020/11/06/`.