Contenido


Una forma sencilla de suministrar e invocar acciones en IBM OpenWhisk

Presentando openWhiskLib.py, una diminuta nueva biblioteca Python para simplificar el uso de esta plataforma de cómputo sin servidor

Comments

IBM OpenWhisk es un servicio sencillo de código abierto que rápidamente lanza y ejecuta tidbits de código bajo demanda, en respuesta a una solicitud REST entrante. Vea la oferta beta de OpenWhisk en IBM Cloud. En este tutorial primero le mostraré cómo emitir comandos OpenWhisk manualmente. A continuación les mostraré cómo utilizar una biblioteca Python que facilita aún más la emisión de esos comandos.

Yo estaba ansioso por probar OpenWhisk, porque había oído que ofrece dos grandes ventajas: el suministro es realmente fácil y la facturación puede ser más barata que la ejecución de aplicaciones en una máquina fija. Después de que descubrí cómo usar OpenWhisk, creé y publiqué una diminuta biblioteca Python, openWhiskLib.py, para simplificar estas tareas (se muestra en la figura de la izquierda de abajo):

  • Suministro de acciones de JavaScript en OpenWhisk
  • Invoque las acciones

Pruebe OpenWhisk en IBM CloudObtenga openWhiskLib.py en GitHub

Diagram of two OpenWhisk actions
Diagram of two OpenWhisk actions

Qué necesitará para este tutorial

  • Una cuenta de IBM Cloud. (Regístrese para su cuenta de pruebas gratuita o inicie sesión en IBM Cloud si ya tiene una cuenta.
  • Una VM con Ubuntu Linux 14.04. (Los pasos en este tutorial se refieren a una máquina Ubuntu Linux, pero otros sistemas operativos deben ser similares).
1

Configure una máquina de cliente OpenWhisk

Arranque una VM con Ubuntu Linux 14.04, inicie sesión como raíz, y aplique sus últimas actualizaciones:

obtenga la aplicación y actualice; obtenga la aplicación y actualice dist

Ahora puede usar esta máquina para cargar la aplicación "Hello world" a OpenWhisk tal como se describe en el paso 3 a continuación.

2

Instale, configure y pruebe el cliente OpenWhisk

  1. Inicie sesión en IBM Cloud y acceda a OpenWhisk CLI. En su pantalla, ahora puede ver tres pasos, con parámetros personalizados para su cuenta IBM Cloud.
  2. Realice los tres pasos en su máquina de cliente OpenWhisk:
    • Paso 1: Descargue OpenWhisk CLI y el archivo y adicione el ejecutable wsk a su ruta.
    • Paso 2: wsk property set...

      Este comando escribe sus credenciales de IBM Cloud en archivo oculto en su máquina de cliente OpenWhisk. Para mí, ha creado este archivo oculto en mi directorio de inicio: .wskprops

      Sugerencia: Guarde este archivo oculto. Vamos a utilizar algunos de los parámetros más adelante en este tutorial para las variables de entorno de la biblioteca de Python.

    • Paso 3: wsk action invoke...

      Este comando se comunica con el servicio en IBM Cloud OpenWhisk para confirmar que sus credenciales funcionan. Después de unos segundos, wsk responde con una estructura JSON que contiene la palabra 'hello'. ¡Éxito!

      Como diversión, cambie la cadena de mensaje de 'hello' a otra cosa y repita. La respuesta debe contener su nueva cadena de caracteres.

Hint: Modalidad Verbose

Si añade -v a cualquier wsk , mostrará la solicitud que envió al servidor HTTP. Esta funcionalidad me pareció muy útil para la depuración y para descubrir los parámetros necesarios para emitir las solicitudes REST. (Hay más detalles en esta Intercambio de Desbordamiento de Pila.)

3

Subir un archivo de acción al servicio OpenWhisk en IBM Cloud

Un sencillo fragmento de JavaScript para un archivo de acción está disponible en el tutorial de OpenWhisk en IBM Cloud.

  1. Emita los wsk mostrados en el tutorial para crear, usar y suprimir el archivo de acción.
  2. Repita los comandos con la opción -v verbose. Esto muestra la solicitud y los parámetros REST necesarios para ejecutar los comandos desde la línea de comandos.

    Aquí tiene un ejemplo:

    Cree un archivo llamado 'hello.js' en su máquina de cliente OpenWhisk:

    function main() {
    return {payload: 'hello'};
    }
  3. Ahora emita el comando wsk para subir hello.js. Aquí está mi comando (con mi nombre de usuario y credenciales ofuscados para obtener privacidad):
    wsk -v action create hello hello.js
    
    {'apihost': 'openwhisk.ng.bluemix.net', 'namespace': 'user@example.com_dev', 'clibuild': '2016-
    05-24T09:54:44-05:00', 'apiversion': 'v1'}
    ========
    REQUEST:
    PUT https://openwhisk.ng.bluemix.net/api/v1/namespaces/user
    %40example.com_dev/actions/hello
    Headers sent:
    {
         "Authorization": "Basic
    S3sjGo6dKeKSIIRENS135xOsT3jEs7IiS3sjGo6dKeKSIIRENS135xOsT3jEs7Ii",
         "Content-Type": "application/json"
    }
    Body sent:
    {"exec": {"kind": "nodejs", "code": "function main() {\n return {payload: 'hello'};\n}\n"}}

Notas:

  • El Auth string en el encabezado de solicitud es diferente de la cadena de caracteres que se almacena en .wskprops. (Creo que está codificado con base 64).
  • El contenido de hello.js está incluido en el cuerpo de la solicitud en código variable como una cadena de caracteres larga.
4

Pruebe la acción

Después de crear la acción, pruébela emitiendo la acción wsk de invocación comando:

wsk -v action invoke /whisk.system/samples/echo -p message hello --blocking --result
{'apihost': 'openwhisk.ng.bluemix.net', 'namespace': 'user@example.com_dev', 'clibuild': '2016-
05-24T09:54:44-05:00', 'apiversion': 'v1'}
========
REQUEST:
POST
https://openwhisk.ng.bluemix.net/api/v1/namespaces/whisk.system/actions/samples/echo?
blocking=true&result=true
Headers sent:
{
     "Authorization": "Basic
S3sjGo6dKeKSIIRENS135xOsT3jEs7IiS3sjGo6dKeKSIIRENS135xOsT3jEs7Ii",
     "Content-Type": "application/json"
}
Body sent:
{"message": "hello"}
--------
RESPONSE:
Got response with code 200
Body received:
{
  "message": "hello"
}
========
{
  "message": "hello"
}

Presentando openWhiskLib.py

Ahora que ha aprendido a emitir todos los comandos manualmente, intente usar el nuevo script de Python para simplificar la emisión de los comandos.

Hasta la fecha, estas funciones han sido desarrolladas y probadas:

  • createAction(filename, action)
  • deleteAction(action)
  • invokeAction(action)
  • invokeEcho(message)
  • listActions()
  • listNamespaces()

La openWhiskLib está disponible públicamente en GitHub.

Para usar openWhiskLib en su máquina, primero defina tres variables de entorno:

OPENWHISK_APIHOST
Obtenga este valor de su archivo .wskprops
OPENWHISK_NAMESPACE
Obtenga este valor de su archivo .wskprops
OPENWHISK_TOKEN
Obtenga este valor emitiendo cualquier comando verbose wsk, como:
wsk -v action invoke /whisk.system/samples/echo -p message hello --blocking --result

Por ejemplo, en su laptop Linux, usted puede configurar valores como lo hice (mis datos personales están oscurecidos para obtener privacidad):

export OPENWHISK_APIHOST="openwhisk.ng.bluemix.net"
export OPENWHISK_NAMESPACE="username@example.com_dev"
export
OPENWHISK_TOKEN="S3sjGo6dKeKSIIRENS135xOsT3jEs7IiS3sjGo6dKeKSIIRENS135xOsT3j
Es7Ii"

Por conveniencia, usted puede definir valores en un script bash. Usted puede copiar y editar esta muestra en el proyecto GitHub: bin/setenv.sh

5

Use openWhiskLib.py para crear acciones

Para crear una acción, primero cree un archivo en su máquina que contenga un fragmento del código JavaScript que desea cargar y ejecutar. Por ejemplo, podría usar un código similar a la misma muestra que enumeré aneriormente: goodday.js:

function main() {
     return {payload: 'good day'};
}

Posteriormente invoque la función openWhiskLib createAction() desde su intérprete Python. Por ejemplo:

Defina las variables del entorno (con un punto):

. setenv.sh

Invoque Python

python

Python 2.7.6 (default, Jun 22 2015, 17:58:13)
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.

>>> from openwhisklib import *
>>> createAction( 'goodday.js', 'goodday')
Issuing put request:
url=https://openwhisk.ng.bluemix.net/api/v1/namespaces/user@example.com_dev/actions/goodday
payload: {'exec': {'kind': 'nodejs', 'code': "function main() {\n return {payload: 'good day'};\n}\n"}}
headers={'content-type': 'application/json', 'Authorization': 'Basic
S3sjGo6dKeKSIIRENS135xOsT3jEs7IiS3sjGo6dKeKSIIRENS135xOsT3jEs7Ii'}
Response status_code=200
{
  "name": "goodday",
  "publish": false,
  "annotations": [],
  "version": "0.0.1",
  "exec": {
    "kind": "nodejs",
    "code": "function main() {\n return {payload: 'good day'};\n}\n"
},
"parameters": [],
limits": {
  "timeout": 60000,
  "memory": 256
},
"namespace": "user@example.com_dev"
}
<Response [200]>
>>>
6

Use openWhiskLib.py par invocar acciones

Y por último, invoque el fragmento de código desde OpenWhisk en IBM Cloud usando openWhiskLib.py:

>>>
>>> invokeAction('goodday')
Issuing request:
url=https://openwhisk.ng.bluemix.net/api/v1/namespaces/user@example.com_dev/actions/goodday?
blocking=true&result=false payload={} headers={'content-type': 'application/json', 'Authorization':
'Basic S3sjGo6dKeKSIIRENS135xOsT3jEs7IiS3sjGo6dKeKSIIRENS135xOsT3jEs7Ii'}
Response status_code=200
{
"name": "goodday",
  "subject": "user@example.com",
  "activationId": "f81398a389734d018f4c92fbf59e2dbe",
  "publish": false,
  "annotations": [],
  "version": "0.0.1",
  "response": {
     "result": {
       "payload": "good day"
      },
      "success": true,
      "status": "success"
  },
  "end": 1466083636776,
  "logs": [],
  "start": 1466083636724,
  "namespace": "user@example.com"
}
<Response [200]>
>>>
>>>

Casos de prueba y código de muestra

Los casos de prueba sencillos en el proyecto openWhiskLib en GitHub (tests/openwhisklib.tests.py) demuestran cada función en openWhiskLib.py, mostrando las entradas y las salidas. Puede usarlos para verificar que OpenWhisk funcione con sus credenciales.

Conclusión

Este tutorial le ha brindado una descripción de alto nivel de OpenWhisk, así como muestras para cargar y ejecutar su propio código en IBM Cloud. También ha visto una nueva biblioteca Python para simplificar el acceso y desplegar aplicaciones hacia OpenWhisk. Espero que pueda usar y aprovechar openWhiskLib.py. Tómelo, mejórelo, transfórmelo y hágalo suyo.


Recursos para Descargar


Temas relacionados


Comentarios

Inicie Sesión o Regístrese para agregar comentarios.

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=90
Zone=Cloud computing
ArticleID=1041701
ArticleTitle=Una forma sencilla de suministrar e invocar acciones en IBM OpenWhisk
publish-date=12282016