เบเบฒเบ™เบชเป‰เบฒเบ‡ serverless เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเป€เบญเบ‡เป‚เบ”เบเบญเบตเบ‡เปƒเบชเปˆ Fn

เบเบฒเบ™เบชเป‰เบฒเบ‡ serverless เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเป€เบญเบ‡เป‚เบ”เบเบญเบตเบ‡เปƒเบชเปˆ Fn

เบ„เบญเบกเบžเบดเบงเป€เบ•เบตเบ—เบตเปˆเบšเปเปˆเบกเบตเป€เบŠเบตเบšเป€เบงเบต เปเบกเปˆเบ™เบซเบ™เบถเปˆเบ‡เปƒเบ™เบ—เปˆเบฒเบญเปˆเบฝเบ‡เบ—เบตเปˆเป‚เบ”เบ”เป€เบ”เบฑเปˆเบ™เบ—เบตเปˆเบชเบธเบ”เปƒเบ™เบ„เบญเบกเบžเบดเบงเป€เบ•เบตเป‰เบŸเบฑเบ‡. เบซเบผเบฑเบเบเบฒเบ™เบžเบทเป‰เบ™เบ–เบฒเบ™เบ‚เบญเบ‡เบเบฒเบ™เบ”เปเบฒเป€เบ™เบตเบ™เบ‡เบฒเบ™เปเบกเปˆเบ™เบงเปˆเบฒเป‚เบ„เบ‡เบชเป‰เบฒเบ‡เบžเบทเป‰เบ™เบ–เบฒเบ™เบšเปเปˆเปเบกเปˆเบ™เบ„เบงเบฒเบกเบเบฑเบ‡เบงเบปเบ™เบ‚เบญเบ‡ DevOps, เปเบ•เปˆเบ‚เบญเบ‡เบœเบนเป‰เปƒเบซเป‰เบšเปเบฅเบดเบเบฒเบ™. เบเบฒเบ™เบ‚เบฐเบซเบเบฒเบเบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ”เบ›เบฑเบšเบเบฒเบ™เป‚เบซเบผเบ”เปเบฅเบฐเบกเบตเบญเบฑเบ”เบ•เบฒเบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡เบชเบนเบ‡.

เบฅเบฑเบเบชเบฐเบ™เบฐเบ—เบปเปˆเบงเป„เบ›เบญเบตเบเบญเบฑเบ™เบซเบ™เบถเปˆเบ‡เปเบกเปˆเบ™เปเบ™เบงเป‚เบ™เป‰เบกเบ—เบตเปˆเบˆเบฐเบซเบผเบธเบ”เบซเบ™เป‰เบญเบเบฅเบปเบ‡เปเบฅเบฐเบฅเบฐเบซเบฑเบ”เป‚เบŸเบเบฑเบช, เบ™เบฑเป‰เบ™เปเบกเปˆเบ™เป€เบซเบ”เบœเบปเบ™เบ—เบตเปˆเบ„เบญเบกเบžเบดเบงเป€เบ•เบตเป‰เป€เบŠเบตเบŸเป€เบงเบตเบšเบฒเบ‡เบ„เบฑเป‰เบ‡เป€เบญเบตเป‰เบ™เบงเปˆเบฒเบซเบ™เป‰เบฒเบ—เบตเปˆเป€เบ›เบฑเบ™เบšเปเบฅเบดเบเบฒเบ™ (FaaS).

เปƒเบ™เบ›เบฐเบซเบงเบฑเบ”เบชเบฒเบ”, เบœเบนเป‰เปƒเบซเป‰เบšเปเบฅเบดเบเบฒเบ™เบŸเบฑเบ‡เบ—เปเบฒเบญเบดเบ”เบ—เบตเปˆเบชเบฐเป€เบซเบ™เบต FaaS เบเบฑเบš AWS Lambda เปเบกเปˆเบ™ Amazon, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบŠเบทเปˆ. เบœเบนเป‰เปƒเบซเป‰เบšเปเบฅเบดเบเบฒเบ™ cloud เบญเบทเปˆเบ™เป†เบเบฑเบ‡เบชเบฐเป€เบซเบ™เบตเบ—เบตเปˆเบ„เป‰เบฒเบเบ„เบทเบเบฑเบ™:

  • เบŸเบฑเบ‡เบŠเบฑเบ™เบ„เบฅเบฒเบงเบˆเบฒเบ Google
  • เบŸเบฑเบ‡เบŠเบฑเบ™ Azure เบˆเบฒเบ Microsoft

เบšเปเบฅเบดเบชเบฑเบ”เบ—เบฑเบ‡เบซเบกเบปเบ”เป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เบชเบฐเบซเบ™เบญเบ‡เบ„เบญเบกเบžเบดเบงเป€เบ•เบตเป‰ serverless, auto-scaling, เปเบฅเบฐเบžเบฝเบ‡เปเบ•เปˆเบˆเปˆเบฒเบเบ„เปˆเบฒเบชเบดเปˆเบ‡เบ—เบตเปˆเบ—เปˆเบฒเบ™เปƒเบŠเป‰เปเบ—เป‰เป†, เปเบ•เปˆเบžเบงเบเป€เบ‚เบปเบฒเบฅเบฑเบญเบเบฅเบนเบเบ„เป‰เบฒเป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบœเบฐเบฅเบดเบ”เบ•เบฐเบžเบฑเบ™เบ—เบตเปˆเป€เบ›เบฑเบ™เป€เบˆเบปเป‰เบฒเบ‚เบญเบ‡เบ‚เบญเบ‡เบžเบงเบเป€เบ‚เบปเบฒ. เบขเปˆเบฒเบ‡เปƒเบ”เบเปเปˆเบ•เบฒเบก, เบกเบตเบ—เบฒเบ‡เป€เบฅเบทเบญเบเบ—เบตเปˆเบšเปเปˆเป€เบชเบเบ„เปˆเบฒเปเบฅเบฐเปเบซเบผเปˆเบ‡เป€เบ›เบตเบ”เบชเปเบฒเบฅเบฑเบšเบ„เบญเบกเบžเบดเบงเป€เบ•เบตเป‰เบ—เบตเปˆเบšเปเปˆเบกเบตเป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบ. เบกเบฑเบ™เป€เบ›เบฑเบ™เบกเบนเบ™เบ„เปˆเบฒเบšเบญเบ:

  • เป€เบงเบ—เบต Apache OpenWhisk, เบžเบฑเบ”เบ—เบฐเบ™เบฒเปƒเบ™ incubator เป‚เบ”เบ IBM,
  • เบŸเบฑเบ‡เบŠเบฑเบ™ Spring Cloud, เป€เบ›เบฑเบ™เบชเปˆเบงเบ™เบซเบ™เบถเปˆเบ‡เบ‚เบญเบ‡เบฅเบฐเบšเบปเบšเบ™เบดเป€เบงเบ” Spring Framework เบ—เบตเปˆเบญเบธเบ”เบปเบกเบชเบปเบกเบšเบนเบ™, เป€เบŠเบดเปˆเบ‡เบเบฑเบ‡เบชเบฒเบกเบฒเบ”เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เป€เบ›เบฑเบ™ facade เบชเปเบฒเบฅเบฑเบš AWS Lambda, Azure Functions เปเบฅเบฐ OpenWhisk,
  • เป‚เบ„เบ‡เบเบฒเบ™ Fn, เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เป‚เบ”เบ Oracle.

เบžเบงเบเบกเบฑเบ™เบ—เบฑเบ‡เบซเบกเบปเบ”เปเบกเปˆเบ™เป€เบ›เบฑเบ™เป€เบญเบเบฐเบฅเบฒเบ”เบขเปˆเบฒเบ‡เบชเบปเบกเบšเบนเบ™เบ‚เบญเบ‡เป€เบกเบ„, เบ™เบฑเป‰เบ™เปเบกเปˆเบ™, เบžเบงเบเป€เบ‚เบปเบฒเบชเบฒเบกเบฒเบ”เบ•เบดเบ”เบ•เบฑเป‰เบ‡เบขเบนเปˆเปƒเบ™เป€เบกเบ„เปƒเบ”เบเปเปˆเบ•เบฒเบก, เบฅเบงเบกเบ—เบฑเบ‡เบ‚เบญเบ‡เบ—เปˆเบฒเบ™เป€เบญเบ‡, เบชเบฒเบ—เบฒเบฅเบฐเบ™เบฐเบซเบผเบทเป€เบญเบเบฐเบŠเบปเบ™, เปเบฅเบฐเปเบ™เปˆเบ™เบญเบ™เปƒเบ™ Exoscale.

เป‚เบ„เบ‡เบเบฒเบ™ Fn เป€เบฎเบฑเบ”เบงเบฝเบเปเบ™เบงเปƒเบ”

Fn เปเบกเปˆเบ™เบญเบตเบ‡เปƒเบชเปˆ Docker เบขเปˆเบฒเบ‡เบชเบปเบกเบšเบนเบ™, เบ›เบฐเบเบญเบšเบ”เป‰เบงเบเบชเบญเบ‡เบญเบปเบ‡เบ›เบฐเบเบญเบšเบ•เบปเป‰เบ™เบ•เป:

  • เป‚เบ„เบ‡เบเบฒเบ™ CLI เบ–เบทเบเบญเบญเบเปเบšเบšเบกเบฒเป€เบžเบทเปˆเบญเบˆเบฑเบ”เบเบฒเบ™เบ—เบธเบเบ”เป‰เบฒเบ™เบ‚เบญเบ‡เป‚เบ„เบ‡เบชเป‰เบฒเบ‡เบžเบทเป‰เบ™เบ–เบฒเบ™ Fn, เปเบฅเบฐเบžเบปเบงเบžเบฑเบ™เบเบฑเบšเป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบ Fn,
  • เป€เบŠเบตเบšเป€เบงเบต Fn เบ•เบปเบงเบ‚เบญเบ‡เบกเบฑเบ™เป€เบญเบ‡เป€เบ›เบฑเบ™เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™เบ›เบปเบเบเบฐเบ•เบดเบ—เบตเปˆเบšเบฑเบ™เบˆเบธเบขเบนเปˆเปƒเบ™ Docker container.

เบŸเบฑเบ‡เบŠเบฑเบ™เบ—เบตเปˆเปƒเบŠเป‰เปƒเบ™ Fn เบเบฑเบ‡เบ–เบทเบเบ›เบฐเบ•เบดเบšเบฑเบ”เบขเบนเปˆเปƒเบ™เบ–เบฑเบ‡เปเบเบเบ•เปˆเบฒเบ‡เบซเบฒเบ, เป€เบŠเบดเปˆเบ‡เบŠเปˆเบงเบเปƒเบซเป‰เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เบžเบฒเบชเบฒเบเบฒเบ™เบ‚เบฝเบ™เป‚เบ›เบฅเปเบเบฅเบกเบซเบผเบฒเบ, เบ•เบปเบงเบขเปˆเบฒเบ‡ ... Clojure!

เบญเบฒเบเบดเบงเป€เบกเบฑเบ™เบŸเบฑเบ‡เบŠเบฑเบ™เบ–เบทเบเบชเบปเปˆเบ‡เบœเปˆเบฒเบ™เป€เบ‚เบปเป‰เบฒเบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™ (STDIN), เบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบšเบ–เบทเบเบ‚เบฝเบ™เป€เบ›เบฑเบ™เบœเบปเบ™เบœเบฐเบฅเบดเบ”เบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™ (STDOUT). เบ–เป‰เบฒเบเบฒเบ™เป‚เบ•เป‰เบ–เบฝเบ‡เบซเบผเบทเบ„เปˆเบฒเบเบฑเบšเบ„เบทเบ™เบšเปเปˆเปเบกเปˆเบ™เบ„เปˆเบฒเบ‡เปˆเบฒเบเบ”เบฒเบ (เป€เบŠเบฑเปˆเบ™เบงเบฑเบ”เบ–เบธ JSON), เบžเบงเบเป€เบ‚เบปเบฒเบชเบฒเบกเบฒเบ”เบ–เบทเบเปเบ›เบ‡เป‚เบ”เบเปƒเบŠเป‰เบŠเบฑเป‰เบ™ abstraction เบชเบฐเบซเบ™เบญเบ‡เปƒเบซเป‰เป‚เบ”เบ Fn เบ•เบปเบงเบ‚เบญเบ‡เบกเบฑเบ™เป€เบญเบ‡เปƒเบ™เบฎเบนเบšเปเบšเบšเบ‚เบญเบ‡ Function Development Kit (FDK).

เป€เบžเบทเปˆเบญเบ„เบงเบฒเบกเบชเบฐเบ”เบงเบ, เบŠเบธเบ”เปเบกเปˆเปเบšเบšเปƒเบ™เบ•เบปเบงเปเบกเปˆเบ™เป„เบ”เป‰เบ–เบทเบเบชเบฐเป€เบซเบ™เบตเป€เบžเบทเปˆเบญเบญเปเบฒเบ™เบงเบเบ„เบงเบฒเบกเบชเบฐเบ”เบงเบเปƒเบ™เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰ FaaS เปƒเบ™เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเบขเปˆเบฒเบ‡เบเบงเป‰เบฒเบ‡เบ‚เบงเบฒเบ‡เบ‚เบญเบ‡เบžเบฒเบชเบฒเบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™เปเบฅเบฐเบชเบฐเบšเบฑเบšเบ‚เบญเบ‡เป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒ (Go, เบชเบฐเบšเบฑเบšเบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™เบ‚เบญเบ‡ Java, Python, เปเบฅเบฐเบญเบทเปˆเบ™เป†).

เบเบฒเบ™เบชเป‰เบฒเบ‡ FaaS เปเบกเปˆเบ™เบ‡เปˆเบฒเบเป‚เบ”เบเบ›เบฐเบ•เบดเบšเบฑเบ”เบ•เบฒเบกเปเบœเบ™เบงเบฒเบ”เบ™เบตเป‰:

  • เบเบฒเบ™เบ™เบณเปƒเบŠเป‰เบŸเบฑเบ‡เบŠเบฑเบ™เป‚เบ”เบเปƒเบŠเป‰ Fn CLI: เป„เบŸเบฅเปŒเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™เบชเบณเบฅเบฑเบš Fn เปเบกเปˆเบ™เบชเป‰เบฒเบ‡เบ‚เบถเป‰เบ™เป‚เบ”เบเบญเบตเบ‡เปƒเบชเปˆเปเบกเปˆเปเบšเบšเบ—เบตเปˆเป€เบฅเบทเบญเบ.
  • เบžเบงเบเป€เบฎเบปเบฒเบกเป‰เบงเบ™เบซเบ™เป‰เบฒเบ—เบตเปˆเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเป€เบญเบ‡, เบญเบตเบเป€เบ—เบทเปˆเบญเบซเบ™เบถเปˆเบ‡เป‚เบ”เบเปƒเบŠเป‰ CLI Fn: เบฎเบนเบšเบžเบฒเบšเบšเบฑเบ™เบˆเบธเบ–เบทเบเบˆเบฑเบ”เปƒเบชเปˆเปƒเบ™เบšเปˆเบญเบ™เป€เบเบฑเบšเบกเป‰เบฝเบ™เบ—เบตเปˆเปเบ™เปˆเบ™เบญเบ™, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เปเบˆเป‰เบ‡เป€เบ•เบทเบญเบ™เบเปˆเบฝเบงเบเบฑเบšเบเบฒเบ™เบกเบตเบขเบนเปˆเปเบฅเบฐเบเบฒเบ™เบˆเบฑเบ”เบงเบฒเบ‡เบ‚เบญเบ‡เบฎเบนเบšเบžเบฒเบšเบ™เบตเป‰.

เบเบฒเบ™เบชเป‰เบฒเบ‡ serverless เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเป€เบญเบ‡เป‚เบ”เบเบญเบตเบ‡เปƒเบชเปˆ Fn
เบซเบผเบฑเบเบเบฒเบ™เบ‚เบญเบ‡เบเบฒเบ™เบชเบปเปˆเบ‡เบกเบญเบšเบซเบ™เป‰เบฒเบ—เบตเปˆเปƒเบซเป‰ Fn

เบเบฒเบ™เบ•เบดเบ”เบ•เบฑเป‰เบ‡เปเบฅเบฐเบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเบ—เป‰เบญเบ‡เบ–เบดเปˆเบ™เบ‚เบญเบ‡เบซเบ™เป‰เบฒเบ—เบตเปˆ serverless

เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบ”เป‰เบงเบเบเบฒเบ™เบ•เบดเบ”เบ•เบฑเป‰เบ‡ Fn เปƒเบ™เป€เบ„เบทเปˆเบญเบ‡เบ—เป‰เบญเบ‡เบ–เบดเปˆเบ™. เบเปˆเบญเบ™เบญเบทเปˆเบ™เปเบปเบ”, เบžเบงเบเป€เบฎเบปเบฒเบ•เบดเบ”เบ•เบฑเป‰เบ‡ Docker, เบ•เบฒเบกเบ—เบตเปˆ Fn เบฎเบฝเบเบฎเป‰เบญเบ‡. เบ™เบตเป‰เบชเบปเบกเบกเบธเบ”เบงเปˆเบฒเบžเบงเบเป€เบฎเบปเบฒเบขเบนเปˆเปƒเบ™ Debian/Ubuntu:

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

เบซเบผเบทเปƒเบŠเป‰เบ•เบปเบงเบˆเบฑเบ”เบเบฒเบ™เบŠเบธเบ” / Docker build เบ•เบฒเบกเบฅเบฐเบšเบปเบšเบ‚เบญเบ‡เป€เบˆเบปเป‰เบฒ. เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เป„เบ›เป‚เบ”เบเบเบปเบ‡เบเบฑเบšเบเบฒเบ™เบ•เบดเบ”เบ•เบฑเป‰เบ‡ 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 runtime, เบ™เบตเป‰เบซเบกเบฒเบเบ„เบงเบฒเบกเบงเปˆเบฒ:

$ 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 container, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เบซเบผเบฑเบ‡เบˆเบฒเบเบเบฒเบ™เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™, เบกเบฑเบ™เบˆเบฐเป„เบ›เปเบฅเบฐเป€เบญเบปเบฒเบฎเบนเบšเบžเบฒเบšเบˆเบฒเบ Docker registry.

$ 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, เบ—เบธเบเป†เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™เบ•เป‰เบญเบ‡เบ–เบทเบเบฅเบฐเบšเบธเป€เบ›เบฑเบ™ namespaces เบชเปเบฒเบฅเบฑเบšเบŸเบฑเบ‡เบŠเบฑเบ™เบ—เบตเปˆเบเปˆเบฝเบงเบ‚เป‰เบญเบ‡.

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 เบกเบฑเบ™เบžเบฝเบ‡เปเบ•เปˆ emulates เป€เบฎเบฑเบ”เบงเบฝเบเบœเปˆเบฒเบ™ 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, เป€เบŠเบดเปˆเบ‡, เบญเบตเบ‡เบ•เบฒเบกเบŠเบทเปˆเบ‚เบญเบ‡เบกเบฑเบ™, "เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™" เป‚เบ—เบซเบฒเบซเบ™เป‰เบฒเบ—เบตเปˆ. Triggers เบ–เบทเบเบเปเบฒเบ™เบปเบ”เป„เบงเป‰เปƒเบ™ `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    # ัะพะฒะฟะฐะดะฐะตั‚ ั ะธะผะตะฝะตะผ ั„ัƒะฝะบั†ะธะธ

เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™, เบžเบงเบเป€เบฎเบปเบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบเบฒเบ™เบˆเบฑเบ”เบชเบปเปˆเบ‡เบŸเบฑเบ‡เบŠเบฑเบ™เบญเบตเบเป€เบ—เบทเปˆเบญเบซเบ™เบถเปˆเบ‡เปเบฅเบฐเป‚เบ—เบซเบฒเบกเบฑเบ™เบˆเบฒเบ trigger เปƒเบซเบกเปˆ:

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

{"message":"Hello World"}

เบ—เบธเบเบขเปˆเบฒเบ‡เบเบณเบฅเบฑเบ‡เป€เบฎเบฑเบ”เบงเบฝเบ! เบกเบฑเบ™เป€เบ–เบดเบ‡เป€เบงเบฅเบฒเปเบฅเป‰เบงเบ—เบตเปˆเบˆเบฐเบเป‰เบฒเบงเป„เบ›เบชเบนเปˆเบเบฒเบ™เบ—เบปเบ”เบฅเบญเบ‡เป€เบ•เบฑเบกเบฎเบนเบšเปเบšเบš เปเบฅเบฐเป€เบœเบตเบเปเบœเปˆ FaaS เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเปƒเบ™เป€เบŠเบตเบšเป€เบงเบต!

เบเบฒเบ™เบ•เบดเบ”เบ•เบฑเป‰เบ‡เบšเปเบฅเบดเบเบฒเบ™เบŸเบฑเบ‡เบŠเบฑเบ™เป€เบŠเบตเบšเป€เบงเบตเปƒเบ™เป‚เบ„เบ‡เบชเป‰เบฒเบ‡เบžเบทเป‰เบ™เบ–เบฒเบ™เบ‚เบญเบ‡เบ—เปˆเบฒเบ™เป€เบญเบ‡

เบ‚เปเปƒเบซเป‰เบ•เบดเบ”เบ•เบฑเป‰เบ‡เป€เบ„เบทเปˆเบญเบ‡ virtual เบขเปˆเบฒเบ‡เป„เบงเบงเบฒเป‚เบ”เบเปƒเบŠเป‰ Exoscale CLI. เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบเบฑเบ‡เบšเปเปˆเป„เบ”เป‰เบ•เบฑเป‰เบ‡เบกเบฑเบ™เป€เบ—เบทเปˆเบญ, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ™เปเบฒเปƒเบŠเป‰ เบ„เบนเปˆเบกเบทเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เป„เบงเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ. เบ™เบตเป‰เปเบกเปˆเบ™เป€เบ„เบทเปˆเบญเบ‡เบกเบทเบ—เบตเปˆเป€เบขเบฑเบ™เบ—เบตเปˆเบˆเบฐเป€เบžเบตเปˆเบกเบœเบปเบ™เบœเบฐเบฅเบดเบ”เบ‚เบญเบ‡เบ—เปˆเบฒเบ™เบซเบผเบฒเบเบ‚เบถเป‰เบ™. เบขเปˆเบฒเบฅเบทเบกเบงเปˆเบฒเป€เบˆเบปเป‰เบฒเบ•เป‰เบญเบ‡เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบเบปเบ”เบฅเบฐเบšเบฝเบšเป€เบžเบทเปˆเบญเป€เบ›เบตเบ”เบžเบญเบ” 8080 เปƒเบ™เบเบธเปˆเบกเบ„เบงเบฒเบกเบ›เบญเบ”เป„เบž! เบ„เปเบฒเบชเบฑเปˆเบ‡เบ•เปเปˆเป„เบ›เบ™เบตเป‰เบˆเบฐเป€เบ›เบตเบ”เบ•เบปเบงเป€เบ„เบทเปˆเบญเบ‡ virtual เบ—เบตเปˆเบชเบฐเบญเบฒเบ”, เบžเป‰เบญเบกเบ—เบตเปˆเบˆเบฐเป€เบ›เบฑเบ™เป€เบˆเบปเป‰เบฒเบžเบฒเบšเบซเบ™เป‰เบฒเบ—เบตเปˆเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ:

$ 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 เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เป€เบ„เบทเปˆเบญเบ‡ virtual เปเบฅเบฐเบ•เบดเบ”เบ•เบฑเป‰เบ‡เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบ 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"}

เบเบฒเบ™เบชเป‰เบฒเบ‡ serverless เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเป€เบญเบ‡เป‚เบ”เบเบญเบตเบ‡เปƒเบชเปˆ Fn
Function Lifecycle เปƒเบ™ Fn-Based Serverless Computing

เบ‚เปเป‰เป„เบ”เป‰เบ›เบฝเบšเบ‚เบญเบ‡เบ„เบญเบกเบžเบดเบงเป€เบ•เบตเป‰ serverless เบขเบนเปˆเปƒเบ™เบ„เบงเบฒเบกเบชเบฒเบกเบฒเบ”เบ‚เบญเบ‡เบ—เปˆเบฒเบ™เป€เบญเบ‡

เบ„เบญเบกเบžเบดเบงเป€เบ•เบตเบ—เบตเปˆเบšเปเปˆเบกเบตเป€เบŠเบตเบšเป€เบงเบตเปเบกเปˆเบ™เป€เบ›เบฑเบ™เบเบฒเบ™เปเบเป‰เป„เบ‚เบ—เบตเปˆเบชเบฐเบ”เบงเบเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบˆเบฑเบ”เบ•เบฑเป‰เบ‡เบ›เบฐเบ•เบดเบšเบฑเบ”เบžเบฒเบเบชเปˆเบงเบ™เบ—เบตเปˆเป€เบ›เบฑเบ™เป€เบญเบเบฐเบฅเบฒเบ”เบขเปˆเบฒเบ‡เป„เบงเบงเบฒเบ‚เบญเบ‡เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™เบ—เบตเปˆเบžเบปเบงเบžเบฑเบ™เบเบฑเบšเปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™ เบซเบผเบทเบšเปเบฅเบดเบเบฒเบ™เบˆเบธเบฅเบฐเบžเบฒเบเบ—เบตเปˆเบชเบฑเบšเบชเบปเบ™เบซเบผเบฒเบ.

เบ™เบตเป‰เบกเบฑเบเบˆเบฐเป€เบ›เบฑเบ™เบเป‰เบญเบ™เบ„เปˆเบฒเปƒเบŠเป‰เบˆเปˆเบฒเบเบ—เบตเปˆเป€เบŠเบทเปˆเบญเบ‡เป„เบงเป‰เบ‚เบญเบ‡เบเบฒเบ™เบฅเบฑเบญเบเบขเบนเปˆเปƒเบ™เบœเบนเป‰เบ‚เบฒเบเบ—เบตเปˆเป€เบฅเบทเบญเบ, เป€เบŠเบดเปˆเบ‡, เบญเบตเบ‡เบ•เบฒเบกเบเปเบฅเบฐเบ™เบตเบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เบชเบฐเป€เบžเบฒเบฐเปเบฅเบฐเบ›เบฐเบฅเบดเบกเบฒเบ™, เบชเบฒเบกเบฒเบ”เบ™เปเบฒเป„เบ›เบชเบนเปˆเบ„เปˆเบฒเปƒเบŠเป‰เบˆเปˆเบฒเบเบ—เบตเปˆเบชเบนเบ‡เบ‚เบถเป‰เบ™เปเบฅเบฐเบซเบผเบธเบ”เบœเปˆเบญเบ™เบ„เบงเบฒเบกเบเบทเบ”เบซเบเบธเปˆเบ™เปƒเบ™เบญเบฐเบ™เบฒเบ„เบปเบ”.

เบชเบฐเบ–เบฒเบ›เบฑเบ”เบ•เบฐเบเบฐเบเปเบฒเบŸเบฑเบ‡เบซเบผเบฒเบเบ„เบฅเบฒเบงเปเบฅเบฐเบ›เบฐเบชเบปเบกเบเบฑเบ‡เบ—เบปเบ™เบ—เบธเบเปƒเบ™เบเปเบฅเบฐเบ™เบตเบ™เบตเป‰, เป€เบžเบฒเบฐเบงเปˆเบฒเป€เบˆเบปเป‰เบฒเบชเบฒเบกเบฒเบ”เบŠเบญเบเบซเบฒเบ•เบปเบงเป€เบญเบ‡เป„เบ”เป‰เบ‡เปˆเบฒเบเปƒเบ™เบชเบฐเบ–เบฒเบ™เบฐเบเบฒเบ™เบ—เบตเปˆเป€เบˆเบปเป‰เบฒเบขเบฒเบเปƒเบŠเป‰เบ„เบญเบกเบžเบดเบงเป€เบ•เบตเป‰เบ—เบตเปˆเบšเปเปˆเบกเบตเป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบ, เปเบ•เปˆเป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบ™เบฐเป‚เบเบšเบฒเบเบ‚เบญเบ‡เบšเปเบฅเบดเบชเบฑเบ”เบกเบฑเบ™เบญเบฒเบ”เบˆเบฐเป€เบ›เบฑเบ™เป„เบ›เบšเปเปˆเป„เบ”เป‰.

Fn เปเบกเปˆเบ™เบ‚เป‰เบญเบ™เบ‚เป‰เบฒเบ‡เบ‡เปˆเบฒเบเบ—เบตเปˆเบˆเบฐเปƒเบŠเป‰เปเบฅเบฐเบชเบฒเบกเบฒเบ”เบชเบฐเบซเบ™เบญเบ‡เบเบฒเบ™เป‚เบ•เป‰เบ•เบญเบš FaaS เป€เบเบทเบญเบšเบ”เบฝเบงเบเบฑเบ™, เบกเบตเบ„เปˆเบฒเปƒเบŠเป‰เบˆเปˆเบฒเบเบžเบฝเบ‡เป€เบฅเบฑเบเบ™เป‰เบญเบ. เบกเบฑเบ™เบเปเบฒเบˆเบฑเบ”เบเบฒเบ™เบฅเบฑเบญเบเบ‚เบญเบ‡เบœเบนเป‰เบ‚เบฒเบเปƒเบ”เป†เปเบฅเบฐเบชเบฒเบกเบฒเบ”เบ•เบดเบ”เบ•เบฑเป‰เบ‡เบขเบนเปˆเปƒเบ™เบ—เป‰เบญเบ‡เบ–เบดเปˆเบ™เบซเบผเบทเปƒเบ™เบœเบนเป‰เปƒเบซเป‰เบšเปเบฅเบดเบเบฒเบ™เปเบเป‰เป„เบ‚เป€เบกเบ„เบ—เบตเปˆเบชเบฐเบ”เบงเบเบชเบฐเบšเบฒเบเบ—เบตเปˆเบ—เปˆเบฒเบ™เป€เบฅเบทเบญเบ. เบ™เบญเบเบ™เบฑเป‰เบ™เบเบฑเบ‡เบกเบตเบญเบดเบ”เบชเบฐเบฅเบฐเปƒเบ™เบเบฒเบ™เป€เบฅเบทเบญเบเบžเบฒเบชเบฒเบเบฒเบ™เบ‚เบฝเบ™เป‚เบ›เบผเปเบเบผเบก.

เบšเบปเบ”เบ„เบงเบฒเบกเบ™เบตเป‰เบเบงเบกเป€เบญเบปเบฒเบžเบฝเบ‡เปเบ•เปˆเบžเบทเป‰เบ™เบ–เบฒเบ™เบ‚เบญเบ‡ Fn, เปเบ•เปˆเบเบฒเบ™เบชเป‰เบฒเบ‡ runtime เบ‚เบญเบ‡เบ—เปˆเบฒเบ™เป€เบญเบ‡เปเบกเปˆเบ™เบ‚เป‰เบญเบ™เบ‚เป‰เบฒเบ‡เบ‡เปˆเบฒเบเบ”เบฒเบ, เปเบฅเบฐเบชเบฐเบ–เบฒเบ›เบฑเบ”เบ•เบฐเบเบฐเบžเบฒเบšเป‚เบ”เบเบฅเบงเบกเบชเบฒเบกเบฒเบ”เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เบขเปˆเบฒเบ‡เบเบงเป‰เบฒเบ‡เบ‚เบงเบฒเบ‡เบซเบผเบฒเบเป‚เบ”เบเปƒเบŠเป‰ Fn load balancer, เบซเบผเบทเป‚เบ”เบเบเบฒเบ™เบงเบฒเบ‡ Fn เบขเบนเปˆเบซเบฅเบฑเบ‡ proxy เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ›เบปเบเบ›เป‰เบญเบ‡.

เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™: www.habr.com

เบŠเบทเป‰เป‚เบฎเบ”เบ•เบดเป‰เบ‡เบ—เบตเปˆเป€เบŠเบทเปˆเบญเบ–เบทเป„เบ”เป‰เบชเปเบฒเบฅเบฑเบšเป€เบงเบฑเบšเป„เบŠเบ—เปŒเบ—เบตเปˆเบกเบตเบเบฒเบ™เบ›เบปเบเบ›เป‰เบญเบ‡ DDoS, เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบ VPS VDS ๐Ÿ”ฅ เบŠเบทเป‰เป€เบงเบฑเบšเป„เบŠเบ—เปŒเป‚เบฎเบ”เบ•เบดเป‰เบ‡เบ—เบตเปˆเป€เบŠเบทเปˆเบญเบ–เบทเป„เบ”เป‰เบ”เป‰เบงเบเบเบฒเบ™เบ›เป‰เบญเบ‡เบเบฑเบ™ DDoS, เป€เบŠเบตเบšเป€เบงเบต VPS VDS | ProHoster