
рдпрд╣ рдкреНрд░реАрддрд┐ рджреЗрд╕рд╛рдИ рджреНрд╡рд╛рд░рд╛ рдЕрдиреБрд╡рд╛рджрд┐рдд рдиреЛрдЯреНрд╕ рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рд╣реИред рдЪреВрдВрдХрд┐ рдиреЛрдЯ рд╕реНрд╡рдпрдВ рдХрд╛рдлреА рдЫреЛрдЯреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдПрдХ рдкреНрд░рдХрд╛рд╢рди рдореЗрдВ рдХрдИ рдкреНрд░рдХрд╛рд╢рдиреЛрдВ рдХреЛ рдПрдХ рдмрд╛рд░ рдореЗрдВ рдПрдХрддреНрд░ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд╕рд╛рде OpenWhisk рдХреЗ рд▓рд┐рдП рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреА рддреИрдирд╛рддреА рдХреЗ рд╡рд┐рд╡рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдФрд░ рдЪрдХреНрд░ рдХреЗ рдЕрдВрдд рдореЗрдВ, OpenWhisk рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╕рд░реНрд╡рд░ рд░рд╣рд┐рдд рдХрдВрдкреНрдпреВрдЯрд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдФрд░ рдХреЛрдб рдХреЛ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
OpenWhisk рдХреЗ рд▓рд┐рдП рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдкрд░рд┐рдирд┐рдпреЛрдЬрди
рдХреНрдпрд╛ рдЖрдкрдиреЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА OpenWhisk рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рд╣реИ рдФрд░ рдХрд╛рдо рдореЗрдВ рд╕рд░рд▓ hello.js рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рд╣реИ?
cat hello.js function main() { return {payload: 'Hello World'}; }
рдХреНрдпрд╛ рдЖрдк рдЗрд╕ рд╕рд░рд▓рддрдо рдХрд╛рд░реНрдп рдХреА рддреИрдирд╛рддреА рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ? рдпрджрд┐ рд╣рд╛рдВ, рддреЛ рдЗрд╕ рдиреЛрдЯ рдХреЛ рдкрдврд╝рдирд╛ рдЬрд╛рд░реА рд░рдЦреЗрдВред рдореИрдВ рджрд┐рдЦрд╛рдКрдВрдЧрд╛ рдХрд┐ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдлрд╝рдВрдХреНрд╢рди рдХреА рддреИрдирд╛рддреА рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП Openwhisk-wskdeploy рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░реЗрдВред
рдЖрд╡рд╢реНрдпрдХ рдШрдЯрдХ
рдкрд╣рд▓рд╛ рдХрджрдо
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рд╛рдордЧреНрд░реА рдХреЗ рд╕рд╛рде рдПрдХ рдореИрдирд┐рдлрд╝реЗрд╕реНрдЯ рдлрд╝рд╛рдЗрд▓ (рдореЗрдирд┐рдлрд╝реЗрд╕реНрдЯ.рдорд╛рдЗрд▓) рдмрдирд╛рдПрдБ:
packages: helloworld: actions: helloworld: location: src/hello.js runtime: nodejs:6 outputs: payload: type: string description: a simple greeting message, Hello World.
рджреВрд╕рд░рд╛ рдХрджрдо
рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдХреЗ рд▓рд┐рдП рдПрдХ рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдБ (рдкрд░рд┐рдирд┐рдпреЛрдЬрди редyaml):
application: name: SampleHelloWorld namespace: _ packages: helloworld: actions: helloworld:
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣ рдлрд╝рд╛рдЗрд▓ helloworld
рдХреА рдбрд┐рд▓реАрд╡рд░реА рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИ, рдмрд╕ рдкрд╣рд▓реЗ рдЪрд░рдг рд╕реЗ рдкреНрд░рдХрдЯ рд╣реЛрдирд╛ рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред
рдЪрд░рдг рддреАрди
рдПрдХ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд╕рдВрд░рдЪрдирд╛ рдмрдирд╛рдПрдБред рдпрд╣ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:
# ls -1R ~/SampleHelloWorldApp/ deployment.yaml manifest.yaml src/ ./src: hello.js
рдЪреМрдерд╛ рдЪрд░рдг
рд╣реИрд▓реЛрд╡рд░реНрд▓реНрдб рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдирд┐рдпреЛрдЬрд┐рдд рдХрд░рдирд╛:
./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.
рдкрд╛рдВрдЪрд╡рд╛рдВ рдЪрд░рдг
рдкреНрд░рджрд░реНрд╢рди рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВ:
# wsk action invoke --blocking --result helloworld/helloworld { "payload": "Hello World" }
рдЫрдард╛ рдЪрд░рдг
рдЦрд╝реБрд╢ рд╣реЛ рдЬрд╛рдУ!
рдкрд░рд┐рдирд┐рдпреЛрдЬрди: рдХрд╛рд░реНрдп, рд╕реНрдерд┐рддрд┐ рдФрд░ рдирд┐рдпрдо
рдЖрдЗрдП рд╕реНрд╡рдЪрд╛рд▓рди рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдЪреАрдЬреЛрдВ рдХреЛ рджреЗрдЦреЗрдВ:
рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдкреИрд░рд╛рдореАрдЯрд░ рдкрд╛рд░рд┐рдд рдХрд░рдирд╛
рдХреЛрдб рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░реЗрдВ:
function main(params) { return {payload: 'Hello, ' + params.name + ' from ' + params.place}; }
рдкрд╣рд▓рд╛ рдХрджрдо
рдПрдХ рдореИрдирд┐рдлрд╝реЗрд╕реНрдЯ рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдБ:
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!
рдЖрдк рдореИрдирд┐рдлрд╝реЗрд╕реНрдЯ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдкреИрд░рд╛рдореАрдЯрд░ рдорд╛рди рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдХреЗ рд▓рд┐рдП рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдирд╛ рдЫреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ:
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!
рджреВрд╕рд░рд╛ рдХрджрдо
рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдХреЗ рд▓рд┐рдП рдПрдХ рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдБ:
рд╣рдо "рд╣реЗрд▓реЛрд╡рд░реНрд▓реНрдб" рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдирд┐рд╣рд┐рдд "рдЗрдирдкреБрдЯ" рдЕрдиреБрднрд╛рдЧ рдХреЛ рдЬреЛрдбрд╝рдХрд░ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ:
application: name: SampleHelloWorld namespace: _ packages: helloworld: actions: helloworld: inputs: name: Amy place: Paris
рдЬрд╛рдВрдЪреЗрдВ рдХрд┐ рдкрд┐рдЫрд▓реА рдмрд╛рд░ рд╕реЗ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд╕рдВрд░рдЪрдирд╛ рдирд╣реАрдВ рдмрджрд▓реА рдЧрдИ рд╣реИред
рдЪрд░рдг рддреАрди
рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░реЗрдВ:
# ./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.
рдЪреМрдерд╛ рдЪрд░рдг
рдкреНрд░рджрд░реНрд╢рди рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВ:
wsk action invoke --blocking --result helloworld/helloworld { "payload": "Hello, Amy from Paris" }
--рдкрд░рдо рдкреИрд░рд╛рдореАрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдорд╛рдиреЛрдВ рдХреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рдиреЛрдВ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░реЗрдВ:
wsk action invoke --blocking --result helloworld/helloworld --param name Mark --param place Barcelona { "payload": "Hello, Mark from Barcelona" }
рдПрдХ рд╢рд░реНрдд рдФрд░ рдмрд╛рдзреНрдпрдХрд╛рд░реА рдирд┐рдпрдо рдмрдирд╛рдирд╛
рдкрд╣рд▓рд╛ рдХрджрдо
рдкреНрд░рдХрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рджреЛ рдЦрдВрдб рдЬреЛрдбрд╝реЗрдВ:
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
рджреВрд╕рд░рд╛ рдХрджрдо
рдлрд╝рдВрдХреНрд╢рди, рд╕реНрдерд┐рддрд┐ рдФрд░ рдмрд╛рдзреНрдпрдХрд╛рд░реА рдирд┐рдпрдо рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░реЗрдВ:
./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.
рдЪрд░рдг рддреАрди
рдкреНрд░рджрд░реНрд╢рди рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВ:
- рд╣рдо рдХрд╛рдо рдХрд░ рд░рд╣реЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ:
wsk activation poll Enter Ctrl-c to exit. Polling for activation logs
- рдПрдХ рдФрд░ рдЯрд░реНрдорд┐рдирд▓ рдЦреЛрд▓реЗрдВ рдФрд░ рд╕рд╢рд░реНрдд рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЛ рд╕рдХреНрд░рд┐рдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдорд╛рдВрдб рджрд░реНрдЬ рдХрд░реЗрдВ:
wsk trigger fire locationUpdate ok: triggered locationUpdate with id 4c3a8b1792d546a68ac58538c3f5d637
- рдкрд╣рд▓реЗ рдЯрд░реНрдорд┐рдирд▓ рдореЗрдВ рдкрд░рд┐рдгрд╛рдо рджреЗрдЦреЗрдВ:
Activation: helloworld (d545c458f3d34d6fbf5c29173be3d29e) [] Activation: locationUpdate (4c3a8b1792d546a68ac58538c3f5d637) [] Activation: helloworldOnLocationUpdate (c099355c1f1f4d6d8d30f54e8dac2b84) []
- рд╣рдо рд╕рд╢рд░реНрдд рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреА рдЖрдИрдбреА рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреА рдЬрд╛рдВрдЪ рдХрд░рддреЗ рд╣реИрдВ:
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" } }, ... }
рдШреЛрд╖рдгрд╛
OpenWhisk рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╕рд░реНрд╡рд░ рд░рд╣рд┐рдд рдХрдВрдкреНрдпреВрдЯрд┐рдВрдЧ, рднрд╛рдЧ 1
OpenWhisk рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╕рд░реНрд╡рд░ рд░рд╣рд┐рдд рдХрдВрдкреНрдпреВрдЯрд┐рдВрдЧ, рднрд╛рдЧ 2
OpenWhisk рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╕рд░реНрд╡рд░ рд░рд╣рд┐рдд рдХрдВрдкреНрдпреВрдЯрд┐рдВрдЧ, рднрд╛рдЧ 3
рд╕рд░реНрд╡рд░рд╡рд┐рд╣реАрди рдХрдВрдкреНрдпреВрдЯрд┐рдВрдЧ OpenWhisk, рднрд╛рдЧ 4 рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИ