ΠΡΡΠ³Π°Ρ ΠΎΠ±ΡΠ°Ρ ΡΠ΅ΡΡΠ° β ΡΠ΅Π½Π΄Π΅Π½ΡΠΈΡ ΠΊ ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ ΠΈ ΡΠΎΠΊΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ ΠΊΠΎΠ΄Π°, ΠΏΠΎΡΡΠΎΠΌΡ Π±Π΅ΡΡΠ΅ΡΠ²Π΅ΡΠ½ΡΠ΅ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ ΠΈΠ½ΠΎΠ³Π΄Π° Π½Π°Π·ΡΠ²Π°ΡΡ «ΡΡΠ½ΠΊΡΠΈΡ ΠΊΠ°ΠΊ ΡΡΠ»ΡΠ³Π°» (FaaS).
ΠΡΡΠΎΡΠΈΡΠ΅ΡΠΊΠΈ ΠΏΠ΅ΡΠ²ΡΠΌ ΠΏΠΎΡΡΠ°Π²ΡΠΈΠΊΠΎΠΌ ΠΎΠ±Π»Π°ΡΠ½ΡΡ ΡΡΠ»ΡΠ³, ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠΈΠ²ΡΠΈΠΌ FaaS Ρ AWS Lambda, Π±ΡΠ» Amazon, ΠΎΡΠΊΡΠ΄Π° ΠΈ ΠΏΠΎΡΠ»ΠΎ ΡΡΠΎ Π½Π°Π·Π²Π°Π½ΠΈΠ΅. ΠΡΡΠ³ΠΈΠ΅ ΠΎΠ±Π»Π°ΡΠ½ΡΠ΅ ΠΏΠΎΡΡΠ°Π²ΡΠΈΠΊΠΈ ΡΡΠ»ΡΠ³ ΡΠ°ΠΊΠΆΠ΅ ΠΏΡΠ΅Π΄Π»Π°Π³Π°ΡΡ Π°Π½Π°Π»ΠΎΠ³ΠΈ:
- Cloud Functions ΠΎΡ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ Google
- Azure Functions ΠΎΡ Microsoft
ΠΡΠ΅ ΡΡΠΈ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΡΡ Π±Π΅ΡΡΠ΅ΡΠ²Π΅ΡΠ½ΡΠ΅ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ, Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΠΌΠ°ΡΡΡΠ°Π±ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ ΠΎΠΏΠ»Π°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½Π½ΡΡ ΡΠ΅ΡΡΡΡΠΎΠ², Π½ΠΎ ΠΏΡΠΈ ΡΡΠΎΠΌ ΠΎΠ½ΠΈ ΠΏΡΠΈΠ²ΡΠ·ΡΠ²Π°ΡΡ ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠ² ΠΊ ΡΠ²ΠΎΠ΅ΠΌΡ ΠΏΡΠΎΠΏΡΠΈΠ΅ΡΠ°ΡΠ½ΠΎΠΌΡ ΠΏΡΠΎΠ΄ΡΠΊΡΡ. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ ΡΡΡΠ΅ΡΡΠ²ΡΡΡ Π±Π΅ΡΠΏΠ»Π°ΡΠ½ΡΠ΅ Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Ρ Ρ ΠΎΡΠΊΡΡΡΡΠΌ ΠΈΡΡ ΠΎΠ΄Π½ΡΠΌ ΠΊΠΎΠ΄ΠΎΠΌ Π΄Π»Ρ ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΠΈ Π±Π΅ΡΡΠ΅ΡΠ²Π΅ΡΠ½ΡΡ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠΉ. Π‘ΡΠΎΠΈΡ ΠΎΡΠΌΠ΅ΡΠΈΡΡ:
- ΠΠ»Π°ΡΡΠΎΡΠΌΡ
Apache OpenWhisk , ΡΠ°Π·ΡΠ°Π±Π°ΡΡΠ²Π°Π΅ΠΌΡΡ Π² ΠΈΠ½ΠΊΡΠ±Π°ΡΠΎΡΠ΅ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠ΅ΠΉ IBM, Spring Cloud Functions , ΠΊΠ°ΠΊ ΡΠ°ΡΡΡ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π±ΠΎΠ³Π°ΡΠΎΠΉ ΡΠΊΠΎΡΠΈΡΡΠ΅ΠΌΡ Spring Framework, ΠΊΠΎΡΠΎΡΠ°Ρ ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½Π° ΠΊΠ°ΠΊ ΡΠ°ΡΠ°Π΄ AWS Lambda, Azure Functions ΠΈ OpenWhisk,ΠΡΠΎΠ΅ΠΊΡ Fn , ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΠΌΡΠΉ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠ΅ΠΉ Oracle.
ΠΡΠ΅ ΠΎΠ½ΠΈ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΡ ΠΎΡ ΠΎΠ±Π»Π°ΠΊΠΎΠ², ΡΠΎ Π΅ΡΡΡ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°ΡΡΡΡ Π² Π»ΡΠ±ΠΎΠ΅ ΠΎΠ±Π»Π°ΠΊΠΎ, Π²ΠΊΠ»ΡΡΠ°Ρ Π²Π°ΡΠ΅ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎΠ΅, ΠΏΡΠ±Π»ΠΈΡΠ½ΠΎΠ΅ ΠΈΠ»ΠΈ ΡΠ°ΡΡΠ½ΠΎΠ΅, ΠΈ ΠΊΠΎΠ½Π΅ΡΠ½ΠΎ ΠΆΠ΅ Π² Exoscale.
ΠΠ°ΠΊ ΠΏΡΠΎΠ΅ΠΊΡ Fn ΡΡΡΡΠΎΠ΅Π½
Fn ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΠΎΡΠ½ΠΎΠ²Π°Π½ Π½Π° Docker, ΡΠΎΡΡΠΎΠΈΡ ΠΈΠ· Π΄Π²ΡΡ ΠΎΡΠ½ΠΎΠ²Π½ΡΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ²:
- CLI ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½Π½ΠΎΠΉ Π΄Π»Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ Π²ΡΠ΅ΠΌΠΈ Π°ΡΠΏΠ΅ΠΊΡΠ°ΠΌΠΈ ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΡ Fn, ΠΈ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΡΡΡΠ΅ΠΉ Ρ ΡΠ΅ΡΠ²Π΅ΡΠΎΠΌ Fn,
- Π‘ΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎ ΡΠ΅ΡΠ²Π΅Ρ Fn, ΠΎΠ±ΡΡΠ½ΠΎΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΡΠΏΠ°ΠΊΠΎΠ²Π°Π½Π½ΠΎΠ΅ Π² ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ Π΄Π»Ρ Docker.
Π€ΡΠ½ΠΊΡΠΈΠΈ, ΡΠ°Π·Π²ΠΎΡΠ°ΡΠΈΠ²Π°Π΅ΠΌΡΠ΅ Π² Fn, ΡΠ°ΠΊ ΠΆΠ΅ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ Π² ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΡ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ°Ρ , ΡΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ Π²Π΅ΡΡΠΌΠ° ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ·ΡΠΊΠΎΠ² Π΄Π»Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρβ¦ Clojure!
ΠΡΠ³ΡΠΌΠ΅Π½ΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡΡΡ Π½Π° ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΉ Π²Π²ΠΎΠ΄ (STDIN), ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ ΠΏΠΈΡΡΡΡΡ Π½Π° ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΉ Π²ΡΠ²ΠΎΠ΄ (STDOUT). ΠΠ»ΠΈ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ ΠΈΠ»ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π½Π΅ ΡΠ²Π»ΡΡΡΡΡ ΠΏΡΠΎΡΡΡΠΌΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌΠΈ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΎΠ±ΡΠ΅ΠΊΡ JSON) β ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½Ρ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠ»ΠΎΡ Π°Π±ΡΡΡΠ°ΠΊΡΠΈΠΈ, ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅ΠΌΠΎΠ³ΠΎ ΡΠ°ΠΌΠΈΠΌ Fn Π² Π²ΠΈΠ΄Π΅ ΠΊΠΎΠΌΠΏΠ»Π΅ΠΊΡΠ° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ ΡΡΠ½ΠΊΡΠΈΠΉ (FDK).
ΠΠ»Ρ ΡΠ΄ΠΎΠ±ΡΡΠ²Π° ΠΏΡΠ΅Π΄Π»Π°Π³Π°ΡΡΡΡ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΠ΅ Π½Π°Π±ΠΎΡΡ ΡΠ°Π±Π»ΠΎΠ½ΠΎΠ², ΠΎΠ±Π»Π΅Π³ΡΠ°ΡΡΠΈΡ ΡΠ°Π·Π²ΠΎΡΠ°ΡΠΈΠ²Π°Π½ΠΈΠ΅ FaaS Π½Π° ΠΎΠ±ΡΠΈΡΠ½ΠΎΠΌ ΡΠΏΠΈΡΠΊΠ΅ ΡΠ°Π·Π½ΡΡ ΡΠ·ΡΠΊΠΎΠ² ΠΈ ΠΈΡ Π²Π΅ΡΡΠΈΠΉ (Go, ΡΠ°Π·Π½ΡΠ΅ Π²Π΅ΡΡΠΈΠΈ Java, Python ΠΈ Ρ.Π΄.).
Π‘ΠΎΠ·Π΄Π°ΡΡ FaaS ΠΏΡΠΎΡΡΠΎ, ΡΠ»Π΅Π΄ΡΡ ΡΡΠΎΠΉ ΡΡ Π΅ΠΌΠ΅:
- Π Π°Π·Π²ΠΎΡΠ°ΡΠΈΠ²Π°Π΅ΠΌ ΡΡΠ½ΠΊΡΠΈΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ CLI Fn: ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΎΠ½Π½ΡΠΉ ΡΠ°ΠΉΠ» ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π΄Π»Ρ Fn, ΠΎΡΠ½ΠΎΠ²Π°Π½Π½ΡΠΉ Π½Π° Π²ΡΠ±ΡΠ°Π½Π½ΠΎΠΌ ΡΠ°Π±Π»ΠΎΠ½Π΅.
- ΠΡΠΊΠ°ΡΡΠ²Π°Π΅ΠΌ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΡ ΡΡΠ½ΠΊΡΠΈΡ, ΠΎΠΏΡΡΡ ΠΆΠ΅ Ρ ΠΏΠΎΠΌΠΎΡΡΡ CLI Fn: ΠΎΠ±ΡΠ°Π· ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ° ΠΏΠΎΠΌΠ΅ΡΠ°Π΅ΡΡΡ Π² Π½Π΅ΠΊΠΈΠΉ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ, ΠΏΠΎΡΠ»Π΅ ΡΠ΅Π³ΠΎ ΡΠ΅ΡΠ²Π΅Ρ ΡΠ²Π΅Π΄ΠΎΠΌΠ»ΡΠ΅ΡΡΡ ΠΎ ΡΡΡΠ΅ΡΡΠ²ΠΎΠ²Π°Π½ΠΈΠΈ ΠΈ ΡΠ°Π·ΠΌΠ΅ΡΠ΅Π½ΠΈΠΈ ΡΡΠΎΠ³ΠΎ ΠΎΠ±ΡΠ°Π·Π°.
ΠΡΠΈΠ½ΡΠΈΠΏ ΠΏΠΎΡΡΠ°Π²ΠΊΠΈ ΡΡΠ½ΠΊΡΠΈΠΉ Π² Fn
ΠΠΎΠΊΠ°Π»ΡΠ½Π°Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ° ΠΈ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π±Π΅ΡΡΠ΅ΡΠ²Π΅ΡΠ½ΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ
ΠΡΠΈΡΡΡΠΏΠΈΠΌ ΠΊ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ΅ Fn Π½Π° Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠΉ ΠΌΠ°ΡΠΈΠ½Π΅. Π‘Π½Π°ΡΠ°Π»Π° ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΡΡΡ Docker, ΠΊΠ°ΠΊ ΡΠΎΠ³ΠΎ ΡΡΠ΅Π±ΡΠ΅Ρ Fn. ΠΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅ΡΡΡ, ΡΡΠΎ ΠΌΡ Π½Π° Debian/Ubuntu:
$ sudo apt-get update
$ sudo apt-get install docker.io
ΠΡ ΠΈΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ ΠΏΠ°ΠΊΠ΅ΡΠΎΠ²/ ΡΠ±ΠΎΡΠΊΡ Docker ΡΠΎΠ³Π»Π°ΡΠ½ΠΎ Π²Π°ΡΠ΅ΠΉ ΡΠΈΡΡΠ΅ΠΌΠ΅. ΠΠ°ΡΠ΅ΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅ΡΠ΅ΠΉΡΠΈ ΠΏΡΡΠΌΠΈΠΊΠΎΠΌ ΠΊ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ΅ Fn CLI. Π ΠΏΡΠΈΠΌΠ΅ΡΡ, Ρ ΠΏΠΎΠΌΠΎΡΡΡ curl:
$ 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, ΠΈ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ ΡΠ°Π±Π»ΠΎΠ½ Π΄Π»Ρ ΠΊΠΎΠ΄Π° Π½Π° ΡΠ·ΡΠΊΠ΅, ΠΊΠΎΡΠΎΡΡΠΉ Π²Ρ Π²ΡΠ±ΡΠ°Π»ΠΈ.
Π ΡΠ»ΡΡΠ°Π΅ ΡΡΠ΅Π΄Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Node ΡΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ:
$ 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 Π‘LI Π±ΡΠ΄Π΅Ρ ΠΈΡΠΊΠ°ΡΡ ΡΠ°ΠΉΠ» 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"}
ΠΠ»Ρ ΡΠΎΠ³ΠΎ ΡΡΠΎΠ±Ρ Π²ΡΠ·Π²Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΡ Π½Π°ΠΏΡΡΠΌΡΡ, Π½Π°Π΄ΠΎ Π·Π½Π°ΡΡ ΠΏΠΎΠ»Π½ΡΠΉ URL:
$ curl http://localhost:8080/t/fnexo/hellonode-trigger
{"message":"Hello World"}
Π‘Π΅ΡΠ²Π΅Ρ Fn ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠ²ΠΎΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ ΡΠ΅ΡΠ΅Π· ΠΏΠΎΡΡ 8080, ΠΈ, ΠΊΠ°ΠΊ ΠΊΠ°ΠΆΠ΅ΡΡΡ, URL ΡΡΠ½ΠΊΡΠΈΠΈ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ ΡΡ
Π΅ΠΌΠ΅ t/app/function
, Π½ΠΎ Π½Π΅ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ. Π§Π΅ΡΠ΅Π· HTTP ΡΡΠ½ΠΊΡΠΈΡ Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ Π½Π΅ Π½Π°ΠΏΡΡΠΌΡΡ, Π° ΡΠ΅ΡΠ΅Π· ΡΠ°ΠΊ Π½Π°Π·ΡΠ²Π°Π΅ΠΌΡΠΉ trigger, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΎΠ³Π»Π°ΡΠ½ΠΎ ΡΠ²ΠΎΠ΅ΠΌΡ Π½Π°Π·Π²Π°Π½ΠΈΡ «Π·Π°ΠΏΡΡΠΊΠ°Π΅Ρ» Π²ΡΠ·ΠΎΠ² ΡΡΠ½ΠΊΡΠΈΠΈ. Π’ΡΠΈΠ³Π³Π΅ΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡΡΡ Π² `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 Π½Π° ΡΠ΅ΡΠ²Π΅ΡΠ΅!
Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ° ΡΠ΅ΡΠ²ΠΈΡΠΎΠ² Π±Π΅ΡΡΠ΅ΡΠ²Π΅ΡΠ½ΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ Π½Π° ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎΠΉ ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΠ΅
ΠΠ°Π²Π°ΠΉΡΠ΅ ΠΏΠΎ-Π±ΡΡΡΡΠΎΠΌΡ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΠΌ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΡ ΠΌΠ°ΡΠΈΠ½Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ CLI Exoscale. ΠΡΠ»ΠΈ Π²Ρ Π΅Π΅ Π΅ΡΠ΅ Π½Π΅ Π½Π°ΡΡΡΠΎΠΈΠ»ΠΈ β ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ
$ 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 Π·Π° ΠΏΡΠΎΠΊΡΠΈ Π΄Π»Ρ Π·Π°ΡΠΈΡΡ.
ΠΡΡΠΎΡΠ½ΠΈΠΊ: habr.com