Computação sem servidor baseada no OpenWhisk, parte 1


Esta é uma série de notas traduzidas por Priti Desai . Como as notas em si são bastante curtas, várias publicações serão coletadas ao mesmo tempo em uma publicação. Detalhes da implantação de aplicativos para o OpenWhisk com exemplos serão considerados e, no final do ciclo, serão apresentadas a arquitetura e o código de um aplicativo que usa computação sem servidor baseada no OpenWhisk.


Automatizar a implantação de aplicativos para o OpenWhisk


Você já instalou o OpenWhisk e testou a função simples hello.js em funcionamento?


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

Deseja automatizar a implantação desta função mais simples? Nesse caso, continue lendo esta nota. Vou mostrar como usar o openwhisk-wskdeploy para automatizar a implantação de uma função simples.


Componentes Necessários



Primeiro passo


Crie um arquivo de manifesto (manifest.yaml) com o seguinte conteúdo:


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

Segundo passo


Crie um arquivo para implantação (deployment.yaml):


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

De fato, esse arquivo não é necessário para a entrega do helloworld , apenas o manifesto da primeira etapa é suficiente.


Passo três


Crie uma estrutura de diretórios. Parece algo como isto:


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

Quarto passo


Implantando a função 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 passo


Verifique o desempenho:


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

Sexto passo


Alegrai-vos!


Implantação: Função, Condição e Regra


Vejamos as coisas adicionais necessárias na automação:



Passando parâmetros para uma função


Modifique o código:


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

Primeiro passo


Crie um arquivo de manifesto:


 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! 

Você pode especificar valores de parâmetros no arquivo de manifesto e pular a criação do arquivo para implementação:


 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 passo


Crie um arquivo para implantação:


Definimos os valores padrão adicionando a seção "inputs" aninhada na função "helloworld":


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

Verifique se a estrutura de diretórios não mudou da última vez.


Passo três


Expanda a função:


 # ./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. 

Quarto passo


Verifique o desempenho:


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

Substitua os valores padrão, passando valores usando o parâmetro --param :


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

Criando uma condição e regras de ligação


Primeiro passo


Adicione duas seções ao manifesto:


 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 passo


Expanda a função, condição e regra de ligação:


 ./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. 

Passo três


Verifique o desempenho:


  • Examinamos as funções de trabalho:

     wsk activation poll Enter Ctrl-c to exit. Polling for activation logs 
  • abra outro terminal e insira o comando para ativar a resposta condicional:

     wsk trigger fire locationUpdate ok: triggered locationUpdate with id 4c3a8b1792d546a68ac58538c3f5d637 
  • veja os resultados no primeiro terminal:

     Activation: helloworld (d545c458f3d34d6fbf5c29173be3d29e) [] Activation: locationUpdate (4c3a8b1792d546a68ac58538c3f5d637) [] Activation: helloworldOnLocationUpdate (c099355c1f1f4d6d8d30f54e8dac2b84) [] 
  • determinamos o ID da resposta condicional e verificamos os resultados da função:

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

Anúncio


Computação sem servidor baseada no OpenWhisk, parte 1
Computação sem servidor baseada no OpenWhisk, parte 2
Computação sem servidor baseada no OpenWhisk, parte 3
Computação sem servidor baseada no OpenWhisk, parte 4

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


All Articles