Wie kann ich Fehler beheben, die beim Hoch- oder Herunterladen von Daten von Amazon Aurora auf Amazon S3 auftreten?

Lesedauer: 6 Minute
0

Ich möchte Daten von Amazon Simple Storage Service (Amazon S3) auf Amazon Aurora hochladen. Oder ich möchte Daten von Amazon Aurora herunterladen und auf Amazon S3 hochladen.

Kurzbeschreibung

Laden Sie Daten als Textdatei zwischen Amazon Aurora und Amazon S3, indem Sie einen der folgenden Befehle verwenden:

  • IN AUSGANGSDATEI S3 AUSWÄHLEN — Daten von Amazon Aurora nach Amazon S3 laden
  • DATEN AUS S3 LADEN — Daten von Amazon S3 nach Amazon Aurora laden

Zu den häufigsten Fehlern, die bei der Ausführung der Befehle IN AUSGANGSDATEI S3 AUSWÄHLEN oder DATEN AUS S3 LADEN auftreten können, gehören:

  • Fehlercode: 1871. Fehlende Anmeldeinformationen
  • Falscher Befehl: fehlendes Schlüsselwort für Datei/Präfix/Manifest
  • Fehlercode: 1045. Fehler „Zugriff verweigert“
  • Fehlercode: 1815. Interner Fehler: Initialisierung nicht möglich
  • Fehlercode: 1871. Die S3-API hat einen Fehler zurückgegeben: Zugriff verweigert

Lösung

Führen Sie den Befehl IN AUSGANGSDATEI S3 AUSWÄHLEN oder DATEN AUS S3 LADEN aus

Führen Sie die Befehle IN AUSGANGSDATEI S3 AUSWÄHLEN oder DATEN AUS S3 LADEN mit Amazon Aurora aus:

1.Erstellen Sie einen S3-Bucket und kopieren Sie den ARN.

2.Erstellen Sie eine AWS Identity and Access Management (IAM)-Richtlinie für den S3-Bucket mit Berechtigungen. Geben Sie den Bucket-ARN an und gewähren Sie dann Berechtigungen für die Objekte innerhalb des Bucket-ARN.

Führen Sie eine benutzerdefinierte Richtlinie ähnlich der folgenden aus, wenn Sie keine FullS3Access-Richtlinie verwenden:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "VisualEditor0",
      "Effect": "Allow",
      "Action": "s3:*",
      "Resource": [
        "arn:aws:s3:::<your_bucket_name>",
        "arn:aws:s3:::<your_bucket_name>/*"
      ]
    }
  ]
}
  1. Erstellen Sie eine IAM-Rolle für den Amazon Relational Database Service (Amazon RDS)-Dienst. Hängen Sie dann die von Ihnen erstellte IAM-Richtlinie an.

Das Vertrauensverhältnis sieht so aus:

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

4.Erstellen Sie eine benutzerdefinierte DB-Cluster-Parametergruppe für Aurora.

Für Aurora MySQL Version 1 oder 2:

Bearbeiten Sie eine dieser Rollen aurora_select_into_s3_role oder aws_default_s3_role auf den Wert des IAM-Rollen-ARN.

Für Aurora MySQL Version 3:

Bearbeiten Sie aws_default_s3\ _role auf den Wert des IAM-Rollen-ARN.

5.Hängen Sie die IAM-Rolle an den DB-Cluster an, den Sie erstellt haben. Weitere Informationen finden Sie unter Zuordnen einer IAM-Rolle zu einem Amazon Aurora MySQL-DB-Cluster.

6.Melden Sie sich bei Ihrem Amazon Aurora-DB-Cluster an.

7.Erstellen Sie einen neuen Benutzer, indem Sie den folgenden Befehl ausführen:

CREATE USER 'testsaveload'@'%' IDENTIFIED BY 'somepassword';
show grants for 'testsaveload'@'%';

8.Erteilen Sie dem Benutzer Berechtigungen, indem Sie den folgenden Befehl ausführen:

GRANT SELECT, CREATE, INSERT, DROP ON *.* TO 'testsaveload'@'%';

Verwenden Sie für Aurora MySQL Version 1 oder 2 die folgende Anweisung:

GRANT SELECT INTO S3 ON *.* TO 'testsaveload'@'%';
GRANT LOAD FROM S3 ON *.* TO 'testsaveload'@'%';

Verwenden Sie für Aurora MySQL Version 3 die folgende Anweisung:

GRANT AWS_SELECT_S3_ACCESS TO 'testsaveload'@'%'
GRANT AWS_LOAD_S3_ACCESS TO 'testsaveload'@'%';

Anmerkung: In Aurora MySQL Version 3 kann activate_all_roles_on_login mithilfe des DB-Cluster-Parameters aktiviert werden. Dadurch werden automatisch alle Rollen aktiviert, wenn ein Benutzer eine Verbindung zu einer DB-Instance herstellt. Weitere Informationen finden Sie unter Gewähren von Berechtigungen zum Laden von Daten in Amazon Aurora MySQL.

9.Führen Sie den Befehl IN AUSGANGSDATEI S3 AUSWÄHLEN oder DATEN AUS S3 LADEN aus:

SELECT * from test1.test2034 INTO OUTFILE S3 's3://tests3saveloadaurora/testfile1prefix.part_00000';
LOAD DATA FROM S3 PREFIX 's3-us-east-1://tests3saveloadaurora/testfile1prefix.part_00000' INTO TABLE test3001;
LOAD DATA FROM S3 's3-us-east-1://tests3saveloadaurora/prefix3.part_00000' INTO TABLE test3000;

Fehlercode: 1871. Fehlende Anmeldeinformationen

SELECT * from test1.test2034 INTO OUTFILE S3 '"s3://tests3saveloadaurora/testfile1prefix.part_00000';
Error Code: 1871. S3 API returned error: Missing Credentials: Cannot instantiate S3 Client

Sie können diesen Fehler erhalten, wenn:

  • Der IAM-Rollenanhang zum DB-Cluster fehlt. Lesen Sie Schritt 5 im vorherigen Abschnitt, um dieses Problem zu beheben.
  • Der Rollen-ARN nicht angegeben ist, und nur der Rollenname in der Parametergruppe aufgeführt ist. Lesen Sie Schritt 2 im vorherigen Abschnitt, um dieses Problem zu lösen.

Falscher Befehl: fehlendes Schlüsselwort für Datei/Präfix/Manifest

Wenn Sie die Fehlermeldung „Falscher Befehl: fehlendes Schlüsselwort für Datei/Präfix/Manifest“ erhalten, haben Sie nicht das richtige Schlüsselwort eingegeben, damit der Befehl erfolgreich ausgeführt werden kann. Um diesen Fehler zu beheben, geben Sie das Schlüsselwort für den Befehl ein.

Fehlercode: 1045. Fehler „Zugriff verweigert“

Wenn Sie einen falschen Befehl eingeben, erhalten Sie möglicherweise eine Fehlermeldung wie „1045: Der Zugriff wurde dem Benutzer „testsaveload'@'%';“ verweigert. Dieser Befehl ist beispielsweise falsch geschrieben:

SELECT * from test1.test2034 INTO OUTFILE 's3://tests3saveloadaurora/testfile1prefix.part_00000';

Stellen Sie sicher, dass das Schlüsselwort S3 in die Abfrage eingegeben wurde. Dieser Befehl ist korrekt geschrieben:

SELECT * from test1.test2034 INTO OUTFILE S3 's3://tests3saveloadaurora/testfile1prefix.part_00000';

Fehlercode: 1815. Interner Fehler: Initialisierung nicht möglich

LOAD DATA FROM S3 's3://tests3saveloadaurora/testfile1prefix.part_00000' INTO TABLE test3000;
Error Code: 1815. Internal error: Unable to initialize S3Stream

Es gibt eine Reihe von Gründen, warum Sie den „Fehlercode: 1815. Interner Fehler: „Initialisierung nicht möglich“ Fehler erhalten könnten.

  • Ihre Datei existiert nicht. Vergewissern Sie sich, dass die Datei in Ihrem S3-Bucket vorhanden ist und dass der Name, den Sie in Ihrem Skript angegeben haben, mit dem Namen der Datei übereinstimmt. Die Berücksichtigung von Groß- und Kleinschreibung ist wichtig. Vergewissern Sie sich, dass der S3-Bucket-Name, der Ordnername und der Objektname genau mit den Angaben im Ladebefehl übereinstimmen.
  • Ihnen fehlen die entsprechenden Berechtigungen auf Datei-, Ordner- oder Bucket-Ebene. Überprüfen Sie Schritt 2, um sicherzustellen, dass Sie die richtigen Berechtigungen festgelegt haben.
  • Möglicherweise liegt ein Syntaxfehler im LOAD-Skript vor. Überprüfen Sie Ihr LOAD-Skript und führen Sie den Befehl erneut aus.
  • Der S3-Bucket und der DB-Cluster befinden sich in verschiedenen Regionen, und im Pfad zum S3-Bucket fehlt der Region-Wert. Weitere Informationen zu AWS-Regionen finden Sie unter Amazon S3-Endpunkte und Kontingente.
  • Die Netzwerkkonfiguration für die Reader- und Writer-Instancen ist unterschiedlich. Weitere Informationen finden Sie unter Den Reader-Endpunkt verwenden.

Fehlercode: 1871. Die S3-API hat einen Fehler zurückgegeben: Zugriff verweigert

Sie erhalten den „Fehlercode: 1871. Die S3-API hat einen Fehler zurückgegeben: Zugriff verweigert“ Fehler, wenn Ihr S3-Bucket verschlüsselt ist. Oder Sie können diesen Fehler erhalten, wenn sich in Ihrem S3-Bucket eine verschlüsselte Datei befindet. Wenn ServerSideEncryptionConfigurationExists nicht falsch ist, fügen Sie kms:* zu der Richtlinie hinzu, die Sie an die IAM-Rolle angehängt haben, die für die Ausführung des LOAD-Vorgangs verwendet wird. Verwenden Sie beispielsweise die folgende benutzerdefinierte Beispielrichtlinie, wenn Sie keine FullS3Access-Richtlinie verwenden:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "VisualEditor0",
      "Effect": "Allow",
      "Action": [
        "s3:*",
        "kms:*"
      ],
      "Resource": [
        "arn:aws:s3:::<your_bucket_name>",
        "arn:aws:s3:::<your_bucket_name>/*"
      ]
    }
  ]
}

Weitere Informationen

Speichern von Daten aus einem Amazon Aurora MySQL-DB-Cluster in Textdateien in einem Amazon S3-Bucket

Daten aus Textdateien in einem Amazon S3-Bucket in einen Amazon Aurora MySQL-DB-Cluster laden

AWS OFFICIAL
AWS OFFICIALAktualisiert vor einem Jahr