ื‘ื•ื™ืขืŸ ืื•ื ื“ื–ืขืจ ืื™ื™ื’ืขื ืข ืกืขืจื•ื•ืขืจืœืขืกืก ื‘ืื–ื™ืจื˜ ืื•ื™ืฃ Fn

ื‘ื•ื™ืขืŸ ืื•ื ื“ื–ืขืจ ืื™ื™ื’ืขื ืข ืกืขืจื•ื•ืขืจืœืขืกืก ื‘ืื–ื™ืจื˜ ืื•ื™ืฃ Fn

ืกืขืจื•ื•ืขืจืœืขืกืก ืงืึทืžืคึผื™ื•ื˜ื™ื ื’ ืื™ื– ืื™ื™ื ืขืจ ืคื•ืŸ ื“ื™ ืžืขืจืกื˜ ื‘ืึทื•ื•ื•ืกื˜ ื˜ืจืขื ื“ืก ืื™ืŸ ื•ื•ืึธืœืงืŸ ืงืึทืžืคึผื™ื•ื˜ื™ื ื’. ื“ื™ ื’ืจื•ื ื˜ ืึธืคึผืขืจื™ื™ื˜ื™ื ื’ ืคึผืจื™ื ืฆื™ืคึผ ืื™ื– ืึทื– ื™ื ืคืจืึทืกื˜ืจืึทืงื˜ืฉืขืจ ืื™ื– ื ื™ืฉื˜ ื“ื™ ื“ื™ื™ึทื’ืข ืคื•ืŸ โ€‹โ€‹DevOps, ืึธื‘ืขืจ ืคื•ืŸ ื“ื™ ืกืขืจื•ื•ื™ืก ืฉืคึผื™ื™ึทื–ืขืจ. ืจื™ืกืึธืจืก ืกืงื™ื™ืœื™ื ื’ ืื•ื™ื˜ืึธืžืึทื˜ื™ืฉ ืึทื“ื–ืฉืึทืกื˜ื™ื“ ืฆื• ืžืึทืกืข ืื•ืŸ ื”ืื˜ ืึท ื”ื•ื™ืš ืงื•ืจืก ืคื•ืŸ ื˜ื•ื™ืฉืŸ.

ืืŸ ืื ื“ืขืจ ืคึผืจืึธืกื˜ ืฉื˜ืจื™ืš ืื™ื– ื“ื™ ื˜ืขื ื“ืขื ืฅ ืฆื• ืžื™ื ืึทืžื™ื™ื– ืื•ืŸ ืคืึธืงื•ืก ืงืึธื“, ื•ื•ืึธืก ืื™ื– ื•ื•ืึธืก ืกืขืจื•ื•ืขืจืœืขืกืก ืงืึทืžืคึผื™ื•ื˜ื™ื ื’ ืื™ื– ืžืืœ ื’ืขืจื•ืคืŸ ืคื•ื ืงืฆื™ืึธื ื™ืจืŸ ื•ื•ื™ ืึท ืกืขืจื•ื•ื™ืก (ืคืึทืึทืก).

ื”ื™ืกื˜ืึธืจื™ืฉ, ื“ืขืจ ืขืจืฉื˜ืขืจ ื•ื•ืึธืœืงืŸ ืฉืคึผื™ื™ึทื–ืขืจ ืฆื• ืคืึธืจืฉืœืึธื’ืŸ FaaS ืžื™ื˜ AWS Lambda ืื™ื– ื’ืขื•ื•ืขืŸ Amazon, ื“ืขืจืคืืจ ื“ืขืจ ื ืึธืžืขืŸ. ืื ื“ืขืจืข ื•ื•ืึธืœืงืŸ ืกืขืจื•ื•ื™ืก ืคึผืจืึทื•ื•ื™ื™ื“ืขืจื– ืื•ื™ืš ืคืึธืจืฉืœืึธื’ืŸ ืขื ืœืขืš ืึธื ืขืก:

  • ื•ื•ืึธืœืงืŸ ืคืึทื ื’ืงืฉืึทื ื– ืคึฟื•ืŸ Google
  • Azure ืคืึทื ื’ืงืฉืึทื ื– ืคึฟื•ืŸ ืžื™ื™ืงืจืึธืกืึธืคึฟื˜

ืึทืœืข ืคื•ืŸ โ€‹โ€‹ื“ื™ ืงืึธืžืคึผืึทื ื™ืขืก ืฆื•ืฉื˜ืขืœืŸ ืกืขืจื•ื•ืขืจืœืขืกืก ืงืึทืžืคึผื™ื•ื˜ื™ื ื’, ืึทื•ื˜ืึธ-ืกืงื™ื™ืœื™ื ื’ ืื•ืŸ ื‘ืœื•ื™ื– ื‘ืึทืฆืึธืœืŸ ืคึฟืึทืจ ื•ื•ืึธืก ืื™ืจ ื˜ืึทืงืข ื ื•ืฆืŸ, ืึธื‘ืขืจ ื–ื™ื™ ืฉืœืึธืก ืงืึทืกื˜ืึทืžืขืจื– ืื™ืŸ ื–ื™ื™ืขืจ ืคึผืจืึทืคึผืจื™ื™ืึทื˜ืขืจื™ ืคึผืจืึธื“ื•ืงื˜. ืึธื‘ืขืจ, ืขืก ื–ืขื ืขืŸ ืคืจื™ื™ ืื•ืŸ ืึธืคึฟืŸ ืžืงื•ืจ ืึทืœื˜ืขืจื ืึทื˜ื™ื•ื•ืขืก ืคึฟืึทืจ ืกืขืจื•ื•ืขืจืœืขืกืก ืงืึทืžืคึผื™ื•ื˜ื™ื ื’. ืขืก ืื™ื– ื›ื“ืื™ ืฆื• ื‘ืืžืขืจืงืŸ:

ืึทืœืข ืคื•ืŸ โ€‹โ€‹ื–ื™ื™ ื–ืขื ืขืŸ ื’ืึธืจ ืคืจื™ื™ึท ืคื•ืŸ ื•ื•ืืœืงื ืก, ื“ืึธืก ืื™ื–, ื–ื™ื™ ืงืขื ืขืŸ ื–ื™ื™ืŸ ืื™ื ืกื˜ืึทืœื™ืจืŸ ืื™ืŸ ืงื™ื™ืŸ ื•ื•ืึธืœืงืŸ, ืึทืจื™ื™ึทื ื’ืขืจืขื›ื ื˜ ื“ื™ื™ืŸ ืื™ื™ื’ืขื ืข, ืขืคื ื˜ืœืขืš ืึธื“ืขืจ ืคึผืจื™ื•ื•ืึทื˜, ืื•ืŸ ืคื•ืŸ ืงื•ืจืก ืื™ืŸ ืขืงืกืึธืกืงืึทืœืข.

ื•ื•ื™ ื“ื™ Fn ืคึผืจื•ื™ืขืงื˜ ืึทืจื‘ืขื˜

Fn ืื™ื– ื’ืึธืจ ื‘ืื–ื™ืจื˜ ืื•ื™ืฃ ื“ืึธืงืขืจ, ื‘ืืฉื˜ื™ื™ื˜ ืคื•ืŸ ืฆื•ื•ื™ื™ ื”ื•ื™ืคึผื˜ ืงืึทืžืคึผืึธื•ื ืึทื ืฅ:

  • CLI ืคึผืจืึธื’ืจืึทื ื“ื™ื–ื™ื™ื ื“ ืฆื• ืคื™ืจืŸ ืึทืœืข ืึทืกืคึผืขืงืฅ ืคื•ืŸ ื“ื™ Fn ื™ื ืคืจืึทืกื˜ืจืึทืงื˜ืฉืขืจ ืื•ืŸ ื™ื ื˜ืขืจืึทืงืฅ ืžื™ื˜ ื“ื™ Fn ืกืขืจื•ื•ืขืจ,
  • ื“ืขืจ Fn ืกืขืจื•ื•ืขืจ ื–ื™ืš ืื™ื– ืึท ืจืขื’ื•ืœืขืจ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ ืคึผืึทืงื™ื“ื–ืฉื“ ืื™ืŸ ืึท ื“ืึธืงืงืขืจ ืงืึทื ื˜ื™ื™ื ืขืจ.

ื“ื™ ืคืึทื ื’ืงืฉืึทื ื– ื“ื™ืคึผืœื•ื™ื“ ืื™ืŸ Fn ื–ืขื ืขืŸ ืื•ื™ืš ืขืงืกืึทืงื™ื•ื˜ืึทื“ ืื™ืŸ ื‘ืึทื–ื•ื ื“ืขืจ ืงืึทื ื˜ื™ื™ื ืขืจื–, ื•ื•ืึธืก ืึทืœืึทื•ื– ืื™ืจ ืฆื• ืฉื˜ื™ืฆืŸ ืึท ืคึผืœืึทืฅ ืคื•ืŸ ืคึผืจืึธื’ืจืึทืžืžื™ื ื’ ืฉืคึผืจืึทื›ืŸ, ืœืžืฉืœ ... Clojure!

ืคื•ื ืงืฆื™ืข ืึทืจื’ื•ืžืขื ื˜ืŸ ื–ืขื ืขืŸ ื“ื•ืจื›ื’ืขื’ืื ื’ืขืŸ ืฆื• ื ืึธืจืžืึทืœ ืึทืจื™ื™ึทื ืฉืจื™ื™ึทื‘ (STDIN), ืจืขื–ื•ืœื˜ืึทื˜ืŸ ื–ืขื ืขืŸ ื’ืขืฉืจื™ื‘ืŸ ืฆื• ื ืึธืจืžืึทืœ ืจืขื–ื•ืœื˜ืึทื˜ (STDOUT). ืื•ื™ื‘ ื“ื™ ืึทืจื’ื•ืžืขื ื˜ืŸ ืึธื“ืขืจ ืฆื•ืจื™ืงืงื•ืžืขืŸ ื•ื•ืึทืœื•ืขืก ื–ืขื ืขืŸ ื ื™ืฉื˜ ืคึผืฉื•ื˜ ื•ื•ืึทืœื•ืขืก (ืึทื–ืึท ื•ื•ื™ ืึท JSON ื›ื™ื™ืคืขืฅ), ื–ื™ื™ ืงืขื ืขืŸ ื–ื™ื™ืŸ ืงืึธื ื•ื•ืขืจื˜ืขื“ ืžื™ื˜ ืึท ืึทื‘ืกื˜ืจืึทืงืฆื™ืข ืฉื™ื›ื˜ืข ืฆื•ื’ืขืฉื˜ืขืœื˜ ื“ื•ืจืš Fn ื–ื™ืš ืื™ืŸ ื“ื™ ืคืึธืจืขื ืคื•ืŸ ืึท ืคื•ื ืงืฆื™ืข ืึทื ื˜ื•ื•ื™ืงืœื•ื ื’ ืงื™ื˜ (FDK).

ืคึฟืึทืจ ืงืึทื ื•ื•ื™ื ื™ืึทื ืก, ื’ืขื‘ื•ื™ื˜-ืื™ืŸ ื˜ืขืžืคึผืœืึทื˜ืขืก ื–ืขื ืขืŸ ื’ืขืคึฟื™ื ื˜ ืฆื• ืคืึทืกื™ืœืึทื˜ื™ื™ื˜ ื“ื™ ื“ื™ืคึผืœื•ื™ืžืึทื ื˜ ืคื•ืŸ FaaS ืื™ืŸ ืึท ื‘ืจื™ื™ื˜ ืจืฉื™ืžื” ืคื•ืŸ ืคืึทืจืฉื™ื“ืขื ืข ืฉืคึผืจืึทื›ืŸ ืื•ืŸ ื–ื™ื™ืขืจ ื•ื•ืขืจืกื™ืขืก (ื’ืึธ, ืคืึทืจืฉื™ื“ืขื ืข ื•ื•ืขืจืกื™ืขืก ืคื•ืŸ 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

ืึธื“ืขืจ ื ื•ืฆืŸ ืึท ืคึผืขืงืœ ืคืึทืจื•ื•ืึทืœื˜ืขืจ / ื“ืึธืงืงืขืจ ื‘ื•ื™ืขืŸ ืœื•ื™ื˜ ื“ื™ื™ืŸ ืกื™ืกื˜ืขื. ื“ืขืจื ืึธืš ืื™ืจ ืงืขื ืขืŸ ื’ื™ื™ืŸ ื’ืœื™ื™ืš ืฆื• ื™ื ืกื˜ืึทืœื™ืจืŸ ื“ื™ 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 ืกืขืจื•ื•ืขืจ ืื™ื– ืึท ื“ืึธืงืงืขืจ ืงืึทื ื˜ื™ื™ื ืขืจ, ื“ืขืจื™ื‘ืขืจ, ื ืึธืš ืกื˜ืึทืจื˜ืึทืคึผ, ืขืก ื•ื•ืขื˜ ื ืขืžืขืŸ ื“ื™ ื‘ื™ืœื“ ืคึฟื•ืŸ ื“ื™ ื“ืึธืงืงืขืจ ืจืขื’ื™ืกื˜ืจื™.

$ 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

ื•ื•ื™ ืื™ืจ ืงืขื ืขืŸ ื–ืขืŸ ืคึฟื•ืŸ ื“ื™ ื‘ืึทืคึฟืขืœ ืจืขื–ื•ืœื˜ืึทื˜, ืึท ื ื™ื™ึท ื“ืึธืงืงืขืจ ืงืึทื ื˜ื™ื™ื ืขืจ ื‘ื™ืœื“ ืื™ื– ื‘ืืฉืืคืŸ ืžื™ื˜ ืื•ื ื“ื–ืขืจ ืคื•ื ืงืฆื™ืข. ื“ื™ ืคึฟื•ื ืงืฆื™ืข ืื™ื– ื’ืจื™ื™ื˜ ืฆื• ื•ื•ืขืจืŸ ื’ืขืจื•ืคืŸ, ืื•ืŸ ืžื™ืจ ื”ืึธื‘ืŸ ืฆื•ื•ื™ื™ ื•ื•ืขื’ืŸ ืฆื• ื˜ืึธืŸ ืขืก:

  • ื ื™ืฆืŸ ื“ื™ Fn ื‘ืึทืคึฟืขืœ invoke
  • ืจื•ืคืŸ ื’ืœื™ื™ึทืš ื“ื•ืจืš http

Call invoke ื“ื•ืจืš Fn ืขืก ืคืฉื•ื˜ ืขืžื™ืึทืœื™ื™ืฅ ืึทืจื‘ืขื˜ ื“ื•ืจืš ื”ื˜ื˜ืคึผ ืคึฟืึทืจ ื˜ืขืกืฅ, ื•ื•ืึธืก ืื™ื– ื‘ืึทืงื•ื•ืขื ืคึฟืึทืจ ืฉื ืขืœ ื˜ืขืกื˜ื™ื ื’:

$ 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, ืึธื‘ืขืจ ื ื™ืฉื˜ ื’ืึธืจ. ื“ื•ืจืš ื”ื˜ื˜ืคึผ, ืึท ืคึฟื•ื ืงืฆื™ืข ืื™ื– ื ื™ืฉื˜ ื’ืขืจื•ืคึฟืŸ ื’ืœื™ื™ึทืš, ืึธื‘ืขืจ ื“ื•ืจืš ืึท ืึทื–ื•ื™ ื’ืขืจื•ืคืขื ืข ืฆื™ื ื’ืœ, ื•ื•ืึธืก, ืœื•ื™ื˜ ื–ื™ื™ืŸ ื ืึธืžืขืŸ, "ืกื˜ืึทืจื˜ื–" ื“ื™ ืคึฟื•ื ืงืฆื™ืข ืจื•ืคืŸ. ื˜ืจื™ื’ืขืจื– ื–ืขื ืขืŸ ื“ื™ืคื™ื™ื ื“ ืื™ืŸ `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)

ื“ืขืจื ืึธืš ื™ื ืกื˜ืึทืœื™ืจืŸ ื“ืึธืงืงืขืจ ืื•ืŸ ื“ื™ 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 ืกืขืจื•ื•ืขืจ ืื•ืŸ ื“ืึธืงืงืขืจ ืจืขื’ื™ืกื˜ืจื™. ื“ื™ ืึธืคึผืฆื™ืขืก ืงืขื ืขืŸ ื–ื™ื™ืŸ ื‘ืึทืฉื˜ื™ืžื˜ ื“ื•ืจืš ืกื•ื•ื™ื•ื•ืข ื•ื•ืขืจื™ืึทื‘ืึทืœื– 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

ืงื•ื™ืคืŸ ืคืึทืจืœืึธื–ืœืขืš ื”ืึธืกื˜ื™ื ื’ ืคึฟืึทืจ ื–ื™ื™ื˜ืœืขืš ืžื™ื˜ DDoS ืฉื•ืฅ, VPS VDS ืกืขืจื•ื•ืขืจืก ๐Ÿ”ฅ ืงื•ื™ืคื˜ ืคืึทืจืœืขืกืœืขื›ืข ื•ื•ืขื‘ื–ื™ื™ื˜ืœ ื”ืึธืกื˜ื™ื ื’ ืžื™ื˜ DDoS ืฉื•ืฅ, VPS VDS ืกืขืจื•ื•ืขืจืก | ProHoster