Conteúdo


Uma maneira fácil de provisionar e chamar ações no IBM OpenWhisk

Introduzindo o openWhiskLib.py, uma nova pequena biblioteca Python para simplificar o seu uso dessa plataforma de computação sem servidor

Comments

O IBM OpenWhisk é um serviço simples de software livre que ativa e executa rapidamente pequenos trechos de código sob demanda em resposta a uma solicitação REST recebida. Confira a oferta beta do OpenWhisk no IBM Bluemix. Neste tutorial, mostro primeiramente como emitir comandos do OpenWhisk manualmente. Em seguida, mostro como usar uma biblioteca Python que criei para facilitar ainda mais a emissão desses comandos.

Eu estava ansioso para experimentar o OpenWhisk, pois fiquei sabendo que ele oferece duas grandes vantagens: o fornecimento é muito fácil e o faturamento pode ser mais barato do que executar aplicativos em uma máquina de vida longa. Após entender como usar o OpenWhisk, criei e publiquei uma pequena biblioteca Python, openWhiskLib.py, para simplificar essas tarefas (mostradas à esquerda da figura abaixo):

  • Provisionar ações de JavaScript no OpenWhisk
  • Chamar as ações

Experimente o OpenWhisk no BluemixObtenha o openWhiskLib.py no GitHub

Diagram of two OpenWhisk actions
Diagram of two OpenWhisk actions

O que você precisará neste tutorial

  • Uma conta do Bluemix. (Registre-se para sua conta de avaliação grátis ou Faça o login no Bluemix se você já tiver uma conta.)
  • Uma VM com Ubuntu Linux 14.04. (As etapas deste tutorial se referem a uma máquina Ubuntu Linux, mas outros sistemas operacionais devem ser semelhantes.)
1

Configure uma máquina cliente do OpenWhisk

Inicialize uma VM com o Ubuntu Linux 14.04, conecte-se como raiz e aplique as atualizações mais recentes:

apt-get -y update ; apt-get -y dist-upgrade

Agora é possível usar essa máquina para fazer upload do app "Hello world" no OpenWhisk, conforme descrito na Etapa 3 abaixo.

2

Instale, configure e teste o cliente OpenWhisk

  1. Conecte-se ao Bluemix e acesse a CLI do OpenWhisk. Agora em sua tela você vê três etapas com parâmetros customizados para sua conta do Bluemix.
  2. Execute as três etapas em sua máquina cliente do OpenWhisk:
    • Etapa 1: Faça download da CLI do OpenWhisk, descompacte o arquivo tar e inclua o executável wsk em seu caminho.
    • Etapa 2: wsk property set...

      Esse comando grava suas credenciais do Bluemix em um arquivo oculto em sua máquina cliente do OpenWhisk. Para mim, criou este arquivo oculto em meu diretório inicial: .wskprops

      Dica: Salve este arquivo oculto. Usaremos alguns dos parâmetros posteriormente neste tutorial para as variáveis de ambiente da biblioteca Python.

    • Etapa 3: wsk action invoke...

      Esse comando se comunica com o serviço OpenWhisk no Bluemix para confirmar que suas credenciais funcionam. Após alguns segundos, o wsk responde com uma estrutura JSON contendo a palavra 'hello'. Sucesso!

      Por diversão, mude a sequência da mensagem 'hello' para algo diferente e repita. A resposta deverá conter sua nova sequência.

Dica: modo detalhado

Se você incluir o parâmetro -v em qualquer comando wsk , a solicitação HTTP que é enviada ao servidor será mostrada. Achei esse recurso muito útil para depuração e para descobrir os parâmetros necessários para emitir solicitações REST. (Há mais detalhes em Troca de excesso da capacidade.)

3

Fazer upload de um arquivo de ação para o serviço OpenWhisk no Bluemix

Um fragmento simples de JavaScript para um arquivo de ação está disponível no Tutorial do OpenWhisk no Bluemix.

  1. Emita os comandos wsk mostrados no tutorial para criar, usar e excluir o arquivo de ação.
  2. Repita os comandos com a opção detalhada -v . Isso mostra a solicitação REST e os parâmetros necessários para emitir os comandos a partir da linha de comandos.

    Aqui está um exemplo:

    Crie um arquivo denominado 'hello.js' em sua máquina cliente do OpenWhisk:

    function main() {
    return {payload: 'hello'};
    }
  3. Agora emita o comando wsk para fazer upload de hello.js. A seguir está o meu comando (com meu nome de usuário e credenciais ofuscados por questão de privacidade):
    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:

  • A sequência Auth no cabeçalho da solicitação é diferente da sequência armazenada em .wskprops. (Acredito que esteja codificada por base 64.)
  • O conteúdo de hello.js está incluído no corpo da solicitação na variável code como uma sequência longa.
4

Teste a ação

Após criar a ação, teste-a emitindo o comando wsk action invoke :

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"
}

Introduzindo o openWhiskLib.py

Agora que você aprendeu a emitir todos os comandos manualmente, tente usar o novo script Python para simplificar a emissão dos comandos.

Até a presente data, estas funções foram desenvolvidas e testadas:

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

O projeto openWhiskLib está publicamente disponível no GitHub.

Para usar o openWhiskLib em sua máquina, primeiro defina três variáveis de ambiente:

OPENWHISK_APIHOST
Obtenha esse valor de seu arquivo .wskprops
OPENWHISK_NAMESPACE
Obtenha esse valor de seu arquivo .wskprops
OPENWHISK_TOKEN
Obtenha esse valor da emissão de qualquer comando wsk detalhado, como:
wsk -v action invoke /whisk.system/samples/echo -p message hello --blocking --result

Por exemplo, em seu laptop Linux, é possível configurar valores como eu fiz (meus dados pessoais estão ocultos por questão de privacidade):

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

Por conveniência, você poderá definir seus valores em um script de bash. É possível copiar e editar essa amostra no projeto GitHub: bin/setenv.sh

5

Use o openWhiskLib.py para criar ações

Para criar uma ação, primeiro crie um arquivo em sua máquina que contém um fragmento do código JavaScript do qual você deseja fazer upload e executar. Por exemplo, seria possível usar um código semelhante à mesma amostra que listei acima: goodday.js:

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

Em seguida, chame a função do openWhiskLib createAction() a partir de seu interpretador de Python. Por exemplo:

Defina variáveis de ambiente (com um ponto):

. setenv.sh

Chame o 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 o openWhiskLib.py para chamar ações

E, por fim, chame o fragmento de código a partir do OpenWhisk no Bluemix usando o 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]>
>>>
>>>

Testar casos e código de amostra

Casos de teste simples no projeto openWhiskLib no GitHub (tests/openwhisklib.tests.py) demonstram cada função no openWhiskLib.py, mostrando as entradas e saídas. É possível usá-las para verificar se o OpenWhisk funciona com suas credenciais.

Conclusão

Este tutorial forneceu uma visão geral resumida do OpenWhisk, assim como amostras para fazer upload e executar seu próprio código no IBM Bluemix. Você também viu uma nova biblioteca Python para simplificar o acesso e a implementação de aplicativos no OpenWhisk. Espero que você possa fazer uso do openWhiskLib.py. Pegue-o, aprimore-o, transforme-o e torne-o seu.


Recursos para download


Temas relacionados


Comentários

Acesse ou registre-se para adicionar e acompanhar os comentários.

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=80
Zone=Cloud computing
ArticleID=1041685
ArticleTitle=Uma maneira fácil de provisionar e chamar ações no IBM OpenWhisk
publish-date=12282016