Serverloses Rechnen basierend auf OpenWhisk, Teil 1


Dies ist eine Reihe von übersetzten Notizen von Priti Desai . Da die Anmerkungen selbst recht kurz sind, werden mehrere Veröffentlichungen gleichzeitig in einer Veröffentlichung gesammelt. Einzelheiten zur Bereitstellung von Anwendungen für OpenWhisk mit Beispielen werden betrachtet, und am Ende des Zyklus werden die Architektur und der Code einer Anwendung vorgestellt, die auf OpenWhisk basierendes Serverless Computing verwendet.


Automatisieren Sie die Anwendungsbereitstellung für OpenWhisk


Haben Sie OpenWhisk bereits installiert und die einfache Funktion hello.js in Arbeit getestet?


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

Möchten Sie die Bereitstellung dieser einfachsten Funktion automatisieren? Wenn ja, lesen Sie diesen Hinweis weiter. Ich werde zeigen, wie openwhisk-wskdeploy verwendet wird, um die Bereitstellung einer einfachen Funktion zu automatisieren.


Erforderliche Komponenten



Erster Schritt


Erstellen Sie eine Manifestdatei (manifest.yaml) mit dem folgenden Inhalt:


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

Zweiter Schritt


Erstellen Sie eine Datei für die Bereitstellung (deployment.yaml):


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

Tatsächlich wird diese Datei nicht für die Zustellung von helloworld , nur das Manifest aus dem ersten Schritt reicht aus.


Schritt drei


Erstellen Sie eine Verzeichnisstruktur. Es sieht ungefähr so ​​aus:


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

Vierter Schritt


Bereitstellen der HelloWorld-Funktion:


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

Fünfter Schritt


Überprüfen Sie die Leistung:


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

Sechster Schritt


Freut euch!


Bereitstellung: Funktion, Bedingung und Regel


Schauen wir uns die zusätzlichen Dinge an, die in der Automatisierung benötigt werden:



Parameter an eine Funktion übergeben


Ändern Sie den Code:


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

Erster Schritt


Erstellen Sie eine Manifestdatei:


 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! 

Sie können Parameterwerte in der Manifestdatei angeben und das Erstellen der Datei für die Bereitstellung überspringen:


 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! 

Zweiter Schritt


Erstellen Sie eine Datei für die Bereitstellung:


Wir setzen die Standardwerte, indem wir den in der "helloworld" -Funktion verschachtelten "input" -Abschnitt hinzufügen:


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

Stellen Sie sicher, dass sich die Verzeichnisstruktur seit dem letzten Mal nicht geändert hat.


Schritt drei


Erweitern Sie die Funktion:


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

Vierter Schritt


Überprüfen Sie die Leistung:


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

Überschreiben Sie die Standardwerte, indem Sie Werte mit dem Parameter --param übergeben :


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

Bedingung erstellen und Regeln binden


Erster Schritt


Fügen Sie dem Manifest zwei Abschnitte hinzu:


 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 

Zweiter Schritt


Erweitern Sie die Funktion, Bedingung und Bindungsregel:


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

Schritt drei


Überprüfen Sie die Leistung:


  • Wir betrachten die Arbeitsfunktionen:

     wsk activation poll Enter Ctrl-c to exit. Polling for activation logs 
  • Öffnen Sie ein anderes Terminal und geben Sie den Befehl ein, um die bedingte Antwort zu aktivieren:

     wsk trigger fire locationUpdate ok: triggered locationUpdate with id 4c3a8b1792d546a68ac58538c3f5d637 
  • Schauen Sie sich die Ergebnisse im ersten Terminal an:

     Activation: helloworld (d545c458f3d34d6fbf5c29173be3d29e) [] Activation: locationUpdate (4c3a8b1792d546a68ac58538c3f5d637) [] Activation: helloworldOnLocationUpdate (c099355c1f1f4d6d8d30f54e8dac2b84) [] 
  • Wir ermitteln die ID der bedingten Antwort und überprüfen die Ergebnisse der Funktion:

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

Ankündigung


Serverloses Rechnen basierend auf OpenWhisk, Teil 1
Serverloses Rechnen basierend auf OpenWhisk, Teil 2
Serverloses Rechnen basierend auf OpenWhisk, Teil 3
Serverloses Rechnen basierend auf OpenWhisk, Teil 4

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


All Articles