
рдХреНрд▓рд╛рдЙрдб рдХрдВрдкреНрдпреВрдЯрд┐рдВрдЧ рдореЗрдВ рд╕рд░реНрд╡рд░рд▓реЗрд╕ рдХрдВрдкреНрдпреВрдЯрд┐рдВрдЧ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рджрд┐рдЦрд╛рдИ рджреЗрдиреЗ рд╡рд╛рд▓реА рдкреНрд░рд╡реГрддреНрддрд┐рдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИред рдХрд╛рдо рдХрд╛ рдореВрд▓ рд╕рд┐рджреНрдзрд╛рдВрдд рдпрд╣ рд╣реИ рдХрд┐ рдмреБрдирд┐рдпрд╛рджреА рдврд╛рдВрдЪрд╛ рджреЗрд╡рдУрдкреАрдПрд╕ рдХреА рдЪрд┐рдВрддрд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рд╕реЗрд╡рд╛ рдкреНрд░рджрд╛рддрд╛ рд╣реИред рд╕рдВрд╕рд╛рдзрди рд╕реНрдХреЗрд▓рд┐рдВрдЧ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд▓реЛрдб рдХреЗ рд▓рд┐рдП adapts рдФрд░ рдкрд░рд┐рд╡рд░реНрддрди рдХреА рдПрдХ рдЙрдЪреНрдЪ рджрд░ рд╣реИред
рдПрдХ рдЕрдиреНрдп рдЖрдо рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЛрдб рдХреЛ рдХрдо рдХрд░рдиреЗ рдФрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдкреНрд░рд╡реГрддреНрддрд┐ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╕рд░реНрд╡рд░ рд░рд╣рд┐рдд рдХрдВрдкреНрдпреВрдЯрд┐рдВрдЧ рдХреЛ рдХрднреА-рдХрднреА "рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд░реВрдк рдореЗрдВ рд╕реЗрд╡рд╛" (FaaS) рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред
рдРрддрд┐рд╣рд╛рд╕рд┐рдХ рд░реВрдк рд╕реЗ, AWS рд▓реИрдореНрдмреНрдбрд╛ рдХреЗ рд╕рд╛рде FaaS рдХреА рдкреЗрд╢рдХрд╢ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдкрд╣рд▓рд╛ рдХреНрд▓рд╛рдЙрдб рд╕реЗрд╡рд╛ рдкреНрд░рджрд╛рддрд╛ рдЕрдореЗрдЬрд╝реЕрди рдерд╛, рдЬрд╣рд╛рдВ рд╕реЗ рдирд╛рдо рдЖрддрд╛ рд╣реИред рдЕрдиреНрдп рдХреНрд▓рд╛рдЙрдб рд╕реЗрд╡рд╛ рдкреНрд░рджрд╛рддрд╛ рднреА рдПрдирд╛рд▓реЙрдЧреНрд╕ рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВ:
- Google рдХреНрд▓рд╛рдЙрдб рдлрд╝рдВрдХреНрд╢рдВрд╕
- Microsoft рд╕реЗ Azure рдлрд╝рдВрдХреНрд╢рдВрд╕
рдпреЗ рд╕рднреА рдХрдВрдкрдирд┐рдпрд╛рдВ рд╕рд░реНрд╡рд░ рд░рд╣рд┐рдд рдХрдВрдкреНрдпреВрдЯрд┐рдВрдЧ, рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд╕реНрдХреЗрд▓рд┐рдВрдЧ рдкреНрд░рджрд╛рди рдХрд░рддреА рд╣реИрдВ, рдФрд░ рдХреЗрд╡рд▓ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЗ рд▓рд┐рдП рднреБрдЧрддрд╛рди рдХрд░рддреА рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╕рд╛рде рд╣реА рд╡реЗ рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреЛ рдЙрдирдХреЗ рдорд╛рд▓рд┐рдХрд╛рдирд╛ рдЙрддреНрдкрд╛рдж рд╕реЗ рдмрд╛рдВрдзрддреА рд╣реИрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╕рд░реНрд╡рд░ рд░рд╣рд┐рдд рдХрдВрдкреНрдпреВрдЯрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдореБрдлреНрдд рдЦреБрд▓рд╛ рд╕реНрд░реЛрдд рд╡рд┐рдХрд▓реНрдк рд╣реИрдВред рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ:
рд╡реЗ рд╕рднреА рдмрд╛рджрд▓ рд╕реЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕реНрд╡рддрдВрддреНрд░ рд╣реИрдВ, рдЕрд░реНрдерд╛рдд, рд╡реЗ рдХрд┐рд╕реА рднреА рдмрд╛рджрд▓ рдореЗрдВ рд╕реНрдерд╛рдкрд┐рдд рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рдЖрдкрдХреЗ рд╕реНрд╡рдпрдВ рдХреЗ, рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдпрд╛ рдирд┐рдЬреА рдФрд░ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдПрдХреНрд╕реЛрд╕реНрдХреЗрд▓ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред
Fn рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ
Fn рдкреВрд░реА рддрд░рд╣ рд╕реЗ Docker рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИ, рдЗрд╕рдореЗрдВ рджреЛ рдореБрдЦреНрдп рдШрдЯрдХ рд╣реИрдВ:
- рд╕реАрдПрд▓рдЖрдИ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЛ рдПрдлрдПрди рдмреБрдирд┐рдпрд╛рджреА рдврд╛рдВрдЪреЗ рдХреЗ рд╕рднреА рдкрд╣рд▓реБрдУрдВ рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдПрдлрдПрди рд╕рд░реНрд╡рд░ рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХрд░рддреЗ рд╣реБрдП,
- рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ Fn рд╕рд░реНрд╡рд░, рдбреЙрдХрдЯрд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдХрдВрдЯреЗрдирд░ рдореЗрдВ рдкреИрдХ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╕рд╛рдорд╛рдиреНрдп рдЕрдиреБрдкреНрд░рдпреЛрдЧред
рдПрдлрдПрди рдореЗрдВ рддреИрдирд╛рдд рдХрд┐рдП рдЧрдП рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдХрдВрдЯреЗрдирд░реЛрдВ рдореЗрдВ рднреА рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдЖрдкрдХреЛ рдмрд╣реБрдд рд╕рд╛рд░реА рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛рдУрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП ... рдХреНрд▓реЛрдЬрд░!
рдлрд╝рдВрдХреНрд╢рди рдХреЗ рддрд░реНрдХ рдорд╛рдирдХ рдЗрдирдкреБрдЯ (STDIN) рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдкрд░рд┐рдгрд╛рдо рдорд╛рдирдХ рдЖрдЙрдЯрдкреБрдЯ (STDOUT) рдХреЛ рд▓рд┐рдЦреЗ рдЬрд╛рддреЗ рд╣реИрдВред рдпрджрд┐ рддрд░реНрдХ рдпрд╛ рд░рд┐рдЯрд░реНрди рдорд╛рди рд╕рд░рд▓ рдорд╛рди рдирд╣реАрдВ рд╣реИрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ JSON рдСрдмреНрдЬреЗрдХреНрдЯ), рддреЛ рдЙрдиреНрд╣реЗрдВ Fn рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХреА рдЧрдИ рдПрдмреНрд╕рдЯреНрд░реИрдХреНрд╢рди рд▓реЗрдпрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдлрдВрдХреНрд╢рди рдбреЗрд╡рд▓рдкрдореЗрдВрдЯ рдХрд┐рдЯ (FDK) рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП, рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рдХреЗ рдмрд┐рд▓реНрдЯ-рдЗрди рд╕реЗрдЯ рдХреА рдкреЗрд╢рдХрд╢ рдХреА рдЬрд╛рддреА рд╣реИ рдЬреЛ рд╡рд┐рднрд┐рдиреНрди рднрд╛рд╖рд╛рдУрдВ рдФрд░ рдЙрдирдХреЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ (рдЧреЛ, рдЬрд╛рд╡рд╛, рдкрд╛рдпрдерди, рдЖрджрд┐ рдХреЗ рд╡рд┐рднрд┐рдиреНрди рд╕рдВрд╕реНрдХрд░рдгреЛрдВ) рдХреА рдПрдХ рд╡рд┐рд╕реНрддреГрдд рд╕реВрдЪреА рдореЗрдВ FaaS рдХреА рддреИрдирд╛рддреА рдХреА рд╕реБрд╡рд┐рдзрд╛ рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВред
рдЗрд╕ рдкреИрдЯрд░реНрди рдХрд╛ рдкрд╛рд▓рди рдХрд░рдХреЗ FaaS рдмрдирд╛рдирд╛ рдЖрд╕рд╛рди рд╣реИ:
- рд╣рдо CLI 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
рдпрджрд┐ рдЖрдк рд╣реЛрдордмреЙрдХреН рд╕реНрдерд╛рдкрд┐рдд рдХреЗ рд╕рд╛рде 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.
рдХреБрдЫ рдмреБрдирд┐рдпрд╛рджреА рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рд╛рде рд╣рдорд╛рд░реЗ Fn рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдФрд░ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ hellonode
рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдмрдирд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдирдИ рдмрдирд╛рдИ рдЧрдИ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреЗ рдЕрдВрджрд░, рдЖрдк рдЕрдкрдирд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдЖрдкрдХреА рдЪреБрдиреА рд╣реБрдИ рднрд╛рд╖рд╛ рдпрд╛ рд░рдирдЯрд╛рдЗрдо рдХреЗ рдорд╛рдирдХреЛрдВ рдХрд╛ рдЕрдиреБрд╕рд░рдг рдХрд░рддрд╛ рд╣реИ:
# 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 рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕рдВрд░рдЪрдирд╛ рдмрдирд╛рддрд╛ рд╣реИ, Fn рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдпреБрдХреНрдд рдПрдХ func.yaml
рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рддрд╛ рд╣реИ, рдФрд░ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдЪреБрдиреА рдЧрдИ рднрд╛рд╖рд╛ рдореЗрдВ рдХреЛрдб рдХреЗ рд▓рд┐рдП рдПрдХ рдЯреЗрдореНрдкрд▓реЗрдЯ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддрд╛ рд╣реИред
рдиреЛрдб рд░рдирдЯрд╛рдЗрдо рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ:
$ 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 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
рдлрд╝рд╛рдЗрд▓ рдХреА 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
рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реАрдзреЗ рдХреЙрд▓ рдХрд░рдирд╛
Fn рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ invoke
рд╕реЗ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдмрд╕ 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
рдкреНрд░реЛрдЬреЗрдХреНрдЯ `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 рдПрдХреНрд╕реЛрд╕реНрдХреЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВред рдпрджрд┐ рдЖрдкрдиреЗ рдЗрд╕реЗ рдЕрднреА рддрдХ рд╕реЗрдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ, рддреЛ рдЖрдк рдЗрд╕реЗ рдЬрд▓реНрджреА рд╕реЗ рд▓реЙрдиреНрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реЗ рдЧрд╛рдЗрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдПрдХ рдЕрдЪреНрдЫрд╛ рдЙрдкрдХрд░рдг рд╣реИ рдЬреЛ рдЖрдкрдХреА рдЙрддреНрдкрд╛рджрдХрддрд╛ рдХреЛ рдФрд░ рдмрдврд╝рд╛рдПрдЧрд╛ред рдпрд╣ рдордд рднреВрд▓реЛ рдХрд┐ рдЖрдкрдХреЛ рд╕реБрд░рдХреНрд╖рд╛ рд╕рдореВрд╣ рдореЗрдВ 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 рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИ! рджреВрд░рд╕реНрде рд╕рд░реНрд╡рд░ рдкрд░ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреЗ рд▓рдХреНрд╖рд┐рдд рд╣рд╕реНрддрд╛рдВрддрд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдо рд╕реНрдерд╛рдиреАрдп рдХрдВрдкреНрдпреВрдЯрд░ рд╕реЗ - рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ, рдЬреЛ рдХрд┐ --local
рдлреНрд▓реИрдЧ рдХреЛ рдЫреЛрдбрд╝ --local
ред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, Fn рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ Fn рд╕рд░реНрд╡рд░ рдФрд░ рдбреЛрдХрд░ рд░рдЬрд┐рд╕реНрдЯреНрд░реА рдХрд╛ рд╕реНрдерд╛рди рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдЗрди рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдХреНрд░рдорд╢рдГ рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ FN_API_URL
рдФрд░ FN_REGISTRY
рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рддреИрдирд╛рддреА рдХреЗ рд▓рд┐рдП рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рдирд┐рд░реНрдорд╛рдг рдФрд░ рдкреНрд░рдмрдВрдзрди рдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рддрд░реАрдХрд╛ рдкреЗрд╢ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдПрдлрдПрди рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ, рддреИрдирд╛рддреА рдХреЗ рд▓рд┐рдП рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ context
рдХрд╣рд╛ рдЬрд╛рддрд╛ 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
) рдХреЗ рдЪрдпрдирд┐рдд рдЦрд╛рддреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдкрд▓реЛрдб рдХрд░реЗрдЧреА, рдФрд░ рдлрд┐рд░ рджреВрд░рд╕реНрде рд╕рд░реНрд╡рд░ (рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, nfrankel
) рдХреЛ рд╕реНрдерд╛рди рдФрд░ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реВрдЪрд┐рдд nfrankel
рдЕрдВрддрд┐рдо рдЫрд╡рд┐ рдЬрд┐рд╕рдореЗрдВ рдЖрдкрдХрд╛ рдлрд╝рдВрдХреНрд╢рди рд╣реИред
$ 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 рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рджреЗ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рдкреНрд░рджрд╛рддрд╛ рдХреЛ рдХрд┐рд╕реА рднреА рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ, рдЖрдк рдЗрд╕реЗ рд╕реНрдерд╛рдиреАрдп рд░реВрдк рд╕реЗ рдпрд╛ рдЕрдкрдиреА рдкрд╕рдВрдж рдХреЗ рдХрд┐рд╕реА рднреА рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдХреНрд▓рд╛рдЙрдб рд╕рдорд╛рдзрд╛рди рдкреНрд░рджрд╛рддрд╛ рдореЗрдВ рд╕реНрдерд╛рдкрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рдЪреБрдирдиреЗ рдореЗрдВ рднреА рд╕реНрд╡рддрдВрддреНрд░рддрд╛ рд╣реИред
рд▓реЗрдЦ рдореЗрдВ рдХреЗрд╡рд▓ рдПрдлрдПрди рдХреА рдореВрд▓ рдмрд╛рддреЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХреА рдЧрдИ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЕрдкрдирд╛ рд╕реНрд╡рдпрдВ рдХрд╛ рд░рдирдЯрд╛рдЗрдо рдмрдирд╛рдирд╛ рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИ, рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХреЛ рдПрдлрдПрди рд▓реЛрдб рдмреИрд▓реЗрдВрд╕рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдпрд╛ рд╕рдВрд░рдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░реЙрдХреНрд╕реА рдХреЗ рдкреАрдЫреЗ рдПрдлрдПрди рд░рдЦрдХрд░ рдЕрдзрд┐рдХ рд╡реНрдпрд╛рдкрдХ рд░реВрдк рд╕реЗ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред