En esta página, se muestra cómo activar un bucket de Cloud Storage como un volumen de almacenamiento mediante el uso de activaciones de volúmenes de Cloud Run.
Activar el bucket como un volumen en Cloud Run presenta el contenido del bucket como archivos en el sistema de archivos del contenedor. Después de activar el bucket como un volumen, accedes al bucket como si fuera un directorio en tu sistema de archivos local, mediante las operaciones y bibliotecas del sistema de archivos de tu lenguaje de programación en lugar de usar las bibliotecas cliente de la API de Google.
Requisitos de la memoria
Las activaciones de volúmenes de Cloud Storage usan la memoria del contenedor de Cloud Run para las siguientes actividades:Para todo el almacenamiento en caché de Cloud Storage FUSE, Cloud Run usa de forma predeterminada la configuración de caché de estadísticas con un tiempo de actividad (TTL) de 60 segundos. El tamaño máximo predeterminado de la caché de estadísticas es de 32 MB, el tamaño máximo predeterminado del tipo caché es 4 MB.
Cuando se realiza la lectura, Cloud Storage FUSE también consume memoria aparte de las cachés de estadísticas y tipos, por ejemplo, un array de 1 MiB por cada archivo que se lee y por goroutines.
Cuando se escribe en Cloud Storage, todo el archivo se almacena en etapa intermedia en la memoria de Cloud Run antes de que el archivo se escriba en Cloud Storage.
Limitaciones
Cloud Run usa Cloud Storage FUSE para esta activación de volumen. Por lo tanto, debes tener en cuenta la siguiente información cuando actives un bucket de Cloud Storage como un volumen:
- Cloud Storage FUSE no proporciona control de simultaneidad para varias operaciones de escritura (bloqueo de archivos) en el mismo archivo. Cuando varias operaciones de escritura intentan reemplazar un archivo, la última escritura gana y todas las escrituras anteriores se pierden.
- Cloud Storage FUSE no es un sistema de archivos compatible con POSIX. Si deseas obtener más información, consulta la documentación de Cloud Storage FUSE.
Antes de comenzar
Necesitas un bucket de Cloud Storage para activarlo como volumen.
Para obtener un mejor rendimiento de lectura y escritura, te recomendamos conectar el servicio de Cloud Run a una red de VPC a través de una VPC directa y enrutar todo el tráfico saliente a través de tu red de VPC. Consulta las instrucciones del ejemplo 2: Tráfico interno a una API de Google en la página de prácticas recomendadas de Herramientas de redes.Roles obligatorios
Para obtener los permisos que necesitas para configurar activaciones de volúmenes de Cloud Storage, pídele a tu administrador que te otorgue los siguientes roles de IAM:
-
Desarrollador de Cloud Run (
roles/run.developer
) en el servicio de Cloud Run -
Usuario de la cuenta de servicio (
roles/iam.serviceAccountUser
) en la identidad del servicio
A fin de obtener los permisos que tu identidad de servicio necesita para acceder al archivo y al bucket de Cloud Storage, pídele a tu administrador que otorgue a la identidad del servicio el siguiente rol de IAM:
- Administrador de almacenamiento (
roles/storage.admin
)
Si deseas obtener más detalles sobre los roles y los permisos de Cloud Storage, consulta IAM para Cloud Storage.
Para obtener una lista de los roles y los permisos de IAM asociados con Cloud Run, consulta los roles de IAM de Cloud Run y los permisos de IAM de Cloud Run. Si tu servicio de Cloud Run interactúa con las APIs de Google Cloud, como las bibliotecas cliente de Cloud, consulta la guía de configuración de identidades del servicio. Para obtener más información acerca de cómo otorgar roles, consulta Permisos de implementación y Administra el acceso.
Rutas no permitidas
Cloud Run no te permite activar un volumen en /dev
,
/proc
y /sys
, ni en sus subdirectorios.
Activa un volumen de Cloud Storage
Puedes activar varios buckets en diferentes rutas de activación. También puedes activar un volumen en más de un contenedor con las mismas (o diferentes) rutas de activación en diferentes contenedores.
Si usas varios contenedores, primero especifica los volúmenes y, luego, especifica las activaciones de volúmenes de cada contenedor.
Las activaciones de volúmenes requieren el entorno de ejecución de segunda generación. Cloud Run selecciona automáticamente el entorno de ejecución de segunda generación para tu servicio si no se configura ningún entorno de ejecución de forma explícita.
Console
En la consola de Google Cloud ve a Cloud Run:
Haz clic en Crear servicio si quieres configurar un servicio nuevo en el que realizarás la implementación. Si quieres configurar un servicio existente, haz clic en el servicio y, luego, en implementar y editar la nueva revisión.
Si configuras un servicio nuevo, completa la página de configuración del servicio inicial como desees y haz clic en Contenedor, herramientas de redes, seguridad para expandir la página de configuración del servicio.
Haz clic en la pestaña Volúmenes.
- Haz clic en Agregar volumen.
- En el menú desplegable Tipo de volumen, selecciona el bucket de Cloud Storage como el tipo de volumen.
- En el campo Nombre del volumen, ingresa el nombre que deseas usar para el volumen.
- Explora y selecciona el bucket de Cloud Storage que se usará para el volumen o, de forma opcional, crea un bucket nuevo.
- Si deseas que el bucket sea de solo lectura, selecciona la casilla de verificación de solo lectura.
- Haz clic en Listo.
- Haz clic en la pestaña Activaciones de volúmenes.
- Haz clic en Volumen de activación.
- Selecciona el volumen de almacenamiento en el menú.
- Especifica la ruta en la que deseas activar el volumen.
- Haga clic en Listo.
Haz clic en Crear o Implementar.
gcloud
Nota: Mostramos el comando gcloud beta run services update
, pero también puedes usar el comando gcloud beta run deploy
con los mismos parámetros que se muestran.
Para agregar un volumen y activarlo, sigue estos pasos:
gcloud beta run services update SERVICE \ --add-volume name=VOLUME_NAME,type=cloud-storage,bucket=BUCKET_NAME \ --add-volume-mount volume=VOLUME_NAME,mount-path=MOUNT_PATH
Reemplaza lo siguiente:
- SERVICE por el nombre de tu servicio
- MOUNT_PATH por la ruta de acceso relativa en la que activarás el volumen, por ejemplo,
/mnt/my-volume
. - VOLUME_NAME por el nombre que quieras para el volumen. El valor VOLUME_NAME se usa para asignar el volumen a la activación de volúmenes.
- BUCKET_NAME por el nombre del bucket de Cloud Storage.
Para activar el volumen como un volumen de solo lectura, sigue estos pasos:
--add-volume=name=VOLUME_NAME,type=cloud-storage,bucket=BUCKET_NAME,readonly=true
Si usas varios contenedores, primero especifica los volúmenes y, luego, especifica las activaciones de volumen de cada contenedor:
gcloud beta run services update SERVICE \ --add-volume name=VOLUME_NAME,type=cloud-storage,bucket=BUCKET_NAME \ --container CONTAINER_1 \ --add-volume-mount volume=VOLUME_NAME,mount-path=MOUNT_PATH \ --container CONTAINER_2 \ --add-volume-mount volume=VOLUME_NAME,mount-path=MOUNT_PATH2
YAML
Si creas un servicio nuevo, omite este paso. Si actualizas un servicio existente, descarga su configuración de YAML:
gcloud run services describe SERVICE --format export > service.yaml
Realiza actualizaciones según sea necesario.
apiVersion: serving.knative.dev/v1 kind: Service metadata: name: SERVICE annotations: run.googleapis.com/launch-stage: BETA spec: template: metadata: annotations: run.googleapis.com/execution-environment: gen2 spec: containers: - image: IMAGE_URL volumeMounts: - name: VOLUME_NAME mountPath: MOUNT_PATH volumes: - name: VOLUME_NAME csi: driver: gcsfuse.run.googleapis.com readOnly: IS_READ_ONLY volumeAttributes: bucketName: BUCKET_NAME
Reemplazar
- IMAGE_URL por una referencia a la imagen del contenedor, como
us-docker.pkg.dev/cloudrun/container/hello:latest
Si usas Artifact Registry, el repositorio REPO_NAME debe estar creado. La URL tiene el formatoLOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG
. - MOUNT_PATH por la ruta de acceso relativa en la que activarás el volumen, por ejemplo,
/mnt/my-volume
. - VOLUME_NAME por el nombre que quieras para el volumen. El valor VOLUME_NAME se usa para asignar el volumen a la activación de volúmenes.
- IS_READ_ONLY por
True
para que el volumen sea de solo lectura oFalse
para permitir escrituras. - BUCKET_NAME con el nombre del bucket de Cloud Storage.
- IMAGE_URL por una referencia a la imagen del contenedor, como
Reemplaza el servicio por la configuración nueva mediante el siguiente comando:
gcloud run services replace service.yaml
Leer y escribir en un volumen
Si usas la función de activación de volúmenes de Cloud Run, accedes a un volumen activado con las mismas bibliotecas en tu lenguaje de programación que usas para leer y escribir archivos en tu sistema de archivos local.
Esto es muy útil si usas un contenedor existente que espera que los datos se almacenen en el sistema de archivos local y usa operaciones regulares del sistema de archivos para acceder a él.
En los siguientes fragmentos, se supone una activación de volumen con una mountPath
configurada como /mnt/my-volume
.
Node.js
Usa el módulo del sistema de archivos para crear un archivo nuevo o agregarlo a uno existente
en el volumen, /mnt/my-volume
:
var fs = require('fs'); fs.appendFileSync('/mnt/my-volume/sample-logfile.txt', 'Hello logs!', { flag: 'a+' });
Python
Escribe en un archivo mantenido en el volumen, /mnt/my-volume
:
f = open("/mnt/my-volume/sample-logfile.txt", "a")
Go
Usa el paquete os
para crear un archivo nuevo mantenido en el volumen, /mnt/my-volume
f, err := os.Create("/mnt/my-volume/sample-logfile.txt")
Java
Usa la clase Java.io.File
para crear un archivo de registro en el volumen, /mnt/my-volume
:
import java.io.File; File f = new File("/mnt/my-volume/sample-logfile.txt");
Visualiza la configuración de activaciones de volúmenes
Para ver la configuración actual de las activaciones de volúmenes de tu servicio de Cloud Run, sigue estos pasos:
Console
En la consola de Google Cloud ve a Cloud Run:
Haz clic en el servicio que te interesa para abrir la página Detalles del servicio.
Haz clic en la pestaña Revisiones.
En el panel de detalles a la derecha, la configuración de las activaciones de volúmenes se muestra en la pestaña Volúmenes.
gcloud
Usa el siguiente comando:
gcloud run services describe SERVICE
Ubica la configuración de activaciones de volúmenes en la configuración que se muestra.