Come posso risolvere i messaggi di errore che ricevo durante il caricamento o il download di dati da Amazon Aurora ad Amazon S3?

6 minuti di lettura
0

Desidero caricare dati su Amazon Aurora da Amazon Simple Storage Service (Amazon S3). Oppure voglio scaricare dati da Amazon Aurora e caricarli su Amazon S3.

Breve descrizione

Carica i dati come file di testo tra Amazon Aurora e Amazon S3 utilizzando uno di questi comandi:

  • SELECT INTO OUTFILE S3: carica i dati da Amazon Aurora in Amazon S3
  • LOAD DATA FROM S3: carica i dati da Amazon S3 in Amazon Aurora

Alcuni dei messaggi di errore più comuni che si possono ricevere durante l'esecuzione dei comandi SELECT INTO OUTFILE S3 o LOAD DATA FROM S3 includono:

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

Risoluzione

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

Esegui i comandi SELECT INTO OUTFILE S3 o LOAD DATA FROM S3 utilizzando Amazon Aurora:

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

2.    Crea una policy AWS Identity and Access Management (IAM) per il bucket S3 con le autorizzazioni. 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 attendibilità è la 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 Aurora.

Per Aurora MySQL versione 1 o 2:

Modifica uno di questi ruoli aurora_select_into_s3_role o aws_default_s3_role con il valore dell'ARN del ruolo IAM.

Per Aurora MySQL versione 3:

Modifica il ruole aws_default_s3_role con 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 Associating an IAM role with an Amazon Aurora MySQL DB cluster.

6.    Accedi al tuo cluster di database Amazon Aurora.

7.    Crea un nuovo utente eseguendo il comando sottostante:

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

8.    Concedi le autorizzazioni all'utente eseguendo il comando sottostante:

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

Per Aurora MySQL versione 1 o 2, usa la seguente dichiarazione:

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

Per Aurora MySQL versione 3, usa la seguente dichiarazione:

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

Nota: in Aurora MySQL versione 3, il comando activate_all_roles_on_login può essere attivato utilizzando il parametro del cluster di database. Questo attiverà automaticamente tutti i ruoli quando un utente si connette a un'istanza database. Per ulteriori informazioni, consulta la sezione Granting privileges to load data in Amazon Aurora MySQL.

9.    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

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

Puoi ricevere questo messaggio di errore se:

  • Manca il collegamento del ruolo IAM al cluster di database. Per risolvere questo problema, consulta il passaggio 5 della sezione precedente.
  • Il ruolo ARN non è specificato e nel gruppo di parametri è elencato solo il nome del ruolo. Per risolvere il problema, consulta il passaggio 2 della sezione precedente.

Incorrect Command: missing file/prefix/manifest keyword

Se ricevi il messaggio di errore "Incorrect Command: missing file/prefix/manifest keyword", significa che non hai inserito la parola chiave giusta per eseguire correttamente il comando. Per correggere questo errore, inserisci la parola chiave per il comando.

Error code: 1045. Access denied error

Se inserisci un comando errato, potresti ricevere un messaggio di errore come "1045: Access denied for user ''testsaveload'@'%';". Ad esempio, questo comando è stato scritto in modo errato:

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

Assicurati che la parola chiave S3 sia stata inserita nella query. Questo comando è scritto in modo corretto:

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

Error code: 1815. Internal error: Unable to initialize

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

Esistono diversi motivi per cui potresti ricevere il messaggio di errore "Error Code: 1815. Internal error: Unable to initialize".

  • Il tuo file non esiste. Verifica che il file esista nel tuo bucket S3 e che il nome specificato nello script corrisponda al nome del file. La differenza tra maiuscole e minuscole è importante. Verifica che il nome del bucket S3, il nome della cartella e il nome dell'oggetto corrispondano esattamente a quanto specificato nel comando load.
  • Non disponi delle autorizzazioni appropriate a livello di file, cartella o bucket. Controlla il passaggio 2 per assicurarti di aver impostato le autorizzazioni corrette.
  • Potrebbe esserci un errore di sintassi nello script LOAD. Rivedi lo script LOAD, quindi esegui nuovamente il comando.
  • Il bucket S3 e il cluster di database si trovano in regioni diverse e nel percorso del bucket S3 manca il valore della regione. Per ulteriori informazioni sulle regioni AWS, consulta Amazon S3 endpoints and quotas.
  • La configurazione di rete per le istanze di lettura e scrittura è diversa. Per ulteriori informazioni, consulta la sezione Using the reader endpoint.

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

Riceverai il messaggio di errore "Error Code: 1871. S3 API returned error: Access Denied" se sul tuo bucket S3 è presente una crittografia. Oppure puoi ricevere questo errore se all'interno del tuo bucket S3 c'è un file crittografato. Se ServerSideEncryptionConfigurationExists non è false, 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>/*"
      ]
    }
  ]
}

Informazioni correlate

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

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

AWS UFFICIALE
AWS UFFICIALEAggiornata un anno fa