Come posso risolvere gli errori durante il caricamento di dati tra Amazon Aurora e Amazon S3?

6 minuti di lettura
0

Desidero correggere gli errori durante il caricamento di dati tra Amazon Aurora e Amazon Simple Storage Service (Amazon S3).

Breve descrizione

Per caricare i dati come file di testo tra Amazon Aurora e Amazon S3, utilizza il comando SELECT INTO OUTFILE S3 o il comando LOAD DATA FROM S3. Quando esegui uno dei comandi, è possibile che vengano visualizzati errori come i seguenti:

  1. Error Code: 1871. Missing Credentials
  2. Incorrect Command: missing file/prefix/manifest keyword
  3. Error code: 1045. Access denied error
  4. Error code: 1815. Internal error: Unable to initialize
  5. Error Code: 1871. S3 API returned error: Access Denied

Risoluzione

Esegui il comando SELECT INTO OUTFILE S3 o il comando LOAD DATA FROM S3

Completa i seguenti passaggi:

  1. Crea un bucket S3 e copia l'ARN.

  2. Crea una policy AWS Identity and Access Management (IAM) con le autorizzazioni per il bucket S3. Specifica l'ARN del bucket, quindi concedi le autorizzazioni agli oggetti all'interno dell'ARN del bucket. Se non utilizzi una policy FullS3Access, esegui una policy personalizzata simile alla seguente:

    {  "Version": "2012-10-17",
      "Statement": [
        {
          "Sid": "VisualEditor0",
          "Effect": "Allow",
          "Action": "s3:*",
          "Resource": [
            "arn:aws:s3:::<your_bucket_name>",
            "arn:aws:s3:::<your_bucket_name>/*"
          ]
        }
      ]
    }
  3. Crea un ruolo IAM per il servizio Amazon Relational Database Service (Amazon RDS). Quindi collega la policy IAM che hai creato. La relazione di fiducia è simile alla seguente:

    {  "Version": "2012-10-17",
      "Statement": [
        {
          "Sid": "",
          "Effect": "Allow",
          "Principal": {
            "Service": "rds.amazonaws.com"
          },
          "Action": "sts:AssumeRole"
        }
      ]
    }
  4. Crea un gruppo di parametri del cluster di database personalizzato per Amazon Aurora. Per Amazon Aurora compatibile con MySQL versione 1 o 2, modifica aurora_select_into_s3_role o aws_default_s3_role inserendo il valore dell'ARN del ruolo IAM. Per Aurora compatibile con MySQL versione 3, modifica il ruolo aws_default_s3_role inserendo il valore dell'ARN del ruolo IAM.

  5. Associa il ruolo IAM al cluster di database che hai creato. Per ulteriori informazioni, consulta la sezione Associazione di un ruolo IAM a un cluster di database Amazon Aurora MySQL.

  6. Accedi al tuo cluster di database Amazon Aurora.

  7. Per creare un nuovo utente, esegui il seguente comando:

    CREATE USER 'testsaveload'@'%' IDENTIFIED BY 'somepassword';show grants for 'testsaveload'@'%';
  8. Per concedere le autorizzazioni all'utente, esegui il seguente comando:

    GRANT SELECT, CREATE, INSERT, DROP ON *.* TO 'testsaveload'@'%';
  9. Per Aurora MySQL versione 1 o 2, utilizza la seguente istruzione:

    GRANT SELECT INTO S3 ON *.* TO 'testsaveload'@'%';GRANT LOAD FROM S3 ON *.* TO 'testsaveload'@'%';
  10. Per Aurora MySQL versione 3, utilizza la seguente istruzione:

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

Nota: in Aurora MySQL versione 3, utilizza il parametro del cluster di databse per attivare activate_all_roles_on_login. Quando un utente si connette a un'istanza database, tutti i ruoli vengono attivati automaticamente. Per ulteriori informazioni, consulta la sezione Concessione dei privilegi per caricare dati in Amazon Aurora MySQL . Esegui il comando SELECT INTO OUTFILE S3 o il comando LOAD DATA INTO S3:

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;

Error Code: 1871. Missing Credentials

Se manca l'allegato del ruolo IAM al cluster di database, consulta il passaggio 5 nella sezione "Esegui il comando SELECT INTO OUTFILE S3 o il comando LOAD DATA FROM S3". Se l'ARN del ruolo non è specificato e solo il nome del ruolo è elencato nel gruppo di parametri, consulta il passaggio 2.

Incorrect Command: missing file/prefix/manifest keyword

Se ricevi questo errore, assicurati che la parola chiave del comando sia corretta.

Error code: 1045. Access denied error

Se inserisci un comando errato, potresti ricevere un errore come "1045: Access denied for user ''testsaveload'@'%';". Ad esempio, il seguente comando non è corretto:

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

Verifica che la parola chiave S3 sia stata inserita nella query, ad esempio nel seguente comando:

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

Error code: 1815. Internal error: Unable to initialize

Se ricevi questo errore, completa i seguenti passaggi:

  1. Verifica che il file esista nel bucket S3, quindi verifica che il nome specificato nello script corrisponda al nome del file. Verifica che i nomi del bucket, della cartella e degli oggetti S3 corrispondano al comando load.
  2. Rivedi il passaggio 2 nella sezione "Esegui il comando SELECT INTO OUTFILE S3 o il comando LOAD DATA FROM S3" per assicurarti di aver impostato le autorizzazioni corrette.
  3. Se c'è un errore di sintassi nello script LOAD, rivedi lo script LOAD ed esegui nuovamente il comando.
  4. Se il bucket S3 e il cluster di database si trovano in regioni diverse e nel percorso del bucket S3 manca il valore della regione, consulta Endpoint e quote di Amazon Simple Storage Service per ulteriori informazioni.
  5. Se la configurazione di rete per le istanze di lettura e scrittura è diversa, consulta Connessioni endpoint Amazon Aurora per ulteriori informazioni.

Error Code: 1871. S3 API returned error: Access Denied

Potresti ricevere questo errore se hai una crittografia sul bucket S3 o se c'è un file crittografato all'interno del bucket S3. Se ServerSideEncryptionConfigurationExists non è falso, aggiungi kms:* alla policy che hai collegato al ruolo IAM utilizzato per eseguire l'operazione LOAD.

Ad esempio,se non utilizzi una policy FULLS3Access, usa il seguente esempio di policy personalizzata:

{  "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>/*"
      ]
    }
  ]
}

Error: S3 API returned error: Resource Not Found: No response body.

Per risolvere questo errore, assicurati che l'ARN e il nome del bucket siano corretti.

Informazioni correlate

Salvataggio di dati da un cluster di database Amazon Aurora MySQL nei file di testo in un bucket Amazon S3

Caricamento di dati in un cluster di database Amazon Aurora MySQL da file di testo in un bucket Amazon S3

AWS UFFICIALE
AWS UFFICIALEAggiornata un mese fa