Passer au contenu

Comment résoudre les problèmes liés à la commande UNLOAD et à l'accès à S3 dans Amazon Redshift ?

Lecture de 4 minute(s)
0

Lorsque j'exécute la commande UNLOAD dans Amazon Redshift, des erreurs s'affichent.

Brève description

Lorsque vous exécutez des commandes UNLOAD dans Amazon Redshift, des erreurs peuvent se produire pour les raisons suivantes :

  • Le compartiment ou le préfixe Amazon Simple Storage Service (Amazon S3) cible contient des objets existants.
  • Vous n'avez pas associé le rôle Gestion des identités et des accès AWS (AWS IAM) à votre cluster Amazon Redshift.
  • Le rôle IAM ne dispose pas des autorisations de compartiment S3 requises.
  • L'utilisateur de base de données ne dispose pas des autorisations de table ou de schéma nécessaires.

Résolution

Remarque : Si des erreurs surviennent lorsque vous exécutez des commandes de l'interface de la ligne de commande AWS (AWS CLI), consultez la section Résoudre des erreurs liées à l’AWS CLI. Vérifiez également que vous utilisez bien la version la plus récente de l’AWS CLI.

Les objets existent dans le compartiment ou le préfixe S3

Si des objets existent déjà dans le compartiment ou le préfixe S3 cible, le message d'erreur suivant peut s'afficher :

« 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. »

Pour résoudre l'erreur, exécutez la commande UNLOAD suivante avec le paramètre ALLOWOVERWRITE :

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

Remarque : Remplacez compartiment S3 ou préfixe par votre compartiment S3 ou préfixe et Rôle IAM par votre rôle IAM.

Pour en savoir plus, consultez la section Paramètres.

Vous n'avez pas associé le rôle IAM au cluster

Si vous n'avez pas associé le rôle IAM spécifié dans la commande UNLOAD au cluster Amazon Redshift, le message d'erreur suivant s'affiche :

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

Pour résoudre le problème, associez le rôle IAM au cluster Amazon Redshift.

Procédez comme suit :

  1. Ouvrez la console Amazon Redshift ou l'interface de ligne de commande AWS.

  2. Exécutez l'une des commandes suivantes :
    Pour Amazon Redshift Provisioned, exécutez la commande modify-cluster-iam-roles de l'AWS CLI :

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

    Remarque : Remplacez Nom du cluster par le nom de votre cluster et ARN du rôle IAM par l’Amazon Resource Name (ARN) de votre rôle IAM.
    Pour Amazon Redshift sans serveur, exécutez la commande update-namespace de l’AWS CLI :

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

    Remarque : Remplacez Nom de l’espace de noms par le nom de votre espace de noms et ARN du rôle IAM par l'ARN de votre rôle IAM.

Pour plus d'informations, consultez la section Gestion de l'association de rôles IAM à un cluster.

Le rôle IAM ne dispose pas des autorisations S3 requises

Si le rôle IAM ne dispose pas des autorisations S3 nécessaires, la commande UNLOAD échoue et le message d'erreur suivant s'affiche :

« 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 ».

Vérifiez que votre rôle IAM dispose des autorisations IAM requises pour décharger correctement les données vers le compartiment S3 cible.

L'utilisateur de base de données ne dispose pas des autorisations de table ou de schéma nécessaires

Si l'utilisateur de base de données ne dispose pas des autorisations nécessaires sur la table ou le schéma, il peut recevoir l'un des messages d'erreur suivants :

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

Pour accorder à l'utilisateur de base de données l'autorisation USAGE sur le schéma et l'autorisation SELECT sur la table, exécutez l'une des commandes GRANT suivantes :

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

Remarque : Dans les commandes précédentes, remplacez Nom du schéma par le nom de votre schéma, Nom de la table par le nom de votre table et Nom d’utilisateur par le nom d'utilisateur de l'utilisateur.

Résolution de problèmes supplémentaires

Pour identifier l'ID de requête et les messages d'erreur, consultez STL_QUERY ou SYS_QUERY_HISTORY.

Pour plus d'informations, consultez STL_ERROR ou SYS_UNLOAD_HISTORY.

AWS OFFICIELA mis à jour il y a un an