рдЬрд╛рд╡рд╛ рдореЗрдВ рдПрдбрдмреНрд▓реНрдпреВрдПрд╕ рд▓реИрдореНрдмрдбрд╛ рдЗрди рдПрдХреНрд╢рди 11. рдкреНрд░реЛрдбрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рд╕рд░реНрд╡рд░рд▓реЗрд╕ рдЬрд╛ рд░рд╣рд╛ рд╣реИ

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

рдЫрд╡рд┐


рдкрд░рд┐рдЪрдп


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

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

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

рдЫрд╡рд┐

рдПрдХ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ FaaS
FaaS , . , , CRUD C, R, U, D Create Read. , тАФ .


рд╡рд┐рдЪрд╛рд░


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


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


рд╡рд┐рдЪрд╛рд░ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди GitHub рдкрд░ рдЙрдкрд▓рдмреНрдз рд╣реИ ред

рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░


рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рджреМрд░рд╛рди рдкрд╣рд▓реА рдмрд╛рдд рдЬреЛ рдорди рдореЗрдВ рдЖрддреА рд╣реИ рд╡рд╣ рд╣реИ:
  • рдорд╢реАрди рдХреЗ рддрд╣рдд рд╡рд╛рдкрд╕, рд╕рд╛рдордиреЗ, рдЪрд┐рддреНрд░, рдЖрджрд┐
  • рдЖрдзрд╛рд░ рдХреЗ рд╕рд╛рде рдХрд╛рд░
  • рдИрдореЗрд▓ рд╕реЗрд╡рд╛ рдХреЗ рд╕рд╛рде рдорд╢реАрдиред




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


рдЖрд░реЗрдЦ рдкреНрд░рддреНрдпреЗрдХ рдШрдЯрдХ рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд╛ рдПрдХ рдмрд╣реБрдд рд╕реНрдкрд╖реНрдЯ рдкреГрдердХреНрдХрд░рдг рджрд░реНрд╢рд╛рддрд╛ рд╣реИред
  • AWS рд▓реИрдореНрдмреНрдбрд╛ рдореБрдЦреНрдп рдШрдЯрдХ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдХреЛрдб / рддрд░реНрдХ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ,
  • рдПрд╕ 3 рд╕реНрдерд┐рд░ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдФрд░ рдЬреЗрдПрд╕ рд▓рд┐рдкрд┐рдпреЛрдВ рдХреЗ рднрдВрдбрд╛рд░рдг рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИ,
  • CloudFront - рдХреИрд╢рд┐рдВрдЧ рддрдВрддреНрд░ рдФрд░ рдмрд╣реБ-рдХреНрд╖реЗрддреНрд░реАрдп рд╕рдорд░реНрдерди рдХреЗ рд▓рд┐рдП,
  • SES - рдИрдореЗрд▓ рд╕реЗрд╡рд╛,
  • DynamoDB - рдлреЙрд░реНрдо рд╕реЗ рдбреЗрдЯрд╛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдзрд╛рд░ (рдХрд┐рд╕рд╕реЗ, рдХреНрдпрд╛ рд╕рд╡рд╛рд▓, рдЬрд╡рд╛рдм рдХрд╣рд╛рдВ рднреЗрдЬрдирд╛ рд╣реИ),
  • рдЧреЗрдЯрд╡реЗ рдПрдкреАрдЖрдИ - рд╣рдорд╛рд░реЗ рдПрдкреАрдЖрдИ рдХреЗ рд▓рд┐рдП HTTP рдПрдкреАрдЖрдИ,
  • рдпрджрд┐ рдЖрдк рдПрдХ рд╕реБрдВрджрд░ рдбреЛрдореЗрди рдирд╛рдо рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рд░реВрдЯ53 - рдХреА рдЬрд░реВрд░рдд рд╣реИред


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


рдбреЗрдореЛ


рдкреНрд░рд╢рд┐рдХреНрд╖рдг


рд╣рдорд╛рд░реЗ рд╕рд░реНрд╡рд░ рд░рд╣рд┐рдд рд╕рдорд╛рдзрд╛рди рдХреЛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рдирд╛ рд╣реЛрдЧрд╛:


рдЙрдкрд░реЛрдХреНрдд рд╕рднреА рдЙрдкрдХрд░рдгреЛрдВ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдкрдХреЛ AWS рдХреЗ рд▓рд┐рдП рджреВрд░рд╕реНрде рдкрд╣реБрдБрдЪ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ aws-cli рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░реЗрдВ ред рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдмрдирд╛рдиреЗ рдФрд░ рдЙрд╕рдХреА рдПрдХреНрд╕реЗрд╕ рдХреБрдВрдЬреА рдФрд░ рдЧреБрдкреНрдд рдХреБрдВрдЬреА рдХреЛ рдЕрдирд▓реЛрдб рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред

рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдЕрд╕реЗрдВрдмрд▓реА


1. рдПрдХ рдЯреЗрдореНрдкрд▓реЗрдЯ рд╕реЗ рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдмрдирд╛рдПрдБ


рднрд╡рд┐рд╖реНрдп рдХреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдЦреЛрд▓реЗрдВ рдФрд░ рдЙрд╕рдореЗрдВ рд╕реЗ рдПрд╕рдПрдПрдо рд╕реАрдПрд▓рдЖрдИ рд▓реЙрдиреНрдЪ рдХрд░реЗрдВред рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░реЗрдВ:


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

рдкрд░рд┐рдпреЛрдЬрдирд╛ "рд╣реИрд▓реЛ, рд╡рд┐рд╢реНрд╡!" рддреИрдпрд╛рд░ред рдЕрдм рдЖрдк рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рдирд╛рдо рдФрд░ рдкреИрдХреЗрдЬ, рдирд┐рд░реНрднрд░рддрд╛ рдФрд░ рд╕реНрд░реЛрдд рдХреЛрдб рдкрд░ рдХрд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

2. рдЪрд▓реЛ рд╡реНрдпрд╕рдиреЛрдВ рд╕реЗ рдирд┐рдкрдЯрддреЗ рд╣реИрдВ


Build.gradle рдХреЗ рд▓рд┐рдП рдирд┐рдореНрди рдирд┐рд░реНрднрд░рддрд╛рдПрдБ рдЬреЛрдбрд╝реЗрдВ:
dependencies {
    // AWS
    implementation group: 'com.amazonaws.serverless', name: 'aws-serverless-java-container-core', version: '1.4'
    implementation group: 'com.amazonaws', name: 'aws-lambda-java-core', version: '1.2.0'
    implementation group: 'com.amazonaws', name: 'aws-java-sdk-ses', version: '1.11.670'
    implementation group: 'com.amazonaws', name: 'aws-java-sdk-dynamodb', version: '1.11.670'
    implementation group: 'com.amazonaws', name: 'aws-lambda-java-log4j2', version: '1.1.0'

    // Utils
    implementation group: 'com.fasterxml.jackson.core', name: 'jackson-core', version: '2.10.0'
    implementation group: 'commons-io', name: 'commons-io', version: '2.6'

    // Test
    testImplementation group: 'org.mockito', name: 'mockito-core', version: '3.1.0'
    testImplementation group: 'org.powermock', name: 'powermock-api-mockito2', version: '2.0.4'
    testImplementation group: 'org.powermock', name: 'powermock-module-junit4', version: '2.0.4'
    testImplementation group: 'junit', name: 'junit', version: '4.12'
}

рдореБрдЦреНрдп рд╣реИрдВ AWS SDKред рд╡реЗ рдЖрдкрдХреЛ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдВрдЧреЗ, рдЬреИрд╕реЗ рдПрд╕рдИрдПрд╕, рдбрд╛рдпрдирдореЛрдмреАрдбреА, рдЖрджрд┐ред

3. рд╣рдо рдПрдХ рдореЗрдордирд╛ рд▓рд┐рдЦрддреЗ рд╣реИрдВ


  • рд╣рдо RequestHandler рдХреЗ рд▓рд┐рдП AwsProxyRequest рдФрд░ ContactUsProxyResponse рдХреЗ рд▓рд┐рдП рдЯреЗрдореНрдкрд▓реЗрдЯ рдЕрдиреБрд░реЛрдз рдФрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХрдХреНрд╖рд╛рдПрдВ рдмрджрд▓рддреЗ рд╣реИрдВред
    public class App implements RequestHandler<AwsProxyRequest, ContactUsProxyResponse>
    ...
    public ContactUsProxyResponse handleRequest(AwsProxyRequest request, Context context) 

  • AwsClientFactory AWS SDK-.
    /**
     * Just an util class for an eager initialization of sdk clients.
     */
    public class AwsClientFactory {
    
        private static final Logger LOG = LogManager.getLogger(AwsClientFactory.class);
    
        private final AmazonSimpleEmailService sesClient;
        private final DynamoDB dynamoDB;
    
        /**
         * AWS regions should be env variables if you want to generalize the solution.
         */
        AwsClientFactory() {
            LOG.debug("AWS clients factory initialization.");
            sesClient = AmazonSimpleEmailServiceClient.builder().withRegion(Regions.EU_WEST_1).build();
            AmazonDynamoDB dynamoDBClient = AmazonDynamoDBClientBuilder.standard().withRegion(Regions.EU_WEST_1).build();
            dynamoDB = new DynamoDB(dynamoDBClient);
        }
    
        DynamoDB getDynamoDB() {
            return dynamoDB;
        }
    
        AmazonSimpleEmailService getSesClient() {
            return sesClient;
        }
    
    }
    

  • ObjectMapper .
    
    private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper();
    private static final AwsClientFactory AWS_CLIENT_FACTORY = new AwsClientFactory();
    

  • .
    
     private SendEmailResult sendEmail(ContactUsRequest contactUsRequest) {
            String emailTemplate = getEmailTemplate();
            String email = fillTemplate(emailTemplate, contactUsRequest);
    
            SendEmailRequest sendEmailRequest =
                    new SendEmailRequest(
                            System.getenv("SENDER_EMAIL"),
                            new Destination(List.of(System.getenv("RECIPIENT_EMAIL"))),
                            new Message()
                                    .withSubject(
                                            new Content()
                                                    .withCharset(UTF_8.name())
                                                    .withData(contactUsRequest.getSubject()))
                                    .withBody(new Body()
                                            .withHtml(new Content()
                                                    .withCharset(UTF_8.name())
                                                    .withData(email))));
            LOG.info("Email template is ready");
            return AWS_CLIENT_FACTORY.getSesClient().sendEmail(sendEmailRequest);
    }
    
    private String fillTemplate(String emailTemplate, ContactUsRequest contactUsRequest) {
            return String.format(
                    emailTemplate,
                    contactUsRequest.getUsername(),
                    contactUsRequest.getEmail(),
                    contactUsRequest.getPhone(),
                    contactUsRequest.getQuestion());
    }
    
    private String getEmailTemplate() {
            try {
                return IOUtils.toString(
                        Objects.requireNonNull(this.getClass().getClassLoader()
                                                   .getResourceAsStream("email_template.html")),
                        UTF_8);
            } catch (IOException e) {
                throw new RuntimeException("Loading an email template failed.", e);
            }
    }
    
    private void addEmailDetailsToDb(ContactUsRequest contactUsRequest, SendEmailResult sendEmailResult) {
            AWS_CLIENT_FACTORY.getDynamoDB().getTable("ContactUsTable")
                              .putItem(new Item()
                                      .withPrimaryKey("Id", sendEmailResult.getMessageId())
                                      .withString("Subject", contactUsRequest.getSubject())
                                      .withString("Username", contactUsRequest.getUsername())
                                      .withString("Phone", contactUsRequest.getPhone())
                                      .withString("Email", contactUsRequest.getEmail())
                                      .withString("Question", contactUsRequest.getQuestion()));
    }
    

  • .
    
    private ContactUsProxyResponse buildResponse(int statusCode, String body) {
            ContactUsProxyResponse awsProxyResponse =
                    new ContactUsProxyResponse();
            awsProxyResponse.setStatusCode(statusCode);
            awsProxyResponse.setBody(getBodyAsString(body));
            awsProxyResponse.addHeader(CONTENT_TYPE, ContentType.APPLICATION_JSON.toString());
            awsProxyResponse.addHeader("Access-Control-Allow-Origin", "*");
            return awsProxyResponse;
    }
    
     private String getBodyAsString(String body) {
            try {
                return OBJECT_MAPPER.writeValueAsString(new ContactUsResponseBody(body));
            } catch (JsonProcessingException e) {
                throw new RuntimeException("Writing ContactUsResponseBody as string failed.", e);
            }
    }
    

  • . ┬л// WARMING UP┬╗.
    
    if (Optional.ofNullable(request.getMultiValueHeaders()).map(headers -> headers.containsKey("X-WARM-UP")).orElse(FALSE)) {
                LOG.info("Lambda was warmed up");
                return buildResponse(201, "Lambda was warmed up. V1");
    }
    

  • handleRequest()
    
    @Override
    public ContactUsProxyResponse handleRequest(AwsProxyRequest request, Context context) {
            LOG.info("Request was received");
            LOG.debug(getAsPrettyString(request));
    
            if (Optional.ofNullable(request.getMultiValueHeaders()).map(headers -> headers.containsKey("X-WARM-UP")).orElse(FALSE)) {
                LOG.info("Lambda was warmed up");
                return buildResponse(201, "Lambda was warmed up. V1");
            }
    
            ContactUsRequest contactUsRequest = getContactUsRequest(request);
    
            SendEmailResult sendEmailResult = sendEmail(contactUsRequest);
            LOG.info("Email was sent");
    
            addEmailDetailsToDb(contactUsRequest, sendEmailResult);
            LOG.info("DB is updated");
    
            return buildResponse(200,
                    String.format("Message %s has been sent successfully.", sendEmailResult.getMessageId()));
    }
    



рдореВрд▓ рддрд░реНрдХ рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдпрд╣ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╣реИред рдзреНрдпрд╛рди рджреЗрдиреЗ рд▓рд╛рдпрдХ рдХрдИ рдмрд┐рдВрджреБ рд╣реИрдВред

рдкрд╣рд▓реЗ рд▓реЙрдЧрд┐рдВрдЧ рд╣реИред рдХреЙрдиреНрдЯреЗрдХреНрд╕реНрдЯ рд▓реИрдВрдмрдбрд╛ рд╡рд┐рдзрд┐ рдХреЗ рддрд░реНрдХреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдореЗрдВ рдмрд╣реБрдд рд╕рд╛рд░реА рд╕рд╣рд╛рдпрдХ рдЬрд╛рдирдХрд╛рд░реА рд╣реИ, рд╕рд╛рде рд╣реА рдПрдХ рд▓рдХрдбрд╝рд╣рд╛рд░рд╛ рднреА рд╣реИред рдЗрд╕рд▓рд┐рдП, рдЖрдк рдПрдХ рдЕрд▓рдЧ рд▓рдХрдбрд╝рд╣рд╛рд░рд╛ рдирд╣реАрдВ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдкреНрд░рджрд╛рди рдХрд┐рдП рдЧрдП рд▓рдВрдмреЛрджрд░ рд╕рдВрджрд░реНрдн рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдХреЙрд▓ рдХрд░рдирд╛ рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ:
LambdaLogger logger = context.getLogger();


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

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

4. рд╣рдо рдкрд░реАрдХреНрд╖рдг рд▓рд┐рдЦрддреЗ рд╣реИрдВ


рд▓реИрдореНрдмреНрдбрд╛ рдХреЛрдб рдХреЛ рдЙрд╕реА рдкреНрд░рдХрд╛рд░ рдХреЗ рдкрд░реАрдХреНрд╖рдгреЛрдВ рджреНрд╡рд╛рд░рд╛ рдХрд╡рд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдЖрдк рдЬреНрдпрд╛рджрд╛рддрд░ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рд▓реЗрдЦ рдХреЛ рдЖрдЧреЗ рднреА рдмрдврд╝рдиреЗ рд╕реЗ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдЕрдЧрд▓реЗ рд▓реЗрдЦ рдореЗрдВ рдПрдбрдмреНрд▓реНрдпреВрдПрд╕ рд▓реИрдВрдмрдбрд╛ рдкрд░реАрдХреНрд╖рдг рдФрд░ рдСрди-рдкреНрд░рд┐рдорд╛рдЗрд╕реЗрд╕ рд╡рд┐рдХрд╛рд╕ рдкрд░ рд╕рд░реНрд╡рд░ рд░рд╣рд┐рдд рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЛ рдХрд╡рд░ рдХрд░реВрдВрдЧрд╛ред рдпрджреНрдпрдкрд┐ рдЗрдХрд╛рдИ рдкрд░реАрдХреНрд╖рдг рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рднрдВрдбрд╛рд░ рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╣реИрдВ ред

5. рд╣рдо рдПрд╕рдПрдПрдо рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХрд╛ рдПрдХ рдЦрд╛рдХрд╛ рд▓рд┐рдЦрддреЗ рд╣реИрдВ


рдЬрдм рд╣рдордиреЗ рд╕реНрдерд╛рдиреАрдп рд░реВрдк рд╕реЗ рдЕрдкрдиреЗ рд▓рдВрдмреЛ рдХреЛ рд▓рд┐рдЦрд╛ рдФрд░ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛, рдЙрд╕рдХреЗ рдмрд╛рдж рд╣рдореЗрдВ рдПрдбрдмреНрд▓реНрдпреВрдПрд╕ рдореЗрдВ рдЗрди рд╕рднреА рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рддреИрдирд╛рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрд╕рдПрдПрдо-рдЯреЗрдореНрдкрд▓реЗрдЯ рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛ред

рд╕реИрдо рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдереЛрдбрд╝рд╛ рд╕рд╛
Serverless Application Model тАУ serverless . , CloudFormation DSL, тАУ Lambda, Gateway, DynamoDB . .
SAM, CloudFormation, Terraform тАУ IaC-. SAM Serverless-, Terraform .
Terraform DINS.

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдПрд╕рдПрдПрдо-рдЯреЗрдореНрдкрд▓реЗрдЯ рдореЗрдВ рд╣рдореЗрдВ рдХрд┐рди рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рдШреЛрд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ ред

AWS :: Serverless :: рдлрд╝рдВрдХреНрд╢рди
рдореБрдЦреНрдп рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╣рдорд╛рд░реЗ рд▓рд┐рдП рднрд░реА рд╣реБрдИ рд╣реИрдВ рдпрджрд┐ рд╣рдордиреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрд╕рдПрдПрдо рдЗрдирд┐рдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдпрд╣рд╛рдБ рд╣реИ рдХрд┐ рд╡реЗ рдореЗрд░реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдХреИрд╕реЗ рджрд┐рдЦрддреЗ рд╣реИрдВ:
CodeUri: contact-us-function
Handler: com.gralll.sam.App::handleRequest
Runtime: java8
MemorySize: 256

рдпрд╣рд╛рдВ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рдм рдХреБрдЫ рдкрд░реНрдпрд╛рдкреНрдд рд╕реНрдкрд╖реНрдЯ рд╣реИред
рдХреЛрдбрдпреВрд░реА рд╣рдорд╛рд░реЗ
рд╣реИрдВрдбрд▓рд░ рд▓реИрдореНрдмреНрдбрд╛ рдХреЗ рд╕рд╛рде рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд╣реИ -
рд░рдирдЯрд╛рдЗрдо рд╡рд┐рдзрд┐ рдХрд╛ рдкреВрд░рд╛ рд░рд╛рд╕реНрддрд╛ -
рдореЗрдореЛрд░реАрдЬрд╛рдЗрдЬ тАЛтАЛрд▓реИрдореНрдмрдбрд╛ рдкрд░ рдХреНрдпрд╛ рд▓рд┐рдЦрд╛ рд╣реИ - рдЦреБрдж рдХреЗ рд▓рд┐рдП рдмреЛрд▓рддрд╛

рд╣реИ рдореЗрдореЛрд░реА рдХреА рдмрд╛рдд : рд▓реИрдореНрдмреНрдбрд╛ рдореЗрдВ 3 рдЬреАрдмреА рддрдХ рд░реИрдо рдЙрдкрд▓рдмреНрдз рд╣реИ, рдЬреЛ 2 рд╕реАрдкреАрдпреВ рдХреЗ рд╕рдВрд╕рд╛рдзрди рд╕реЗ рдореЗрд▓ рдЦрд╛рддреА рд╣реИред рдЕрд░реНрдерд╛рдд, рдЖрдк CPU рдХреЛ рдЕрд▓рдЧ рд╕реЗ рд╕рдорд╛рдпреЛрдЬрд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ, рдХреЗрд╡рд▓ рдореЗрдореЛрд░реА рдХреА рдорд╛рддреНрд░рд╛ рдХреЛ рдмрдврд╝рд╛ / рдШрдЯрд╛ рд╕рдХрддреЗ рд╣реИрдВред

рддреИрдирд╛рддреА рд╡рд┐рдзрд┐ рдХрд╛ рдЪрдпрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдЧрд▓реЗ рдмреНрд▓реЙрдХ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
AutoPublishAlias: live
DeploymentPreference:
  Type: Canary10Percent10Minutes

AutoPublishAlias - рдЖрдкрдХреЛ рдкреНрд░рддреНрдпреЗрдХ рдирдП рддреИрдирд╛рдд рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдПрдХ рдЙрдкрдирд╛рдо рдЬреЛрдбрд╝рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ ред рдХреИрдирд░реА рддреИрдирд╛рддреА рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рд╣реИред
Canary10Percent10Minutes - рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреА рддреИрдирд╛рддреА рдЬреЛ рдЖрдкрдХреЛ рд▓реИрдореНрдмреНрдбрд╛ рдХреЗ рджреЛ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЛ рдПрдХ рд╕рд╛рде рд░рдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧреА: рдкреБрд░рд╛рдиреЗ рдФрд░ рдирдП, рд▓реЗрдХрд┐рди рдирдП рдкрд░ рдЯреНрд░реИрдлрд╝рд┐рдХ рдХрд╛ рдХреЗрд╡рд▓ 10% рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд░реЗрдВред рдЕрдЧрд░ рджрд╕ рдорд┐рдирдЯ рдореЗрдВ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ, рддреЛ рдмрд╛рдХреА рдЯреНрд░реИрдлрд╝рд┐рдХ рдХреЛ рднреА рдирдП рд╕рдВрд╕реНрдХрд░рдг рдкрд░ рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдЖрдк рдПрд╕рдПрдПрдо рдкреГрд╖реНрда рдкрд░ рдЙрдиреНрдирдд рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ ред

рдЕрдЧрд▓реЗ рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рд╣реИрдВ рдЬреЛ рдХреЛрдб рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдПрдВрдЧреЗред рдЙрд╕рдХреЗ рдмрд╛рдж, рд▓рдВрдмреЛрджрд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдФрд░ рдмреНрд▓реЙрдХ:
Events:
  ContactUs:
    Type: Api
    Properties:
      Path: /contact
      Method: post

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

рдмреЗрд╢рдХ, рд╣рдореЗрдВ рд╕реБрд░рдХреНрд╖рд╛ рдкрд╣рд▓реБрдУрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдмреЙрдХреНрд╕ рд╕реЗ рдмрд╛рд╣рд░, рдмрдирд╛рдП рдЧрдП рд▓реИрдореНрдмреНрдбрд╛ рдореЗрдВ рдбреЗрдЯрд╛рдмреЗрд╕ рдпрд╛ рдИрдореЗрд▓ рд╕реЗрд╡рд╛ рддрдХ рдкрд╣реБрдВрдЪ рдирд╣реАрдВ рд╣реЛрдЧреАред рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдЕрдиреБрдорддрд┐ рджреА рдЬрд╛рдПрдЧреАред AWS рдХреЗ рдЕрдВрджрд░ рдкрд╣реБрдБрдЪ рджреЗрдиреЗ рдХреЗ рдХрдИ рддрд░реАрдХреЗ рд╣реИрдВ ред рд╣рдо рд╕рдВрд╕рд╛рдзрди-рдЖрдзрд╛рд░рд┐рдд рдиреАрддрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ:
Policies:
  - AWSLambdaExecute
  - Version: '2012-10-17'
    Statement:
      - Effect: Allow
        Action:
          - ses:SendEmail
          - ses:SendRawEmail
        Resource: 'arn:aws:ses:eu-west-1:548476639829:identity/aleksandrgruzdev11@gmail.com'
      - Effect: Allow
        Action:
          - dynamodb:List*
        Resource: '*'
      - Effect: Allow
        Action:
          - dynamodb:Get*
          - dynamodb:PutItem
          - dynamodb:DescribeTable
        Resource: 'arn:aws:dynamodb:*:*:table/ContactUsTable'

рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдбреЗрдЯрд╛рдмреЗрд╕ рддрд╛рд▓рд┐рдХрд╛ рдХреЗ рд▓рд┐рдП рд╣рдордиреЗ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдирд╛рдо рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП, рд╣рдореЗрдВ рдЙрд╕реА рдирд╛рдо рдХреЗ рд╕рд╛рде рдПрдХ рддрд╛рд▓рд┐рдХрд╛ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред
SES рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ: рдЖрдк рдореЗрд░рд╛ рдИрдореЗрд▓ рдкрддрд╛ рджреЗрдЦреЗрдВред рдЖрдкрдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ рдЖрдкрдХрд╛ рдЕрдкрдирд╛ рдкрдХреНрдХрд╛ рдкрддрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣ рдХреИрд╕реЗ рдХрд░рдирд╛ рд╣реИ, рдпрд╣рд╛рдВ рджреЗрдЦреЗрдВ ред
рдЙрд╕рдХреЗ рдареАрдХ рдмрд╛рдж, рдЖрдк рдмрдирд╛рдП рдЧрдП рдкрддреЗ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдХреЗ рдЗрд╕ рд╕рдВрд╕рд╛рдзрди рдХреЗ рдЖрдЗрдбреЗрдВрдЯрд┐рдЯреА ARN рдХреЛ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдКрдкрд░ рджрд┐рдП рдЧрдП рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдИрдореЗрд▓ рд╕реЗ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВред
рдЙрдиреНрд╣реЛрдВрдиреЗ рдореЗрдордиреЗ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдпрд╛ред рдЕрдм рдбреЗрдЯрд╛рдмреЗрд╕ рдкрд░ рдЪрд▓рддреЗ рд╣реИрдВред

AWS :: рд╕рд░реНрд╡рд░ рд░рд╣рд┐рдд :: SimpleTable
рд╣рдорд╛рд░реЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП, рд╣рдо рдХреЗрд╡рд▓ рдПрдХ ContactUsTable рддрд╛рд▓рд┐рдХрд╛ рдмрдирд╛рдПрдВрдЧреЗ:
ContactUsTable:
  Type: AWS::Serverless::SimpleTable
  Properties:
    PrimaryKey:
      Name: Id
      Type: String
    TableName: ContactUsTable
    ProvisionedThroughput:
      ReadCapacityUnits: 2
      WriteCapacityUnits: 2

рдЖрд╡рд╢реНрдпрдХ рдлрд╝реАрд▓реНрдб рдореЗрдВ - рдХреЗрд╡рд▓ Id, рдФрд░ ReadCapacityUnits рдФрд░ WriteCapacityUnits рднреА рдЗрдВрдЧрд┐рдд рдХрд░реЗрдВред рд╣рдо рдХрд┐рди рдореВрд▓реНрдпреЛрдВ рдХреЛ рдЪреБрдирдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдирд╣реАрдВ рдмрддрд╛рдПрдВрдЧреЗ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рднреА рдПрдХ рд╡реНрдпрд╛рдкрдХ рд╡рд┐рд╖рдп рд╣реИред рдЖрдк рдЗрд╕реЗ рдпрд╣рд╛рдБ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ ред рдПрдХ рдкрд░реАрдХреНрд╖рдг рдЖрд╡реЗрджрди рдХреЗ рд▓рд┐рдП, 1-2 рдХреЗ рдЖрджреЗрд╢ рдХреЗ рдЫреЛрдЯреЗ рдореВрд▓реНрдп рднреА рдкрд░реНрдпрд╛рдкреНрдд рд╣реИрдВред

рдЧреНрд▓реЛрдмрд▓реНрд╕
рдЬрдирд░рд▓ рдкреИрд░рд╛рдореАрдЯрд░ рдЗрд╕ рдмреНрд▓реЙрдХ рдореЗрдВ рдирд┐рдХрд╛рд▓реЗ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдк рдлрд╝рдВрдХреНрд╢рди рдпрд╛ рдПрдкреАрдЖрдИ рдХреЗ рдХрдИ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреА рдШреЛрд╖рдгрд╛ рдХрд░рддреЗ рд╣реИрдВред
Globals:
  Function:
    Timeout: 15
  Api:
    Cors:
      AllowOrigin: "'*'"
      AllowHeaders: "'Content-Type,X-WARM-UP,X-Amz-Date,Authorization,X-Api-Key'"

рдореИрдВрдиреЗ рдЗрд╕реЗ рдлрдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдЯрд╛рдЗрдордЖрдЙрдЯ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ рдХреБрдЫ рдХреЙрд░реНрд╕ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЗ рд▓рд┐рдП рдЧреЗрдЯрд╡реЗ рдПрдкреАрдЖрдИ рдХреЛ рдмрд╛рдж рдореЗрдВ рдХреЙрдиреНрдЯреИрдХреНрдЯрдпреВ рдлреЙрд░реНрдо рдХреЗ рд╕рд╛рде рдЕрдкрдиреЗ рд╕реНрдерд┐рд░ рдкреЗрдЬ рд╕реЗ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ред

рдЖрдЙрдЯрдкреБрдЯ
рдпрд╣ рдмреНрд▓реЙрдХ рдЖрдкрдХреЛ рд╡реИрд╢реНрд╡рд┐рдХ AWS CloudFormation рд╕рдВрджрд░реНрдн рдореЗрдВ рдХреБрдЫ рдЪрд░ рдХреЛ рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
Outputs:
  ContactUsApi:
    Description: "API Gateway endpoint URL for Prod stage for ContactUs function"
    Value: !Sub "https://${ServerlessRestApi}.execute-api.${AWS::Region}.amazonaws.com/Prod/contact/"
  ContactUsFunction:
    Description: "ContactUs Lambda Function ARN"
    Value: !GetAtt ContactUsFunction.Arn
  ContactUsFunctionIamRole:
    Description: "Implicit IAM Role created for ContactUs function"
    Value: !GetAtt ContactUsFunctionRole.Arn

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдордиреЗ рдПрдХ ContactUsApi рд╡реИрд░рд┐рдПрдмрд▓ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛, рдЬреЛ рдХрд┐ рд╣рдорд╛рд░реЗ рдмрдирд╛рдП рдПрдкреАрдЖрдИ рдПрдВрдбрдкреЙрдЗрдВрдЯ рдХреЗ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдкрддреЗ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рдореВрд▓реНрдп рдкрд░ рд╕реЗрдЯ рд╣реЛрдЧрд╛ред
рдЪреВрдБрдХрд┐ рд╣рдо $ {ServerlessRestApi} рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ , AWS рд╣рдорд╛рд░реЗ рдирдП рдЧреЗрдЯрд╡реЗ рдПрдкреАрдЖрдИ рдХреЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдХреЛ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░реЗрдЧрд╛ред рдирддреАрдЬрддрди, CloudFormation рддрдХ рдкрд╣реБрдВрдЪ рд╡рд╛рд▓реЗ рдХрд┐рд╕реА рднреА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдпрд╣ рдкрддрд╛ рдорд┐рд▓ рд╕рдХреЗрдЧрд╛ - рдЬрд┐рд╕рд╕реЗ рдЖрдк рдЕрдкрдиреА рд╕реЗрд╡рд╛рдУрдВ рдХреЗ URL рдХреЛ рд╣рд╛рд░реНрдбрдХреЛрдб рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред рдЦреИрд░, рдПрдХ рдФрд░ рдкреНрд▓рд╕ рдпрд╣ рд╣реИ рдХрд┐ рдЖрдЙрдЯрдкреБрдЯ рдХреА рд╕реВрдЪреА рдХреЛ рджреЗрдЦрдирд╛ рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ - рдЖрдкрдХреЗ рд╕реНрдЯреИрдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдореЗрдЯрд╛ рдЬрд╛рдирдХрд╛рд░реАред
рдХрд╛рд░реНрдпреЛрдВ рдХреА рдПрдХ рдкреВрд░реА рд╕реВрдЪреА рдФрд░ рдЖрдк рдХрд┐рди рдорд╛рдкрджрдВрдбреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╣рд╛рдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ред

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

рд╡рд╣ рдкреВрд░рд╛ рдЦрд╛рдХрд╛ рд╣реИред рдХреЛрдИ рднреА рдПрдХ рдЬреЛрдбрд╝реЗ рдХреЛ рдФрд░ рдЕрдзрд┐рдХ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдордирд╛ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ S3 рдмрд╛рд▓реНрдЯреА, рдХрд┐рд╕реА рднреА рдЕрдиреНрдп CloudFormation рд╕рдВрд╕рд╛рдзрди, рдпрд╛ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдПрдХ рдХрд╕реНрдЯрдо рд╕рдВрд╕рд╛рдзрди ред

6. рд╣рдо рддреИрдирд╛рддреА рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝рддреЗ рд╣реИрдВ


рд╣рдорд╛рд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рдЗрдХрдЯреНрдард╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдЧреНрд░реИрдбрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ, рд▓реЗрдХрд┐рди рдПрд╕рдПрдПрдоред
рд╕рднрд╛
F:\aws\projects\contact-us-sam-app>sam build
Building resource 'ContactUsFunction'
Running JavaGradleWorkflow:GradleBuild
Running JavaGradleWorkflow:CopyArtifacts

Build Succeeded

Built Artifacts  : .aws-sam\build
Built Template   : .aws-sam\build\template.yaml

Commands you can use next
=========================
[*] Invoke Function: sam local invoke
[*] Deploy: sam deploy тАУguided


рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд░реВрдЯ рд╕реЗ рд╕реИрдо рдмрд┐рд▓реНрдб рдХрдорд╛рдВрдб рдХреЛ рд░рди рдХрд░рдирд╛ рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рдлрд╛рдЗрд▓реЛрдВ рдХреЛ .aws-sam рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдПрдХрддреНрд░рд┐рдд рдХрд░реЗрдЧрд╛ : рдХрдХреНрд╖рд╛рдПрдВ, рдирд┐рд░реНрднрд░рддрд╛, рдПрд╕рдПрдПрдо рдЯреЗрдореНрдкрд▓реЗрдЯред
рдЗрд╕рдХреЗ рдмрд╛рдж, рдЖрдкрдХреЛ рдПрдХ S3 рдмрд╛рд▓реНрдЯреА рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬрд╣рд╛рдВ рдПрд╕рдПрдПрдо рдмрд╛рдж рдореЗрдВ рд╕рднреА рдПрдХрддреНрд░рд┐рдд рдХрд▓рд╛рдХреГрддрд┐рдпреЛрдВ рдХреЛ рдЕрдкрд▓реЛрдб рдХрд░рддрд╛ рд╣реИред
рдпрд╣ рдмреНрд░рд╛рдЙрдЬрд╝рд░-рдЖрдзрд╛рд░рд┐рдд AWS рдХрдВрд╕реЛрд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдпрд╛ рдХрдорд╛рдВрдб рдХреЗ рд╕рд╛рде рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ
aws s3 mb s3://bucket-name

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

рдЬрдм рдмрд╛рд▓реНрдЯреА рддреИрдпрд╛рд░ рд╣реЛ рдЬрд╛рдП, рддреЛ рдХрдорд╛рдВрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдВ:
sam package --output-template-file packaged.yaml --s3-bucket <YOUR_BACKET>

рдкреИрдХреЗрдЬ рдкрд░рд┐рдгрд╛рдо
F:\aws\projects\contact-us-sam-app>sam package --output-template-file packaged.yaml --s3-bucket contact-us-sam-app
Uploading to ea0c122c06a50d9676fbf9000a80a3bf  9212768 / 9212768.0  (100.00%)

Successfully packaged artifacts and wrote output template to file packaged.yaml.
Execute the following command to deploy the packaged template
sam deploy --template-file F:\aws\projects\contact-us-sam-app\packaged.yaml --stack-name <YOUR STACK NAME>


рдореИрдВрдиреЗ рдЕрдкрдирд╛ рд╕рдВрдкрд░реНрдХ us-sam-app рдмрд╛рд▓реНрдЯреА рдмрддрд╛рдпрд╛, рдФрд░ рдПрд╕рдПрдПрдо рдиреЗ рд╕рднреА рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╕реНрдерд╛рди рдкрд░ рдЕрдкрд▓реЛрдб рдХрд░ рджрд┐рдпрд╛ред рдЕрдЧрд▓рд╛, рдПрд╕рдПрдПрдо рдЖрдкрдХреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рд╕реНрдЯреИрдХ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрджреЗрд╢ рдмрддрд╛рддрд╛ рд╣реИ, рдФрд░ рдЗрд╕ рддрд░рд╣ рдЖрдкрдХреЗ рдирд┐рд░реНрдгрдп рдХреЛ рдПрдореНрдмреЗрдб рдХрд░рддрд╛ рд╣реИред рд╣рдо рдЖрджреЗрд╢ рдХреЛ рдЕрдВрдЬрд╛рдо рджреЗрддреЗ рд╣реИрдВ, рдереЛрдбрд╝рд╛ рдЕрдВрддрд┐рдо рд░реВрдк рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:
sam deploy --template-file packaged.yaml --region eu-west-1 --capabilities CAPABILITY_IAM --stack-name contact-us-sam-app

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдореИрдВрдиреЗ рдЬреЛрдбрд╝рд╛ - рдпреЛрдЧреНрдпрддрд╛рдПрдБ рдХреНрд╖рдорддрд╛ + рдЖрдИрдПрдПрдо ред рдпрд╣ CloudFormation рдХреЛ IAM рд╕рдВрд╕рд╛рдзрди рдмрдирд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдХрд░реЗрдЧрд╛ред рдЕрдиреНрдпрдерд╛, рдЖрдкрдХреЛ рдмрдирд╛рддреЗ рд╕рдордп рдПрдХ рдЕрдкрд░реНрдпрд╛рдкреНрдд рдЕрдкрд░реНрдпрд╛рдкреНрддрддрд╛ рдкреНрд░рд╛рдкреНрдд рд╣реЛрдЧреАред
рдЗрд╕ рдХрдорд╛рдВрдб рдХреЗ рдХрд╛рд░реНрдп рдХрд╛ рд▓реЙрдЧ рдирд┐рдореНрди рд╣реИ (рдЪрд┐рддреНрд░ рдХреНрд▓рд┐рдХ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╣реИ)ред рдкреНрд░рддреНрдпреЗрдХ рд╕рдВрд╕рд╛рдзрди рдХреА рд╕реНрдерд┐рддрд┐ рдФрд░ рдЖрдЙрдЯрдкреБрдЯ рдХреЗ рдорд╛рди рдЬреИрд╕реЗ рд╡рд┐рд╡рд░рдг SAM CLI рдХреЗ рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ рд╕реЗ рдХреЗрд╡рд▓ рдПрдХ рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╣реБрдПред


7. CloudFormation рдХреА рд╕реНрдерд┐рддрд┐ рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВ


рд╣рдо рд╕рд╛рдВрддреНрд╡рдирд╛ рдореЗрдВ рддреИрдирд╛рддреА рдХреЗ рдкреВрд░рд╛ рд╣реЛрдиреЗ рддрдХ рдЗрдВрддрдЬрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрдм рддрдХ рдХрд┐ рдХреЛрдИ рд╕рдВрджреЗрд╢ рдпрд╣ рдирд╣реАрдВ рдХрд╣рддрд╛ рдХрд┐ рд╕реНрдЯреИрдХ рдХреЛ рддреИрдирд╛рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ (рдкрд┐рдЫрд▓реЗ рдкреИрд░рд╛рдЧреНрд░рд╛рдл рдореЗрдВ рддреИрдирд╛рддреА рдХрдорд╛рдВрдб рд▓реЙрдЧ):
Successfully created/updated stack - contact-us-sam-app in eu-west-1

рд▓реЗрдХрд┐рди рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЖрдкрдХреЛ рдпрд╣ рд╕рдВрджреЗрд╢ рдХреИрдирд░реА рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдореЛрдб рдХреЗ рдХрд╛рд░рдг рдХреЗрд╡рд▓ рджрд╕ рдорд┐рдирдЯ рдмрд╛рдж рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛ред рдЗрд╕рд▓рд┐рдП, рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХрдВрд╕реЛрд▓ рдЦреЛрд▓рдирд╛ рдФрд░ рд╡рд╣рд╛рдВ рд╕реНрдЯреИрдХ рджреЗрдЦрдирд╛ рдЖрд╕рд╛рди рд╣реИред

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



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

рд▓реИрдореНрдмреНрдбрд╛ рдХреЗ рд▓рд┐рдП рднреА рдХрдИ рдЕрддрд┐рд░рд┐рдХреНрдд рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдП рдЧрдП рдереЗред
рдЕрдм рдЖрдЙрдЯрдкреБрдЯ рдЦреЛрд▓реЗрдВ рдФрд░ рд╣рдорд╛рд░реЗ рдПрдкреАрдЖрдИ рдХрд╛ URL рдвреВрдВрдвреЗрдВред рдЗрд╕реЗ рдХреЙрдкреА рдХрд░реЗрдВ, рдпрд╣ рдЬрд▓реНрдж рд╣реА рдХрд╛рдо рдЖрдПрдЧрд╛ред

8. HTML рд╕рдВрдкрд░реНрдХ рдлрд╝реЙрд░реНрдо


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

рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ
рд░реВрдк рдореЗрдВ рд╕реНрд╡рдпрдВ рдХреЗ рд▓рд┐рдП, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рд╕рд░рд▓рддрдо HTML рдлреЙрд░реНрдо рд▓реЗрдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдФрд░ рдЧреЗрдЯрд╡реЗ рдПрдкреАрдЖрдИ рдХреЙрд▓ рдХреЛ рдЕрдЬрд╛рдХреНрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬреЛрдбрд╝рд╛ред

рдлреЙрд░реНрдо рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореИрдВрдиреЗ рдбрд┐рдмрдЧрд┐рдВрдЧ рдФрд░ рднрд░рдиреЗ рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдмрдЯрди рдЬреЛрдбрд╝реЗ:
рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╕реЗрдЯ рдХрд░реЗрдВ - рд╡рд┐рдХрд▓реНрдк, рдЬреИрд╕рд╛ рдХрд┐ рдЕрдкреЗрдХреНрд╖рд┐рдд рдерд╛, рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдкреИрд░рд╛рдореАрдЯрд░ HTML рдХреЗ рдЕрдВрджрд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдП рдЧрдП рд╣реИрдВред
$("#url-input").val("https://4ykskscuq0.execute-api.eu-west-1.amazonaws.com/Prod/contact");
$("#name-input").val("Mike");
$("#email-input").val("Mike@somemail.com");
$("#phone-input").val("+79999999999");
$("#description-input").val("How much does it cost?");

рдпрджрд┐ рдЖрдк рдЗрд╕ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдЗрд░рд╛рджрд╛ рд░рдЦрддреЗ рд╣реИрдВ, рддреЛ url-input рдХреЛ рдЕрдкрдиреЗ рдЧреЗрдЯрд╡реЗ API рдХреЗ рдкрде рдореЗрдВ рдмрджрд▓реЗрдВ, рдЬрд┐рд╕реЗ рдЖрдкрдиреЗ рдЖрдЙрдЯрдкреБрдЯ рд╕реЗ рдХреЙрдкреА рдХрд┐рдпрд╛ рдерд╛ ред

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


9. рд╕реНрд╡рд╛рд╕реНрдереНрдп рдЬрд╛рдБрдЪ


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

рдпрджрд┐ рдЖрдкрдиреЗ рдХреБрдЫ рд╕рдордп рдмрд╛рдж рд╕рдм рдХреБрдЫ рдареАрдХ рд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рд╣реИ рддреЛ рдЖрдкрдХреЛ рдПрдХ рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рд╣реЛрдЧрд╛:
рд╕рдлрд▓: рд╕рдВрджреЗрд╢ 0102016f28b06243-ae897a1e-b805-406b-9987-019f21547682-000000 рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рднреЗрдЬрд╛ рдЧрдпрд╛ рд╣реИред

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

рдЖрдк рдбрд╛рдпрдирд╛рдореЛрдбреАрдмреА рднреА рдЦреЛрд▓ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдПрдХ рдирдИ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рджрд┐рдЦрд╛рдИ рджреА рд╣реИред

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

рдлрд┐рд░ рд╕реЗ рдлреЙрд░реНрдо рднрд░рдиреЗ рдФрд░ рд╕рдмрдорд┐рдЯ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред рдЗрд╕ рдмрд╛рд░ рдЬрд╡рд╛рдм рд▓рдЧрднрдЧ рддреБрд░рдВрдд рдЖрдпрд╛, рд╣реИ рдирд╛? рдпрджрд┐ рдкрд╣рд▓реЗ рдФрд░ рджреВрд╕рд░реЗ рдЕрдиреБрд░реЛрдз рдХреЗ рдмреАрдЪ 20-30 рдорд┐рдирдЯ рд╕реЗ рдЕрдзрд┐рдХ рдмреАрдд рдЪреБрдХреЗ рд╣реИрдВ, рддреЛ рдкрд░рд┐рдгрд╛рдо рднрд┐рдиреНрди рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред
рдЗрд╕рдХрд╛ рдХрд╛рд░рдг рдХреНрдпрд╛ рд╣реИ? рдФрд░ рдЗрд╕ рддрдереНрдп рдХреЗ рд╕рд╛рде рдХрд┐ рдПрдбрдмреНрд▓реНрдпреВрдПрд╕ рд▓рд╛рдореНрдмрд╛ рдХреИрд╢ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЕрдкрдиреЗ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рд▓реИрдВрдмрдбрд╛рд╕ рдХреЗ рд╕рд╛рде рдХрдВрдЯреЗрдирд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рдереЗред рдпрд╣ рд╡рд┐рдзрд┐ рдХреЛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреВрд░реЗ рд╕рдВрджрд░реНрдн рдХреЗ рд╢реБрд░реБрдЖрддреА рд╕рдордп рдХреЛ рдХрдо рдХрд░рддрд╛ рд╣реИред
рдЗрд╕ рдмрд╛рдд рдкрд░ рдХреЛрдИ рд╕реНрдкрд╖реНрдЯ рд╕рд╣рд╕рдВрдмрдВрдз рдирд╣реАрдВ рд╣реИ рдХрд┐ рд▓рдореНрдмреЗ рд╕рдордп рддрдХ рд▓реИрдВрдмрдбрд╕ рдХрд┐рд╕рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдХреИрд╢ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдХреБрдЫ рд▓реЛрдЧреЛрдВ рдиреЗ рдкреНрд░рдпреЛрдЧрд╛рддреНрдордХ рд░реВрдк рд╕реЗ рдкрд╛рдпрд╛ рдХрд┐ рдпрд╣ рд╕реАрдзреЗ рд░реИрдо рдХреЗ рдЪреБрдиреЗ рд╣реБрдП рдореВрд▓реНрдп рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред рдпрд╛рдиреА 128MB рдореЗрдореЛрд░реА рд╡рд╛рд▓рд╛ рдПрдХ рд▓реИрдореНрдмреНрдбрд╛ 3GB рдХреЗ рд╕рд╛рде рдЬреНрдпрд╛рджрд╛ рд╕рдордп рддрдХ рдЙрдкрд▓рдмреНрдз рд░рд╣реЗрдЧрд╛ред рд╢рд╛рдпрдж рдЕрдиреНрдп рдкреИрд░рд╛рдореАрдЯрд░ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЙрд╕ рдХреНрд╖реЗрддреНрд░ рдкрд░ рдФрд╕рдд рд▓реЛрдб рдЬрд┐рд╕рдореЗрдВ рдЖрдкрдХреЗ рд▓реИрдореНрдмреНрдбрд╛ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЧрд▓рдд рд╣реИред
рдЗрд╕рд▓рд┐рдП, рдЕрдкрдиреЗ рдЖрдк рдХреЛ рдкреНрд░рдпреЛрдЧ рдХрд░реЗрдВ рдФрд░ рдпрджрд┐ рдЖрдк рддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдЕрдиреБрд░реЛрдзреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдХреИрд╢рд┐рдВрдЧ рд╕рдордп рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛рдПрдВред

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

рд╕рд╛рд░рд╛рдВрд╢


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

рд▓рд╛рдн
, рдореИрдВрдиреЗ рд╕рдмрд╕реЗ рдореВрд▓реНрдпрд╡рд╛рди рд▓рд╛рднреЛрдВ рдХреА рдкрд╣рдЪрд╛рди рдХреА рд╣реИ:
  • Free Tier , , .
  • 1-2 . /.
  • , , .
  • Serverless . , тАФ . SAM AWS. AWS , , .
  • Lambda , .
  • Serverless , , . ELK/Promethes/Grafana .
  • , API. API Key, IAM , .
  • рдЦреИрд░, рд╢рд╛рдпрдж рд╕рдмрд╕реЗ рдмреБрдирд┐рдпрд╛рджреА рдмрд╛рдд рд╕рд░реНрд╡рд░ рд░рд╣рд┐рдд рд╣реИред рдЗрд╕ рдмрд╛рдд рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдИрд╕реА 2 рдЙрджрд╛рд╣рд░рдг рдЖрдкрдХреЛ рдХрд┐рд╕рдХреЗ рд▓рд┐рдП рднреБрдЧрддрд╛рди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВ, рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреНрд░реИрд╢ рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдЕрд▓рд░реНрдЯ рдХреИрд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВ, рдСрдЯреЛ-рд╕реНрдХреЗрд▓рд┐рдВрдЧ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВ рдЖрджрд┐ред


рдиреБрдХрд╕рд╛рди
рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЕрдм рдЖрдк рдЗрд╕ рд╕рдорд╛рдзрд╛рди рдХреЛ рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдХреНрдпреВрдмреЗрд░ рдореЗрдВ рдЕрдкрдиреЗ рдкрд╕рдВрджреАрджрд╛ рдорд╛рдЗрдХреНрд░реЛрд╕рд┐рд╕реНрдЯрд░реНрд╕ рдХреЗ рдмрдЬрд╛рдп рдЙрджреНрдпрдо рдкреНрд░рдгрд╛рд▓реА рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдмрд╣реБрдд рдмрд╛рд░, рдЖрдкрдХреЛ рдХрд┐рд╕реА рд╡рд┐рд╢реЗрд╖ рдорд╛рдорд▓реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЙрдкрдпреБрдХреНрдд рд╕рдорд╛рдзрд╛рди рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЧрд╣рд░реА рдЦреБрджрд╛рдИ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред
рдФрд░ рдореЗрд░реА рдпрд╣ рднреА рдЯрд┐рдкреНрдкрдгреА рд╣реИ рдХрд┐ рд▓реИрдореНрдмрдбрд╛ рдХреЛ рдЪреБрдирддреЗ рд╕рдордп рдЖрдкрдХреЛ рдзреНрдпрд╛рди рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдП:
  • рдардВрдбреА рд╢реБрд░реБрдЖрддред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЬрдм рддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдкреНрд░рд╢реНрдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдЬрд╛рд╡рд╛ рдпрд╛ рд╕реА # рдЬреИрд╕реА рднрд╛рд╖рд╛рдПрдВред рд╕рдорд╕реНрдпрд╛ рдХреЛ рдЧрд░реНрдо рдХрд░рдХреЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдкрд╣рд▓реЗ рд╕реЗ рдЗрд╕ рддрд░рд╣ рдХреЗ рд╕рдорд╛рдзрд╛рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрдирд╛ рдФрд░ рд▓рд╛рдЧрдд рдФрд░ рд╕рдВрднрд╛рд╡рд┐рдд рд▓рд╛рднреЛрдВ рдХреА рддреБрд▓рдирд╛ рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реИ
  • . 3GB , 2 , , - Fargate, , .
  • API, , .
  • / 1-2 Serverless, .
  • рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА Coober рдореЗрдВ microservices рдФрд░ CI / CD рдХреЛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмреБрдирд┐рдпрд╛рджреА рдврд╛рдВрдЪрд╛ рд╣реИ, рддреЛ рдпрд╣ рдлрд┐рд░ рд╕реЗ рдмрд╣рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдорд╕реНрдпрд╛рдЧреНрд░рд╕реНрдд рд╣реЛрдЧрд╛ (рд╡рд┐рд╢реЗрд╖рдХрд░ рдкреНрд░рдмрдВрдзрдХреЛрдВ рдХреЗ рд▓рд┐рдП) рдПрдХ рдФрд░ CI / CD рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ред
  • рдЦреИрд░, рдмрд┐рдирд╛ рдкрд░реАрдХреНрд╖рдг рдХреЗ рдХрд╣рд╛рдВред рдФрд░ рдереНрд░реВрдкреБрдЯ рдХреЗ рд▓рд┐рдП рд▓реИрдореНрдмреНрдбрд╛ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдирд╛ рдХрд╛рдлреА рдореБрд╢реНрдХрд┐рд▓ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЕрднреА рднреА рд╕рд╛рдорд╛рдиреНрдп рдЫрд┐рдбрд╝рдХрд╛рд╡ рдкрд░реАрдХреНрд╖рдг рд╕реЗ рдЕрд▓рдЧ рд╣реИ, рдФрд░ рдХрдИ рдХрд╛рд░рдХреЛрдВ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред


рдЙрдкрдпреЛрдЧ
рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, AWS рд▓реИрдВрдмрдбрд╛ рдФрд░ рдЕрдиреНрдп рд╕рд░реНрд╡рд░ рд░рд╣рд┐рдд рд╕реЗрд╡рд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ, рдПрд╕рд┐рдВрдХреНрд╕ рдФрд░ рдЗрд╡реЗрдВрдЯ-рд╕рдВрдЪрд╛рд▓рд┐рдд рд╡рд┐рдХрд╛рд╕ рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрддреЛрдВ рдХреЗ рд╕рд╛рде рдмрд╣реБрдд рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдлрд┐рдЯ рдмреИрдарддрд╛ рд╣реИред рдФрд░ рдпрд╣ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╣реИ рдХрд┐ рдкреНрд░рджрд░реНрд╢рди рдФрд░ рд▓рд╛рдЧрдд рджреЛрдиреЛрдВ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдЗрд╖реНрдЯрддрдо рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣рд╛рдВ рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рджреА рдЧрдИ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╕рд░реНрд╡рд░рд╕ рд╕рдорд╛рдзрд╛рди рдорд╣рддреНрд╡рдкреВрд░реНрдг рднреВрдорд┐рдХрд╛ рдирд┐рднрд╛рдПрдВрдЧреЗ:


рдкреБрдирд╢реНрдЪ


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

рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛: рдПрдбрдмреНрд▓реНрдпреВрдПрд╕ рд▓рд╛рдореНрдмрд╛ рдЗрди рдПрдХреНрд╢рдиред рднрд╛рдЧ 2 рд▓реЗрдЦ рдХреЗ

рдХреБрдЫ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдФрд░ рдЙрдкрдпреЛрдЧреА рд▓рд┐рдВрдХ:

Source: https://habr.com/ru/post/undefined/


All Articles