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

Amazon Redshift wird UDFs ab dem 1. November 2025 die Erstellung von neuem Python nicht mehr unterstützen. Wenn Sie Python verwenden möchten UDFs, erstellen Sie das UDFs vor diesem Datum liegende. Bestehendes Python UDFs wird weiterhin wie gewohnt funktionieren. Weitere Informationen finden Sie im Blog-Posting.

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.

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 ermöglicht beispielsweise Berechtigungen für den Ressourcen-Bucketamzn-s3-demo-bucket, 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. Um eine Ressourcenrichtlinie selbst zu aktualisieren, können Sie den put-resource-policyAWS CLIBefehl verwenden. Um beispielsweise eine Ressourcenrichtlinie an Ihren von Amazon Redshift bereitgestellten Cluster für eine S3-Ereignisintegration mit einem Amazon S3-Bucket anzuhängen, führen Sie einen AWS CLI Befehl aus, der dem folgenden ähnelt. Das folgende Beispiel zeigt eine Richtlinie für einen bereitgestellten Cluster-Namespace im us-east-1 AWS-Region Benutzerkonto for. 123456789012 Der Bucket ist benannt. 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-Eventintegration mit einem Amazon S3-Bucket anzuhängen, führen Sie einen AWS CLI Befehl aus, der dem folgenden ähnelt. Das folgende Beispiel zeigt eine Richtlinie für einen serverlosen Namespace im for-Benutzerkonto. us-east-1 AWS-Region 123456789012 Der Bucket ist benannt. 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 an AWS-Managementkonsole und öffnen Sie die Amazon Redshift 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 — Ist eine eindeutige Kennung für alle Integrationen, die Ihnen derzeit AWS-Konto gehören. AWS-Region

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

    • Quell-S3-Bucket — Ist der aktuelle AWS-Konto Amazon S3 S3-Bucket, der AWS-Region die Quelle für die Datenaufnahme 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 Ihr Ziel in einem anderen befindetAWS-Konto, müssen Sie die Ressourcenrichtlinie manuell auf das Amazon Redshift Redshift-Warehouse 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 S3-Event-Integration mit dem zu erstellenAWS CLI, verwenden Sie den create-integration Befehl 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-Eventintegration 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 von einem COPY JOB geladenen Dateien abzurufen, führen Sie die folgende SQL-Anweisung aus, ersetzen Sie sie jedoch zuerst<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. Nachdem eine S3-Ereignisintegration erstellt wurde, können Sie die Amazon S3 S3-Bucket-Ereignisbenachrichtigung jedoch mit einer prefix/suffix mit einem engeren Geltungsbereich aktualisieren. Auf diese Weise können Sie auch andere Ziele konfigurieren S3_OBJECT_CREATED und so Konflikte mit der S3-Eventintegration vermeiden. prefix/suffix Wenn Sie Probleme haben, dass die automatische Kopie nicht wie erwartet ausgeführt wurde, bereiten Sie das AWS CloudTrail Protokoll der s3:PutBucketNotificationConfiguration Aktion auf Ihrem S3-Bucket für den fraglichen Zeitraum vor, wenn Sie Kontakt aufnehmenAWS Support.

Unterstützte Regionen

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

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