ืืืคืืื ื ืคืืฅ ื ืืกืฃ ืืื ืื ืืืื ืืืืขืจ ืืืืงื ืงืื, ืืื ืืกืืื ืฉืืืฉืื ืืื ืฉืจืช ื ืงืจื ืืคืขืืื ืคืื ืงืฆืื ืืฉืืจืืช (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 ืืืืฉื ืืืงืืื. ืจืืฉืืช, 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. ืื ืขืืืื ืื ืืืืจืช ืืช ืื, ืืชื ืืืื ืืืฉืชืืฉ
$ 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 ืื ืงื ืืฉืืืืฉ ืืืืื ืืกืคืง ืืืขื ืืช ืืืชื ืืืฉืง FaaS, ืขื ืืขื ืชืงืืจื. ืื ืืืื ืื ื ืขืืืช ืกืคืงืื ืื ืืชื ืืืชืงื ื ืืงืืืืช ืื ืืื ืกืคืง ืคืชืจืื ืืช ืขื ื ื ืื ืืืืืจืชืื. ืืฉ ืื ืืืคืฉ ืืืืืจืช ืฉืคืช ืชืื ืืช.
ืืืืจ ืื ืืืกื ืจืง ืืช ืืืกืืืืช ืฉื Fn, ืื ืืฆืืจืช ืืื ืจืืฆื ืืฉืื ืืื ืื ืคืฉืืื, ืื ืืชื ืืคืจืืก ืืช ืืืจืืืืงืืืจื ืืืืืืช ืืฆืืจื ืจืืื ืืืชืจ ืืืืฆืขืืช ืืืื ืขืืืกืื ืฉื Fn, ืื ืขื ืืื ืืฆืืช Fn ืืืืืจื ืคืจืืงืกื ืืืื ื.
ืืงืืจ: www.habr.com