Nota:

Utilizar Oracle Functions para cargar archivos en la base de datos autónoma

Introducción

En este tutorial, creará cubos de almacenamiento de objetos, Oracle Function, Oracle Autonomous Data Warehouse y disparará la función cada vez que se cargue un archivo en Object Storage. La función tomará el archivo y lo escribirá en la base de datos.

Objetivos

Requisitos previos para funciones

Crear compartimento

Ignore este paso si utiliza un arrendamiento proporcionado por Oracle de forma gratuita.

Si desea utilizar un compartimento existente, vaya al siguiente paso. De lo contrario, haga clic en Compartimentos y, a continuación, en Crear compartimento para crear un compartimento nuevo.

Crear VCN y subredes

Si aún no existe una VCN adecuada en la que crear recursos de red, conéctese a la consola como administrador de arrendamiento y en Infraestructura básica, vaya a Red y, a continuación:

  1. Haga clic en Redes virtuales en la nube y seleccione un compartimento en el paso anterior.
  2. Haga clic en Iniciar asistente de VCN, VCN con conexión a Internet y, a continuación, en Iniciar asistente de VCN.
  3. Introduzca un nombre para la nueva VCN (por ejemplo: fn-vcn), haga clic en Siguiente y, a continuación, haga clic en Crear para crear la VCN junto con los recursos de red relacionados.

Crear política para Oracle Functions

Conéctese a la consola como administrador del arrendamiento y, en Gobierno y administración, vaya a Identidad y haga clic en Políticas y, a continuación, realice lo siguiente:

  1. Seleccione el compartimento raíz del arrendamiento

  2. Haga clic en Crear política.

  3. Para Name, introduzca faas-policy.

  4. Para obtener una descripción, introduzca Policy for Functions.

  5. Haga clic en el enlace Personalizar (avanzado) y pegue las sentencias de política en el campo Creador de políticas:

    Allow group <group-name> to read metrics in tenancy
    Allow group <group-name> to read objectstorage-namespaces in tenancy
    Allow group <group-name> to use virtual-network-family in tenancy
    Allow group <group-name> to manage functions-family in tenancy
    Allow group <group-name> to use cloud-shell in tenancy
    
  6. Haga clic en Crear.

    Crear política

    Asegúrese de que el usuario forma parte del grupo al que se hace referencia en las sentencias de política anteriores. Para crear grupos y agregar usuarios a grupos, consulte Create a group.

Creación de una aplicación

En este paso, se debe crear una aplicación y configurar la CLI de Fn en Cloud Shell.

  1. En Solutions and Platform, seleccione Developer Services y haga clic en Functions.

  2. Seleccione el compartimento de desarrollo en la lista compartimento.

  3. Haga clic en Crear aplicación.

  4. Para Name, introduzca etl-app.

  5. Seleccione la VNC que ha creado anteriormente (e.g. fn-vcn).

  6. Seleccione la subred pública.

  7. Haga clic en Crear.

  8. Haga clic en la aplicación creada para abrir los detalles de la aplicación.

  9. Haga clic en el enlace Introducción y siga las secciones Inicio de la sesión de Cloud Shell y Configuración de la CLI Fn en Cloud Shell en Configuración de Cloud Shell.

    Crear una Aplicación

    Esto implica iniciar Cloud Shell, actualizar el contexto de Fn, generar un token de autenticación para el registro y conectarse a Oracle Cloud Infrastructure Registry.

Creación de un grupo dinámico

Para utilizar otros servicios de OCI, la función debe formar parte de un grupo dinámico. Para obtener información sobre la creación de grupos dinámicos, consulte la documentación.

Antes de crear un grupo dinámico, debe obtener el OCID del compartimento de desarrollo. Utilizará el OCID de compartimento en la regla de coincidencia de grupo dinámico.

  1. Abra el menú de navegación, seleccione Identidad y, a continuación, Compartimentos.
  2. Busque el compartimento de desarrollo en la lista, pase el cursor sobre la celda de la columna OCID y haga clic en Copiar para copiar el OCID del compartimento en el portapapeles.
  3. Almacene el OCID del compartimento ya que lo utilizará en breve.

Ahora está listo para crear un grupo dinámico.

  1. Para crear un grupo dinámico, abra el menú de navegación, seleccione Identidad y, a continuación, Grupos dinámicos.

  2. Haga clic en Crear grupo dinámico.

  3. Para Name, introduzca functions-dynamic-group.

  4. Para obtener una descripción, introduzca Group with all functions in a compartment.

  5. Para seleccionar las funciones que pertenecen al grupo dinámico, [escribir reglas de coincidencia] (https://docs.cloud.oracle.com/en-us/iaas/Content/Identity/Tasks/managingdynamicgroups.htm#Writing). Escriba la siguiente regla de coincidencia que incluya todas las funciones dentro de un compartimento en el que ha creado la aplicación:

    All {resource.type = 'fnfunc', resource.compartment.id = 'ocid1.compartment.oc1..example'}
    

    Nota: Asegúrese de sustituir el valor anterior por el OCID del compartimento almacenado anteriormente.

Crear cubo de almacenamiento de objetos

Necesita un cubo input-bucket en Object Storage. Utilizará input-bucket para distribuir los archivos CSV. La función procesará el archivo e importará en Oracle Autonomous Data Warehouse.

Vamos a crear input-bucket primero:

  1. Abra el menú de navegación, seleccione Object Storage y, a continuación, Object Storage.

  2. Seleccione el compartimento de desarrollo en la lista compartimento.

  3. Haga clic en Crear cubo.

  4. Asigne al cubo el nombre input-bucket.

  5. Seleccione el nivel de almacenamiento Standard.

  6. Active la casilla de control Emitir eventos de objeto.

  7. Haga clic en Crear cubo.

    Crear cubo de entrada

Creación de políticas de IAM

Cree una nueva política que permita al grupo dinámico (functions-dynamic-group) gestionar objetos en el cubo.

  1. Abra el menú de navegación, seleccione Identidad y, a continuación, seleccione Políticas.

  2. Haga clic en Crear política.

  3. Para Name, introduzca functions-buckets-policy.

  4. Para obtener una descripción, introduzca Policy that allows functions dynamic group to manage objects in the bucket.

  5. Haga clic en el enlace Personalizar (avanzado) y pegue las sentencias de política en el campo Creador de políticas:

    Allow dynamic-group functions-dynamic-group to manage objects in compartment [compartment-name] where target.bucket.name='input-bucket'
    

    Nota: sustituya compartment-name por el nombre del compartimento de desarrollo (el que ha creado la VCN y la aplicación de función).

  6. Haga clic en Crear.

    Crear funciones-cubos-política

Crear Autonomous Database

La función accede a la base de datos autónoma mediante SODA (Simple Oracle Document Access) para mayor simplicidad. Puede utilizar el otro tipo de acceso modificando la función.

  1. Abra el menú de navegación, seleccione Autonomous Data Warehouse.

  2. Haga clic en Crear base de datos autónoma.

  3. En la lista, seleccione el compartimento de desarrollo.

  4. Para el nombre mostrado y el nombre de la base de datos, introduzca funcdb.

  5. Para el tipo de carga de trabajo, seleccione Procesamiento de transacciones.

  6. Para el tipo de despliegue, seleccione Infraestructura compartida.

  7. Introduzca la contraseña de administrador.

  8. Haga clic en Crear base de datos autónoma.

    Crear Autonomous Database

Espere a que OCI aprovisione la base de datos autónoma y, a continuación, haga clic en el botón Consola de servicio.

  1. Haga clic en Desarrollo en la barra lateral.

  2. En RESTful Services y SODA, haga clic en Copiar URL.

  3. Desde el terminal (o Cloud Shell), cree la recopilación denominada regionsnumbers ejecutando el siguiente comando. Asegúrese de sustituir <ORDS_BASE_URL> por el valor que ha copiado en el paso anterior y <DB-PASSWORD> por la contraseña de administrador definida al crear la base de datos autónoma.

    export ORDS_BASE_URL=<ORDS_BASE_URL>
    curl -X PUT -u 'ADMIN:<DB-PASSWORD>' -H "Content-Type: application/json" $ORDS_BASE_URL/admin/soda/latest/regionsnumbers
    
  4. Para comprobar la creación de la recopilación, puede enumerar todas las recopilaciones. La salida debe ser similar a la siguiente:

    	bash
    $ curl -u 'ADMIN:<DB-password>' -H "Content-Type: application/json" $ORDS_BASE_URL/admin/soda/latest/
       
    {"items":[{"name":"regionsnumbers","properties":{"schemaName":"ADMIN","tableName":"REGIONSNUMBERS","keyColumn":{"name":"ID","sqlType":"VARCHAR2","maxLength":255,"assignmentMethod":"UUID"},"contentColumn":{"name":"JSON_DOCUMENT","sqlType":"BLOB","jsonFormat":"OSON"},"versionColumn":{"name":"VERSION","type":"String","method":"UUID"},"lastModifiedColumn":{"name":"LAST_MODIFIED"},"creationTimeColumn":{"name":"CREATED_ON"},"readOnly":false},"links":[{"rel":"canonical","href":"https://.../ords/admin/soda/latest/regionsnumbers"}]}],"hasMore":false}
    

Despliegue de la función

En este paso, clonará el repositorio de código fuente de funciones y utilizará el comando fn deploy para crear la imagen de Docker, transferir la imagen a OCIR y desplegar la función en Oracle Functions en la aplicación.

  1. Desde la interfaz de usuario de la consola, abra Cloud Shell.

  2. Clone el repositorio de código fuente de Functions:

    git clone https://github.com/oracle/oracle-functions-samples.git
    
  3. Vaya a la carpeta samples/oci-load-file-into-adw-python:

    cd oracle-functions-samples/samples/oci-load-file-into-adw-python
    
  4. Despliegue la función en etl-app:

    fn -v deploy --app etl-app
    

    Después de desplegar la función, debe definir los valores de configuración de la función para que la función sepa cómo conectarse a Autonomous Database.

  5. Con la CLI de Fn, defina los siguientes valores de configuración. Asegúrese de sustituir [ORDS_BASE_URL] y [DB_PASSWORD] por sus valores:

    fn config function etl-app oci-load-file-into-adw-python ords-base-url [ORDS_BASE_URL]
    fn config function etl-app oci-load-file-into-adw-python db-schema admin
    fn config function etl-app oci-load-file-into-adw-python db-user admin
    fn config function etl-app oci-load-file-into-adw-python dbpwd-cipher [DB-PASSWORD]
    fn config function etl-app oci-load-file-into-adw-python input-bucket input-bucket
    fn config function etl-app oci-load-file-into-adw-python processed-bucket processed-bucket
    

Creación de una Regla de Evento

En este paso, configurará un evento en la nube para disparar la función al borrar los archivos en input-bucket.

  1. En la interfaz de usuario de la consola, abra la navegación, seleccione Integración de aplicación y haga clic en Servicio de eventos.

  2. Seleccione el compartimento de desarrollo en la lista compartimento.

  3. Haga clic en Crear regla.

  4. Para el nombre mostrado, introduzca load_CSV_into_ADW.

  5. Para obtener una descripción, introduzca Load CSV file into ADW.

  6. Cree tres reglas. Puede hacer clic en Otra condición para agregar más condiciones:

    Condición Servicio/Nombre de atributo Valores de atributo/tipo de evento
    Tipo de Evento Object Storage Objeto - Crear
    Atributo compartmentName
    Atributo bucketName cubo de entrada
  7. En Acciones, seleccione Funciones:

    • Para el compartimento de funciones, seleccione el compartimento de desarrollo.
    • Para la aplicación de función, seleccione etl-app.
    • Para la función, seleccione oci-load-file-into-adw-python.
  8. Haga clic en Crear regla.

    Regla

Prueba de la función

Para probar la función, puede cargar un archivo .csv en input-bucket. Puede hacerlo desde la interfaz de usuario de la consola o Cloud Shell mediante la CLI de OCI.

  1. Abra Cloud Shell.

  2. Vaya a la carpeta de funciones:

    cd ~/oracle-functions-samples/samples/oci-load-file-into-adw-python
    
  3. Utilice la CLI de OCI para cargar file1.csv en input-bucket:

    $ oci os object put  --bucket-name input-bucket --file file1.csv
    Uploading object  [####################################]  100%
    {
      "etag": "607fd72d-a041-484c-9ee0-93b9f5488084",
      "last-modified": "Tue, 20 Oct 2020 18:03:50 GMT",
      "opc-content-md5": "O8mZv0X2gLagQGT5CutWsQ=="
    }
    

    Para ver los datos de la base de datos, siga estos pasos:

    1. Desde la consola de OCI, navegue a Autonomous Data Warehouse.

    2. Seleccione el compartimento de desarrollo en la lista compartimento.

    3. Seleccione Procesamiento de transacciones en la lista Tipo de carga de trabajo.

    4. Haga clic en el nombre de la base de datos (funcdb).

    5. Haga clic en Consola de servicio.

    6. Haga clic en el enlace Desarrollo en la barra lateral.

    7. Haga clic en SQL Developer Web.

    8. Utilice ADMIN y la contraseña de administrador para autenticarse.

    9. En la hoja de trabajo, introduzca la siguiente consulta:

      select UTL_RAW.CAST_TO_VARCHAR2( DBMS_LOB.SUBSTR( JSON_DOCUMENT, 4000, 1 )) AS json from regionsnumbers
      
    10. Haga clic en el botón verde de reproducción para ejecutar la consulta.

    11. Los datos del archivo CSV se encuentran en el separador Resultado de consulta.

Felicidades. Ha finalizado correctamente el tutorial.

Agradecimientos

Más recursos de aprendizaje

Explore otros laboratorios en docs.oracle.com/learn o acceda a más contenido de aprendizaje gratuito en el canal YouTube de Oracle Learning. Además, visite education.oracle.com/learning-explorer para convertirse en un explorador de Oracle Learning.

Para obtener documentación sobre el producto, visite Oracle Help Center.