Salta al contenuto

Come posso risolvere i problemi relativi al comando UNLOAD e all'accesso a S3 in Amazon Redshift?

4 minuti di lettura
0

Quando eseguo il comando UNLOAD in Amazon Redshift, ricevo errori.

Breve descrizione

Quando esegui i comandi UNLOAD in Amazon Redshift, possono verificarsi errori per i seguenti motivi:

  • Il bucket o il prefisso Amazon Simple Storage Service (Amazon S3) di destinazione contiene oggetti esistenti.
  • Non hai collegato il ruolo AWS Identity and Access Management (AWS IAM) al cluster Amazon Redshift.
  • Il ruolo IAM non ha le autorizzazioni del bucket S3 richieste.
  • L'utente del database non ha le autorizzazioni necessarie per la tabella o lo schema.

Risoluzione

Nota: se ricevi errori quando esegui i comandi dell'Interfaccia della linea di comando AWS (AWS CLI), consulta Risoluzione degli errori per AWS CLI. Inoltre, assicurati di utilizzare la versione più recente di AWS CLI.

Gli oggetti esistono nel bucket S3 o nel prefisso

Se gli oggetti esistono già nel bucket S3 o nel prefisso di destinazione, potresti ricevere il seguente messaggio di errore:

"Specified unload destination on S3 is not empty. Consider using a different bucket / prefix, manually removing the target files in S3, or using the ALLOWOVERWRITE option."

Per risolvere l'errore, esegui questo comando UNLOAD con il parametro ALLOWOVERWRITE:

UNLOAD ('<SELECT query>')
TO 's3://S3 bucket or prefix'
IAM_ROLE 'IAM Role'
ALLOWOVERWRITE;

Nota: sostituisci S3 bucket o prefix con il tuo bucket S3 o il tuo prefisso e IAM Role con il tuo ruolo IAM.

Per ulteriori informazioni, consulta Parametri.

Non hai associato il ruolo IAM al cluster

Se non hai associato il ruolo IAM specificato nel comando UNLOAD al cluster Amazon Redshift, ricevi il seguente messaggio di errore:

"UnauthorizedException, error type : 138, message: The requested role is not associated to cluster".

Per risolvere il problema, associa il ruolo IAM al cluster Amazon Redshift.

Completa i seguenti passaggi:

  1. Apri la console Amazon Redshift o AWS CLI.

  2. Esegui uno di questi comandi:
    Per Amazon Redshift con provisioning esegui il comando AWS CLI modify-cluster-iam-roles:

    ## Redshift Provisioned
    aws redshift modify-cluster-iam-roles \
        --cluster-identifier "Cluster Name" \
        --add-iam-roles "IAM Role ARN"

    Nota: sostituisci Cluster Name con il nome del tuo cluster e IAM Role ARN con il nome della risorsa Amazon (ARN) del tuo ruolo IAM.
    Per Amazon Redshift serverless, esegui il comando AWS CLI update-namespace:

    ## Redshift Serverless
    aws redshift-serverless update-namespace \
        --namespace-name Namespace Name \
        --iam-roles "IAM Role ARN"

    Nota: sostituisci Namespace Name con il nome del tuo namespace e IAM Role ARN con l'ARN del tuo ruolo IAM.

Per ulteriori informazioni, consulta Gestione dell'associazione di un ruolo IAM a un cluster.

Il ruolo IAM non ha le autorizzazioni S3 richieste

Se il ruolo IAM non ha le autorizzazioni S3 necessarie, il comando UNLOAD ha esito negativo e ricevi il seguente messaggio di errore:

"S3ServiceException:User: arn:aws:sts::<Account ID>:assumed-role/<IAM Role Name>/RedshiftIamRoleSession is not authorized to perform: s3:PutObject on resource: "<S3 Object Path>" because no identity-based policy".

Verifica che il ruolo IAM abbia le autorizzazioni IAM necessarie per scaricare correttamente i dati nel bucket S3 di destinazione.

L'utente del database non ha le autorizzazioni necessarie per la tabella o lo schema

Se l'utente del database non ha le autorizzazioni necessarie per la tabella o lo schema, potrebbe ricevere uno dei seguenti messaggi di errore:

  • "ERROR: permission denied for schema <Schema Name>".
  • "ERROR: permission denied for relation <Table Name>".

Per concedere all'utente del database l'autorizzazione USAGE per lo schema e l'autorizzazione SELECT per la tabella, esegui uno di questi comandi GRANT:

GRANT USAGE ON SCHEMA Schema Name TO DB User Name;
GRANT SELECT ON TABLE Table Name TO DB User Name;

Nota: nei comandi precedenti, sostituisci Schema Name con il nome del tuo schema, Table name con il nome della tua tabella e User Name con il nome utente dell'utente.

Altre indicazioni sulla risoluzione dei problemi

Per identificare l'ID della query e i messaggi di errore, consulta STL_QUERY o SYS_QUERY_HISTORY.

Per ulteriori informazioni, consulta STL_ERROR o SYS_UNLOAD_HISTORY.

AWS UFFICIALEAggiornata un anno fa