En esta página, se describen los objetos, un recurso en Cloud Storage. Para obtener una descripción general de cómo funciona Cloud Storage, consulta la descripción general del producto de Cloud Storage.
Objetos
Los objetos son los datos individuales que almacenas en Cloud Storage. No hay límite en la cantidad de objetos que puedes crear en un bucket.
Los objetos tienen dos componentes: datos de objeto y metadatos de objeto. Los datos de objeto suelen ser un archivo que deseas almacenar en Cloud Storage y son en su totalidad opacos para Cloud Storage. Los metadatos de objeto son una recopilación de pares nombre-valor en los que se describen varias calidades del objeto.
Dos partes importantes de los metadatos de objetos que son comunes de todos los objetos son el nombre del objeto y su número de generación. Cuando agregas un objeto a un bucket de Cloud Storage, debes especificar el nombre del objeto y Cloud Storage asigna el número de generación. Juntos, el nombre y la generación identifican de forma única el objeto dentro de ese bucket.
Puedes usar las listas de control de acceso (LCA) para controlar el acceso a objetos individuales. También puedes usar Identity and Access Management (IAM) para controlar el acceso a todos los objetos dentro de un bucket o una carpeta administrada.
Consideraciones de nombres
El nombre que asignas a un objeto debe cumplir los siguientes requisitos:
- Los nombres de objetos pueden contener cualquier secuencia de caracteres Unicode válidos con una longitud de 1-1024 bytes cuando se codifican en UTF-8.
- Los nombres de objetos no pueden contener caracteres de retorno de carro o salto de línea.
- Los nombres de los objetos no pueden empezar con
.well-known/acme-challenge/
. - Los objetos no se pueden llamar
.
ni..
.
Recomendamos que evites lo siguiente en los nombres de tus objetos:
- Evita el uso de caracteres de control que sean ilegales en XML 1.0 (#x7F–#x84 y #x86–#x9F). Estos caracteres provocan problemas con las listas de XML cuando intentas hacer una lista de tus objetos.
- El carácter
#
: los comandos de Google Cloud CLI interpretan los nombres de objetos que terminan en #<string numérica> como identificadores de versión, por lo que incluir#
en los nombres de objetos puede dificultar los procesos o es imposible hacer operaciones en esos objetos con versión mediante gcloud CLI - Los caracteres
[
,]
,*
o?
: Los comandos de Google Cloud CLI interpretan estos caracteres como comodines, por lo que incluirlos en los nombres de los objetos puede dificultar o imposibilitar las operaciones de comodines. Además,*
y?
no son caracteres válidos para los nombres de archivos en Windows. - Los caracteres
:
,"
,<
,>
o|
: No son caracteres válidos para los nombres de archivo en Windows, por lo que se intenta descargar un objeto que use caracteres en su nombre a un archivo de Windows fallan, a menos que el método de descarga incluya el cambio de nombre del archivo de Windows resultante. El carácter/
, aunque tampoco es un carácter válido para los nombres de archivos en Windows, se suele aceptar su uso en nombres de objetos para imitar una estructura de directorio. Herramientas como\
y Google Cloud CLI convierten el carácter a `` de forma automática cuando se descarga en un entorno de Windows. - Información sensible o de identificación personal (PII): los nombres de los objetos son más visibles que los datos de los objetos. Por ejemplo, los nombres de los objetos aparecen en las URLs de los objetos y cuando se enumeran objetos en un bucket.
No se puede cambiar el nombre de los objetos existentes de forma directa, pero puedes cambiar el nombre de un objeto de forma indirecta si copias y borras el objeto original.
Espacio de nombres del objeto
Los nombres de objetos se encuentran en un espacio de nombres plano dentro de un bucket. Esto significa lo siguiente:
- Depósitos diferentes pueden tener objetos con el mismo nombre.
- Los objetos no se encuentran dentro de los subdirectorios de un bucket.
Para mayor comodidad, hay varias formas en que los objetos se tratan como si se almacenaran en una jerarquía de carpetas:
Las carpetas administradas son un recurso de Cloud Storage que proporciona acceso expandido a grupos de objetos con un prefijo de nombre compartido.
Las herramientas como la consola de Google Cloud y Google Cloud CLI usan el carácter de barra (
/
) como delimitador para simular carpetas en un bucket.
Por ejemplo, si creas un objeto llamado folder1/file.txt
en el bucket your-bucket
, la ruta al objeto es your-bucket/folder1/file.txt
y Cloud Storage no tiene una carpeta llamada folder1
almacenada. dentro de él. Desde la perspectiva de Cloud Storage, la string folder1/
es parte del nombre del objeto.
Sin embargo, debido a que el objeto tiene un /
en su nombre, algunas herramientas implementan la apariencia de las carpetas. Por ejemplo, cuando usas la consola de Google Cloud, debes navegar al objeto folder1/file1.txt
como si fuera un objeto llamado file1.txt
en una carpeta llamada folder1
. Del mismo modo, puedes crear una carpeta administrada llamada folder1
y, luego, file1.txt
estará sujeto a la política de acceso que establece esta carpeta administrada.
Ten en cuenta que, debido a que los objetos residen en un espacio de nombres fijo, las estructuras anidadas similares a un directorio no tienen el rendimiento de un sistema de archivos nativo cuando se enumeran subdirectorios profundamente anidados.
Consulta las Prácticas recomendadas sobre el porcentaje de solicitudes para obtener recomendaciones sobre cómo optimizar el rendimiento si se evitan los nombres secuenciales durante las cargas a gran escala. Es probable que los objetos subidos con nombres secuenciales alcancen el mismo servidor de backend y limiten el rendimiento.
Carpetas simuladas
Para ayudarte a organizar objetos en tus buckets de Cloud Storage, algunas herramientas simulan carpetas y las API de JSON y XML tienen capacidades que te permiten diseñar tu propio esquema de nombres para simular carpetas. Haz clic en las siguientes pestañas para ver cómo las diferentes herramientas manejan las carpetas simuladas.
Console
La consola de Google Cloud crea una representación visual de las carpetas que son similares a un navegador de archivos local.
En la consola de Google Cloud, puedes crear una carpeta vacía en un bucket o subir una carpeta existente.
Cuando subes una carpeta existente, el nombre de la carpeta se vuelve parte de la ruta de acceso para todos los objetos contenidos en la carpeta. Todas las subcarpetas y los objetos que contienen también se incluyen en la carga.
Para crear una carpeta, haz lo siguiente:
- En la consola de Google Cloud, ve a la página Buckets de Cloud Storage.
Navega al bucket.
Haz clic en Crear carpeta para crear una carpeta nueva vacía o en Subir carpeta para subir una existente.
Línea de comandos
Las CLI de Cloud Storage simulan la experiencia típica del directorio de línea de comandos con una variedad de reglas.
Para lograr la ilusión de un árbol jerárquico de archivos, a través de gcloud CLI se aplican las siguientes reglas para determinar si la URL de destino en un comando debe tratarse como un nombre de objeto o una carpeta:
Si la URL de destino termina con un carácter
/
, los comandos de gcloud CLI tratan la URL de destino como una carpeta. Por ejemplo, observa el siguiente comando, en el queyour-file
es el nombre de un archivo:gcloud storage cp your-file gs://your-bucket/abc/
Como resultado de este comando, se crea un objeto llamado
abc/your-file
en el bucketyour-bucket
mediante Cloud StorageSi copias varios archivos fuente a una URL de destino, ya sea con la marca
--recursive
o un comodín, como**
, gcloud CLI trata la URL de destino como una carpeta. Por ejemplo, observa el siguiente comando, en el quetop-dir
es una carpeta que contiene archivos comofile1
yfile2
:gcloud storage cp top-dir gs://your-bucket/abc --recursive
Como resultado de este comando, se crean los objetos
abc/top-dir/file1
yabc/top-dir/file2
en el bucketyour-bucket
mediante Cloud StorageSi no se aplica ninguna de estas reglas, gcloud CLI verifica los objetos del bucket para determinar si la URL de destino es un nombre de objeto o una carpeta. Por ejemplo, observa el siguiente comando, en el que
your-file
es el nombre de un archivo:gcloud storage cp your-file gs://your-bucket/abc
A través de gcloud CLI se hace una solicitud de enumeración de objetos para
your-bucket
, con el delimitador/
y el prefijo=abc
, para determinar si hay objetos enyour-bucket
cuya ruta de acceso empieza conabc/
. Si es así, gcloud CLI trata aabc/
como un nombre de carpeta y el comando crea el objetoabc/your-file
en el bucketyour-bucket
. De lo contrario, se crea el objetoabc
enyour-bucket
mediante gcloud CLI.
Este enfoque basado en reglas es diferente a la forma en que funcionan muchas herramientas, que crean objetos de 0 bytes para marcar la existencia de carpetas. La gcloud CLI comprende varias convenciones que usan estas herramientas, como la convención de agregar _$folder$
al final del nombre del objeto de 0 bytes, pero no es obligatorio. objetos de marcador para implementar comportamientos de nombres coherentes con los comandos UNIX.
Además de estas reglas, la forma en que gcloud CLI trata los archivos fuente depende de si usas o no la marca --recursive
. Si usas la marca, gcloud CLI construye nombres de objetos para reflejar la estructura del directorio de código fuente, a partir del punto de procesamiento recursivo. Por ejemplo, observa el siguiente comando, en el que home/top-dir
es una carpeta que contiene archivos como file1
y sub-dir/file2
:
gcloud storage cp home/top-dir gs://your-bucket --recursive
Como resultado de este comando, se crean los objetos top-dir/file1
y top-dir/sub-dir/file2
en el bucket your-bucket
mediante Cloud Storage
Por el contrario, copiar sin la marca --recursive
, incluso si se copian varios archivos debido a la presencia de un comodín, como **
, genera objetos con el nombre del componente de ruta de acceso final de los archivos de origen. Por ejemplo, si nuevamente suponemos que home/top-dir
es una carpeta que contiene archivos como file1
y sub-dir/file2
, el comando es el siguiente:
gcloud storage cp home/top-dir/** gs://your-bucket
Crea un objeto llamado file1
y un objeto llamado file2
en el bucket your-bucket
.
Reintentos y nombres
Cuando gcloud CLI vuelve a intentar una solicitud interrumpida, puede ocurrir un problema en el que el primer intento copia un subconjunto de archivos y los intentos posteriores encuentran una carpeta de destino existente, lo que hace que los objetos se nombren de forma incorrecta.
Por ejemplo, considera el siguiente comando, en el que hay subcarpetas en your-dir/
como dir1
y dir2
y ambas subcarpetas contienen el archivo abc
:
gcloud storage cp ./your-dir gs://your-bucket/new --recursive
Si la ruta de acceso gs://your-bucket/new
aún no existe, se crean los siguientes objetos en el primer intento exitoso mediante gcloud CLI:
new/dir1/abc new/dir2/abc
Sin embargo, en el siguiente intento exitoso del mismo comando, se crean los siguientes objetos con gcloud CLI:
new/your-dir/dir1/abc new/your-dir/dir2/abc
Para que gcloud CLI funcione de manera coherente en cada intento, intenta lo siguiente:
Agrega una barra al final de la URL de destino para que gcloud CLI siempre la trate como una carpeta.
Usar
gcloud storage rsync
. Dado quersync
no usa las reglas de nombres de carpetas definidas por cp de Unix, funciona con coherencia si la subcarpeta de destino existe o no.
Notas adicionales
No puedes crear un objeto de cero bytes para imitar una carpeta vacía mediante gcloud CLI
Cuando se descarga en un sistema de archivos local, gcloud CLI omite los objetos cuyos nombres terminan con un carácter
/
, ya que no se permite crear un archivo que termine en/
no está permitido en Linux ni macOS.Si usas secuencias de comandos para compilar rutas de acceso a archivos a través de la combinación de rutas secundarias, ten en cuenta que, debido a que
/
es solo un carácter que está en nombre del objeto, las CLI interpretan quegs://your-bucket/folder/
es un objeto diferente degs://your-bucket//folder
.
API de REST
API de JSON
Las carpetas no existen en la API de JSON. Puedes limitar los objetos que listas y simular carpetas mediante los parámetros de búsqueda prefix
y delimiter
.
Por ejemplo, para enumerar todos los objetos en el bucket my-bucket
con el prefijo folder/subfolder/
, realiza una solicitud de listado de objetos con esta URL:
"https://storage.googleapis.com/storage/v1/b/my-bucket/o?prefix=folder/subfolder/"
API de XML
Las carpetas no existen en la API de XML. Puedes limitar los objetos que listas y simular carpetas mediante prefix
y delimiter
parámetros de búsqueda
Por ejemplo, para enumerar todos los objetos en el bucket my-bucket
con el prefijo folder/subfolder/
, realiza una solicitud de listado de objetos con esta URL:
"https://storage.googleapis.com/my-bucket?prefix=folder/subfolder/"
Quita carpetas simuladas
Debido a que las carpetas simuladas no existen, por lo general, puedes quitar carpetas simuladas si cambias el nombre de los objetos para que la carpeta simulada ya no forme parte del nombre del objeto. Por ejemplo, si tienes un objeto llamado folder1/file
, puedes quitar la carpeta simulada folder1/
si cambias el nombre del objeto a solo file
.
Sin embargo, si usaste una herramienta que crea objetos de cero bytes como marcadores de posición de carpetas, como la consola de Google Cloud, debes borrar el objeto de cero bytes para quitar la carpeta.
Inmutabilidad de objetos
Los objetos son inmutables, lo que significa que un objeto subido no puede cambiar durante su ciclo de vida de almacenamiento. El ciclo de vida de almacenamiento de un objeto es el tiempo entre la creación correcta de un objeto, como cuando se sube un objeto, y la eliminación correcta de este. En la práctica, esto significa que no puedes hacer cambios incrementales en los objetos, como agregar o truncar operaciones. Sin embargo, es posible reemplazar objetos almacenados en Cloud Storage, lo que ocurre de manera atómica. La versión anterior del objeto se entrega a los lectores hasta que la carga nueva se complete y después de esto, se entrega a los lectores la versión nueva del objeto. Una operación de reemplazo única marca el final del ciclo de vida de un objeto inmutable y el inicio del ciclo de vida de un objeto inmutable nuevo.
El número de generación de un objeto cambia cada vez que reemplazas los datos del objeto. Por lo tanto, el número de generación identifica de forma única un objeto inmutable.
Ten en cuenta que existe un límite de una vez por segundo para reemplazar de forma rápida el mismo objeto. Si reemplazas el mismo objeto con mayor frecuencia se pueden generar errores 429 Too Many Requests
. Debes diseñar tu aplicación para que suba datos para un objeto en particular no más de una vez por segundo y para que controle errores 429 Too Many Requests
ocasionales mediante una estrategia de reintento de retirada exponencial.
¿Qué sigue?
- Sube y descarga objetos
- Mueve un objeto existente.
- Obtén información sobre los depósitos, que son contenedores para objetos.
- Obtén más información sobre las carpetas administradas.