AWS Germany – Amazon Web Services in Deutschland

Einführung von abfragbaren Objektmetadaten für Amazon S3 Buckets (Vorschau)

von Jeff Barr übersetzt durch Pawel Warmuth 

Amazon Simple Storage Service (Amazon S3) wird von AWS-Kunden in einem herausragenden Umfang genutzt. Dabei werden regelmäßig einzelne Buckets erstellt, die Milliarden oder Billionen von Objekten enthalten. In dieser Skalierung ist es schwierig, Objekte zu finden, die bestimmte Kriterien wie Größe, Muster von Objektschlüsselnamen, oder spezifische Tags erfüllen. Unsere Kunden waren daher gezwungen, eigene Systeme zu entwickeln, um diese Informationen zu erfassen, zu speichern und abzurufen. Diese können komplex und schwer zu skalieren sein und sind zudem nicht mehr synchron mit dem tatsächlichen Zustand des Buckets und der darin enthaltenen Objekte.

Umfangreiche Metadaten
Im Rahmen der Vorschau bieten wir Ihnen nun die Möglichkeit, Metadaten automatisch zu generieren. Diese werden bei S3-Objekten erstellt, die hinzugefügt oder geändert werden. Die Speicherung erfolgt in vollständig verwalteten Apache Iceberg [EN, Extern]-Tabellen. Iceberg-kompatible Tools wie Amazon Athena, Amazon Redshift, Amazon QuickSight und Apache Spark [EN, Extern] können für eine effiziente Abfrage der Metadaten in jeder Größenordnung verwendet werden. So können Sie die Daten, die Sie für Ihre Analyse-, Datenverarbeitungs- und KI-Trainings-Workloads benötigen, schnell finden.

Bei in S3 gespeicherten Video-Inferenz-Objekten wird Amazon Bedrock den generierten Inhalt mit Metadaten versehen, sodass Sie den Inhalt als KI-generiert erkennen und das verwendete KI-Modell erfassen können.

Das Metadaten-Schema umfasst mehr als 20 Elemente, darunter den Bucket-Namen, den Objekt-Schlüssel, das Erstellungs- bzw. Änderungsdatum, die Speicherklasse, den Verschlüsselungsstatus, Tags und Benutzermetadaten. Zusätzlich besteht die Möglichkeit, weitere anwendungsspezifische Informationen in einer separaten Tabelle zu speichern und diese dann als Teil der Abfrage mit der Metadaten-Tabelle zu verknüpfen.

Funktionsweise des neuen Merkmals
Die Erfassung umfangreicher Metadaten für jeden Ihrer S3-Buckets kann durch Angabe des Speicherorts (eines S3-Tabellen-Buckets und eines Tabellennamens) aktiviert werden. Dieser Speicherort dient als Speicherort für die Daten. Die Erfassung von Aktualisierungen (Erstellung, Löschung und Änderungen an Objekt-Metadaten) erfolgt umgehend und wird innerhalb von Minuten in der Tabelle gespeichert. Jede Aktualisierung erzeugt eine neue Zeile in der Tabelle mit einem Datensatztyp (CREATE, UPDATE_METADATA oder DELETE) und einer Sequenznummer. Über eine Abfrage können Sie die Historie des Datensatzes für ein bestimmtes Objekt abrufen, sortiert nach der Sequenznummer.

Aktivieren und Abfragen von Metadaten
Ich beginne mit der Erstellung eines Tabellen-Buckets für meine Metadaten mit dem Befehl create-table-bucket (dies kann auch über die AWS Management Console oder mit einem API-Aufruf erfolgen):

$ aws s3tables create-table-bucket --name jbarr-table-bucket-1 --region us-east-2
--------------------------------------------------------------------------------
|                               CreateTableBucket                              |
+-----+------------------------------------------------------------------------+
|  arn|  arn:aws:s3tables:us-east-2:123456789012:bucket/jbarr-table-bucket-1   |
+-----+------------------------------------------------------------------------+

Dann gebe ich den Tabellen-Bucket (per ARN) und den gewünschten Tabellennamen an, indem ich folgendes JSON in eine Datei schreibe (ich nenne sie config.json):

{
	"S3TablesDestination": {
		"TableBucketArn": "arn:aws:s3tables:us-east-2:123456789012:bucket/jbarr-table-bucket-1",
		"TableName": "jbarr_data_bucket_1_table"
	}
}

Danach füge ich diese Konfiguration meinem Daten-Bucket hinzu (Angabe des Buckets von dem die Metadaten erfasst werden sollen):

$ aws s3api create-bucket-metadata-table-configuration \
  --bucket jbarr-data-bucket-1 \
  --metadata-table-configuration file://./config.json \
  --region us-east-2

Zum Test habe ich Apache Spark auf einer EC2-Instanz installiert und konnte mithilfe des „Amazon S3 Tables Catalog for Apache Iceberg“ Paketes, Abfragen ausgeführt:

$ bin/spark-shell \
--packages org.apache.iceberg:iceberg-spark-runtime-3.4_2.12:1.6.0 \
--jars ~/S3TablesCatalog.jar \
--master yarn \
--conf "spark.sql.extensions=org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions" \
--conf "spark.sql.catalog.mytablebucket=org.apache.iceberg.spark.SparkCatalog" \
--conf "spark.sql.catalog.mytablebucket.catalog-impl=com.amazon.s3tables.iceberg.S3TablesCatalog" \
--conf "spark.sql.catalog.mytablebucket.warehouse=arn:aws:s3tables:us-east-2:123456789012:bucket/jbarr-table-bucket-1"

Hier ist das aktuelle Schema für die Iceberg-Tabelle:

scala > spark.sql("describe table mytablebucket.aws_s3_metadata.jbarr_data_bucket_1_table").show(100,35)
+---------------------+------------------+-----------------------------------+
|             col_name|         data_type|                            comment|
+---------------------+------------------+-----------------------------------+
|               bucket|            string|   The general purpose bucket name.|
|                  key|            string|The object key name (or key) tha...|
|      sequence_number|            string|The sequence number, which is an...|
|          record_type|            string|The type of this record, one of ...|
|     record_timestamp|     timestamp_ntz|The timestamp that's associated ...|
|           version_id|            string|The object's version ID. When yo...|
|     is_delete_marker|           boolean|The object's delete marker statu...|
|                 size|            bigint|The object size in bytes, not in...|
|   last_modified_date|     timestamp_ntz|The object creation date or the ...|
|                e_tag|            string|The entity tag (ETag), which is ...|
|        storage_class|            string|The storage class that's used fo...|
|         is_multipart|           boolean|The object's upload type. If the...|
|    encryption_status|            string|The object's server-side encrypt...|
|is_bucket_key_enabled|           boolean|The object's S3 Bucket Key enabl...|
|          kms_key_arn|            string|The Amazon Resource Name (ARN) f...|
|   checksum_algorithm|            string|The algorithm that's used to cre...|
|          object_tags|map<string,string>|The object tags that are associa...|
|        user_metadata|map<string,string>|The user metadata that's associa...|
|            requester|            string|The AWS account ID of the reques...|
|    source_ip_address|            string|The source IP address of the req...|
|           request_id|            string|The request ID. For records that...|
+---------------------+------------------+-----------------------------------+

Hier ist eine einfache Abfrage, welche die 10 neusten Aktualisierungen ausgibt:

scala > spark.sql("SELECT key,size, storage_class,encryption_status \
  FROM mytablebucket.aws_s3_metadata.jbarr_data_bucket_1_table \
  order by last_modified_date DESC LIMIT 10").show(false)
+--------------------+------+-------------+------------------+
|key                 |size  |storage_class|encryption_status |
+--------------------+------+-------------+-----------------+|
wnt_itco_2.png      |36923 |STANDARD     |SSE-S3             |
|wnt_itco_1.png      |37274 |STANDARD     |SSE-S3            |
|wnt_imp_new_1.png   |15361 |STANDARD     |SSE-S3            |
|wnt_imp_change_3.png|67639 |STANDARD     |SSE-S3            |
|wnt_imp_change_2.png|67639 |STANDARD     |SSE-S3            |
|wnt_imp_change_1.png|71182 |STANDARD     |SSE-S3            |
|wnt_email_top_4.png |135164|STANDARD     |SSE-S3            |
|wnt_email_top_2.png |117171|STANDARD     |SSE-S3            |
|wnt_email_top_3.png |55913 |STANDARD     |SSE-S3            |
|wnt_email_top_1.png |140937|STANDARD     |SSE-S3            |
+--------------------+------+-------------+------------------+

In einer realen Situation würde ich die Tabelle mit einem der AWS- oder Open-Source-Analysetools abfragen, die ich zuvor erwähnt habe.

Konsolenzugriff
Ich kann die Metadaten-Konfiguration für meine Buckets auch über die Amazon S3-Konsole einrichten und verwalten, indem ich auf den Tab „Metadata – New“ klicke:

Jetzt verfügbar

Amazon S3 Metadata [EN] ist jetzt in der Vorschau verfügbar und Sie können es ab heute in den AWS-Regionen US East (Ohio, N. Virginia) und US West (Oregon) nutzen.

Die Integration mit dem AWS Glue Data Catalog [EN] befindet sich in der Vorschau. Damit können Sie Daten – einschließlich S3-Metadaten-Tabellen – mit AWS-Analysediensten wie Amazon Athena, Amazon Redshift, Amazon EMR und Amazon QuickSight abfragen und zu visualisieren.

Die Preisgestaltung basiert auf der Anzahl der Aktualisierungen (Objekterstellungen, Objektlöschungen und Änderungen an Objekt-Metadaten) mit einer zusätzlichen Gebühr für die Speicherung der Metadaten-Tabelle. Weitere Preisinformationen finden Sie auf der Seite S3-Preisgestaltung.

Ich bin überzeugt, dass Sie die Metadaten auf vielfältige Art und Weise nutzen können. Und ich freue mich darauf von Ihren Anwendungsfällen zu hören. Lassen Sie mich wissen, was Sie davon halten!

Jeff [EN, Extern];

Über den Autor

 Jeff Barr

Jeff Barr ist der Chief Evangelist für AWS. Er startete diesen Blog im Jahr 2004 und schreibt seitdem nahezu ununterbrochen Beiträge.