Informatique sans serveur basée sur OpenWhisk, partie 1


Ceci est une série de notes traduites par Priti Desai . Étant donné que les notes elles-mêmes sont assez courtes, plusieurs publications seront collectées en une seule fois. Les détails du déploiement d'applications pour OpenWhisk avec des exemples seront examinés et à la fin du cycle, l'architecture et le code d'une application utilisant l'informatique sans serveur basée sur OpenWhisk seront présentés.


Automatisez le déploiement d'applications pour OpenWhisk


Avez-vous déjà installé OpenWhisk et testé la fonction hello.js simple au travail?


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

Voulez-vous automatiser le déploiement de cette fonction la plus simple? Si oui, continuez à lire cette note. Je vais montrer comment utiliser openwhisk-wskdeploy pour automatiser le déploiement d'une fonction simple.


Composants requis



Première étape


Créez un fichier manifeste (manifest.yaml) avec le contenu suivant:


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

Deuxième étape


Créez un fichier pour le déploiement (deployment.yaml):


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

En fait, ce fichier n'est pas requis pour la livraison de helloworld , seul le manifeste de la première étape suffit.


Étape trois


Créez une structure de répertoires. Cela ressemble à ceci:


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

Quatrième étape


Déploiement de la fonction 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. 

Cinquième étape


Vérifier les performances:


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

Sixième étape


Réjouis-toi!


Déploiement: fonction, condition et règle


Examinons les éléments supplémentaires nécessaires à l'automatisation:



Passer des paramètres à une fonction


Modifiez le code:


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

Première étape


Créez un fichier manifeste:


 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! 

Vous pouvez spécifier des valeurs de paramètre dans le fichier manifeste et ignorer la création du fichier pour le déploiement:


 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! 

Deuxième étape


Créez un fichier pour le déploiement:


Nous définissons les valeurs par défaut en ajoutant la section "inputs" imbriquée dans la fonction "helloworld":


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

Vérifiez que la structure du répertoire n'a pas changé depuis la dernière fois.


Étape trois


Développez la fonction:


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

Quatrième étape


Vérifier les performances:


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

Remplacez les valeurs par défaut en passant des valeurs à l'aide du paramètre --param :


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

Création d'une condition et de règles de liaison


Première étape


Ajoutez deux sections au manifeste:


 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 

Deuxième étape


Développez la fonction, la condition et la règle de liaison:


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

Étape trois


Vérifier les performances:


  • Nous regardons les fonctions de travail:

     wsk activation poll Enter Ctrl-c to exit. Polling for activation logs 
  • ouvrez un autre terminal et entrez la commande pour activer la réponse conditionnelle:

     wsk trigger fire locationUpdate ok: triggered locationUpdate with id 4c3a8b1792d546a68ac58538c3f5d637 
  • regardez les résultats dans le premier terminal:

     Activation: helloworld (d545c458f3d34d6fbf5c29173be3d29e) [] Activation: locationUpdate (4c3a8b1792d546a68ac58538c3f5d637) [] Activation: helloworldOnLocationUpdate (c099355c1f1f4d6d8d30f54e8dac2b84) [] 
  • nous déterminons l'id de la réponse conditionnelle et vérifions les résultats de la fonction:

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

Annonce


Informatique sans serveur basée sur OpenWhisk, partie 1
Informatique sans serveur basée sur OpenWhisk, partie 2
Informatique sans serveur basée sur OpenWhisk, partie 3
Informatique sans serveur basée sur OpenWhisk, partie 4

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


All Articles