Saltar al contenido

¿Cómo soluciono los problemas de acceso al comando UNLOAD y a S3 en Amazon Redshift?

4 minutos de lectura
0

Cuando ejecuto el comando UNLOAD en Amazon Redshift, se muestran errores.

Descripción corta

Al ejecutar los comandos UNLOAD en Amazon Redshift, pueden producirse errores por los siguientes motivos:

  • El bucket o prefijo de Amazon Simple Storage Service (Amazon S3) de destino contiene objetos existentes.
  • No has adjuntado el rol de AWS Identity and Access Management (IAM) a tu clúster de Amazon Redshift.
  • El rol de IAM no tiene los permisos de bucket de S3 necesarios.
  • El usuario de la base de datos no tiene los permisos de tabla o esquema necesarios.

Resolución

Nota: Si se muestran errores al ejecutar comandos de la Interfaz de la línea de comandos de AWS (AWS CLI), consulta Solución de problemas de AWS CLI. Además, asegúrate de utilizar la versión más reciente de la AWS CLI.

Los objetos existen en el bucket o prefijo de S3

Si ya existen objetos en el bucket o prefijo de S3 de destino, es posible que se muestre el siguiente mensaje de error:

«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 el error, ejecuta el siguiente comando UNLOAD con el parámetro ALLOWOVERWRITE:

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

Nota: Sustituye S3 bucket o prefix por tu prefijo o bucket de S3 e IAM Role por tu rol de IAM.

Para obtener más información, consulta Parámetros.

No has asociado el rol de IAM al clúster

Si no has asociado el rol de IAM especificado en el comando UNLOAD con el clúster de Amazon Redshift, aparecerá el siguiente mensaje de error:

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

Para resolver el problema, asocia el rol de IAM a tu clúster de Amazon Redshift.

Sigue estos pasos:

  1. Abre la consola de Amazon Redshift o la AWS CLI.

  2. Ejecuta uno de los siguientes comandos:
    Para Amazon Redshift Provisioned, ejecuta el comando modify-cluster-iam-roles de la AWS CLI:

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

    Nota: Sustituye Cluster Name por el nombre de tu clúster y IAM Role ARN por el nombre de recurso de Amazon (ARN) de tu rol de IAM.
    Para Amazon Redshift sin servidor, ejecuta el comando update-namespace de la AWS CLI:

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

    Nota: Sustituye Namespace Name por el nombre de tu espacio de nombres y IAM Role ARN por el ARN de tu rol de IAM.

Para obtener más información, consulta Administración de la asociación de roles de IAM con un clúster.

El rol de IAM no tiene los permisos de S3 necesarios

Si el rol de IAM no tiene los permisos de S3 necesarios, se produce un error en el comando UNLOAD y aparece el siguiente mensaje de error:

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

Comprueba que tu rol de IAM tenga los permisos de IAM necesarios para descargar correctamente los datos en el bucket de S3 de destino.

El usuario de la base de datos no tiene los permisos de tabla o esquema necesarios

Si el usuario de la base de datos no tiene los permisos necesarios en la tabla o el esquema, es posible que aparezca uno de los siguientes mensajes de error:

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

Para conceder al usuario de la base de datos el permiso USAGE en el esquema y el permiso SELECT en la tabla, ejecuta uno de los siguientes comandos GRANT:

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

Nota: En los comandos anteriores, sustituye Schema Name por el nombre de tu esquema, Table name por el nombre de tu tabla y User Name por el nombre de usuario del usuario.

Resolución de problemas adicionales

Para identificar el ID de consulta y los mensajes de error, consulta STL_QUERY o SYS_QUERY_HISTORY.

Para obtener más información, consulta STL_ERROR o SYS_UNLOAD_HISTORY.

OFICIAL DE AWSActualizada hace 9 meses