- Cuenta de Oracle Cloud Infrastructure(test gratuito https://www.oracle.com/cloud/free/)
- Cuenta de Github (https://github.com/signup?ref_cta=Sign+up&ref_loc=header+logged+out&ref_page=%2F&source=header-home)
- Poseer servidor linux con las siguientes dependencias instaladas:
- git
- python36-oci-cli
- fn
Todo el código está en https://github.com/whiplash0104/Workshop-Function
- Crear Cuenta en git, usuar correo empresarial o personal (github.com)
01.Creacion.Cuenta.Git.mov
- Creación de compartment con el nombre FunctionTest
02.Creacion.Compartment.mov
- Creación de VCN con el nombre VCNFunction dentro del compartment FunctionTest recién creado
03.VCN.mov
- Creación de grupo dinámico con el nombre FunctionGroup
Menu principal > Identity & Security > Dynamic Groups > Create Dynamic Group
Name: FunctionGroup
Description: Grupo funciones
Rule 1: ALL {resource.type = 'fnfunc'}
3.Grupo.Dinamico.mov
- Creación de políticas con el nombre FunctionPolicies, estas deben ir en el compartment root
Menu principal > Identity & Security > Policies
Name: FunctionPolicies
Description: FunctionGroup Policies
Policy Builder: Seleciconar Show manual editor y pegar las siguientes reglas
Allow dynamic-group FunctionGroup to manage functions-family in tenancy
Allow dynamic-group FunctionGroup to use virtual-network-family in tenancy
Allow dynamic-group FunctionGroup to manage repos in tenancy
Allow dynamic-group FunctionGroup to inspect object-family in tenancy
Allow dynamic-group FunctionGroup to manage objects in tenancy
Allow dynamic-group FunctionGroup to manage autonomous-database-family in tenancy
Allow dynamic-group FunctionGroup to use ons-topics in tenancy
04.policies.mov
- Creación de tópico con el nombre FunctionTopic dentro del compartment FunctionTest. Una vez creado el tópico se debe crear una suscripción, definir en esta el correo de cada uno.
Menú Principal > Developer Services > Notifications > Create Topic
Name: FunctionTopic
Dentro del tópico hacer click en Create Subscription
Protocol: Email
Email: felipe.basso@oracle.com
Importante señalar que se debe aceptar la suscripción, esta llegará al correo
05.Creacion.de.topico.mov
- Copiar el OCID del topico y almacenarlo en un archivo de texto, se utilizará más adelante
06.OCID.mov
- Creación Autonomous Database dentro del compartment FunctionTest con los siguientes parámetros:
Display name: FunctionADB
Database name: functionadb
Selecionar la opción "Always Free"
Password: ClavE.012356, La ',' va incluida en la password
07.ADB.mov
- Una vez creada la base de datos guardar OICD, Password y DBSVC
Estos deberían ser del tipo:
DBSVC: functionadb_high
DB_OCID: ocid1.autonomousdatabase.oc1.iad.XXXXXXXXXXXXXXXXXXXXXXXXXXXX
DBUSER: ADMIN
DBPWD: ClavE.012356,
08.ADB.datos.mov
- Cración de token para usuario, llamarlo FunctionToken y guardarlo en un archivo de texto, este no se volverá a mostrar
User Setins > Auth Tokens > Generate Token
Name: FunctionToken
09.Token.mov
- Creación de la aplicación (llamarla apptest) dentro del compartment FunctionTest usar la VCN VCNFunction y la subred pública
Menú Principal > Developer Services > Function > Applications > Create Application
Name: apptest
VCN in Function: VCNFunction
subnets in Function: Public Subnet-VCNFunction
10.App.mov
- Creación de registry con el nombre apptest dentro del compartment FunctionTest
Menú Principal > Developer Services > Containers & Artifacts > Container Registry > Create Repository
Compartment: FunctionTest
Repository name: apptest
Access: Private
15.Repository.mov
- Configurar fn cli, según lo indicado al momento de la creación de la función
selecionar "Cloud Shell setup"
Click en Launch Cloud Shell y esperar unos segundos.
Si es primera vez que se abre la consola esta nos preguntará si deseamos ver la docuemntación, presionar la letra "N" y dar "Enter"
Copiar los comandos que nos entrega la página (estos serán distintos en cada caso)
Configurar la región dentro del context de fn (XX-XXXXXX-X Es la región a la que pertenece el tenant)
fn list context
fn use context XX-XXXXXX-X
Configurar compartment dentro del context de fn (ocid1.compartment.oc1.XXX Es el compartmente)
fn update context oracle.compartment-id ocid1.compartment.oc1.XXX
Configurar el registry (NAMESPACE Es el namespace donde fue creado el registry)
fn update context registry iad.ocir.io/NAMESPACE_PERSONAL/apptest
Login dentro del repositorio
docker login -u 'NAMESPACE/USUARIO' -p 'TOKEN' REGISTRY_URL
Donde:
NAMESPACE: Es el namespace donde fue creado el registry
USUARIO: Es el usuario de OCI
TOKEN: Es el token que se creó en el paso 9
REGISTRY_URL: Viene en base a la región https://docs.oracle.com/en-us/iaas/Content/General/Concepts/regions.htm ej: gru.ocir.io
Listar aplicaciones existentes
fn list apps
13.Configuracion.fn.mov
- Crear repositorio git workshop-function y clonar repositorio original https://github.com/whiplash0104/Workshop-Function.git
Login dentro de github
Click en perfil de usuario -> Your repositories -> New
Repository Name: workshop-function
Crear.y.Clonar.Repositorio.mov
- Modificar los siguientes parámetros del archivo func.yaml dentro del directorio Workshop-Function:
12.2.Modificacion.func.yaml.mov
- Clonar repositorio git modificado en paso 14 (este link es personal, no se debe clonar el del laboratorio)
git clone https://github.com/XXXXXXXXX/workshop-function.git
- Deploy de aplicación, ejecutar comando desde el directorio Workshop-Function
cd workshop-function
fn -v deploy --app apptest
Esta tarea tarde aproximadamente 4 minutos, denemos esperar el mensaje
...
f46abc7ec396: Layer already exists
0.0.125: digest: sha256:6f848be04f6b7db8064c437f8907ebe4e9e446a0f8ebef5437b61dc41a2329e5 size: 1782
Updating function apptest using image iad.ocir.io/id5xe8my93ee/apptest:0.0.125...
Successfully created function: apptest with iad.ocir.io/id5xe8my93ee/apptest:0.0.125
Deploy.fn.mov
Desde Developer Services > Functions > Applications > apptest (dentro del compartment FunctionTest) se podrá ver el detalle de la función. Habilitar el loggin desde la opción Logs
20.2.Loggin.mov
- Creación de Bucket con el nombre functionBucket dentro del compartment FunctionTest
Se debe habilitar la opción emisión de eventos (Emit Object Events)
21.OS.mov
- Configuración de regla para Event Service dentro del compartment FunctionTest En este punto se crea la regla para que cada vez que se cargue un archivo dentro del bucket se gatillará la ejecución de la aplicación
Display Name: FunctionEvent
Condition: Event Type
Service Name: Objetc Storage
Event Type: Object - Create
- Another Condition
Condition: attribute
Attribute Name: bucketName
Attribute Values: functionBucket
Action
Action Type: Functions
Function Compartment: FunctionTest
Function Application: apptest
Function: apptest
Rule Logic
MATCH event WHERE (
eventType EQUALS ANY OF (
com.oraclecloud.objectstorage.createobject
)
AND (
bucketName MATCHES ANY OF (
functionBucket
)
)
)
22.Evento.mov
- Para probar la función Descargar archivo cvs: https://objectstorage.us-ashburn-1.oraclecloud.com/p/MSmBkReA-TET1pfUpsvX5ZsC6uTFZpU140p7t7uitURUJ9hwOKOI0z0O5mn7stXJ/n/idikzonisftg/b/DataFile/o/Employees.csv
Cargar el archivo csv dentro del bucket creado Esperar la ejecución de la fn (la primera carga tarda un tiempo aproximado de 40 segundos, posterior a ello la ejecución tarda 3 segundos) Ir a la base de datos, en Database Action ir al motor SQL y ejecutar la siguiente consulta
SELECT * FROM LOAD_TABLE;
23.Test.de.fn.mov
- Si la carga se ejecutó de forma correcta además de ver los datos cargados en la DB debería llegar un correo similar al siguiente: