Ir para o conteúdo

Como resolvo problemas de comando UNLOAD e acesso ao S3 no Amazon Redshift?

4 minuto de leitura
0

Quando executo o comando UNLOAD no Amazon Redshift, recebo erros.

Breve descrição

Quando você executa comandos UNLOAD no Amazon Redshift, erros podem ocorrer pelos seguintes motivos:

  • O bucket ou prefixo de destino do Amazon Simple Storage Service (Amazon S3) contém objetos existentes.
  • Você não anexou o perfil do AWS Identity and Access Management (AWS IAM) ao seu cluster do Amazon Redshift.
  • O perfil do IAM não tem as permissões de bucket do S3 necessárias.
  • O usuário do banco de dados não tem as permissões de tabela ou esquema necessárias.

Resolução

Observação: se você receber erros ao executar comandos da AWS Command Line Interface (AWS CLI), consulte Solução de problemas da AWS CLI. Além disso, verifique se você está usando a versão mais recente da AWS CLI.

Os objetos existem no bucket ou no prefixo do S3

Se os objetos já existirem no bucket ou prefixo do S3 de destino, você poderá receber a seguinte mensagem de erro:

“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.”

Para resolver o erro, execute o seguinte comando UNLOAD com o parâmetro ALLOWOVERWRITE:

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

Observação: substitua S3 bucket ou prefix pelo seu bucket ou prefixo do S3 e perfil do IAM pelo seu perfil do IAM.

Para obter mais informações, consulte Parâmetros.

Você não associou o perfil do IAM ao cluster

Se você não associou o perfil do IAM especificada no comando UNLOAD ao cluster do Amazon Redshift, receberá a seguinte mensagem de erro:

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

Para resolver o problema, associe o perfil do IAM ao cluster do Amazon Redshift.

Conclua as seguintes etapas:

  1. Abra o console do Amazon Redshift ou a AWS CLI.

  2. Execute um dos seguintes comandos:
    Para o Amazon Redshift Provisioned, execute o comando modify-cluster-iam-roles da AWS CLI:

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

    Observação: substitua o nome do cluster pelo nome do seu cluster e o ARN do perfil do IAM pelo nome do recurso da Amazon (ARN) do seu perfil do IAM.
    Para o Amazon Redshift sem servidor, execute o comando update-namespace da AWS CLI:

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

    Observação: substitua o nome do namespace pelo nome do seu namespace e o ARN do perfil do IAM pelo ARN do seu perfil do IAM.

Para obter mais informações, consulte Gerenciando a associação do perfil do IAM com um cluster.

O perfil do IAM não tem as permissões necessárias do S3

Se o perfil do IAM não tiver as permissões necessárias do S3, o comando UNLOAD falhará e você receberá a seguinte mensagem de erro:

“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”.

Verifique se seu perfil do IAM tem as permissões de IAM necessárias para descarregar dados com êxito no bucket do S3 de destino.

O usuário do banco de dados não tem as permissões de tabela ou esquema necessárias

Se o usuário do banco de dados não tiver as permissões necessárias na tabela ou no esquema, ele poderá receber uma das seguintes mensagens de erro:

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

Para conceder ao usuário do banco de dados a permissão USAGE no esquema e a permissão SELECT na tabela, execute um dos seguintes comandos GRANT:

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

Observação: nos comandos anteriores, substitua Nome do esquema pelo nome do esquema, Nome da tabela pelo nome da tabela e Nome do usuário pelo nome do usuário.

Solução de problemas adicional

Para identificar o ID da consulta e as mensagens de erro, consulte STL_QUERY ou SYS_QUERY_HISTORY.

Para obter mais informações, consulte STL_ERROR ou SYS_UNLOAD_HISTORY.

AWS OFICIALAtualizada há 10 meses