Erstellen einer S3-Ereignisintegration, um Dateien automatisch aus Amazon-S3-Buckets zu kopieren - Amazon Redshift

Amazon Redshift unterstützt ab dem 1. November 2025 nicht mehr die Erstellung neuer Python-UDFs. Wenn Sie Python-UDFs verwenden möchten, erstellen Sie die UDFs vor diesem Datum. Bestehende Python-UDFs funktionieren weiterhin wie gewohnt. Weitere Informationen finden Sie im Blog-Posting.

Erstellen einer S3-Ereignisintegration, um Dateien automatisch aus Amazon-S3-Buckets zu kopieren

Anmerkung

Die Vorschauversion für auto-copy ist abgelaufen. Daher werden Vorschau-Cluster 30 Tage nach dem Ende der Vorschauversion automatisch entfernt. Wenn Sie auto-copy weiterhin verwenden möchten, sollten Sie Ihre bestehenden auto-copy-Jobs in einem anderen Amazon-Redshift-Cluster neu erstellen. Upgrades von Vorschau-Clustern auf die neueste Amazon-Redshift-Version werden nicht unterstützt.

Sie können einen auto-copy-Job verwenden, um Daten aus Dateien, die in Amazon S3 gespeichert sind, in Ihre Amazon-Redshift-Tabellen zu laden. Amazon Redshift erkennt, wenn neue Amazon-S3-Dateien zu dem in Ihrem COPY-Befehl angegebenen Pfad hinzugefügt werden. Ein COPY-Befehl wird dann automatisch ausgeführt, ohne dass Sie eine externe Datenerfassungspipeline erstellen müssen. Amazon Redshift verfolgt, welche Dateien geladen wurden. Amazon Redshift bestimmt die Anzahl der Dateien, die für jeden COPY-Befehl zusammengefasst werden. Sie können die resultierenden COPY-Befehle in Systemansichten sehen.

Der erste Schritt zur Erstellung eines automatischen COPY JOB besteht in der Erstellung einer S3-Ereignisintegration. Wenn eine neue Datei im Quell-Bucket in Amazon S3 erscheint, verwaltet Amazon Redshift anschließend das Laden der Dateien in Ihre Datenbank mittels des Befehls COPY.

Voraussetzungen für die Erstellung einer S3-Ereignisintegration

Stellen Sie sicher, dass die folgenden Voraussetzungen erfüllt sind, um Ihre S3-Ereignisintegration einzurichten.

  • Der Amazon-S3-Bucket muss über eine Bucket-Richtlinie verfügen, die mehrere Amazon-S3-Berechtigungen zulässt. Die folgende Beispielrichtlinie lässt beispielsweise Berechtigungen für den Ressourcen-Bucket amzn-s3-demo-bucket zu, der in us-east-1 gehostet wird. Sowohl der Amazon-S3-Bucket als auch die Integration befinden sich in der derselben AWS-Region.

    JSON
    { "Version":"2012-10-17", "Statement": [ { "Sid": "Auto-Copy-Policy-01", "Effect": "Allow", "Principal": { "Service": "redshift.amazonaws.com" }, "Action": [ "s3:GetBucketNotification", "s3:PutBucketNotification", "s3:GetBucketLocation" ], "Resource": "arn:aws:s3:::amzn-s3-demo-bucket:*", "Condition": { "ArnLike": { "aws:SourceArn": "arn:aws:redshift:us-east-1:111122223333:integration:*" }, "StringEquals": { "aws:SourceAccount": "111122223333" } } } ] }
  • Der von Amazon Redshift bereitgestellte Zielcluster oder der Redshift-Serverless-Namespace muss über Berechtigungen für den Bucket verfügen. Überprüfen Sie, ob eine IAM-Rolle, die Ihrem Cluster oder Serverless Namespace zugeordnet ist, über eine IAM-Richtlinie verfügt, die die richtigen Berechtigungen zulässt. Die Richtlinie muss sowohl s3:GetObject für eine Bucket-Ressource wie amzn-s3-demo-bucket als auch s3:ListBucket für eine Bucket-Ressource und ihren Inhalt zulassen, z. B. amzn-s3-demo-bucket/*.

    JSON
    { "Version":"2012-10-17", "Statement": [ { "Sid": "AutoCopyReadId", "Effect": "Allow", "Action": [ "s3:GetObject", "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::amzn-s3-demo-bucket", "arn:aws:s3:::amzn-s3-demo-bucket/*" ] } ] }

    Fügen Sie Ihre Richtlinie wie folgt zu einer IAM-Rolle hinzu, für die eine Vertrauensbeziehung besteht.

    JSON
    { "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": [ "redshift.amazonaws.com" ] }, "Action": "sts:AssumeRole" } ] }

    Wenn Ihr Ziel-Data-Warehouse ein bereitgestellter Cluster ist, können Sie Ihrem bereitgestellten Cluster über die Amazon-Redshift-Konsole auf der Registerkarte Cluster-Berechtigungen in den Cluster-Details eine IAM-Rolle zuordnen. Informationen dazu, wie Sie Ihrem bereitgestellten Cluster eine Rolle zuordnen, finden Sie unter Zuordnen von IAM-Rollen zu Clustern im Managementleitfaden zu Amazon Redshift.

    Wenn Ihr Ziel-Data-Warehouse Redshift Serverless ist, können Sie Ihrem Serverless-Namespace über die Redshift-Serverless-Konsole auf der Registerkarte Sicherheit und Verschlüsselung in den Namespace-Details eine IAM-Rolle zuordnen. Informationen dazu, wie Sie Ihrem Serverless-Namespace eine Rolle zuordnen, finden Sie unter Gewähren von Berechtigungen für Amazon Redshift Serverless im Managementleitfaden zu Amazon Redshift.

  • Ihr Data Warehouse in Amazon Redshift muss auch über eine Ressourcenrichtlinie verfügen, die den Amazon-S3-Bucket zulässt. Wenn Sie die Amazon-Redshift-Konsole verwenden und die S3-Ereignisintegration erstellen, bietet Amazon Redshift die Option Reparieren, um diese Richtlinie zu Ihrem Data Warehouse in Amazon Redshift hinzuzufügen. Zum Aktualisieren einer Ressourcenrichtlinie können Sie den AWS CLI-Befehl put-resource-policy verwenden. Um beispielsweise eine Ressourcenrichtlinie an Ihren von Amazon Redshift bereitgestellten Cluster für eine S3-Ereignisintegration mit einem Amazon-S3-Bucket anzufügen, führen Sie einen AWS CLI-Befehl ähnlich dem folgenden aus. Das folgende Beispiel zeigt eine Richtlinie für einen bereitgestellten Cluster-Namespace in der AWS-Region us-east-1 für das Benutzerkonto 123456789012. Der Name des Buckets ist amzn-s3-demo-bucket.

    aws redshift put-resource-policy \ --policy file://rs-rp.json \ --resource-arn "arn:aws:redshift: us-east-1:123456789012:namespace/cc4ffe56-ad2c-4fd1-a5a2-f29124a56433"

    Wobei rs-rp.json Folgendes enthält:

    JSON
    { "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "redshift.amazonaws.com" }, "Action": "redshift:AuthorizeInboundIntegration", "Resource": "arn:aws:redshift:us-east-1:123456789012:namespace:cc4ffe56-ad2c-4fd1-a5a2-f29124a56433", "Condition": { "StringEquals": { "aws:SourceArn": "arn:aws:s3:::amzn-s3-demo-bucket", "aws:SourceAccount": 111122223333 } } }, { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/myRedshiftRole" }, "Action": "redshift:CreateInboundIntegration", "Resource": "arn:aws:redshift:us-east-1:123456789012:namespace:cc4ffe56-ad2c-4fd1-a5a2-f29124a56433", "Condition": { "StringEquals": { "aws:SourceArn": "arn:aws:s3:::amzn-s3-demo-bucket", "aws:SourceAccount": 111122223333 } } } ] }

    Um Ihrem Redshift-Serverless-Namespace eine Ressourcenrichtlinie für eine S3-Ereignisintegration mit einem Amazon-S3-Bucket anzufügen, führen Sie einen AWS CLI-Befehl ähnlich dem folgenden aus. Das folgende Beispiel zeigt eine Richtlinie für einen Serverless-Namespace in der AWS-Region us-east-1 für das Benutzerkonto 123456789012. Der Name des Buckets ist amzn-s3-demo-bucket.

    aws redshift put-resource-policy \ --policy file://rs-rp.json \ --resource-arn "arn:aws:redshift-serverless:us-east-1:123456789012:namespace/namespace-1"

    Wobei rs-rp.json Folgendes enthält:

    JSON
    { "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "redshift.amazonaws.com" }, "Action": "redshift:AuthorizeInboundIntegration", "Resource": "arn:aws:redshift-serverless:us-east-1:123456789012:namespace/namespace-1", "Condition": { "StringEquals": { "aws:SourceArn": "arn:aws:s3:::amzn-s3-demo-bucket", "aws:SourceAccount": 111122223333 } } }, { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::123456789012:user/myUser" }, "Action": "redshift:CreateInboundIntegration", "Resource": "arn:aws:redshift-serverless:us-east-1:123456789012:namespace/namespace-1", "Condition": { "StringEquals": { "aws:SourceArn": "arn:aws:s3:::amzn-s3-demo-bucket", "aws:SourceAccount": 111122223333 } } } ] }

Erstellen einer Amazon-S3-Ereignisintegration

Um den Kopierjob einzurichten, definieren Sie zunächst eine S3-Ereignisintegration.

Amazon Redshift console
So erstellen Sie eine Amazon-S3-Ereignisintegration in der Amazon-Redshift-Konsole
  1. Melden Sie sich bei der AWS-Managementkonsole an und öffnen Sie die Amazon-Redshift-Konsole unter https://console.aws.amazon.com/redshiftv2/.

  2. Wählen Sie im linken Navigationsbereich S3-Ereignisintegrationen aus.

  3. Wählen Sie Amazon-S3-Ereignisintegration erstellen aus, um den Assistenten zu öffnen und eine S3-Ereignisintegration für die Verwendung mit auto-copy zu erstellen. Ihr Quell-Bucket in Amazon S3 und das Ziel-Data-Warehouse in Amazon Redshift müssen sich in derselben AWS-Region befinden. Geben Sie die folgenden Informationen an, wenn Sie die Schritte zum Erstellen einer Integration ausführen:

    • Integrationsname: ein eindeutiger Bezeichner für alle Integrationen, die derzeit im Besitz Ihres AWS-Konto in der aktuellen AWS-Region sind.

    • Beschreibung: ein Text, der die Amazon S3-Ereignisintegration zur späteren Referenz beschreibt.

    • S3-Quell-Bucket: der Amazon-S3-Bucket im aktuellen AWS-Konto und in der aktuellen AWS-Region, der die Quelle für die Datenerfassung in Amazon Redshift ist.

    • Data Warehouse in Amazon Redshift: der von Amazon Redshift bereitgestellte Zielcluster oder die Redshift-Serverless-Arbeitsgruppe, die die Daten aus der Integration erfasst.

      Wenn sich das Ziel in Amazon Redshift im selben Konto befindet, können Sie das Ziel auswählen. Wenn sich das Ziel in einem anderen Konto befindet, geben Sie den Amazon-Redshift-ARN für das Data Warehouse an. Das Ziel muss über eine Ressourcenrichtlinie mit autorisierten Prinzipalen und einer Integrationsquelle verfügen. Wenn Sie nicht über die richtigen Ressourcenrichtlinien im Ziel verfügen und sich das Ziel im selben Konto befindet, können Sie die Option Reparieren auswählen, um die Ressourcenrichtlinien während der Erstellung der Integration automatisch anzuwenden. Wenn sich das Ziel in einem anderen AWS-Konto befindet, müssen Sie die Ressourcenrichtlinie manuell auf das Data Warehouse in Amazon Redshift anwenden.

  4. Sie können bis zu 50 Tag-Schlüssel mit einem optionalen Wert eingeben, um zusätzliche Metadaten zur Integration bereitzustellen.

  5. Anschließend wird eine Übersichtsseite angezeigt, auf der Sie S3-Ereignisintegration erstellen auswählen können.

AWS CLI

Um eine Amazon S3-Ereignisintegration über die AWS CLI zu erstellen, verwenden Sie den Befehl create-integration mit den folgenden Optionen:

  • integration-name – Geben Sie einen Namen für die Integration an.

  • source-arn – Geben Sie den ARN des Quell-Buckets in Amazon S3 an.

  • target-arn – Geben Sie den Namespace-ARN des von Amazon Redshift bereitgestellten Clusters oder des Redshift-Serverless-Arbeitsgruppenziels an.

Im folgenden Beispiel wird eine Integration erstellt, indem der Integrationsname, der Quell-ARN und der Ziel-ARN angegeben werden. Die Integration ist nicht verschlüsselt.

aws redshift create-integration \ --integration-name s3-integration \ --source-arn arn:aws:s3:us-east-1::s3-example-bucket \ --target-arn arn:aws:redshift:us-east-1:123456789012:namespace:a1b2c3d4-5678-90ab-cdef-EXAMPLE22222 { "IntegrationArn": "arn:aws:redshift:us-east-1:123456789012:integration:a1b2c3d4-5678-90ab-cdef-EXAMPLE11111", "IntegrationName": "s3-integration", "SourceArn": "arn:aws:s3:::s3-example-bucket", "SourceType": "s3-event-notifications", "TargetArn": "arn:aws:redshift:us-east-1:123456789012:namespace:a1b2c3d4-5678-90ab-cdef-EXAMPLE22222", "Status": "creating", "Errors": [], "CreateTime": "2024-10-09T19:08:52.758000+00:00", "Tags": [] }

Sie können auch die folgenden AWS CLI-Befehle verwenden, um Ihre S3-Ereignisintegration zu verwalten.

  • delete-integration – Geben Sie einen Integrations-ARN an, um eine S3-Ereignisintegration zu löschen.

  • modify-integration – Geben Sie einen Integrations-ARN an, um den Namen oder die Beschreibung (oder beides) einer S3-Ereignisintegration zu ändern.

  • describe-integrations – Geben Sie einen Integrations-ARN an, um die Eigenschaften einer S3-Ereignisintegration anzuzeigen.

Weitere Informationen zu diesen Befehlen finden Sie im Handbuch für die Amazon-Redshift-CLI.

Amazon Redshift erstellt anschließend eine S3-Ereignisintegration mit zugehöriger Quelle und zugehörigem Ziel, Status sowie Informationen zum Status eines zugehörigen auto-copy-Jobs. Sie können Informationen zu einer S3-Ereignisintegration in der Amazon-Redshift-Konsole anzeigen, indem Sie S3-Ereignisintegrationen auswählen und dann die Integration auswählen, um ihre Details anzuzeigen. Die Integrationen werden getrennt nach In meinem Konto und Aus anderen Konten angezeigt. In der Liste In meinem Konto werden Integrationen angezeigt, bei denen sich Quelle und Ziel im selben Konto befinden. In der Liste Aus anderen Konten werden Integrationen angezeigt, bei denen die Quelle im Besitz eines anderen Kontos ist.

Wenn Sie eine S3-Ereignisintegration löschen, wird der entsprechende COPY JOB-Status von 1 (aktiv) in 0 (inaktiv/ausstehend) geändert. Der entsprechende COPY JOB wird jedoch nicht automatisch entfernt. Wenn Sie später versuchen, einen COPY JOB mit demselben Namen zu erstellen, liegt möglicherweise ein Konflikt vor.

Erstellen und Überwachen eines COPY JOB

Wählen Sie nach der Integration auf der Seite Details zur S3-Ereignisintegration für die von Ihnen erstellte Integration die Option auto-copy-Job erstellen aus. Anschließend gelangen Sie zu Amazon Redshift Query Editor V2, wo Sie den auto-copy-Job für die Integration erstellen können. Amazon Redshift ordnet den Bucket in der FROM-Klausel in der Anweisung COPY JOB CREATE dem Bucket zu, der in der S3-Ereignisintegration verwendet wird. Weitere Informationen zur Verwendung von Amazon Redshift Query Editor V2 finden Sie unter Abfragen einer Datenbank mit Amazon Redshift Query Editor V2 im Managementleitfaden zu Amazon Redshift. Sie können beispielsweise den folgenden COPY-Befehl in Query Editor V2 ausführen, um einen automatischen COPY JOB zu erstellen, der den Amazon-S3-Bucket s3://amzn-s3-demo-bucket/staging-folder einer Amazon-S3-Ereignisintegration zuordnet.

COPY public.target_table FROM 's3://amzn-s3-demo-bucket/staging-folder' IAM_ROLE 'arn:aws:iam::123456789012:role/MyLoadRoleName' JOB CREATE my_copy_job_name AUTO ON;

Sie definieren einen COPY JOB einmalig. Für zukünftige Ausführungen werden dieselben Parameter verwendet.

Um einen COPY JOB zu definieren und zu verwalten, benötigen Sie die entsprechende Berechtigung. Hinweise zum Erteilen und Widerrufen von Berechtigungen für einen COPY JOB finden Sie unter GRANT und REVOKE. Weitere Informationen zum Erteilen und Widerrufen von bereichsbezogenen Berechtigungen für einen COPY JOB finden Sie unter Gewähren von bereichsbezogenen Berechtigungen und Widerrufen von bereichsbezogenen Berechtigungen.

Sie verwalten die Ladevorgänge mithilfe der Optionen CREATE, LIST, SHOW, DROP, ALTER und RUN. Weitere Informationen finden Sie unter COPY JOB.

Sie können Systemansichten abfragen, um den Status und Fortschritt von COPY JOB anzuzeigen. Die Ansichten werden wie folgt bereitgestellt:

Informationen zur Behebung von Fehlern für S3-Ereignisintegrationen finden Sie unter Behebung von Fehlern für die S3-Ereignisintegration und für COPY JOB.

Um die Liste der über COPY JOB geladenen Dateien abzurufen, führen Sie die folgende SQL-Syntax aus und ersetzen dabei <job_id>:

SELECT job_id, job_name, data_source, copy_query, filename, status, curtime FROM sys_copy_job copyjob JOIN stl_load_commits loadcommit ON copyjob.job_id = loadcommit.copy_job_id WHERE job_id = <job_id>;

Überlegungen beim Erstellen einer S3-Ereignisintegration für auto-copy

Beachten Sie Folgendes, wenn Sie auto-copy verwenden.

  • Sie können maximal 200 COPY JOBS für jeden Cluster oder jede Arbeitsgruppe in einem AWS-Konto erstellen.

  • Sie können maximal 50 S3-Ereignisintegrationen für jedes Amazon-Redshift-Ziel erstellen.

  • Sie können keine S3-Ereignisintegration mit einem Quell-Bucket in Amazon S3 erstellen, der im Namen einen Punkt (.) enthält.

  • Sie können jeweils nur eine S3-Ereignisintegration zwischen derselben Quelle und demselben Ziel erstellen. Das bedeutet, dass es jeweils nur eine S3-Ereignisintegration zwischen einem Amazon-S3-Bucket und einem Data Warehouse in Amazon Redshift geben kann.

  • Es darf keine vorhandenen Ereignisbenachrichtigungen für den Ereignistyp S3_OBJECT_CREATED geben, die im Quell-Bucket in Amazon S3 definiert sind. Nach der Erstellung einer S3-Ereignisintegration können Sie die Ereignisbenachrichtigung für den Amazon-S3-Bucket mit einem Präfix/Suffix mit einem engeren Gültigkeitsbereich aktualisieren. Auf diese Weise können Sie S3_OBJECT_CREATED auch mit einem anderen Präfix/Suffix für andere Ziele konfigurieren und so einen Konflikt mit der S3-Ereignisintegration vermeiden. Wenn auto-copy nicht wie erwartet ausgeführt wurde, erstellen Sie das AWS CloudTrail-Protokoll der Aktion s3:PutBucketNotificationConfiguration im S3-Bucket für den fraglichen Zeitraum, wenn Sie sich an den AWS -Support wenden.

Unterstützte Regionen

Folgende AWS-Regionen sind für auto-copy verfügbar.

Region Auto-copy
Afrika (Kapstadt) Verfügbar
Asien-Pazifik (Hongkong) Verfügbar
Asien-Pazifik (Taipeh) Verfügbar
Asien-Pazifik (Tokio) Verfügbar
Asien-Pazifik (Seoul) Verfügbar
Asien-Pazifik (Osaka) Verfügbar
Asien-Pazifik (Mumbai) Verfügbar
Asien-Pazifik (Hyderabad) Verfügbar
Asien-Pazifik (Singapur) Verfügbar
Asien-Pazifik (Sydney) Verfügbar
Asien-Pazifik (Jakarta) Verfügbar
Asien-Pazifik (Melbourne) Verfügbar
Asien-Pazifik (Malaysia) Verfügbar
Asien-Pazifik (Neuseeland) Nicht verfügbar
Asien-Pazifik (Thailand) Verfügbar
Kanada (Zentral) Verfügbar
Kanada West (Calgary) Verfügbar
China (Peking) Verfügbar
China (Ningxia) Verfügbar
Europa (Frankfurt) Verfügbar
Europa (Zürich) Verfügbar
Europa (Stockholm) Verfügbar
Europa (Mailand) Verfügbar
Europa (Spanien) Verfügbar
Europa (Irland) Verfügbar
Europa (London) Verfügbar
Europa (Paris) Verfügbar
Israel (Tel Aviv) Verfügbar
Naher Osten (VAE) Verfügbar
Naher Osten (Bahrain) Verfügbar
Mexiko (Zentral) Verfügbar
Südamerika (São Paulo) Verfügbar
USA Ost (Nord-Virginia) Verfügbar
USA Ost (Ohio) Verfügbar
USA West (Nordkalifornien) Verfügbar
USA West (Oregon) Verfügbar
AWS GovCloud (USA-Ost) Verfügbar
AWS GovCloud (USA-West) Verfügbar