Workshop Functions

Requerimientos:

¿Qué vamos a hacer?

Todo el código está en https://github.com/whiplash0104/Workshop-Function

Paso a Paso

  1. Crear Cuenta en git, usuar correo empresarial o personal (github.com)
01.Creacion.Cuenta.Git.mov
  1. Creación de compartment con el nombre FunctionTest
02.Creacion.Compartment.mov
  1. Creación de VCN con el nombre VCNFunction dentro del compartment FunctionTest recién creado
03.VCN.mov
  1. 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
  1. 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

image

04.policies.mov
  1. 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

image

Importante señalar que se debe aceptar la suscripción, esta llegará al correo

05.Creacion.de.topico.mov
  1. Copiar el OCID del topico y almacenarlo en un archivo de texto, se utilizará más adelante

image

06.OCID.mov
  1. 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
  1. 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
  1. 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

image

09.Token.mov
  1. 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

image

10.App.mov
  1. 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
  1. 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
  1. 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
  1. Modificar los siguientes parámetros del archivo func.yaml dentro del directorio Workshop-Function:

image

``` TOPIC_OCID: ocid1.onstopic.oc1.iad.XXXXXXXXXXXXXXXX ADB_OCID: ocid1.autonomousdatabase.oc1.iad.XXXXXXXX COMPANY: XXXXXXX DBPWD: XXXXXXXX DBSVC: XXXXXXX_high ``` Estos parámetros fueron almacenados durante los pasos 5, 7 y 8
12.2.Modificacion.func.yaml.mov
  1. 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
  1. 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
  1. 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
  1. 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

image

Rule Logic
MATCH event WHERE (
	eventType EQUALS ANY OF (
		com.oraclecloud.objectstorage.createobject
	)
	AND (
		bucketName MATCHES ANY OF (
			functionBucket
		)
	)
)
22.Evento.mov
  1. 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
  1. 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:

image