Computaci贸n sin servidor basada en OpenWhisk, parte 1


Esta es una serie de notas traducidas por Priti Desai . Dado que las notas en s铆 son bastante cortas, se recopilar谩n varias publicaciones a la vez en una publicaci贸n. Se considerar谩n los detalles del despliegue de aplicaciones para OpenWhisk con ejemplos, y al final del ciclo, se presentar谩 la arquitectura y el c贸digo de una aplicaci贸n que usa computaci贸n sin servidor basada en OpenWhisk.


Automatizar la implementaci贸n de aplicaciones para OpenWhisk


驴Ya instal贸 OpenWhisk y prob贸 la funci贸n simple hello.js en el trabajo?


cat hello.js function main() { return {payload: 'Hello World'}; } 

驴Desea automatizar el despliegue de esta funci贸n m谩s simple? Si es as铆, contin煤e leyendo esta nota. Mostrar茅 c贸mo usar openwhisk-wskdeploy para automatizar el despliegue de una funci贸n simple.


Componentes requeridos



Primer paso


Cree un archivo de manifiesto (manifest.yaml) con los siguientes contenidos:


 packages: helloworld: actions: helloworld: location: src/hello.js runtime: nodejs:6 outputs: payload: type: string description: a simple greeting message, Hello World. 

Segundo paso


Cree un archivo para el despliegue (despliegue.yaml):


 application: name: SampleHelloWorld namespace: _ packages: helloworld: actions: helloworld: 

De hecho, este archivo no es necesario para la entrega de helloworld , el manifiesto del primer paso es suficiente.


Paso tres


Crea una estructura de directorios. Se parece a esto:


 # ls -1R ~/SampleHelloWorldApp/ deployment.yaml manifest.yaml src/ ./src: hello.js 

Cuarto paso


Desplegando la funci贸n HelloWorld:


 ./wskdeploy -p ~/SampleHelloWorldApp/ ____ ___ _ _ _ _ _ /\ \ / _ \ _ __ ___ _ __ | | | | |__ (_)___| | __ /\ /__\ \ | | | | '_ \ / _ \ '_ \| | | | '_ \| / __| |/ / / \____ \ / | |_| | |_) | __/ | | | |/\| | | | | \__ \ < \ \ / \/ \___/| .__/ \___|_| |_|__/\__|_| |_|_|___/_|\_\ \___\/ |_| Packages: Name: helloworld * action: helloworld bindings: Triggers: Rules Do you really want to deploy this? (y/N): y Deploying pacakge helloworld ... Done! Deploying action helloworld/helloworld ... Done! Deployment completed successfully. 

Quinto paso


Verificar rendimiento:


 # wsk action invoke --blocking --result helloworld/helloworld { "payload": "Hello World" } 

Sexto paso


Al茅grate!


Despliegue: funci贸n, condici贸n y regla


Veamos las cosas adicionales que se necesitan en la automatizaci贸n:



Pasar par谩metros a una funci贸n


Modifica el c贸digo:


 function main(params) { return {payload: 'Hello, ' + params.name + ' from ' + params.place}; } 

Primer paso


Crea un archivo de manifiesto:


 packages: helloworld: actions: helloworld: location: src/hello.js runtime: nodejs:6 inputs: name: type: string description: name of a person place: type: string description: location of a person outputs: payload: type: string description: a simple greeting message, Hello World! 

Puede especificar valores de par谩metros en el archivo de manifiesto y omitir la creaci贸n del archivo para la implementaci贸n:


 packages: helloworld: actions: helloworld: location: src/hello.js runtime: nodejs:6 inputs: name: Amy place: Paris outputs: payload: type: string description: a simple greeting message, Hello World! 

Segundo paso


Cree un archivo para la implementaci贸n:


Establecemos los valores predeterminados agregando la secci贸n "entradas" anidada en la funci贸n "helloworld":


 application: name: SampleHelloWorld namespace: _ packages: helloworld: actions: helloworld: inputs: name: Amy place: Paris 

Verifique que la estructura del directorio no haya cambiado desde la 煤ltima vez.


Paso tres


Expande la funci贸n:


 # ./wskdeploy -p ~/SampleHelloWorldApp/ ____ ___ _ _ _ _ _ /\ \ / _ \ _ __ ___ _ __ | | | | |__ (_)___| | __ /\ /__\ \ | | | | '_ \ / _ \ '_ \| | | | '_ \| / __| |/ / / \____ \ / | |_| | |_) | __/ | | | |/\| | | | | \__ \ < \ \ / \/ \___/| .__/ \___|_| |_|__/\__|_| |_|_|___/_|\_\ \___\/ |_| Packages: Name: helloworld * action: helloworld bindings: - name: name value: Amy - name: place value: Paris Triggers: Rules Do you really want to deploy this? (y/N): y Deploying pacakge helloworld ... Done! Deploying action helloworld/helloworld ... Done! Deployment completed successfully. 

Cuarto paso


Verificar rendimiento:


 wsk action invoke --blocking --result helloworld/helloworld { "payload": "Hello, Amy from Paris" } 

Anule los valores predeterminados pasando valores utilizando el par谩metro --param :


 wsk action invoke --blocking --result helloworld/helloworld --param name Mark --param place Barcelona { "payload": "Hello, Mark from Barcelona" } 

Crear una condici贸n y reglas vinculantes


Primer paso


Agregue dos secciones al manifiesto:


 packages: helloworld: actions: helloworld: location: src/helloworld.js runtime: nodejs:6 inputs: name: type: string description: name of a person place: type: string description: location of a person outputs: payload: type: string description: a simple greeting message, Hello World! triggers: locationUpdate: rules: helloworldOnLocationUpdate: action: helloworld trigger: locationUpdate 

Segundo paso


Expanda la funci贸n, condici贸n y regla de enlace:


 ./wskdeploy -p ~/SampleHelloWorldApp/ ____ ___ _ _ _ _ _ /\ \ / _ \ _ __ ___ _ __ | | | | |__ (_)___| | __ /\ /__\ \ | | | | '_ \ / _ \ '_ \| | | | '_ \| / __| |/ / / \____ \ / | |_| | |_) | __/ | | | |/\| | | | | \__ \ < \ \ / \/ \___/| .__/ \___|_| |_|__/\__|_| |_|_|___/_|\_\ \___\/ |_| Packages: Name: helloworld * action: helloworld bindings: - name: name value: Amy - name: place value: Paris Triggers: * trigger: locationUpdate bindings: Rules * rule: helloworldOnLocationUpdate - trigger: locationUpdate - action: helloworld Do you really want to deploy this? (y/N): y Deploying pacakge helloworld ... Done! Deploying action helloworld/helloworld ... Done! Deploying trigger locationUpdate ... Done! Deploying rule helloworldOnLocationUpdate ... Done! Deployment completed successfully. 

Paso tres


Verificar rendimiento:


  • Nos fijamos en las funciones de trabajo:

     wsk activation poll Enter Ctrl-c to exit. Polling for activation logs 
  • abra otra terminal e ingrese el comando para activar la respuesta condicional:

     wsk trigger fire locationUpdate ok: triggered locationUpdate with id 4c3a8b1792d546a68ac58538c3f5d637 
  • mira los resultados en la primera terminal:

     Activation: helloworld (d545c458f3d34d6fbf5c29173be3d29e) [] Activation: locationUpdate (4c3a8b1792d546a68ac58538c3f5d637) [] Activation: helloworldOnLocationUpdate (c099355c1f1f4d6d8d30f54e8dac2b84) [] 
  • determinamos el id de la respuesta condicional y verificamos los resultados de la funci贸n:

     wsk activation get d545c458f3d34d6fbf5c29173be3d29e ok: got activation d545c458f3d34d6fbf5c29173be3d29e { ... "activationId": "d545c458f3d34d6fbf5c29173be3d29e", "start": 1489444142544, "end": 1489444142598, "response": { "status": "success", "statusCode": 0, "success": true, "result": { "payload": "Hello, Amy from Paris" } }, ... } 

Anuncio


Computaci贸n sin servidor basada en OpenWhisk, parte 1
Computaci贸n sin servidor basada en OpenWhisk, parte 2
Computaci贸n sin servidor basada en OpenWhisk, parte 3
Computaci贸n sin servidor basada en OpenWhisk, parte 4

Source: https://habr.com/ru/post/477336/


All Articles