Tengo una función en la nube que elimina el archivo de Cloud Storage
Función:
const { Storage } = require("@google-cloud/storage"); const storage = new Storage(); let handler = async (file, context) => { console.log(` Event: ${context.eventId}`); console.log(` Event Type: ${context.eventType}`); console.log(` Bucket: ${file.bucket}`); console.log(` File: ${file.name}`); let bucket = storage.bucket(file.bucket); let bucketFile = bucket.file(file.name); bucketFile.delete(); };Quiero activar esta función después de que se descargue cualquier archivo en el depósito.
Revisé los disparadores de Cloud Storage,
google.storage.object.finalize (default) google.storage.object.delete google.storage.object.archive google.storage.object.metadataUpdatepero no funcionan como yo quiero. ¿Alguien tiene alguna sugerencia?
Editar:
Si necesito explicar un poco más lo que quiero hacer; Ya sea que estén registrados en nuestro sistema o no, los usuarios reciben enlaces con algunos de sus datos de forma abierta al público. Dado que estos enlaces pueden contener datos confidenciales, me gustaría obtener un derecho de descarga por única vez. Después de una sola descarga, los datos deben eliminarse de forma permanente.
Puede capturar el evento get si activa los registros de auditoría en Cloud Storage (tenga cuidado, los registros de auditoría en Cloud Storage pueden generar una gran cantidad de registros y pueden costar).
Cuando los registros de auditoría están activados, puede filtrar por ese nombre de método:
methodName: "storage.objects.get" Por supuesto, puede agregar otros filtros en Cloud Logging, como el nombre del recurso para filtrar en el depósito y/o el prefijo/sufijo del archivo (use =~ para la expresión regular)
Cuando su filtro esté bien y obtenga solo las entradas que espera, cree un sumidero para PubSub, luego una suscripción Push PubSub para invocar su pieza de código (en Cloud Functions o en Cloud Run).
Recibirá la entrada JSON de Cloud Logging, obtenga el nombre del recurso en el JSON para saber qué archivo se descargó y luego elimínelo.
Otra solución es usar el ciclo de vida del objeto, puede eliminar automáticamente un objeto después de su creación durante 1 día (los días son la unidad mínima)
Puede encontrar la configuración del ciclo de vida en la página de detalles del depósito:
Y luego debe agregar una regla como esa para eliminar objetos después de 1 día: