Fn рд╡рд░ рдЖрдзрд╛рд░рд┐рдд рдЖрдордЪреЗ рд╕реНрд╡рддрдГрдЪреЗ рд╕рд░реНрд╡реНрд╣рд░рд▓реЗрд╕ рддрдпрд╛рд░ рдХрд░рдгреЗ

Fn рд╡рд░ рдЖрдзрд╛рд░рд┐рдд рдЖрдордЪреЗ рд╕реНрд╡рддрдГрдЪреЗ рд╕рд░реНрд╡реНрд╣рд░рд▓реЗрд╕ рддрдпрд╛рд░ рдХрд░рдгреЗ

рд╕рд░реНрд╡реНрд╣рд░рд▓реЗрд╕ рд╕рдВрдЧрдгрди рдХреНрд▓рд╛рдЙрдб рдХреЙрдореНрдкреНрдпреБрдЯрд┐рдВрдЧрдордзреАрд▓ рд╕рд░реНрд╡рд╛рдд рдкреНрд░рдореБрдЦ рдЯреНрд░реЗрдВрдбрдкреИрдХреА рдПрдХ рдЖрд╣реЗ. рдореВрд▓рднреВрдд рдСрдкрд░реЗрдЯрд┐рдВрдЧ рддрддреНрддреНрд╡ рд╣реЗ рдЖрд╣реЗ рдХреА рдкрд╛рдпрд╛рднреВрдд рд╕реБрд╡рд┐рдзрд╛ рд╣реА DevOps рдЪреА рдЪрд┐рдВрддрд╛ рдирд╕реВрди рд╕реЗрд╡рд╛ рдкреНрд░рджрд╛рддреНрдпрд╛рдЪреА рдЖрд╣реЗ. рд╕рдВрд╕рд╛рдзрди рд╕реНрдХреЗрд▓рд┐рдВрдЧ рд╕реНрд╡рдпрдВрдЪрд▓рд┐рддрдкрдгреЗ рд▓реЛрдб рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рд╕рдорд╛рдпреЛрдЬрд┐рдд рд╣реЛрддреЗ рдЖрдгрд┐ рдмрджрд▓рд╛рдЪрд╛ рдЙрдЪреНрдЪ рджрд░ рдЕрд╕рддреЛ.

рдЖрдгрдЦреА рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рд╡реИрд╢рд┐рд╖реНрдЯреНрдп рдореНрд╣рдгрдЬреЗ рдХреЛрдб рдХрдореА рдХрд░рдгреНрдпрд╛рдЪреА рдЖрдгрд┐ рдлреЛрдХрд╕ рдХрд░рдгреНрдпрд╛рдЪреА рдкреНрд░рд╡реГрддреНрддреА, рдореНрд╣рдгреВрдирдЪ рд╕рд░реНрд╡реНрд╣рд░рд▓реЗрд╕ рдХрдВрдкреНрдпреБрдЯрд┐рдВрдЧрд▓рд╛ рдХрд╛рд╣реАрд╡реЗрд│рд╛ рд╕реЗрд╡рд╛ рдореНрд╣рдгреВрди рдХрд╛рд░реНрдп (FaaS) рдореНрд╣рдЯрд▓реЗ рдЬрд╛рддреЗ.

рдРрддрд┐рд╣рд╛рд╕рд┐рдХрджреГрд╖реНрдЯреНрдпрд╛, AWS Lambda рд╕рд╣ FaaS рдСрдлрд░ рдХрд░рдгрд╛рд░рд╛ рдкрд╣рд┐рд▓рд╛ рдХреНрд▓рд╛рдЙрдб рдкреНрд░рджрд╛рддрд╛ Amazon рд╣реЛрддрд╛, рдореНрд╣рдгреВрди рд╣реЗ рдирд╛рд╡. рдЗрддрд░ рдХреНрд▓рд╛рдЙрдб рд╕реЗрд╡рд╛ рдкреНрд░рджрд╛рддреЗ рджреЗрдЦреАрд▓ рд╕рдорд╛рди рдСрдлрд░ рдХрд░рддрд╛рдд:

  • Google рдХрдбреВрди рдХреНрд▓рд╛рдЙрдб рдлрдВрдХреНрд╢рдиреНрд╕
  • рдорд╛рдпрдХреНрд░реЛрд╕реЙрдлреНрдЯ рдХрдбреВрди Azure рдлрдВрдХреНрд╢рдиреНрд╕

рдпрд╛ рд╕рд░реНрд╡ рдХрдВрдкрдиреНрдпрд╛ рд╕рд░реНрд╡реНрд╣рд░рд▓реЗрд╕ рдХрдВрдкреНрдпреБрдЯрд┐рдВрдЧ, рдСрдЯреЛ-рд╕реНрдХреЗрд▓рд┐рдВрдЧ рдкреНрд░рджрд╛рди рдХрд░рддрд╛рдд рдЖрдгрд┐ рдлрдХреНрдд рддреБрдореНрд╣реА рдЬреЗ рд╡рд╛рдкрд░рддрд╛ рддреНрдпрд╛рд╕рд╛рдареА рдкреИрд╕реЗ рджреЗрддрд╛рдд, рдкрд░рдВрддреБ рддреНрдпрд╛ рдЧреНрд░рд╛рд╣рдХрд╛рдВрдирд╛ рддреНрдпрд╛рдВрдЪреНрдпрд╛ рдорд╛рд▓рдХреАрдЪреНрдпрд╛ рдЙрддреНрдкрд╛рджрдирд╛рдордзреНрдпреЗ рд▓реЙрдХ рдХрд░рддрд╛рдд. рддрдерд╛рдкрд┐, рд╕рд░реНрд╡реНрд╣рд░рд▓реЗрд╕ рдХреЙрдореНрдкреНрдпреБрдЯрд┐рдВрдЧрд╕рд╛рдареА рд╡рд┐рдирд╛рдореВрд▓реНрдп рдЖрдгрд┐ рдореБрдХреНрдд рд╕реНрддреНрд░реЛрдд рдкрд░реНрдпрд╛рдп рдЖрд╣реЗрдд. рд╣реЗ рд▓рдХреНрд╖рд╛рдд рдШреЗрдгреНрдпрд╛рд╕рд╛рд░рдЦреЗ рдЖрд╣реЗ:

  • рдкреНрд▓реЕрдЯрдлреЙрд░реНрдо Apache OpenWhisk, IBM рджреНрд╡рд╛рд░реЗ рдЗрдирдХреНрдпреВрдмреЗрдЯрд░рдордзреНрдпреЗ рд╡рд┐рдХрд╕рд┐рдд,
  • рд╡рд╕рдВрдд рдЛрддреБ рдореЗрдШ рдХрд╛рд░реНрдпреЗ, рдмрд▒реНрдпрд╛рдкреИрдХреА рд╕рдореГрджреНрдз рд╕реНрдкреНрд░рд┐рдВрдЧ рдлреНрд░реЗрдорд╡рд░реНрдХ рдЗрдХреЛрд╕рд┐рд╕реНрдЯрдордЪрд╛ рднрд╛рдЧ рдореНрд╣рдгреВрди, рдЬреНрдпрд╛рдЪрд╛ рд╡рд╛рдкрд░ AWS Lambda, Azure Functions рдЖрдгрд┐ OpenWhisk рд╕рд╛рдареА рджрд░реНрд╢рдиреА рднрд╛рдЧ рдореНрд╣рдгреВрди рджреЗрдЦреАрд▓ рдХреЗрд▓рд╛ рдЬрд╛рдК рд╢рдХрддреЛ,
  • рдкреНрд░рдХрд▓реНрдк Fn, рдУрд░реЕрдХрд▓ рджреНрд╡рд╛рд░реЗ рд╕рдорд░реНрдерд┐рдд.

рддреЗ рд╕рд░реНрд╡ рдврдЧрд╛рдВрдкрд╛рд╕реВрди рдкреВрд░реНрдгрдкрдгреЗ рд╕реНрд╡рддрдВрддреНрд░ рдЖрд╣реЗрдд, рдореНрд╣рдгрдЬреЗрдЪ рддреЗ рддреБрдордЪреНрдпрд╛ рд╕реНрд╡рддрдГрдЪреНрдпрд╛, рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдХрд┐рдВрд╡рд╛ рдЦрд╛рдЬрдЧреА рдЖрдгрд┐ рдЕрд░реНрдерд╛рддрдЪ Exoscale рдордзреНрдпреЗ рдХреЛрдгрддреНрдпрд╛рд╣реА рдХреНрд▓рд╛рдЙрдбрдордзреНрдпреЗ рд╕реНрдерд╛рдкрд┐рдд рдХреЗрд▓реЗ рдЬрд╛рдК рд╢рдХрддрд╛рдд.

Fn рдкреНрд░рдХрд▓реНрдк рдХрд╕реЗ рдХрд╛рд░реНрдп рдХрд░рддреЗ

Fn рдкреВрд░реНрдгрдкрдгреЗ рдбреЙрдХрд░рд╡рд░ рдЖрдзрд╛рд░рд┐рдд рдЖрд╣реЗ, рддреНрдпрд╛рдд рджреЛрди рдореБрдЦреНрдп рдШрдЯрдХ рдЖрд╣реЗрдд:

  • Fn рдЗрдиреНрдлреНрд░рд╛рд╕реНрдЯреНрд░рдХреНрдЪрд░рдЪреНрдпрд╛ рд╕рд░реНрд╡ рдкреИрд▓реВрдВрдЪреЗ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрди рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЖрдгрд┐ Fn рд╕рд░реНрд╡реНрд╣рд░рд╢реА рд╕рдВрд╡рд╛рдж рд╕рд╛рдзрдгреНрдпрд╛рд╕рд╛рдареА рдбрд┐рдЭрд╛рдЗрди рдХреЗрд▓реЗрд▓рд╛ CLI рдкреНрд░реЛрдЧреНрд░рд╛рдо,
  • Fn рд╕рд░реНрд╡реНрд╣рд░ рд╕реНрд╡рддрдГ рдбреЙрдХрд░ рдХрдВрдЯреЗрдирд░рдордзреНрдпреЗ рдкреЕрдХ рдХреЗрд▓реЗрд▓рд╛ рдПрдХ рдирд┐рдпрдорд┐рдд рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдЖрд╣реЗ.

Fn рдордзреНрдпреЗ рдЙрдкрдпреЛрдЬрд┐рдд рдлрдВрдХреНрд╢рдиреНрд╕ рджреЗрдЦреАрд▓ рд╡реЗрдЧрд│реНрдпрд╛ рдХрдВрдЯреЗрдирд░рдордзреНрдпреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХреЗрд▓реЗ рдЬрд╛рддрд╛рдд, рдЬреЗ рддреБрдореНрд╣рд╛рд▓рд╛ рдмрд░реНтАНрдпрд╛рдЪ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛рдВрдирд╛ рд╕рдорд░реНрдерди рджреЗрдгреНрдпрд╛рдЪреА рдкрд░рд╡рд╛рдирдЧреА рджреЗрддрд╛рдд, рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде... Clojure!

рдлрдВрдХреНрд╢рди рд╡рд┐рддрд░реНрдХ рдорд╛рдирдХ рдЗрдирдкреБрдЯ (STDIN) рдордзреНрдпреЗ рдкрд╛рд╕ рдХреЗрд▓реЗ рдЬрд╛рддрд╛рдд, рдкрд░рд┐рдгрд╛рдо рдорд╛рдирдХ рдЖрдЙрдЯрдкреБрдЯ (STDOUT) рд╡рд░ рд▓рд┐рд╣рд┐рд▓реЗ рдЬрд╛рддрд╛рдд. рдЬрд░ рдЖрд░реНрдЧреНрдпреБрдореЗрдВрдЯреНрд╕ рдХрд┐рдВрд╡рд╛ рд░рд┐рдЯрд░реНрди рд╡реНрд╣реЕрд▓реНрдпреВрдЬ рд╣реА рд╕рд╛рдзреА рд╡реНрд╣реЕрд▓реНрдпреВ (рдЬрд╕реЗ рдХреА JSON рдСрдмреНрдЬреЗрдХреНрдЯ) рдирд╕рддреАрд▓, рддрд░ рддреЗ рдлрдВрдХреНрд╢рди рдбреЗрд╡реНрд╣рд▓рдкрдореЗрдВрдЯ рдХрд┐рдЯ (FDK) рдЪреНрдпрд╛ рд╕реНрд╡рд░реВрдкрд╛рдд Fn рджреНрд╡рд╛рд░реЗ рдкреНрд░рджрд╛рди рдХреЗрд▓реЗрд▓реНрдпрд╛ рдЕреЕрдмреНрд╕реНрдЯреНрд░реЕрдХреНрд╢рди рд▓реЗрдпрд░рдЪрд╛ рд╡рд╛рдкрд░ рдХрд░реВрди рд░реВрдкрд╛рдВрддрд░рд┐рдд рдХреЗрд▓реЗ рдЬрд╛рдК рд╢рдХрддрд╛рдд.

рд╕реЛрдпреАрд╕рд╛рдареА, рд╡рд┐рд╡рд┐рдз рднрд╛рд╖рд╛рдВрдЪреНрдпрд╛ рд╡рд┐рд╕реНрддреГрдд рд╕реВрдЪреАрдордзреНрдпреЗ рдЖрдгрд┐ рддреНрдпрд╛рдВрдЪреНрдпрд╛ рдЖрд╡реГрддреНрддреНрдпрд╛рдВрдордзреНрдпреЗ (Go, Java, Python, рдЗ. рдЪреНрдпрд╛ рд╡рд┐рд╡рд┐рдз рдЖрд╡реГрддреНрддреНрдпрд╛) FaaS рддреИрдирд╛рдд рдХрд░рдгреЗ рд╕реБрд▓рдн рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕рдЪреЗ рдЕрдВрдЧрднреВрдд рд╕рдВрдЪ рдСрдлрд░ рдХреЗрд▓реЗ рдЬрд╛рддрд╛рдд.

рдпрд╛ рдЖрдХреГрддреАрдЪреЗ рдЕрдиреБрд╕рд░рдг рдХрд░реВрди FaaS рддрдпрд╛рд░ рдХрд░рдгреЗ рд╕реЛрдкреЗ рдЖрд╣реЗ:

  • Fn CLI рд╡рд╛рдкрд░реВрди рдлрдВрдХреНрд╢рди рдЙрдкрдпреЛрдЬрд┐рдд рдХрд░рдгреЗ: Fn рд╕рд╛рдареА рдНрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рдлрд╛рдЗрд▓ рдирд┐рд╡рдбрд▓реЗрд▓реНрдпрд╛ рдЯреЗрдореНрдкрд▓реЗрдЯрд╡рд░ рдЖрдзрд╛рд░рд┐рдд рддрдпрд╛рд░ рдХреЗрд▓реА рдЬрд╛рддреЗ.
  • рдЖрдореНрд╣реА рдкреБрдиреНрд╣рд╛ CLI Fn рд╡рд╛рдкрд░реВрди рдЖрдордЪреЗ рд╕реНрд╡рддрдГрдЪреЗ рдлрдВрдХреНрд╢рди рд░реЛрд▓ рдЖрдЙрдЯ рдХрд░рддреЛ: рдХрдВрдЯреЗрдирд░ рдЗрдореЗрдЬ рдПрдХрд╛ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд░реЗрдкреЙрдЬрд┐рдЯрд░реАрдордзреНрдпреЗ рдареЗрд╡рд▓реА рдЬрд╛рддреЗ, рддреНрдпрд╛рдирдВрддрд░ рд╕рд░реНрд╡реНрд╣рд░рд▓рд╛ рдпрд╛ рдкреНрд░рддрд┐рдореЗрдЪреНрдпрд╛ рдЕрд╕реНрддрд┐рддреНрд╡рд╛рдЪреА рдЖрдгрд┐ рд╕реНрдерд╛рдирд╛рдЪреА рд╕реВрдЪрдирд╛ рджрд┐рд▓реА рдЬрд╛рддреЗ.

Fn рд╡рд░ рдЖрдзрд╛рд░рд┐рдд рдЖрдордЪреЗ рд╕реНрд╡рддрдГрдЪреЗ рд╕рд░реНрд╡реНрд╣рд░рд▓реЗрд╕ рддрдпрд╛рд░ рдХрд░рдгреЗ
Fn рд╡рд░ рдХрд╛рд░реНрдпреЗ рд╡рд┐рддрд░реАрдд рдХрд░рдгреНрдпрд╛рдЪреЗ рд╕рд┐рджреНрдзрд╛рдВрдд

рд╕рд░реНрд╡реНрд╣рд░рд▓реЗрд╕ рдлрдВрдХреНрд╢рдиреНрд╕рдЪреА рд╕реНрдерд╛рдирд┐рдХ рд╕реНрдерд╛рдкрдирд╛ рдЖрдгрд┐ рдЪрд╛рдЪрдгреА

рд╕реНрдерд╛рдирд┐рдХ рдорд╢реАрдирд╡рд░ Fn рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдгреЗ рд╕реБрд░реВ рдХрд░реВрдпрд╛. рдкреНрд░рдердо, рдбреЙрдХрд░ Fn рдЪреНрдпрд╛ рдЖрд╡рд╢реНрдпрдХрддреЗрдиреБрд╕рд╛рд░ рд╕реНрдерд╛рдкрд┐рдд рдХреЗрд▓реЗ рдЖрд╣реЗ. рдЖрдореНрд╣реА рдбреЗрдмрд┐рдпрди/рдЙрдмрдВрдЯреВ рд╡рд░ рдЖрд╣реЛрдд рдЕрд╕реЗ рдЧреГрд╣реАрдд рдзрд░реВрди:

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

рдХрд┐рдВрд╡рд╛ рддреБрдордЪреНрдпрд╛ рд╕рд┐рд╕реНрдЯрдордиреБрд╕рд╛рд░ рдкреЕрдХреЗрдЬ рдореЕрдиреЗрдЬрд░/рдбреЙрдХрд░ рдмрд┐рд▓реНрдб рд╡рд╛рдкрд░рд╛. рдордЧ рддреБрдореНрд╣реА рдереЗрдЯ Fn CLI рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЬрд╛рдК рд╢рдХрддрд╛. рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рдХрд░реНрд▓ рд╡рд╛рдкрд░рдгреЗ:

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

рддреБрдореНрд╣реА Homebrew рдЗрдВрд╕реНрдЯреЙрд▓ рдХреЗрд▓реЗрд▓реЗ OSX рд╡рд░ рдЕрд╕рд▓реНрдпрд╛рд╕, рддреБрдореНрд╣реА рдЗрддрд░ рдорд╛рд░реНрдЧрд╛рдиреЗ рдЬрд╛рдК рд╢рдХрддрд╛:

$ 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 рд╡рд╛рдкрд░реВрди рдЖрдордЪреЗ рдлрдВрдХреНрд╢рди рд╕реБрд░реБрд╡рд╛рддреАрд▓рд╛ рддреИрдирд╛рдд рдХрд░рдгреНрдпрд╛рд╕ рддрдпрд╛рд░ рдЖрд╣реЛрдд. рд╕рд╛рдзреЗрдкрдгрд╛рд╕рд╛рдареА, рдЖрдореНрд╣реА рдЕрдВрдЧрднреВрдд рд▓рд╛рдБрдЪ рд╡рд╛рддрд╛рд╡рд░рдг рд╡рд╛рдкрд░реВ, рдЬрд╕реЗ рдХреА рдиреЛрдб:

$ 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

рдЖрд╡реНрд╣рд╛рди 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 рджреНрд╡рд╛рд░реЗ, рдлрдВрдХреНрд╢рдирд▓рд╛ рдереЗрдЯ рдХреЙрд▓ рдХреЗрд▓реЗ рдЬрд╛рдд рдирд╛рд╣реА, рдкрд░рдВрддреБ рддрдерд╛рдХрдерд┐рдд рдЯреНрд░рд┐рдЧрд░рджреНрд╡рд╛рд░реЗ, рдЬреЗ, рддреНрдпрд╛рдЪреНрдпрд╛ рдирд╛рд╡рд╛рдиреБрд╕рд╛рд░, рдлрдВрдХреНрд╢рди рдХреЙрд▓ "рдкреНрд░рд╛рд░рдВрдн" рдХрд░рддреЗ. рдЯреНрд░рд┐рдЧрд░реНрд╕ рдордзреНрдпреЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХреЗрд▓реЗ рдЖрд╣реЗрдд `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)

рдирдВрддрд░ рдбреЙрдХрд░ рдЖрдгрд┐ рдПрдлрдПрди рд╕рд░реНрд╡реНрд╣рд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рд╛ рдЬрд╕реЗ рдХреА рд╕реНрдерд╛рдирд┐рдХ рдорд╢реАрдирд╡рд░ рдЖрдзреАрдЪ рдХреЗрд▓реЗ рдЧреЗрд▓реЗ рд╣реЛрддреЗ, рд╕рд░реНрд╡реНрд╣рд░ рд╕реБрд░реВ рдХрд░рд╛:

$ 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 рд╡реИрд╢рд┐рд╖реНрдЯреНрдп рд╡рд┐рддрд░рдг рдирд┐рд╡рдбрд▓реЗрд▓реЗ рдбреЙрдХрд░рд╣рдм рдЦрд╛рддреЗ рд╡рд╛рдкрд░реВрди рдбреЙрдХрд░ рдкреНрд░рддрд┐рдорд╛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрд▓ (рдорд╛рдЭреНрдпрд╛ рдмрд╛рдмрддреАрдд - 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

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╛