ื‘ื ื™ื™ืช ืฉืจืชื™ื ืžืฉืœื ื• ืขืœ ื‘ืกื™ืก Fn

ื‘ื ื™ื™ืช ืฉืจืชื™ื ืžืฉืœื ื• ืขืœ ื‘ืกื™ืก Fn

ืžื—ืฉื•ื‘ ืœืœื ืฉืจืช ื”ื•ื ืื—ื“ ื”ื˜ืจื ื“ื™ื ื”ื‘ื•ืœื˜ื™ื ื‘ืžื—ืฉื•ื‘ ืขื ืŸ. ืขืงืจื•ืŸ ื”ืคืขื•ืœื” ื”ื‘ืกื™ืกื™ ื”ื•ื ืฉืชืฉืชื™ื•ืช ืื™ื ืŸ ืขื ื™ื™ื ื• ืฉืœ DevOps, ืืœื ืฉืœ ืกืคืง ื”ืฉื™ืจื•ืช. ืงื ื” ืžื™ื“ื” ืฉืœ ืžืฉืื‘ื™ื ืžื•ืชืื ืื•ื˜ื•ืžื˜ื™ืช ืœื˜ืขื™ื ื” ื•ื‘ืขืœ ืงืฆื‘ ืฉื™ื ื•ื™ ื’ื‘ื•ื”.

ืžืืคื™ื™ืŸ ื ืคื•ืฅ ื ื•ืกืฃ ื”ื•ื ื”ื ื˜ื™ื™ื” ืœืžื–ืขืจ ื•ืœืžืงื“ ืงื•ื“, ื•ื–ื• ื”ืกื™ื‘ื” ืฉืžื—ืฉื•ื‘ ืœืœื ืฉืจืช ื ืงืจื ืœืคืขืžื™ื ืคื•ื ืงืฆื™ื” ื›ืฉื™ืจื•ืช (FaaS).

ื”ื™ืกื˜ื•ืจื™ืช, ืกืคืงื™ืช ื”ืขื ืŸ ื”ืจืืฉื•ื ื” ืฉื”ืฆื™ืขื” FaaS ืขื AWS Lambda ื”ื™ื™ืชื” ืืžื–ื•ืŸ, ื•ืžื›ืืŸ ื”ืฉื. ื’ื ืกืคืงื™ ืฉื™ืจื•ืชื™ ืขื ืŸ ืื—ืจื™ื ืžืฆื™ืขื™ื ื›ืืœื”:

  • ืคื•ื ืงืฆื™ื•ืช ืขื ืŸ ืžื’ื•ื’ืœ
  • Azure Functions ืžื‘ื™ืช Microsoft

ื›ืœ ื”ื—ื‘ืจื•ืช ื”ืœืœื• ืžืกืคืงื•ืช ืžื—ืฉื•ื‘ ื ื˜ื•ืœ ืฉืจืชื™ื, ืงื ื” ืžื™ื“ื” ืื•ื˜ื•ืžื˜ื™ ื•ืžืฉืœืžื™ื ืจืง ืขืœ ืžื” ืฉืืชื” ืžืฉืชืžืฉ ื‘ืคื•ืขืœ, ืื‘ืœ ื”ืŸ ื ื•ืขืœื•ืช ืœืงื•ื—ื•ืช ืœืžื•ืฆืจ ื”ืงื ื™ื™ื ื™ ืฉืœื”ืŸ. ืขื ื–ืืช, ื™ืฉื ืŸ ื—ืœื•ืคื•ืช ื—ื™ื ืžื™ื•ืช ื•ืงื•ื“ ืคืชื•ื— ืขื‘ื•ืจ ืžื—ืฉื•ื‘ ืœืœื ืฉืจืช. ื–ื” ืœื ืฉื•ื•ื” ื›ืœื•ื:

  • ืคึผืœึทื˜ืคื•ึนืจืžึธื” Apache OpenWhisk, ืฉืคื•ืชื— ื‘ื—ืžืžื” ืขืœ ื™ื“ื™ IBM,
  • ืคื•ื ืงืฆื™ื•ืช ืขื ืŸ ืื‘ื™ื‘, ื›ื—ืœืง ืžืžืขืจื›ืช ืืงื•ืœื•ื’ื™ืช ืขืฉื™ืจื” ืœืžื“ื™ ืฉืœ Spring Framework, ืฉื™ื›ื•ืœื” ืœืฉืžืฉ ื’ื ื›ื—ื–ื™ืช ืขื‘ื•ืจ AWS Lambda, Azure Functions ื•-OpenWhisk,
  • ืคืจื•ื™ืงื˜ Fn, ื ืชืžืš ืขืœ ื™ื“ื™ ืื•ืจืงืœ.

ื›ื•ืœื ื‘ืœืชื™ ืชืœื•ื™ื™ื ืœื—ืœื•ื˜ื™ืŸ ื‘ืขื ื ื™ื, ื›ืœื•ืžืจ ื ื™ืชืŸ ืœื”ืชืงื™ืŸ ืื•ืชื ื‘ื›ืœ ืขื ืŸ, ื›ื•ืœืœ ืžืฉืœื›ื, ืฆื™ื‘ื•ืจื™ ืื• ืคืจื˜ื™ ื•ื›ืžื•ื‘ืŸ ื‘-Exoscale.

ื›ื™ืฆื“ ืคื•ืขืœ ืคืจื•ื™ืงื˜ Fn

Fn ืžื‘ื•ืกืก ืœื—ืœื•ื˜ื™ืŸ ืขืœ Docker, ืžื•ืจื›ื‘ ืžืฉื ื™ ืžืจื›ื™ื‘ื™ื ืขื™ืงืจื™ื™ื:

  • ืชื•ื›ื ื™ืช CLI ืฉื ื•ืขื“ื” ืœื ื”ืœ ืืช ื›ืœ ื”ื”ื™ื‘ื˜ื™ื ืฉืœ ืชืฉืชื™ืช Fn, ื•ืžืงื™ื™ืžืช ืื™ื ื˜ืจืืงืฆื™ื” ืขื ืฉืจืช Fn,
  • ืฉืจืช ื”-Fn ืขืฆืžื• ื”ื•ื ื™ื™ืฉื•ื ืจื’ื™ืœ ืฉื ืืจื– ื‘ืงื•ื ื˜ื™ื™ื ืจ ืฉืœ Docker.

ื”ืคื•ื ืงืฆื™ื•ืช ื”ืคืจื•ืกื•ืช ื‘-Fn ืžื‘ื•ืฆืขื•ืช ื’ื ื‘ืงื•ื ื˜ื™ื™ื ืจื™ื ื ืคืจื“ื™ื, ืžื” ืฉืžืืคืฉืจ ืœืš ืœืชืžื•ืš ื‘ื”ืจื‘ื” ืฉืคื•ืช ืชื›ื ื•ืช, ืœืžืฉืœ... Clojure!

ืืจื’ื•ืžื ื˜ื™ื ืฉืœ ืคื•ื ืงืฆื™ื” ืžื•ืขื‘ืจื™ื ืœืงืœื˜ ืกื˜ื ื“ืจื˜ื™ (STDIN), ืชื•ืฆืื•ืช ื ื›ืชื‘ื•ืช ืœืคืœื˜ ืกื˜ื ื“ืจื˜ื™ (STDOUT). ืื ื”ืืจื’ื•ืžื ื˜ื™ื ืื• ืขืจื›ื™ ื”ื”ื—ื–ืจื” ืื™ื ื ืขืจื›ื™ื ืคืฉื•ื˜ื™ื (ื›ื’ื•ืŸ ืื•ื‘ื™ื™ืงื˜ JSON), ื ื™ืชืŸ ืœื”ืžื™ืจ ืื•ืชื ื‘ืืžืฆืขื•ืช ืฉื›ื‘ืช ื”ืคืฉื˜ื” ืฉืกื•ืคืงื” ืขืœ ื™ื“ื™ Fn ืขืฆืžื” ื‘ืฆื•ืจื” ืฉืœ ืขืจื›ืช ืคื™ืชื•ื— ืคื•ื ืงืฆื™ื•ืช (FDK).

ืœื ื•ื—ื•ืช, ืขืจื›ื•ืช ืžื•ื‘ื ื•ืช ืฉืœ ืชื‘ื ื™ื•ืช ืžื•ืฆืขื•ืช ื›ื“ื™ ืœื”ืงืœ ืขืœ ื”ืคืจื™ืกื” ืฉืœ FaaS ื‘ืจืฉื™ืžื” ื ืจื—ื‘ืช ืฉืœ ืฉืคื•ืช ืฉื•ื ื•ืช ื•ื’ืจืกืื•ืชื™ื”ืŸ (Go, ื’ืจืกืื•ืช ืฉื•ื ื•ืช ืฉืœ Java, Python ื•ื›ื•').

ื™ืฆื™ืจืช FaaS ืงืœื” ืขืœ ื™ื“ื™ ื‘ื™ืฆื•ืข ื”ืชืจืฉื™ื ื”ื–ื”:

  • ืคืจื™ืกืช ื”ืคื•ื ืงืฆื™ื” ื‘ืืžืฆืขื•ืช Fn CLI: ื ื•ืฆืจ ืงื•ื‘ืฅ ืชืฆื•ืจื” ืฉืœ ื™ื™ืฉื•ื ืขื‘ื•ืจ Fn ื‘ื”ืชื‘ืกืก ืขืœ ื”ืชื‘ื ื™ืช ืฉื ื‘ื—ืจื”.
  • ืื ื• ืžื’ืœื’ืœื™ื ืคื•ื ืงืฆื™ื” ืžืฉืœื ื•, ืฉื•ื‘ ื‘ืืžืฆืขื•ืช CLI Fn: ืชืžื•ื ืช ื”ืžื™ื›ืœ ืžืžื•ืงืžืช ื‘ืžืื’ืจ ืžืกื•ื™ื, ื•ืœืื—ืจ ืžื›ืŸ ืžื•ื“ื™ืขื™ื ืœืฉืจืช ืขืœ ืงื™ื•ืžื” ื•ืžื™ืงื•ืžื” ืฉืœ ืชืžื•ื ื” ื–ื•.

ื‘ื ื™ื™ืช ืฉืจืชื™ื ืžืฉืœื ื• ืขืœ ื‘ืกื™ืก Fn
ื”ืขื™ืงืจื•ืŸ ืฉืœ ื”ืขื‘ืจืช ืคื•ื ืงืฆื™ื•ืช ืœ-Fn

ื”ืชืงื ื” ื•ื‘ื“ื™ืงื” ืžืงื•ืžื™ืช ืฉืœ ืคื•ื ืงืฆื™ื•ืช ืœืœื ืฉืจืช

ื‘ื•ืื• ื ืชื—ื™ืœ ืœื”ืชืงื™ืŸ Fn ื‘ืžื—ืฉื‘ ื”ืžืงื•ืžื™. ืจืืฉื™ืช, Docker ืžื•ืชืงืŸ, ื›ื ื“ืจืฉ ืขืœ ื™ื“ื™ Fn. ื‘ื”ื ื—ื” ืฉืื ื—ื ื• ื‘-Debian/Ubuntu:

$ sudo apt-get update
$ sudo apt-get install docker.io

ืœื—ืœื•ืคื™ืŸ, ื”ืฉืชืžืฉ ื‘-build ืžื ื”ืœ ื—ื‘ื™ืœื•ืช/Docker ื‘ื”ืชืื ืœืžืขืจื›ืช ืฉืœืš. ืื– ืืชื” ื™ื›ื•ืœ ืœืœื›ืช ื™ืฉืจ ืœื”ืชืงื ืช ื”-Fn CLI. ืœื“ื•ื’ืžื”, ื‘ืืžืฆืขื•ืช ืชืœืชืœ:

$ curl -LSs https://raw.githubusercontent.com/fnproject/cli/master/install | sh

ืื ืืชื” ื‘-OSX ืขื Homebrew ืžื•ืชืงืŸ, ืืชื” ื™ื›ื•ืœ ืœืœื›ืช ื‘ื“ืจืš ืื—ืจืช:

$ brew install fn

==> Downloading https://homebrew.bintray.com/bottles/fn-0.5.8.high_sierra.bottle.tar.gz
==> Downloading from https://akamai.bintray.com/b1/b1767fb00e2e69fd9da73427d0926b1d1d0003622f7ddc0dd3a899b2894781ff?__gda__=exp=1538038849~hmac=c702c9335e7785fcbacad1f29afa61244d02f2eebb
######################################################################## 100.0%
==> Pouring fn-0.5.8.high_sierra.bottle.tar.gz
  /usr/local/Cellar/fn/0.5.8: 5 files, 16.7MB

ื›ืขืช ืื ื• ืžื•ื›ื ื™ื ืœืคืจื•ืก ืชื—ื™ืœื” ืืช ื”ืคื•ื ืงืฆื™ื” ืฉืœื ื• ื‘ืืžืฆืขื•ืช ื”-CLI. ืœืžืขืŸ ื”ืคืฉื˜ื•ืช, ื ืฉืชืžืฉ ื‘ืกื‘ื™ื‘ืช ื”ืฉืงื” ืžื•ื‘ื ื™ืช, ื›ื’ื•ืŸ Node:

$ fn init --runtime node --trigger http hellonode

Creating function at: /hellonode
Function boilerplate generated.
func.yaml created.

ืชื™ื•ื•ืฆืจ ืกืคืจื™ื™ื” ื—ื“ืฉื” hellonode ื›ื“ื™ ืœื”ืžืฉื™ืš ื•ืœืคืชื— ืืช ืคื•ื ืงืฆื™ื™ืช ื”-Fn ืฉืœื ื• ืขื ื›ืžื” ืงื•ื‘ืฆื™ ืชืฆื•ืจื” ื‘ืกื™ืกื™ื™ื. ื‘ืชื•ืš ื”ืกืคืจื™ื™ื” ื”ื—ื“ืฉื” ืฉื ื•ืฆืจื”, ืืชื” ื™ื›ื•ืœ ืœื™ืฆื•ืจ ืืช ื”ื™ื™ืฉื•ื ืฉืœืš ื‘ื”ืชืื ืœืกื˜ื ื“ืจื˜ื™ื ืฉืœ ื”ืฉืคื” ืื• ื–ืžืŸ ื”ืจื™ืฆื” ืฉื‘ื—ืจืช:

# ะšะฐั‚ะฐะปะพะณ ั node ะฒั‹ะณะปัะดะธั‚ ั‚ะฐะบ:

   hellonode
   โ”œโ”€โ”€ func.js
   โ”œโ”€โ”€ func.yaml
   โ””โ”€โ”€ package.json

# ะกะฒะตะถะตัƒัั‚ะฐะฝะพะฒะปะตะฝะฝะพะต ะพะบั€ัƒะถะตะฝะธะต Java11 ั‚ะฐะบะพะต:

   hellojava11
   โ”œโ”€โ”€ func.yaml
   โ”œโ”€โ”€ pom.xml
   โ””โ”€โ”€ src
       โ”œโ”€โ”€ main
       โ”‚   โ””โ”€โ”€ java
       โ”‚       โ””โ”€โ”€ com
       โ”‚           โ””โ”€โ”€ example
       โ”‚               โ””โ”€โ”€ fn
       โ”‚                   โ””โ”€โ”€ HelloFunction.java
       โ””โ”€โ”€ test
           โ””โ”€โ”€ java
               โ””โ”€โ”€ com
                   โ””โ”€โ”€ example
                       โ””โ”€โ”€ fn
                           โ””โ”€โ”€ HelloFunctionTest.java

Fn ื™ื•ืฆืจ ืืช ืžื‘ื ื” ื”ืคืจื•ื™ืงื˜ ื”ืจืืฉื•ื ื™, ื™ื•ืฆืจ ืงื•ื‘ืฅ func.yaml, ื”ืžื›ื™ืœ ืืช ื”ื”ื’ื“ืจื•ืช ื”ื“ืจื•ืฉื•ืช ืขื‘ื•ืจ Fn, ื•ืžื’ื“ื™ืจ ืืช ื”ืชื‘ื ื™ืช ืขื‘ื•ืจ ื”ืงื•ื“ ื‘ืฉืคื” ืฉื‘ื—ืจืช.

ื‘ืžืงืจื” ืฉืœ ื–ืžืŸ ืจื™ืฆื” ืฉืœ ื”ืฆื•ืžืช, ื”ืžืฉืžืขื•ืช ื”ื™ื:

$ cat hellonode/func.js

const fdk=require('@fnproject/fdk');

fdk.handle(function(input){
  let name = 'World';
  if (input.name) {
    name = input.name;
  }
  return {'message': 'Hello ' + name}
})

ื›ืขืช ื ื‘ื“ื•ืง ื‘ืžื”ื™ืจื•ืช ืืช ื”ืคื•ื ืงืฆื™ื” ืฉืœื ื• ื‘ืื•ืคืŸ ืžืงื•ืžื™ ื›ื“ื™ ืœืจืื•ืช ืื™ืš ื”ื›ืœ ืขื•ื‘ื“.

ืจืืฉื™ืช, ื ืชื—ื™ืœ ืืช ืฉืจืช Fn. ื›ืคื™ ืฉื›ื‘ืจ ืฆื•ื™ืŸ, ืฉืจืช ื”-Fn ื”ื•ื ืงื•ื ื˜ื™ื™ื ืจ Docker, ื•ืœื›ืŸ, ืœืื—ืจ ื”ื”ืคืขืœื”, ื”ื•ื ื™ืขื‘ื•ืจ ื•ื™ื™ืงื— ืืช ื”ืชืžื•ื ื” ืžื”ืจื™ืฉื•ื ืฉืœ Docker.

$ fn start -d                    # ะทะฐะฟัƒัะบะฐะตะผ ะปะพะบะฐะปัŒะฝั‹ะน ัะตั€ะฒะตั€ ะฒ ั„ะพะฝะต

Unable to find image 'fnproject/fnserver:latest' locally
latest: Pulling from fnproject/fnserver
ff3a5c916c92: Pull complete
1a649ea86bca: Pull complete
ce35f4d5f86a: Pull complete

...

Status: Downloaded newer image for fnproject/fnserver:latest
668ce9ac0ed8d7cd59da49228bda62464e01bff2c0c60079542d24ac6070f8e5

ื›ื“ื™ ืœื”ืคืขื™ืœ ืืช ื”ืคื•ื ืงืฆื™ื” ืฉืœื ื•, ื™ืฉ "ืœื’ืœื’ืœ ืื•ืชื”". ื–ื” ื“ื•ืจืฉ ะธะผั ะฟั€ะธะปะพะถะตะฝะธั: ื‘-Fn, ื™ืฉ ืœืฆื™ื™ืŸ ืืช ื›ืœ ื”ื™ื™ืฉื•ืžื™ื ื›ืžืจื—ื‘ื™ ืฉืžื•ืช ืขื‘ื•ืจ ืคื•ื ืงืฆื™ื•ืช ืงืฉื•ืจื•ืช.

Fn CLI ื™ื—ืคืฉ ืืช ื”ืงื•ื‘ืฅ func.yaml ื‘ืกืคืจื™ื™ื” ื”ื ื•ื›ื—ื™ืช ืฉืชืฉืžืฉ ืœื”ื’ื“ืจืช ื”ืคื•ื ืงืฆื™ื”. ืื– ืงื•ื“ื ื›ืœ ืืชื” ืฆืจื™ืš ืœืœื›ืช ืœืกืคืจื™ื™ื” ืฉืœื ื• hellonode.

$ cd hellonode
$ fn deploy --app fnexo --local  # ะฒั‹ะบะฐั‚ั‹ะฒะฐะตะผ ั„ัƒะฝะบั†ะธัŽ ะปะพะบะฐะปัŒะฝะพ, ะธะผั ะฟั€ะธะปะพะถะตะฝะธั - fnexo.
                                 # ะฟะฐั€ะฐะผะตั‚ั€ local ะฝะต ะทะฐะปะธะฒะฐะตั‚ ะพะฑั€ะฐะท ะฒ ัƒะดะฐะปะตะฝะฝั‹ะน ั€ะตะตัั‚ั€,
                                 # ะทะฐะฟัƒัะบะฐั ะตะณะพ ะฝะฐะฟั€ัะผัƒัŽ

Deploying hellonode to app: fnexo
Bumped to version 0.0.2
Building image nfrankel/hellonode:0.0.3 .
Updating function hellonode using image nfrankel/hellonode:0.0.3...
Successfully created app:  fnexo
Successfully created function: hellonode with nfrankel/hellonode:0.0.3
Successfully created trigger: hellonode-trigger

ื›ืคื™ ืฉื ื™ืชืŸ ืœืจืื•ืช ืžืคืœื˜ ื”ืคืงื•ื“ื”, ื ื•ืฆืจืช ืชืžื•ื ืช ืžื™ื›ืœ ื—ื“ืฉื” ืฉืœ Docker ื”ืžื›ื™ืœื” ืืช ื”ืคื•ื ืงืฆื™ื” ืฉืœื ื•. ื”ืคื•ื ืงืฆื™ื” ืžื•ื›ื ื” ืœื”ื™ืงืจื, ื•ื™ืฉ ืœื ื• ืฉืชื™ ื“ืจื›ื™ื ืœืขืฉื•ืช ื–ืืช:

  • ื‘ืืžืฆืขื•ืช ื”ืคืงื•ื“ื” Fn invoke
  • ืžืชืงืฉืจ ื™ืฉื™ืจื•ืช ื“ืจืš http

ะ’ั‹ะทะพะฒ invoke ื‘ืืžืฆืขื•ืช Fn ื”ื•ื ืคืฉื•ื˜ ืžื—ืงื” ืขื‘ื•ื“ื” ื‘ืืžืฆืขื•ืช HTTP ืขื‘ื•ืจ ื‘ื“ื™ืงื•ืช, ื•ื–ื” ื ื•ื— ืœื‘ื“ื™ืงื” ืžื”ื™ืจื”:

$ fn invoke fnexo hellonode      # ะฒั‹ะทั‹ะฒะฐะตะผ ั„ัƒะฝะบั†ะธัŽ hellonode ะฟั€ะธะปะพะถะตะฝะธั fnexo

{"message":"Hello World"}

ื›ื“ื™ ืœื”ืชืงืฉืจ ื™ืฉื™ืจื•ืช ืœืคื•ื ืงืฆื™ื”, ืขืœื™ืš ืœื“ืขืช ืืช ื›ืชื•ื‘ืช ื”ืืชืจ ื”ืžืœืื”:

$ curl http://localhost:8080/t/fnexo/hellonode-trigger

{"message":"Hello World"}

ืฉืจืช Fn ื—ื•ืฉืฃ ืืช ื”ืคื•ื ืงืฆื™ื•ืช ืฉืœื• ื‘ื™ืฆื™ืื” 8080 ื•ื ืจืื” ืฉื›ืชื•ื‘ืช ื”-URL ืฉืœ ื”ืคื•ื ืงืฆื™ื” ืชื•ืืžืช ืœืชื‘ื ื™ืช t/app/function, ืื‘ืœ ืœื ืœื’ืžืจื™. ื“ืจืš HTTP, ืคื•ื ืงืฆื™ื” ืœื ื ืงืจืืช ื™ืฉื™ืจื•ืช, ืืœื ื“ืจืš ืžื” ืฉื ืงืจื ื˜ืจื™ื’ืจ, ืฉืœืคื™ ืฉืžื” "ืžืชื—ื™ืœ" ืืช ืงืจื™ืืช ื”ืคื•ื ืงืฆื™ื”. ื˜ืจื™ื’ืจื™ื ืžื•ื’ื“ืจื™ื ื‘ `func.yml ืคึผืจื•ึนื™ึถืงื˜:

schema_version: 20180708
name: hellonode
version: 0.0.3
runtime: node
entrypoint: node func.js
format: json
triggers:
- name: hellonode-trigger
  type: http
  source: /hellonode-trigger    # URL ั‚ั€ะธะณะณะตั€ะฐ

ืื ื—ื ื• ื™ื›ื•ืœื™ื ืœืฉื ื•ืช ืืช ืฉื ื”ื˜ืจื™ื’ืจ ื›ืš ืฉื™ืชืื™ื ืœืฉื ื”ืคื•ื ืงืฆื™ื”, ื–ื” ื™ืคืฉื˜ ื”ื›ืœ:

triggers:
- name: hellonode-trigger
  type: http
  source: /hellonode    # ัะพะฒะฟะฐะดะฐะตั‚ ั ะธะผะตะฝะตะผ ั„ัƒะฝะบั†ะธะธ

ืœืื—ืจ ืžื›ืŸ ืื ื• ืžืคืขื™ืœื™ื ืฉื•ื‘ ืืช ืžืกื™ืจืช ื”ืคื•ื ืงืฆื™ื” ื•ืงื•ืจืื™ื ืœื” ืžื˜ืจื™ื’ืจ ื—ื“ืฉ:

$ fn deploy --app fnexo hellonode --local
$ curl http://localhost:8080/t/fnexo/hellonode

{"message":"Hello World"}

ื”ื›ืœ ืขื•ื‘ื“! ื”ื’ื™ืข ื”ื–ืžืŸ ืœืขื‘ื•ืจ ืœื ื™ืกื•ื™ื™ื ื‘ืงื ื” ืžื™ื“ื” ืžืœื ื•ืœืคืจืกื ืืช ื”-FaaS ืฉืœื ื• ื‘ืฉืจืช!

ื”ืชืงื ืช ืฉื™ืจื•ืชื™ ืคื•ื ืงืฆื™ื” ืœืœื ืฉืจืช ืขืœ ื”ืชืฉืชื™ืช ืฉืœืš

ื‘ื•ืื• ื ืชืงื™ืŸ ื‘ืžื”ื™ืจื•ืช ืžื›ื•ื ื” ื•ื™ืจื˜ื•ืืœื™ืช ื‘ืืžืฆืขื•ืช Exoscale CLI. ืื ืขื“ื™ื™ืŸ ืœื ื”ื’ื“ืจืช ืืช ื–ื”, ืืชื” ื™ื›ื•ืœ ืœื”ืฉืชืžืฉ ืžื“ืจื™ืš ื”ื”ืชื—ืœื” ื”ืžื”ื™ืจื” ืฉืœื ื•. ื–ื”ื• ื›ืœื™ ืžื’ื ื™ื‘ ืฉื™ื’ื“ื™ืœ ืืช ื”ืคืจื•ื“ื•ืงื˜ื™ื‘ื™ื•ืช ืฉืœืš ืืคื™ืœื• ื™ื•ืชืจ. ืืœ ืชืฉื›ื— ืฉืืชื” ืฆืจื™ืš ืœื”ื’ื“ื™ืจ ื›ืœืœ ืœืคืชื™ื—ืช ืคื•ืจื˜ 8080 ื‘ืงื‘ื•ืฆืช ื”ืื‘ื˜ื—ื”! ื”ืคืงื•ื“ื•ืช ื”ื‘ืื•ืช ื™ืคืขื™ืœื• ืžื›ื•ื ื” ื•ื™ืจื˜ื•ืืœื™ืช ื ืงื™ื™ื”, ืžื•ื›ื ื” ืœืืจื— ืืช ื”ืคื•ื ืงืฆื™ื•ืช ืฉืœื ื•:

$ exo firewall create fn-securitygroup
$ exo firewall add fn-securitygroup ssh --my-ip
$ exo firewall add fn-securitygroup -p tcp -P 8080-8080 -c 0.0.0.0/0
$ exo vm create fn-server -s fn-securitygroup

ืœืื—ืจ ืžื›ืŸ ืชื•ื›ืœ ssh ืœืžื—ืฉื‘ ื”ื•ื™ืจื˜ื•ืืœื™ ื•ืœื”ืชืงื™ืŸ ืืช ืฉืจืช Fn ื”ืžืจื•ื—ืง:

$ exo ssh fn-server

The authenticity of host '185.19.30.175 (185.19.30.175)' can't be established.
ECDSA key fingerprint is SHA256:uaCKRYeX4cvim+Gr8StdPvIQ7eQgPuOKdnj5WI3gI9Q.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '185.19.30.175' (ECDSA) to the list of known hosts.
Welcome to Ubuntu 18.04 LTS (GNU/Linux 4.15.0-20-generic x86_64)

ืœืื—ืจ ืžื›ืŸ ื”ืชืงืŸ ืืช Docker ื•ืืช ืฉืจืช Fn ื‘ืื•ืชื• ืื•ืคืŸ ื›ืคื™ ืฉื›ื‘ืจ ื ืขืฉื” ื‘ืžื—ืฉื‘ ื”ืžืงื•ืžื™, ื”ืคืขืœ ืืช ื”ืฉืจืช:

$ sudo apt-get update
$ sudo apt-get install docker.io
$ sudo systemctl start docker
$ curl -LSs https://raw.githubusercontent.com/fnproject/cli/master/install | sh
$ sudo fn start

...

    ______
   / ____/___
  / /_  / __ 
 / __/ / / / /
/_/   /_/ /_/
    v0.3.643

Fn ืžื•ื›ืŸ ืœืงื‘ืœ ืคื•ื ืงืฆื™ื•ืช! ืœื”ืขื‘ืจื” ืžืžื•ืงื“ืช ืฉืœ ืคื•ื ืงืฆื™ื•ืช ืœืฉืจืช ืžืจื•ื—ืง, ื ืฉืชืžืฉ ื‘ืคืงื•ื“ื” deploy ืžื”ืžื—ืฉื‘ ื”ืžืงื•ืžื™ ืขืœ ื™ื“ื™ ื”ืฉืžื˜ืช ื”ื“ื’ืœ --local.

ื‘ื ื•ืกืฃ, Fn ื“ื•ืจืฉ ืžืžืš ืœืฆื™ื™ืŸ ืืช ื”ืžื™ืงื•ื ืฉืœ ืฉืจืช ื”-Fn ื•ืฉืœ ื”ืจื™ืฉื•ื ืฉืœ Docker. ื ื™ืชืŸ ืœื”ื’ื“ื™ืจ ืืคืฉืจื•ื™ื•ืช ืืœื• ื‘ืืžืฆืขื•ืช ืžืฉืชื ื™ ืกื‘ื™ื‘ื” FN_API_URL ะธ FN_REGISTRY ื‘ื”ืชืืžื”, ืืš ืžืฆื™ืข ื’ื ื“ืจืš ื ื•ื—ื” ื™ื•ืชืจ ืœื ื”ืœ ื‘ืงืœื•ืช ืืช ื”ื™ืฆื™ืจื” ื•ื”ื ื™ื”ื•ืœ ืฉืœ ืชืฆื•ืจื•ืช ืœืคืจื™ืกื”.

ื‘ืžื•ื ื—ื™ Fn, ื”ืชืฆื•ืจื” ืœืคืจื™ืกื” ื ืงืจืืช context. ื”ืคืงื•ื“ื” ื”ื‘ืื” ืชื™ืฆื•ืจ ืืช ื”ื”ืงืฉืจ:

$ fn create context exoscale --provider default --api-url http://185.19.30.175:8080 --registry nfrankel

ืืชื” ื™ื›ื•ืœ ืœืจืื•ืช ืืช ื”ื”ืงืฉืจื™ื ื”ื–ืžื™ื ื™ื ื›ืš:

$ fn list contexts

CURRENT NAME      PROVIDER      API URL                      REGISTRY
    default       default       http://localhost:8080/
    exoscale      default       http://185.19.30.175:8080    nfrankel

ื•ืชืขื‘ื•ืจ ืœื”ืงืฉืจ ืฉื ื•ืฆืจ ื‘ื“ื™ื•ืง ื›ืš:

 $ fn use context exoscale

 Now using context: exoscale

ืžื›ืืŸ ื•ืื™ืœืš, ืืกืคืงืช ืชื›ื•ื ืช Fn ืชื•ืจื™ื“ ืชืžื•ื ื•ืช Docker ื‘ืืžืฆืขื•ืช ื—ืฉื‘ื•ืŸ DockerHub ื”ื ื‘ื—ืจ (ื‘ืžืงืจื” ืฉืœื™ - nfrankel), ื•ืœืื—ืจ ืžื›ืŸ ื”ื•ื“ืข ืœืฉืจืช ื”ืžืจื•ื—ืง (ื‘ื“ื•ื’ืžื” ื–ื• - http://185.19.30.175:8080) ืœื’ื‘ื™ ื”ืžื™ืงื•ื ื•ื”ื’ืจืกื” ืฉืœ ื”ืชืžื•ื ื” ื”ืื—ืจื•ื ื” ื”ืžื›ื™ืœื” ืืช ื”ืคื•ื ืงืฆื™ื” ืฉืœืš.

$ fn deploy --app fnexo .   # ะฒั‹ะฟะพะปะฝัะตั‚ัั ะฝะฐ ะปะพะบะฐะปัŒะฝะพะน ะผะฐัˆะธะฝะต ะธะท ะบะฐั‚ะฐะปะพะณะฐ hellonode

Deploying function at: /.
Deploying hellonode to app: fnexo
Bumped to version 0.0.5
Building image nfrankel/hellonode:0.0.5 .

ืกื•ืฃ ื›ืœ ืกื•ืฃ:

$ curl http://185.19.30.175:8080/t/fnexo/hellonode

{"message":"Hello World"}

ื‘ื ื™ื™ืช ืฉืจืชื™ื ืžืฉืœื ื• ืขืœ ื‘ืกื™ืก Fn
ืžื—ื–ื•ืจ ื—ื™ื™ื ืฉืœ ืคื•ื ืงืฆื™ื” ื‘ืžื—ืฉื•ื‘ ืœืœื ืฉืจืช ืžื‘ื•ืกืก Fn

ื”ื™ืชืจื•ื ื•ืช ืฉืœ ืžื—ืฉื•ื‘ ืœืœื ืฉืจืช ื‘ืงื™ื‘ื•ืœืช ืฉืœืš

ืžื—ืฉื•ื‘ ืœืœื ืฉืจืชื™ื ื”ื•ื ืคืชืจื•ืŸ ื ื•ื— ืœื”ื˜ืžืขื” ืžื”ื™ืจื” ืฉืœ ื—ืœืงื™ื ืขืฆืžืื™ื™ื ืฉืœ ืืคืœื™ืงืฆื™ื” ื”ืžืงื™ื™ืžื™ื ืื™ื ื˜ืจืืงืฆื™ื” ืขื ื™ื™ืฉื•ืžื™ื ืื• ืžื™ืงืจื•-ืฉื™ืจื•ืชื™ื ืžื•ืจื›ื‘ื™ื ื™ื•ืชืจ.

ื”ื“ื‘ืจ ื ื•ื‘ืข ืœืจื•ื‘ ืžื”ืขืœื•ืช ื”ื ืกืชืจืช ืฉืœ ื ืขื™ืœื” ืืœ ื”ืกืคืง ื”ื ื‘ื—ืจ, ืืฉืจ ื‘ื”ืชืื ืœืžืงืจื” ื”ืฉื™ืžื•ืฉ ื•ื”ื ืคื— ื”ืกืคืฆื™ืคื™ื™ื, ืขืฉื•ื™ื” ืœื”ื•ื‘ื™ืœ ืœืขืœื•ื™ื•ืช ื’ื‘ื•ื”ื•ืช ื™ื•ืชืจ ื•ืœื’ืžื™ืฉื•ืช ืžื•ืคื—ืชืช ื‘ืขืชื™ื“.

ื’ื ืืจื›ื™ื˜ืงื˜ื•ืจื•ืช ืขื ืŸ ืžืจื•ื‘ื•ืช ืขื ื ื™ื ื•ืืจื›ื™ื˜ืงื˜ื•ืจื•ืช ืขื ืŸ ื”ื™ื‘ืจื™ื“ื™ื•ืช ืกื•ื‘ืœื•ืช ื‘ืžืงืจื” ื–ื”, ืžื›ื™ื•ื•ืŸ ืฉื‘ืงืœื•ืช ืชื•ื›ืœื• ืœืžืฆื•ื ืืช ืขืฆืžื›ื ื‘ืžืฆื‘ ื‘ื• ืชืจืฆื• ืœื”ืฉืชืžืฉ ื‘ืžื—ืฉื•ื‘ ืœืœื ืฉืจืชื™ื, ืืš ืขืงื‘ ืžื“ื™ื ื™ื•ืช ืืจื’ื•ื ื™ืช ื–ื” ืœื ื™ื”ื™ื” ืืคืฉืจื™.

Fn ื“ื™ ืงืœ ืœืฉื™ืžื•ืฉ ื•ื™ื›ื•ืœ ืœืกืคืง ื›ืžืขื˜ ืืช ืื•ืชื• ืžืžืฉืง FaaS, ืขื ืžืขื˜ ืชืงื•ืจื”. ื–ื” ืžื‘ื˜ืœ ื›ืœ ื ืขื™ืœืช ืกืคืงื™ื ื•ื ื™ืชืŸ ืœื”ืชืงื ื” ืžืงื•ืžื™ืช ืื• ื‘ื›ืœ ืกืคืง ืคืชืจื•ื ื•ืช ืขื ืŸ ื ื•ื— ืœื‘ื—ื™ืจืชื›ื. ื™ืฉ ื’ื ื—ื•ืคืฉ ื‘ื‘ื—ื™ืจืช ืฉืคืช ืชื›ื ื•ืช.

ืžืืžืจ ื–ื” ืžื›ืกื” ืจืง ืืช ื”ื™ืกื•ื“ื•ืช ืฉืœ Fn, ืืš ื™ืฆื™ืจืช ื–ืžืŸ ืจื™ืฆื” ืžืฉืœืš ื”ื™ื ื“ื™ ืคืฉื•ื˜ื”, ื•ื ื™ืชืŸ ืœืคืจื•ืก ืืช ื”ืืจื›ื™ื˜ืงื˜ื•ืจื” ื”ื›ื•ืœืœืช ื‘ืฆื•ืจื” ืจื—ื‘ื” ื™ื•ืชืจ ื‘ืืžืฆืขื•ืช ืžืื–ืŸ ืขื•ืžืกื™ื ืฉืœ Fn, ืื• ืขืœ ื™ื“ื™ ื”ืฆื‘ืช Fn ืžืื—ื•ืจื™ ืคืจื•ืงืกื™ ืœื”ื’ื ื”.

ืžืงื•ืจ: www.habr.com

ื”ื•ืกืคืช ืชื’ื•ื‘ื”