Tengo un cubo con miles de archivos. ¿Cómo puedo buscar el cubo? ¿Hay alguna herramienta que pueda recomendar?
amazon-web-services
amazon-s3
vinhboy
fuente
fuente
Respuestas:
S3 no tiene una "búsqueda en este depósito" nativa ya que se desconoce el contenido real; además, dado que S3 se basa en clave / valor, no hay una forma nativa de acceder a muchos nodos a la vez, más almacenes de datos tradicionales que ofrecen un
(SELECT * FROM ... WHERE ...)
(en un SQL modelo).Lo que tendrá que hacer es realizar
ListBucket
una lista de objetos en el depósito y luego iterar sobre cada elemento que realice una operación personalizada que implemente, que es su búsqueda.fuente
Solo una nota para agregar aquí: ahora es 3 años después, sin embargo, esta publicación está en la parte superior de Google cuando escribe "Cómo buscar un S3 Bucket".
Quizás esté buscando algo más complejo, pero si aterrizó aquí tratando de encontrar la manera de encontrar un objeto (archivo) simplemente por su título, es una locura simple:
abra el depósito, seleccione "ninguno" en el lado derecho y comience a escribir el nombre del archivo.
http://docs.aws.amazon.com/AmazonS3/latest/UG/ListingObjectsinaBucket.html
fuente
Aquí hay una manera corta y fea de buscar nombres de archivos con la CLI de AWS :
fuente
cut -c 32-
simplemente corta la información de marca de tiempo y tamaño de archivo de la salida, que en mi sistema ocupa 32 caracteres. No lo necesita, pero si está canalizando la salida en otro comando, puede ser útil tener una salida "limpia".include/exclude
. Entonces,aws s3 ls s3://bucket --recursive --exclude '*' --include 'myfile*'
Hay (al menos) dos casos de uso diferentes que podrían describirse como "buscar en el depósito":
Busque algo dentro de cada objeto almacenado en el cubo; esto supone un formato común para todos los objetos en ese depósito (por ejemplo, archivos de texto), etc. Para algo como esto, se ve obligado a hacer lo que Cody Caughlan acaba de responder. Los documentos de AWS S3 tienen un código de ejemplo que muestra cómo hacer esto con AWS SDK para Java: Listado de claves usando AWS SDK para Java (allí también encontrará ejemplos de PHP y C #).
Elemento de la lista Busque algo en las claves de objeto contenidas en ese depósito; S3 hace tener parcial apoyo a esta, en la forma de permitir prefijo coincidencias exactas + colapso de partidos después de un delimitador. Esto se explica con más detalle en la Guía del desarrollador de AWS S3 . Esto permite, por ejemplo, implementar "carpetas" mediante el uso de claves de objeto como
Si sigue esta convención, la mayoría de las GUI de S3 (como la consola de AWS) le mostrarán una vista de carpeta de su bucket.fuente
AWS lanzó un nuevo servicio para consultar cubos S3 con SQL: Amazon Athena https://aws.amazon.com/athena/
fuente
Existen múltiples opciones, ninguna de las cuales es una solución de texto completo de "una sola toma":
Búsqueda de patrón de nombre de clave : búsqueda de claves que comienzan con alguna cadena; si diseña los nombres de clave con cuidado, entonces puede tener una solución bastante rápida.
Buscar metadatos adjuntos a las claves : al publicar un archivo en AWS S3, puede procesar el contenido, extraer información meta y adjuntar esta información meta en forma de encabezados personalizados en la clave. Esto le permite recuperar nombres de clave y encabezados sin necesidad de recuperar contenido completo. La búsqueda tiene que hacerse secuencialmente, no hay una opción de búsqueda "sql like" para esto. Con archivos grandes, esto podría ahorrar mucho tráfico de red y tiempo.
Almacenar metadatos en SimpleDB : como punto anterior, pero almacenando los metadatos en SimpleDB. Aquí tienes declaraciones tipo sql like select. En el caso de grandes conjuntos de datos, puede alcanzar los límites de SimpleDB, que pueden superarse (metadatos de partición en múltiples dominios de SimpleDB), pero si llega muy lejos, es posible que necesite usar otro tipo de base de datos de metedata.
Búsqueda secuencial de texto completo del contenido: procesando todas las claves una por una. Muy lento, si tiene demasiadas claves para procesar.
Estamos almacenando 1440 versiones de un archivo al día (una por minuto) durante un par de años, usando un cubo versionado, es fácilmente posible. Pero obtener una versión anterior lleva tiempo, ya que uno tiene que ir secuencialmente versión por versión. En algún momento utilizo un índice CSV simple con registros, que muestra el tiempo de publicación más la identificación de la versión, y teniendo esto, podría saltar a la versión anterior con bastante rapidez.
Como puede ver, AWS S3 no está diseñado para búsquedas de texto completo, es un servicio de almacenamiento simple.
fuente
Buscar por prefijo en la consola S3
directamente en la vista de la consola de AWS.
Copie los archivos deseados utilizando s3-dist-cp
Cuando tiene miles o millones de archivos, otra forma de obtener los archivos deseados es copiarlos en otra ubicación utilizando la copia distribuida . Ejecuta esto en EMR en un trabajo de Hadoop. Lo bueno de AWS es que proporcionan su versión S3 personalizada s3-dist-cp . Le permite agrupar archivos deseados utilizando una expresión regular en el campo groupBy. Puede usar esto, por ejemplo, en un paso personalizado en EMR
fuente
Si está en Windows y no tiene tiempo para encontrar una buena
grep
alternativa, una forma rápida y sucia sería:aws s3 ls s3://your-bucket/folder/ --recursive > myfile.txt
y luego haga una búsqueda rápida en myfile.txt
El bit de "carpeta" es opcional.
PD: si no tiene la CLI de AWS instalada, aquí hay una línea con el administrador de paquetes Chocolatey
choco install awscli
PPS Si no tiene el administrador de paquetes Chocolatey, ¡consígalo! Tu vida en Windows será 10 veces mejor. (No estoy afiliado a Chocolatey de ninguna manera, pero bueno, es algo imprescindible, de verdad).
fuente
Dado que está en AWS ... Creo que le gustaría usar sus herramientas de CloudSearch. Ponga los datos que desea buscar en su servicio ... haga que apunten a las teclas S3.
http://aws.amazon.com/cloudsearch/
fuente
Otra opción es reflejar el bucket S3 en su servidor web y recorrerlo localmente. El truco es que los archivos locales están vacíos y solo se usan como esqueleto. Alternativamente, los archivos locales pueden contener metadatos útiles que normalmente necesitaría obtener de S3 (por ejemplo, tamaño de archivo, tipo MIME, autor, marca de tiempo, uuid). Cuando proporcione una URL para descargar el archivo, busque localmente y proporcione un enlace a la dirección S3.
Recorrer archivos locales es fácil y este enfoque para la administración de S3 es independiente del lenguaje. Recorrer archivos locales también evita mantener y consultar una base de datos de archivos o retrasos al realizar una serie de llamadas API remotas para autenticar y obtener el contenido del depósito.
Puede permitir que los usuarios carguen archivos directamente a su servidor a través de FTP o HTTP y luego transferir un lote de archivos nuevos y actualizados a Amazon en las horas pico, simplemente recurriendo a los directorios para archivos de cualquier tamaño. Al completar la transferencia de un archivo a Amazon, reemplace el archivo del servidor web con uno vacío del mismo nombre. Si un archivo local tiene algún tamaño de archivo, sírvalo directamente porque está esperando la transferencia por lotes.
fuente
La forma en que lo hice es: tengo miles de archivos en s3. Vi el panel de propiedades de un archivo en la lista. Puede ver el URI de ese archivo y lo copié y lo pegué en el navegador: era un archivo de texto y se renderizó muy bien. Ahora reemplacé el uuid en la url con el uuid que tenía a mano y ahí está el archivo.
Desearía que AWS tuviera una mejor manera de buscar un archivo, pero esto funcionó para mí.
fuente
Prueba este comando:
Luego puede canalizar esto en un grep para obtener tipos de archivos específicos para hacer lo que quiera con ellos.
fuente
--output text
especifica que la salida será texto plano, no JSON, etc. y--query 'Contents[].{Key: Key, Size: Size}'
simplemente filtra la salida de la lista al nombre y tamaño del archivo. No buscaKey: Key
ni nada por el estilo.Lo intenté de la siguiente manera
Esto genera la ruta real donde existe el archivo
fuente
Este es un hilo un poco viejo, pero tal vez ayude a alguien que todavía busca, soy yo quien lo busca por un año.
La solución puede ser " AWS Athena ", donde puede buscar datos como este
https://aws.amazon.com/blogs/developer/introducing-support-for-amazon-s3-select-in-the-aws-sdk-for-javascript/
El precio actual es de $ 5 por datos de 1 TB , por ejemplo, si su consulta busca en un archivo de 1 TB 3 veces su costo es de $ 15, pero por ejemplo si solo hay 1 columna en "formato de columna convertida" que quiere leer, pagará 1 / 3 del precio significa $ 1.67 / TB.
fuente
Eche un vistazo a esta documentación: http://docs.aws.amazon.com/AWSSDKforPHP/latest/index.html#m=amazons3/get_object_list
Puede usar una expresión regular compatible con Perl (PCRE) para filtrar los nombres.
fuente
Hice algo como a continuación para encontrar patrones en mi cubo
Para cubos más grandes, esto consume demasiado tiempo ya que todos los resúmenes de objetos son devueltos por Aws y no solo los que coinciden con el prefijo y el delimitador. Estoy buscando formas de mejorar el rendimiento y hasta ahora solo he descubierto que debería nombrar las claves y organizarlas en cubos correctamente.
fuente
Me enfrenté al mismo problema. Buscar en S3 debería ser mucho más fácil que la situación actual. Es por eso que implementé esta herramienta de código abierto para buscar en S3.
BÚSQUEDA es una herramienta de búsqueda completa de código abierto S3. Se ha implementado siempre teniendo en cuenta que el rendimiento es el factor crítico y, de acuerdo con los puntos de referencia, busca el depósito que contiene ~ 1000 archivos en segundos.
La instalación es simple. Solo descarga el archivo docker-compose y lo ejecuta con
SSEARCH se iniciará y puede buscar cualquier cosa en cualquier bucket que tenga.
fuente
Avancemos rápidamente hasta 2020, y usando aws-okta como nuestro 2fa, el siguiente comando, mientras que lento para recorrer todos los objetos y carpetas en este cubo en particular (+270,000) funcionó bien.
fuente
Use Amazon Athena para consultar el bucket de S3. Además, cargue datos en la búsqueda de Amazon Elastic. Espero que esto ayude.
fuente
No es una respuesta técnica, pero he creado una aplicación que permite la búsqueda con comodines: https://bucketsearch.net/
Indexará asincrónicamente su bucket y luego le permitirá buscar los resultados.
Es de uso gratuito (donationware).
fuente
Estado 2018-07: ¡Amazon tiene sql nativo como búsqueda de archivos csv y json!
https://aws.amazon.com/blogs/developer/introducing-support-for-amazon-s3-select-in-the-aws-sdk-for-javascript/
fuente