Available since Release 6.0.0
Introduction
This functionality allows a platform administrator user to segment an S3 bucket (either AWS S3 or MinIO) in virtual buckets assigned to different platform users.
In this way, without the need to have different physical buckets, I can use each virtual bucket for a specific topic, having separated its uses (datamart, staging,...).
¿Cómo usarlo?
Configuración necesaria
Para activar esta funcionalidad, es necesario completar unos pasos previos:
Creación de un nuevo servicio de metastorage apuntando a este sistema S3. Para esta parte se podrá usar la imagen del propio de plataforma para MinIO. Se generará un nuevo servicio que para AWS llamaremos presto-metastore-server-aws. La imagen, en su versión actual:
presto-metastore-server:5.0.0
Y apuntando a AWS con las variables de entorno, además de la URL del servicio
- MINIO_ROOT_USER → con el Access Key
- MINIO_ROOT_PASSWORD → secret key
- MINIO_SERVER_ENDPOINT → endpoint http/https del servicio S3
Con esto tendremos el servicio corriendo y apuntado a AWS
Configurar el sistema S3 en la configuración centralizada de plataforma. Dentro de la configuración Platform el path onesaitplatform/env/externals3
Aunque con la configuración inicial debería estar apuntando, también será necesario revisar que los paths:
onesaitplatform/env/database/prestodb-externals3-catalog → nombre catalog de presto (por defecto externals3)
onesaitplatform/env/database/prestodb-externals3-schema → nombre catalog de presto (por defecto default)
Crear un nuevo catalog de presto en plataforma (con el nombre indicado en el paso anterior en onesaitplatform/env/database/prestodb-externals3-catalog) apuntando a metastorage creado previamente (propiedad hive.metastorage.url) con las siguientes propiedades:
Creación del Bucket S3 en AWS
Una vez realizados los pasos anteriores y teniendo configurado correctamente las credenciales para AWS, lo primero será acceder a nuestra consola de AWS:
Accederemos a sección de Amazon S3
Y daremos a “crear bucket” para acceder al formulario de creación. Dentro del mismo rellenaremos los diferentes campos y crearemos nuestro bucket:
Al crear el bucket se nos notificará de la creación del mismo y aparecerá en el listado de buckets
Creación del Bucket Virtual asociado en plataforma
A partir de aquí, si vamos a plataforma con un usuario administrador y vamos a la opción Gestión de Buckets Virtuales/Virtual Buckets Management
Damos a crear y podremos ver el listado de buckets de AWS
Seleccionamos el nuevo bucket creado y rellenamos el resto de campos
Al darle a crear, podremos ver el resumen, así como el path completo generado
En este punto, será interesante asignar permisos a los usuarios desarrolladores para que puedan crear entidades sobre este nuevo bucket virtual, es decir que puedan crear entidades sobre la carpeta con el path “data/input” en el bucket de AWS onesaitdatamart
Creación de la entidad en el Bucket Virtual
Finalmente podremos crear una entidad en este bucket virtual con el usuario al que hemos dado permiso en el paso anterior.
Al logarnos en plataforma podemos ir al listado de bucket que de modo informativo se nos mostrará, aunque no tendremos opciones de edición o borrado ya que pertenecen al usuario administrador.
Para crear una nueva entidad sobre este Bucket Virtual, iremos a la creación de entidades historicas:
Dentro, nos aparecerá la opción de creación de entidades sobre buckets virtuales
Similar a la creación de entidades históricas iremos rellenando el formulario con las diferentes opciones de creación de la entidad
Abajo, podremos seleccionar el Bucket Virtual donde queremos que se cree la entidad. Si actualizamos la SQL (botón Update SQL) podremos ver la sentencia de creación completa apuntando al bucket real de AWS en EXTERNAL_LOCATION
Finalmente, dando a crear, tendremos nuestra nueva entidad
Si navegamos a la consola de AWS, podremos ver como se ha creado el path completo de la nueva entidad
Operaciones sobre la Entidad
Podremos insertar datos que aparecerán como nuevos ficheros en el S3 de AWS
Y consultarlos sin problema: