рдПрдлрдПрди рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдЕрдкрдирд╛ рд╕реНрд╡рдпрдВ рдХрд╛ рд╕рд░реНрд╡рд░ рд░рд╣рд┐рдд рдирд┐рд░реНрдорд╛рдг

рдПрдлрдПрди рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдЕрдкрдирд╛ рд╕реНрд╡рдпрдВ рдХрд╛ рд╕рд░реНрд╡рд░ рд░рд╣рд┐рдд рдирд┐рд░реНрдорд╛рдг

рд╕рд░реНрд╡рд░ рд░рд╣рд┐рдд рдХрдВрдкреНрдпреВрдЯрд┐рдВрдЧ рдХреНрд▓рд╛рдЙрдб рдХрдВрдкреНрдпреВрдЯрд┐рдВрдЧ рдореЗрдВ рд╕рдмрд╕реЗ рдкреНрд░рдореБрдЦ рд░реБрдЭрд╛рдиреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИред рдмреБрдирд┐рдпрд╛рджреА рдкрд░рд┐рдЪрд╛рд▓рди рд╕рд┐рджреНрдзрд╛рдВрдд рдпрд╣ рд╣реИ рдХрд┐ рдмреБрдирд┐рдпрд╛рджреА рдврд╛рдВрдЪреЗ рдХрд╛ рд╕рдВрдмрдВрдз DevOps рд╕реЗ рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рд╕реЗрд╡рд╛ рдкреНрд░рджрд╛рддрд╛ рд╕реЗ рд╣реИред рд╕рдВрд╕рд╛рдзрди рд╕реНрдХреЗрд▓рд┐рдВрдЧ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд▓реЛрдб рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╕рдорд╛рдпреЛрдЬрд┐рдд рд╣реЛ рдЬрд╛рддреА рд╣реИ рдФрд░ рдЗрд╕рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХреА рдЙрдЪреНрдЪ рджрд░ рд╣реЛрддреА рд╣реИред

рдПрдХ рдЕрдиреНрдп рд╕рд╛рдорд╛рдиреНрдп рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЛрдб рдХреЛ рдЫреЛрдЯрд╛ рдХрд░рдиреЗ рдФрд░ рдлрд╝реЛрдХрд╕ рдХрд░рдиреЗ рдХреА рдкреНрд░рд╡реГрддреНрддрд┐ рд╣реИ, рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рд╕рд░реНрд╡рд░ рд░рд╣рд┐рдд рдХрдВрдкреНрдпреВрдЯрд┐рдВрдЧ рдХреЛ рдХрднреА-рдХрднреА рдлрд╝рдВрдХреНрд╢рди рдРрдЬрд╝ рдП рд╕рд░реНрд╡рд┐рд╕ (FaaS) рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред

рдРрддрд┐рд╣рд╛рд╕рд┐рдХ рд░реВрдк рд╕реЗ, AWS рд▓реИрдореНрдмреНрдбрд╛ рдХреЗ рд╕рд╛рде FaaS рдХреА рдкреЗрд╢рдХрд╢ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдкрд╣рд▓рд╛ рдХреНрд▓рд╛рдЙрдб рдкреНрд░рджрд╛рддрд╛ рдЕрдореЗрдЬрд╝рди рдерд╛, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рдпрд╣ рдирд╛рдо рджрд┐рдпрд╛ рдЧрдпрд╛ред рдЕрдиреНрдп рдХреНрд▓рд╛рдЙрдб рд╕реЗрд╡рд╛ рдкреНрд░рджрд╛рддрд╛ рднреА рдЗрд╕реА рддрд░рд╣ рдХреА рдкреЗрд╢рдХрд╢ рдХрд░рддреЗ рд╣реИрдВ:

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

рдпреЗ рд╕рднреА рдХрдВрдкрдирд┐рдпрд╛рдБ рд╕рд░реНрд╡рд░ рд░рд╣рд┐рдд рдХрдВрдкреНрдпреВрдЯрд┐рдВрдЧ, рдСрдЯреЛ-рд╕реНрдХреЗрд▓рд┐рдВрдЧ рдкреНрд░рджрд╛рди рдХрд░рддреА рд╣реИрдВ, рдФрд░ рдХреЗрд╡рд▓ рдЙрд╕реА рдХреЗ рд▓рд┐рдП рднреБрдЧрддрд╛рди рдХрд░рддреА рд╣реИрдВ рдЬреЛ рдЖрдк рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╡реЗ рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреЛ рдЕрдкрдиреЗ рдорд╛рд▓рд┐рдХрд╛рдирд╛ рдЙрддреНрдкрд╛рдж рдореЗрдВ рдмрдВрдж рдХрд░ рджреЗрддреА рд╣реИрдВред рд╣рд╛рд▓рд╛рдБрдХрд┐, рд╕рд░реНрд╡рд░ рд░рд╣рд┐рдд рдХрдВрдкреНрдпреВрдЯрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдореБрдлрд╝реНрдд рдФрд░ рдУрдкрди рд╕реЛрд░реНрд╕ рд╡рд┐рдХрд▓реНрдк рдореМрдЬреВрдж рд╣реИрдВред рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ:

  • рдордВрдЪ рдЕрдкрд╛рдЪреЗ рдУрдкрдирд╡реНрд╣рд┐рд╕реНрдХ, рдЖрдИрдмреАрдПрдо рджреНрд╡рд╛рд░рд╛ рдПрдХ рдЗрдирдХреНрдпреВрдмреЗрдЯрд░ рдореЗрдВ рд╡рд┐рдХрд╕рд┐рдд,
  • рд╕реНрдкреНрд░рд┐рдВрдЧ рдХреНрд▓рд╛рдЙрдб рдлрд╝рдВрдХреНрд╢рдВрд╕, рдПрдХ рдХрд╛рдлреА рд╕рдореГрджреНрдз рд╕реНрдкреНрд░рд┐рдВрдЧ рдлреНрд░реЗрдорд╡рд░реНрдХ рдкрд╛рд░рд┐рд╕реНрдерд┐рддрд┐рдХреА рддрдВрддреНрд░ рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд░реВрдк рдореЗрдВ, рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ AWS рд▓реИрдореНрдмреНрдбрд╛, рдПрдЬрд╝реНрдпреЛрд░ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдФрд░ рдУрдкрдирд╡реНрд╣рд┐рд╕реНрдХ рдХреЗ рд▓рд┐рдП рдПрдХ рдореБрдЦреМрдЯрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рднреА рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ,
  • рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдПрдл.рдПрди, рдУрд░реЗрдХрд▓ рджреНрд╡рд╛рд░рд╛ рд╕рдорд░реНрдерд┐рддред

рд╡реЗ рд╕рднреА рдмрд╛рджрд▓реЛрдВ рд╕реЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕реНрд╡рддрдВрддреНрд░ рд╣реИрдВ, рдпрд╛рдиреА, рдЙрдиреНрд╣реЗрдВ рдХрд┐рд╕реА рднреА рдХреНрд▓рд╛рдЙрдб рдореЗрдВ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдЖрдкрдХрд╛ рдЕрдкрдирд╛, рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдпрд╛ рдирд┐рдЬреА рдФрд░ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдПрдХреНрд╕реЛрд╕реНрдХреЗрд▓ рднреА рд╢рд╛рдорд┐рд▓ рд╣реИред

рдПрдлрдПрди рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ

Fn рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдбреЙрдХрд░ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИ, рдЗрд╕рдореЗрдВ рджреЛ рдореБрдЦреНрдп рдШрдЯрдХ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:

  • рд╕реАрдПрд▓рдЖрдИ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рдПрдлрдПрди рдмреБрдирд┐рдпрд╛рджреА рдврд╛рдВрдЪреЗ рдХреЗ рд╕рднреА рдкрд╣рд▓реБрдУрдВ рдХреЛ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рдиреЗ рдФрд░ рдПрдлрдПрди рд╕рд░реНрд╡рд░ рдХреЗ рд╕рд╛рде рдЗрдВрдЯрд░реИрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ,
  • Fn рд╕рд░реНрд╡рд░ рд╕реНрд╡рдпрдВ рдПрдХ рдбреЙрдХрд░ рдХрдВрдЯреЗрдирд░ рдореЗрдВ рдкреИрдХ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдПрдХ рдирд┐рдпрдорд┐рдд рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╣реИред

рдПрдлрдПрди рдореЗрдВ рддреИрдирд╛рдд рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдХрдВрдЯреЗрдирд░реЛрдВ рдореЗрдВ рднреА рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдЖрдкрдХреЛ рдХрдИ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛рдУрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП... рдХреНрд▓реЛрдЬрд░!

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

рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП, рд╡рд┐рднрд┐рдиреНрди рднрд╛рд╖рд╛рдУрдВ рдФрд░ рдЙрдирдХреЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ (рдЧреЛ, рдЬрд╛рд╡рд╛, рдкрд╛рдпрдерди, рдЖрджрд┐ рдХреЗ рд╡рд┐рднрд┐рдиреНрди рд╕рдВрд╕реНрдХрд░рдг) рдХреА рдПрдХ рд╡рд┐рд╕реНрддреГрдд рд╕реВрдЪреА рдореЗрдВ FaaS рдХреА рддреИрдирд╛рддреА рдХреА рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рдХреЗ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рд╕реЗрдЯ рдХреА рдкреЗрд╢рдХрд╢ рдХреА рдЬрд╛рддреА рд╣реИред

рдЗрд╕ рдЖрд░реЗрдЦ рдХрд╛ рдЕрдиреБрд╕рд░рдг рдХрд░рдХреЗ FaaS рдмрдирд╛рдирд╛ рдЖрд╕рд╛рди рд╣реИ:

  • рдПрдлрдПрди рд╕реАрдПрд▓рдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рддреИрдирд╛рдд рдХрд░рдирд╛: рдПрдлрдПрди рдХреЗ рд▓рд┐рдП рдПрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдЪрдпрдирд┐рдд рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдмрдирд╛рдИ рдЧрдИ рд╣реИред
  • рд╣рдо рдлрд┐рд░ рд╕реЗ рд╕реАрдПрд▓рдЖрдИ рдПрдлрдПрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдкрдирд╛ рд╕реНрд╡рдпрдВ рдХрд╛ рдлрд╝рдВрдХреНрд╢рди рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ: рдХрдВрдЯреЗрдирд░ рдЫрд╡рд┐ рдХреЛ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рднрдВрдбрд╛рд░ рдореЗрдВ рд░рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рд╕рд░реНрд╡рд░ рдХреЛ рдЗрд╕ рдЫрд╡рд┐ рдХреЗ рдЕрд╕реНрддрд┐рддреНрд╡ рдФрд░ рдкреНрд▓реЗрд╕рдореЗрдВрдЯ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реВрдЪрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдПрдлрдПрди рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдЕрдкрдирд╛ рд╕реНрд╡рдпрдВ рдХрд╛ рд╕рд░реНрд╡рд░ рд░рд╣рд┐рдд рдирд┐рд░реНрдорд╛рдг
Fn рдХреЛ рдХрд╛рд░реНрдп рд╡рд┐рддрд░рд┐рдд рдХрд░рдиреЗ рдХрд╛ рд╕рд┐рджреНрдзрд╛рдВрдд

рд╕рд░реНрд╡рд░ рд░рд╣рд┐рдд рдХрд╛рд░реНрдпреЛрдВ рдХреА рд╕реНрдерд╛рдиреАрдп рд╕реНрдерд╛рдкрдирд╛ рдФрд░ рдкрд░реАрдХреНрд╖рдг

рдЖрдЗрдП рд╕реНрдерд╛рдиреАрдп рдорд╢реАрди рдкрд░ Fn рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░реЗрдВред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдбреЙрдХрд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдПрдлрдПрди рджреНрд╡рд╛рд░рд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдорд╛рди рд▓реЗрдВ рдХрд┐ рд╣рдо рдбреЗрдмрд┐рдпрди/рдЙрдмрдВрдЯреВ рдкрд░ рд╣реИрдВ:

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

рдпрд╛ рдЕрдкрдиреЗ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдкреИрдХреЗрдЬ рдореИрдиреЗрдЬрд░/рдбреЙрдХрд░ рдмрд┐рд▓реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдлрд┐рд░ рдЖрдк рд╕реАрдзреЗ рдПрдлрдПрди рд╕реАрдПрд▓рдЖрдИ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХрд░реНрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛:

$ 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

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

$ 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 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

рд╣рдорд╛рд░реЗ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЗрд╕реЗ "рд░реЛрд▓ рдЖрдЙрдЯ" рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ ╨╕╨╝╤П ╨┐╤А╨╕╨╗╨╛╨╢╨╡╨╜╨╕╤П: рдПрдлрдПрди рдореЗрдВ, рд╕рднреА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рд╕рдВрдмрдВрдзрд┐рдд рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдирд╛рдорд╕реНрдерд╛рди рдХреЗ рд░реВрдк рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдПрдлрдПрди рд╕реАрдПрд▓рдЖрдИ рдлрд╝рд╛рдЗрд▓ рдХреА рдЦреЛрдЬ рдХрд░реЗрдЧрд╛ 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"}

рдПрдлрдПрди рд╕рд░реНрд╡рд░ рдкреЛрд░реНрдЯ 8080 рдкрд░ рдЕрдкрдиреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдлрд╝рдВрдХреНрд╢рди рдпреВрдЖрд░рдПрд▓ рдкреИрдЯрд░реНрди рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реБрдЖ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ 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 рдХреЛ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рдЖ рдЧрдпрд╛ рд╣реИ!

рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдмреБрдирд┐рдпрд╛рджреА рдврд╛рдВрдЪреЗ рдкрд░ рд╕рд░реНрд╡рд░ рд░рд╣рд┐рдд рдлрд╝рдВрдХреНрд╢рди рд╕реЗрд╡рд╛рдПрдБ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛

рдЖрдЗрдП рдПрдХреНрд╕реЛрд╕реНрдХреЗрд▓ рд╕реАрдПрд▓рдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╢реАрдШреНрд░рддрд╛ рд╕реЗ рдПрдХ рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВред рдпрджрд┐ рдЖрдкрдиреЗ рдЗрд╕реЗ рдЕрднреА рддрдХ рд╕реЗрдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ, рддреЛ рдЖрдк рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рд╣рдорд╛рд░реА рддреНрд╡рд░рд┐рдд рд╢реБрд░реБрдЖрдд рдорд╛рд░реНрдЧрджрд░реНрд╢рд┐рдХрд╛. рдпрд╣ рдПрдХ рдЕрдЪреНрдЫрд╛ рдЯреВрд▓ рд╣реИ рдЬреЛ рдЖрдкрдХреА рдЙрддреНрдкрд╛рджрдХрддрд╛ рдХреЛ рдФрд░ рднреА рдЕрдзрд┐рдХ рдмрдврд╝рд╛ рджреЗрдЧрд╛ред рдпрд╣ рди рднреВрд▓реЗрдВ рдХрд┐ рд╕реБрд░рдХреНрд╖рд╛ рд╕рдореВрд╣ рдореЗрдВ рдкреЛрд░реНрдЯ 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

рдпрд╣рд╛рдВ рд╕реЗ, рдПрдлрдПрди рдлреАрдЪрд░ рдбрд┐рд▓реАрд╡рд░реА рдЪрдпрдирд┐рдд рдбреЙрдХрд░рд╣рдм рдЦрд╛рддреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдбреЙрдХрд░ рдЫрд╡рд┐рдпреЛрдВ рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдЧреА (рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ - 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 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдХрд╛рдлреА рдЖрд╕рд╛рди рд╣реИ рдФрд░ рдпрд╣ рдХрдо рдУрд╡рд░рд╣реЗрдб рдХреЗ рд╕рд╛рде рд▓рдЧрднрдЧ рд╕рдорд╛рди FaaS рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рдХрд┐рд╕реА рднреА рд╡рд┐рдХреНрд░реЗрддрд╛ рд▓реЙрдХ-рдЗрди рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рд╕реНрдерд╛рдиреАрдп рд░реВрдк рд╕реЗ рдпрд╛ рдЖрдкрдХреА рдкрд╕рдВрдж рдХреЗ рдХрд┐рд╕реА рднреА рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдХреНрд▓рд╛рдЙрдб рд╕рдорд╛рдзрд╛рди рдкреНрд░рджрд╛рддрд╛ рдореЗрдВ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рдЪреБрдирдиреЗ рдореЗрдВ рднреА рд╕реНрд╡рддрдВрддреНрд░рддрд╛ рд╣реИред

рдпрд╣ рдЖрд▓реЗрдЦ рдХреЗрд╡рд▓ Fn рдХреА рдореВрд▓ рдмрд╛рддреЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдкрдирд╛ рд╕реНрд╡рдпрдВ рдХрд╛ рд░рдирдЯрд╛рдЗрдо рдмрдирд╛рдирд╛ рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИ, рдФрд░ рд╕рдордЧреНрд░ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХреЛ Fn рд▓реЛрдб рдмреИрд▓реЗрдВрд╕рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдпрд╛ рд╕реБрд░рдХреНрд╖рд╛ рдХреЗ рд▓рд┐рдП Fn рдХреЛ рдкреНрд░реЙрдХреНрд╕реА рдХреЗ рдкреАрдЫреЗ рд░рдЦрдХрд░ рдЕрдзрд┐рдХ рд╡реНрдпрд╛рдкрдХ рд░реВрдк рд╕реЗ рддреИрдирд╛рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рд╕реНрд░реЛрдд: www.habr.com

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╝реЗрдВ