View a markdown version of this page

Solución de problemas de archivos de S3 - Amazon Simple Storage Service

Solución de problemas de archivos de S3

Esta página lo ayuda a diagnosticar y resolver problemas comunes con los archivos de S3.

Errores de comando de montaje

El comando mount -t s3files produce un error.

Causas y acciones comunes:

  • “mount.s3files: comando no encontrado”: el cliente de archivos de S3 (amazon-efs-utils) no está instalado o tiene una versión anterior a 3.0.0. Instale o actualice el cliente. Para obtener más información, consulte Requisitos previos para archivos de S3.

  • “No se pudo resolver el nombre de DNS del sistema de archivos”: no hay ningún destino de montaje en la zona de disponibilidad en la que se ejecuta la instancia de EC2. Cree un destino de montaje en esa zona de disponibilidad o lance la instancia en una zona de disponibilidad que tenga un destino de montaje. Para obtener más información, consulte Creación de destinos de montaje.

  • Se ha agotado el tiempo de espera de la conexión: la configuración del grupo de seguridad no permite el tráfico de NFS. Compruebe que el grupo de seguridad del destino de montaje permita el TCP entrante en el puerto 2049 desde el grupo de seguridad de la instancia y que el grupo de seguridad de la instancia permita el TCP saliente en el puerto 2049 al grupo de seguridad del destino de montaje. Para obtener más información, consulte Requisitos previos para archivos de S3.

  • “Acceso denegado” durante el montaje: el rol de IAM asociado al recurso informático no tiene los permisos necesarios para los archivos de S3. Compruebe que el rol tenga asociada la política administrada AmazonS3FilesClientFullAccess o AmazonS3FilesClientReadOnlyAccess, como mínimo, el permiso s3files:ClientMount. Para obtener más información, consulte Requisitos previos para archivos de S3.

  • botocore no está instalado: el ayudante de montaje requiere que botocore interactúe con los servicios de AWS. Instale botocore siguiendo las instrucciones del README de amazon-efs-utils en GitHub.

Permiso denegado en las operaciones de archivos

Puede montar el sistema de archivos, pero recibe los errores “Permiso denegado” u “Operación no permitida” al leer, escribir o acceder a los archivos.

Causas y acciones comunes:

  • Falta el permiso de escritura: si puede leer pero no escribir, compruebe que el rol de IAM asociado al recurso informático incluya el permiso s3files:ClientWrite o adjunte la política administrada AmazonS3FilesClientReadWriteAccess o AmazonS3FilesClientFullAccess. Para obtener más información, consulte Políticas administradas de AWS para archivos de Amazon S3.

  • Falta el acceso raíz: si recibe errores de permiso al acceder a archivos que son propiedad de raíz (UID 0), es posible que el rol de IAM no tenga el permiso s3files:ClientRootAccess. Sin este permiso, todas las operaciones se realizan como usuario anónimo de NFS (normalmente nfsnobody), que puede no tener acceso a los archivos. Adjunte la política administrada AmazonS3FilesClientFullAccess o agregue s3files:ClientRootAccess a la política.

  • Política del sistema de archivos que deniega el acceso: si ha adjuntado una política del sistema de archivos, compruebe que no deniegue las acciones que los clientes necesitan. Basta con “permitir” en la política basada en la identidad o en la política del sistema de archivos para acceder. Para obtener más información, consulte Cómo funcionan los archivos de S3 con IAM.

  • Discrepancia de permisos POSIX: los archivos de S3 aplican los permisos POSIX estándar (propietario, grupo u otros) en los archivos y directorios. Si la aplicación se ejecuta como un usuario que no coincide con el propietario o el grupo del archivo, es posible que se deniegue el acceso aunque los permisos de IAM sean correctos. Use un punto de acceso para aplicar un UID/GID específico para todas las solicitudes. Para obtener más información, consulte Creación de puntos de acceso para un sistema de archivos de S3.

El enrutamiento de lectura inteligente no funciona

Los archivos de S3 realizan un enrutamiento de lectura inteligente, ya que enrutan automáticamente las solicitudes de lectura a la capa de almacenamiento que mejor se adapte a ellas, al tiempo que mantiene la semántica completa del sistema de archivos, incluida la coherencia, el bloqueo y los permisos POSIX. El almacenamiento de alto rendimiento permite realizar pequeñas lecturas aleatorias de los archivos que se utilizan de forma activa para reducir la latencia. Las lecturas secuenciales de gran tamaño y las lecturas de datos que no se encuentran en el sistema de archivos se envían directamente desde el bucket de S3 para lograr un alto rendimiento y sin costo alguno de los datos del sistema de archivos.

Es posible que el enrutamiento de lectura inteligente no funcione si una de las métricas de conectividad del cliente (NFSConnectionAccessible, S3BucketAccessible y S3BucketReachable) muestra 0 o si no se obtiene el rendimiento de lectura esperado.

Causas y acciones comunes:

  • Falta una política insertada de S3 en el rol informático: el rol de IAM asociado al recurso informático debe incluir una política insertada que otorgue s3:GetObject y s3:GetObjectVersion en el bucket de S3 vinculado. Sin esta política, el ayudante de montaje no puede leer directamente desde S3 y todas las lecturas pasan por el sistema de archivos. Para obtener más información, consulte Requisitos previos para archivos de S3.

  • No se puede acceder al bucket de S3: compruebe la métrica de S3BucketReachable. Si muestra 0, compruebe que el recurso informático tenga acceso de red a S3 (por ejemplo, a través de un punto de conexión de VPC o una puerta de enlace NAT).

  • El archivo se ha modificado: las lecturas solo se envían directamente desde S3 cuando el archivo no se ha modificado a través del sistema de archivos. Si ha escrito en el archivo y los cambios aún no se han sincronizado con S3, las lecturas pasan por el sistema de archivos hasta que se complete la sincronización.

El sistema de archivos de forma coherente devuelve un error de servidor de NFS

Un sistema de archivos cifrados de forma coherente devuelve errores de servidor de NFS. Estos errores se pueden producir cuando los archivos de S3 no pueden recuperar la clave de KMS de AWS KMS por alguna de las razones siguientes:

  • La clave se ha desactivado.

  • La clave se ha eliminado.

  • El permiso de los archivos de S3 para utilizar la clave se ha revocado.

  • AWS KMS no está disponible temporalmente.

Acción que se debe ejecutar

En primer lugar, confirme que la clave de AWS KMS está habilitada. Puede ver las claves en la consola de AWS KMS. Para obtener más información, consulte Visualización de claves en la Guía para desarrolladores de AWS Key Management Service.

Si la clave no está habilitada, habilítela. Para obtener más información, consulte Habilitar y deshabilitar claves en la Guía para desarrolladores de AWS Key Management Service.

Si la clave está pendiente de eliminación, cancele la eliminación y vuelva a habilitar la clave. Para obtener más información, consulte Programación y cancelación de eliminación de claves en la Guía para desarrolladores de AWS Key Management Service.

Si la clave está habilitada y sigue teniendo problemas, contacte con AWS Support.

Falta un objeto en el bucket de S3 después de escribir el sistema de archivos

Escribió un archivo en el sistema de archivos y esperaba que apareciera como un objeto en el bucket de S3, pero el objeto no está ahí. Los archivos de S3 agrupan los cambios por lotes durante aproximadamente 60 segundos antes de copiarlos en S3. Si el objeto sigue sin aparecer, es posible que se haya producido un error en la exportación. En tal caso, verá un aumento en la métrica de FailedExports CloudWatch.

Acción que ejecutar

Compruebe el estado de exportación del archivo mediante los atributos extendidos:

getfattr -n "user.s3files.status;$(date -u +%s)" missing-file.txt --only-values

la marca temporal del nombre del atributo garantiza que se obtiene el estado más reciente. Ejemplo de código de salida:

S3Key: s3://bucket/prefix/missing-file.txt ExportError: PathTooLong

ExportError no se muestra si no se ha producido ningún error de exportación. S3Key está vacío si nunca se ha vinculado un objeto de S3 al archivo.

En la siguiente tabla, se muestran todos los posibles valores de ExportError:

Error Causa
S3AccessDenied El rol de IAM que asumen los archivos de S3 no tiene permisos suficientes para escribir en el bucket de S3. Para obtener más información, consulte Requisitos previos para archivos de S3.
S3BucketNotFound El bucket de S3 de origen ya no existe o se le ha cambiado el nombre. Compruebe que existe en la región y cuenta de AWS esperadas.
InternalError Se ha producido un error de sistema interno.
S3UserMetadataTooLarge Se ha superado el límite de tamaño de los metadatos de usuario de S3. Consulte Características, límites y cuotas no compatibles para obtener información sobre estos límites.
FileSizeExceedsS3Limit El tamaño del archivo supera el límite de tamaño de los objetos de S3. Consulte Características, límites y cuotas no compatibles para obtener información sobre estos límites.
EncryptionKeyInaccessible Los archivos de S3 no pueden acceder a la clave de cifrado utilizada por el bucket de S3. Conceda a archivos de S3 acceso a la clave de cifrado. Para obtener más información, consulte Cifrado.
RoleAssumptionFailed No se pudo asumir el rol. Compruebe las políticas de confianza. Para obtener más información, consulte Requisitos previos para archivos de S3.
KeyTooLongToBreakCycle Los archivos de S3 no pudieron resolver una dependencia circular (por ejemplo, al cambiar el nombre de dos archivos por el nombre del otro) porque la ruta del archivo supera el límite de longitud de las claves de S3. Acorte la ruta del directorio para resolver este error.
PathTooLong La ruta del archivo supera el límite de longitud de la clave de S3. Consulte Características, límites y cuotas no compatibles para obtener información sobre estos límites.
DependencyExportFailed Un elemento principal o una dependencia tiene un error de exportación que no se puede volver a intentar. Compruebe el estado del elemento principal o de cualquier dependencia que utilice getfattr.
S3ObjectArchived El objeto de S3 está archivado (S3 Glacier Flexible Retrieval o S3 Glacier Deep Archive) y no se puede leer. Primero debe restaurar el objeto mediante las API de S3.

Los archivos de S3 reintentan automáticamente las exportaciones erróneas. ExportError se muestra solo para los errores no reintentables.

El objeto de S3 no está visible en el sistema de archivos

Existe un objeto en el bucket de S3, pero no aparece en el sistema de archivos. Es posible que el nombre de la clave del objeto no se asigne a una ruta de archivo POSIX válida. Los archivos de S3 no permiten acceder a los nombres de clave de S3 con componentes de ruta vacíos (foo//bar), componentes de ruta relativa (foo/./bar, foo/../bar), nombres de clave que contengan bytes nulos o nombres de clave en los que algún componente de ruta supere los 255 bytes. Los objetos con nombres de clave incompatibles no se importan al sistema de archivos.

Archivos que aparecen en el directorio de objetos perdidos

Los archivos han aparecido en el directorio .s3files-lost+found-file-system-id del directorio raíz del sistema de archivos. En este caso, verá un aumento en la métrica de LostAndFoundFiles CloudWatch. Esto ocurre cuando se produce un conflicto de sincronización. Se produce un conflicto cuando el mismo archivo se ha modificado en el sistema de archivos y el objeto de S3 correspondiente cambia antes de que los archivos de S3 sincronicen los cambios del sistema de archivos con S3. Los archivos de S3 tratan el bucket de S3 como el origen de información verdadera, mueven el archivo en conflicto al directorio de objetos perdidos e importan la última versión del bucket de S3 en el sistema de archivos.

Identificación de los archivos del directorio de objetos perdidos

Cuando los archivos de S3 mueven un archivo al directorio de objetos perdidos, agregan el nombre de archivo con un identificador hexadecimal para distinguir varias versiones del mismo archivo que pueden moverse con el tiempo. Los nombres de archivo de más de 100 caracteres se truncan para dejar espacio para este identificador. La ruta del directorio original del archivo no se conserva en el directorio de objetos perdidos.

Acción que ejecutar

Obtenga la ruta original del archivo y la clave de objeto de S3 correspondiente:

getfattr -n "user.s3files.status;$(date -u +%s)" .s3files-lost+found-fs-12345678/abcdef1234_report.csv --only-values

Ejemplo de código de salida:

S3Key: s3://bucket/prefix/report.csv FilePath: /data/report.csv
Campo Descripción
S3Key La ruta de S3 completa del objeto que provocó el conflicto o está vacía si el objeto se ha eliminado del bucket de S3.
FilePath Ruta relativa del archivo antes del conflicto.

A continuación, puede conservar la última versión del bucket de S3 y eliminar el archivo del directorio de objetos perdidos o volver a copiar el archivo del directorio de objetos perdidos a su ruta original para sobrescribir la versión de S3.

nota

Los archivos del directorio de objetos perdidos permanecen ahí indefinidamente y se incluyen en los costos de almacenamiento del sistema de archivos. Elimine archivos del directorio de objetos perdidos cuando ya no sean necesarios.

La sincronización se está retrasando

La métrica de PendingExports CloudWatch está aumentando, lo que indica que la carga de trabajo genera cambios más rápido de lo que los archivos de S3 pueden sincronizarlos en S3.

Esto significa que la carga de trabajo puede estar superando la velocidad de sincronización. Los archivos de S3 exportan hasta 800 archivos por segundo por sistema de archivos. Considere la posibilidad de reducir la velocidad de modificación de los archivos o distribuir el trabajo entre varios sistemas de archivos. Supervise la métrica PendingExports a lo largo del tiempo. Si se estabiliza o disminuye, los archivos de S3 se están poniendo al día. Si sigue creciendo, contacte con AWS Support.

Habilitación de los registros de depuración del cliente

Si está solucionando problemas de montaje, conectividad o desvío de lectura, puede habilitar el registro por depuración en el cliente de archivos de S3 para obtener más detalles.

Montaje de registros auxiliares y de vigilancia

Edite /etc/amazon/efs/s3files-utils.conf y cambie el nivel del registro de INFO a DEBUG:

[DEFAULT] logging_level = DEBUG

Desmonte y vuelva a montar el sistema de archivos para que el cambio entre en vigor:

sudo umount /mnt/s3files sudo mount -t s3files file-system-id:/ /mnt/s3files

los registros se escriben en /var/log/amazon/efs/. El registro del ayudante de montaje es mount.log.

Registros de proxy (efs-proxy)

El proxy gestiona el tráfico de NFS y la omisión de lectura de S3. Para habilitar el registro de depuración en el proxy, edite /etc/amazon/efs/s3files-utils.conf:

[proxy] proxy_logging_level = DEBUG

desmonte y vuelva a montar para que el cambio entre en vigor. Los registros del proxy se escriben en /var/log/amazon/efs/.

Registros del túnel de TLS (stunnel)

Los registros del túnel de TLS están desactivados de manera predeterminada. Para habilitarlos, edite /etc/amazon/efs/s3files-utils.conf y configure lo siguiente:

[mount] stunnel_debug_enabled = true

Para guardar todos los registros de stunnel de un sistema de archivos en un solo archivo, también quite el comentario de la línea stunnel_logs_file:

stunnel_logs_file = /var/log/amazon/efs/{fs_id}.stunnel.log

Límites de tamaño de registros

Los archivos de registro se rotan automáticamente. Puede configurar el tamaño y el número máximo de archivos rotados en s3files-utils.conf:

[DEFAULT] logging_max_bytes = 1048576 logging_file_count = 10

el valor predeterminado es 1 MB por archivo de registro con 10 archivos rotados, con un máximo de 10 MB por tipo de registro.

Compartir registros con AWS Support

Cuando se ponga en contacto con AWS Support, recopile los registros y la configuración del cliente en un único archivo:

sudo tar -czf /tmp/s3files-support-logs.tar.gz \ /var/log/amazon/efs/ \ /etc/amazon/efs/s3files-utils.conf

incluya /tmp/s3files-support-logs.tar.gz con el caso de soporte.