рдпрд╛рдВрдбреЗрдХреНрд╕ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдореЗрд▓ рднреЗрдЬрддреЗ рд╣реИрдВ

рдпрд╛рдВрдбреЗрдХреНрд╕ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдореЗрд▓ рднреЗрдЬрддреЗ рд╣реИрдВ

рдЖрдЬ рд╣рдо рддрдерд╛рдХрдерд┐рдд рдмрдирд╛рдПрдВрдЧреЗред рдпрд╛рдВрдбреЗрдХреНрд╕ рдлрд╝рдВрдХреНрд╢рди (рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдирд╛рдо рдпрд╛рдВрдбреЗрдХреНрд╕ рдХреНрд▓рд╛рдЙрдб рдлрд╝рдВрдХреНрд╢рдВрд╕), рдЬрд┐рд╕рдиреЗ рдореЗрд▓рд┐рдВрдЧ рд╕реЗрд╡рд╛ рдХреЗ рд╕рд╛рде рдорд┐рд▓реАрднрдЧрдд рдХреА SendGrid рд╢рд╛рдВрддрд┐ рд╕реЗ рд╕реЛ рд░рд╣реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ "рд╕рд╛рдмреБрди" рднреЗрдЬреЗрдЧрд╛ (рдордЬрд╛рдХ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ - рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рд╕рднреА рд╕реНрдкреИрдо рдХреЗ рдЦрд┐рд▓рд╛рдл рд╣реИрдВ)ред

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

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

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

1. рд╕реЗрдВрдбрдЧреНрд░рд┐рдб рдореЗрдВ рдПрдХ рдЦрд╛рддрд╛ рдмрдирд╛рдПрдВ

рдиреЛрдЯрд╕реЗрдВрдбрдЧреНрд░рд┐рдб рд╕рд┐рд░реНрдл рдореЗрд░реА рдкрд╕рдВрдж рд╣реИ, рдЬрд┐рд╕реЗ рдореИрдВрдиреЗ рдХрдИ рдХрд╛рд░рдгреЛрдВ рд╕реЗ рдЪреБрдирд╛ рд╣реИ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдореБрдЦреНрдп рдХрд╛рд░рдг рдпрд╣ рд╣реИ рдХрд┐ рдЙрдирдХреЗ рдкрд╛рд╕ Node.js рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ SDK рд╣реИред рдЖрдк рдХреЛрдИ рдЕрдиреНрдп рдореЗрд▓рд┐рдВрдЧ рд╕реЗрд╡рд╛ рдЪреБрди рд╕рдХрддреЗ рд╣реИрдВ.

рдЖрдЧреЗ рдмрдврд╝рддреЗ рд╣реИрдВ рдЦрд╛рддрд╛ рдкрдВрдЬреАрдХрд░рдг рдкреГрд╖реНрда рдкрд░ рдФрд░ рд╡рд╣рд╛рдВ рд░рдЬрд┐рд╕реНрдЯреНрд░реЗрд╢рди рдлреЙрд░реНрдо рднрд░реЗрдВред рдлрд┐рд░ рд╣рдо рдЬрд╛рддреЗ рд╣реИрдВ рдбреИрд╢рдмреЛрд░реНрдб , рдиреЗрд╡рд┐рдЧреЗрд╢рди рдкреИрдирд▓ рдореЗрдВ рдЪрдпрди рдХрд░реЗрдВ рдИрдореЗрд▓ рдПрдкреАрдЖрдИ -> рдПрдХреАрдХрд░рдг рдЧрд╛рдЗрдб, рдФрд░ рдореБрдЦреНрдп рдкреИрдирд▓ рдкрд░ - рд╡реЗрдм рдПрдкреАрдЖрдИ рдФрд░ ╨╜╨░╨╢╨╕╨╝╨░╨╡╨╝ ╨║╨╜╨╛╨┐╨║╤Г рдЪреБрдиреЗрдВ. рдЪрд┐рддреНрд░ рдореЗрдВ рд╕рдм рдХреБрдЫ рд╡реИрд╕рд╛ рд╣реА рд╣реИ:

рдпрд╛рдВрдбреЗрдХреНрд╕ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдореЗрд▓ рднреЗрдЬрддреЗ рд╣реИрдВ

рдЕрдЧрд▓реЗ рдЪрд░рдг рдореЗрдВ рд╣рдо рдЪрдпрди рдХрд░рддреЗ рд╣реИрдВ Node.js:

рдпрд╛рдВрдбреЗрдХреНрд╕ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдореЗрд▓ рднреЗрдЬрддреЗ рд╣реИрдВ

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

рдпрд╛рдВрдбреЗрдХреНрд╕ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдореЗрд▓ рднреЗрдЬрддреЗ рд╣реИрдВ

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

рдпрд╛рдВрдбреЗрдХреНрд╕ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдореЗрд▓ рднреЗрдЬрддреЗ рд╣реИрдВ

2. рдХреЛрдб рд▓рд┐рдЦрдирд╛

рд▓реЗрдХрд┐рди рдХреЛрдб рд╕реНрд╡рдпрдВ, рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд╣рд╛рд╕реНрдпрд╛рд╕реНрдкрдж рд░реВрдк рд╕реЗ рдЫреЛрдЯрд╛ рд╣реИ - 22 рд▓рд╛рдЗрдиреЗрдВ!

рдпрд╛рдВрдбреЗрдХреНрд╕ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдореЗрд▓ рднреЗрдЬрддреЗ рд╣реИрдВ

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

const { user } = event;
const email = user.email;

рдФрд░ рдпрджрд┐ рдИрдореЗрд▓ рдкрддрд╛ рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдкрд╛рд╕ рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ GET, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП: https://functions.yandexcloud.net/123abc?[email protected]
рдкреИрд░рд╛рдореАрдЯрд░ рдорд╛рди рдИрдореЗрд▓ рдЖрдк рдЗрд╕реЗ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

const email = event.queryStringParameters.email;

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

module.exports.handler = async function (event) {
  return {
   'statusCode': 200, 
   'body': JSON.stringify(event)
  };
};

рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдореЗрдВ рдЗрд╕ рдкрд░ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ (рд▓реЗрдХрд┐рди рдХрдо рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ) рдЪрд░реНрдЪрд╛ рдХреА рдЧрдИ рд╣реИ рдпрд╣рд╛рдВ.

рддреЛ, рдПрдХ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдмрдирд╛рдПрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдореЗрд▓рд░), рдЗрд╕ рдкрд░ рдЬрд╛рдПрдВ, рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдЖрд░рдВрдн рдХрд░реЗрдВ, рдирд┐рд░реНрднрд░рддрд╛рдПрдВ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ:

mkdir mailer
cd mailer
npm init -y
npm i @sendgrid/mail email-validator dotenv

рдпрд╣рд╛рдВ рд╕рд┐рд░реНрдл рдкреИрдХреЗрдЬ рдХреА рдЬрд░реВрд░рдд рд╣реИ @рд╕реЗрдВрдбрдЧреНрд░рд┐рдб/рдореЗрд▓. рдкреНрд▓рд╛рд╕реНрдЯрд┐рдХ рдмреИрдЧ рдИрдореЗрд▓-рд╕рддреНрдпрд╛рдкрдирдХрд░реНрддрд╛ рд╡реИрдзрддрд╛ рдХреЗ рд▓рд┐рдП рдИрдореЗрд▓ рдкрддреЗ рдХреА рдЬрд╛рдВрдЪ рдХрд░рддрд╛ рд╣реИ (рдореИрдВрдиреЗ рддреБрд░рдВрдд рдЕрдиреБрдорд╛рди рдХреИрд╕реЗ рдирд╣реАрдВ рд▓рдЧрд╛рдпрд╛?), рд▓реЗрдХрд┐рди рдЕрдЧрд░ рд╣рдо рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЖрд╢реНрд╡рд╕реНрдд рд╣реИрдВ (рдпрд╣ рд╣рдорд╛рд░реЗ рдмрд┐рдирд╛ рдкрд╣рд▓реЗ рд╣реА рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ рдЬрд╛рдВрдЪрд╛ рдЬрд╛ рдЪреБрдХрд╛ рд╣реИ), рддреЛ рд╣рдореЗрдВ рдЗрд╕реЗ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рдирд╣реАрдВ рд╣реИ (рдФрд░, рдмреЗрд╢рдХ, рд╣рдореЗрдВ рдЗрд╕реЗ рдХреЛрдб рдореЗрдВ рдЬрд╛рдБрдЪрдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рдирд╣реАрдВ рд╣реИ)ред рдкреНрд▓рд╛рд╕реНрдЯрд┐рдХ рдмреИрдЧ рдбреЙрдЯрдирд╡ рдХрд┐рд╕реА рдлрд╝рд╛рдЗрд▓ рд╕реЗ рд░рд┐рдХреЙрд░реНрдб рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ .env рд░рдирдЯрд╛рдЗрдо рдЪрд░ рдХреЗ рд░реВрдк рдореЗрдВред рд▓реЗрдХрд┐рди рдореЗрдВ рдпрд╛рдВрдбреЗрдХреНрд╕ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИ рдЗрди рд╡реЗрд░рд┐рдПрдмрд▓реНрд╕ рдХреЛ рд╕реАрдзреЗ рд░рдирдЯрд╛рдЗрдо рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рд░рдЦрдирд╛ рд╕рдВрднрд╡ рд╣реИред рдХреИрд╕реЗ? - рдореИрдВ рдЗрд╕реЗ рдиреАрдЪреЗ рджрд┐рдЦрд╛рдКрдВрдЧрд╛ред рдЗрд╕рд▓рд┐рдП рдкреИрдХреЗрдЬ рдбреЙрдЯрдирд╡ рдЖрдк рдЗрд╕реЗ рдЗрдВрд╕реНрдЯреЙрд▓ рднреА рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ, рдФрд░ рдлрд╝рд╛рдЗрд▓ .env - рди рдмрдирд╛рдПрдВ, рдФрд░ рд╕рд╛рде рд╣реА рдХреЛрдб рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╣реИ index.js рдмрджрд▓реЗрдВ рдирд╣реАрдВред рд▓реЗрдХрд┐рди рдпрд╣рд╛рдВ рд╣рдордиреЗ рдпрд╣ рдкреИрдХреЗрдЬ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд┐рдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдлрд╝рд╛рдЗрд▓реЗрдВ рдмрдирд╛рддреЗ рд╣реИрдВ index.js ╨╕ .env:

touch index.js
touch .env

рдлрд╛рдЗрд▓ рдореИрдВ index.js рдКрдкрд░ рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рдореЗрдВ рджрд┐рдЦрд╛рдП рдЧрдП рдХреЛрдб рдХреА 22 рдкрдВрдХреНрддрд┐рдпрд╛рдБ рд▓рд┐рдЦреЗрдВ (рдХреЗрд╡рд▓ рдкрдВрдХреНрддрд┐ рдореЗрдВ)ред #8 рдЕрдкрдирд╛ рдИрдореЗрд▓ рдмрджрд▓реЗрдВ), рдФрд░ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ .env - (рдмрд┐рдирд╛ рдХрд┐рд╕реА рдЙрджреНрдзрд░рдг рдпрд╛ рд╡рд┐рд░рд╛рдо рдЪрд┐рд╣реНрди рдХреЗ) рдЬреЛрдбрд╝реА рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдВ - рдХреБрдВрдЬреА рдирд╛рдо/рдорд╛рди APIрдЬреЛ рд╣рдореЗрдВ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдХрдВрд╕реЛрд▓ рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рд╣реБрдЖ рд╣реИ SendGrid:
SENDGRID_API_KEY=рдЖрдкрдХреА-рдмрд╣реБрдд-рдЧреБрдкреНрдд-рд╕реЗрдВрдбрдЧреНрд░рд┐рдб-рдПрдкреАрдЖрдИ-рдХреБрдВрдЬреА

рдФрд░ рдпрджрд┐ рдЖрдк рдХрдо рдХрд╛рдо рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЛ рдХреНрд▓реЛрди рдХрд░реЗрдВ рдФрд░ рдкреИрдХреЗрдЬ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░реЗрдВ:

git clone https://github.com/stmike/ycf-sendgrid-mailer-tutorial.git
cd ycf-sendgrid-mailer-tutorial
npm i

рдлрд╛рдЗрд▓ рдореИрдВ index.js, рдЗрди - рд▓рд╛рдЗрди #8 рдмрджрд▓реЗ рдИ - рдореЗрд▓; рд░реВрдЯ рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдореЗрдВ рдПрдХ рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдБ .env, рдФрд░ рдЗрд╕рдореЗрдВ рдХреБрдВрдЬреА рдХрд╛ рдирд╛рдо/рдорд╛рди рдЗрдВрдЧрд┐рдд рдХрд░реЗрдВ API, рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред

3. рддреИрдирд╛рддреА

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

рд╕реГрдЬрди рдХрд░рдирд╛ рдЬрд╝рд┐рдк-рдЖрд░реНрдХрд╛рдЗрд╡ (рдЖрдЗрдП рдЗрд╕реЗ рдХреЙрд▓ рдХрд░реЗрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдореЗрд▓рд░.рдЬрд╝рд┐рдк), рдЬрд┐рд╕рдореЗрдВ рд╣рдо рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд╢рд╛рдорд┐рд▓ рдХрд░рддреЗ рд╣реИрдВ рдиреЛрдб_рдореЙрдбреНрдпреВрд▓ рдФрд░ рдлрд╝рд╛рдЗрд▓реЗрдВ .env, Index.js - рд╣рдорд╛рд░реЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреИрдЯрд▓реЙрдЧ рд╕реЗ рд╕рдм рдХреБрдЫ:

рдпрд╛рдВрдбреЗрдХреНрд╕ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдореЗрд▓ рднреЗрдЬрддреЗ рд╣реИрдВ

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

рдпрд╛рдВрдбреЗрдХреНрд╕ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдореЗрд▓ рднреЗрдЬрддреЗ рд╣реИрдВ

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

рдпрд╛рдВрдбреЗрдХреНрд╕ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдореЗрд▓ рднреЗрдЬрддреЗ рд╣реИрдВ

рдЕрдм рдКрдкрд░реА рджрд╛рдПрдВ рдХреЛрдиреЗ рдореЗрдВ рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ рд╕рдВрд╕реНрдХрд░рдг рдмрдирд╛рдПрдБ, рдФрд░ рдХреБрдЫ рд╕реЗрдХрдВрдб рд░реБрдХреЗрдВред рдЬрдм рд╕рдм рдХреБрдЫ рддреИрдпрд╛рд░ рд╣реЛ рдЬрд╛рдПрдЧрд╛, рддреЛ рд╣рдо рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рдЪрд▓реЗ рдЬрд╛рдПрдВрдЧреЗ ╨Ю╨▒╨╖╨╛╤А. рд╡рд╣рд╛рдВ рд╣рдо рд╡рд┐рдХрд▓реНрдк рдХреЛ рд╕рдХреНрд╖рдо рдХрд░реЗрдВрдЧреЗ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕рдорд╛рд░реЛрд╣рддрд╛рдХрд┐ рдЖрдк рдмрд╛рд╣рд░реА рджреБрдирд┐рдпрд╛ рд╕реЗ рдЗрд╕рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХрд░ рд╕рдХреЗрдВред

рдпрд╛рдВрдбреЗрдХреНрд╕ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдореЗрд▓ рднреЗрдЬрддреЗ рд╣реИрдВ

рдЖрдк рд╢рд┐рд▓рд╛рд▓реЗрдЦ рдХреЗ рд╕рд╛рдордиреЗ рдиреАрд▓рд╛ рд▓рд┐рдВрдХ рджреЗрдЦреЗрдВ рдХреЙрд▓ рд▓рд┐рдВрдХ? рдЗрд╕реЗ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВред рдПрдХ рдЦрд╛рд▓реА рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╡рд┐рдВрдбреЛ рдЦреБрд▓реЗрдЧреА... рд▓реЗрдХрд┐рди рд░реБрдХрд┐рдП - рдореБрдЭреЗ рдПрдХ рдИрдореЗрд▓ рдкреНрд░рд╛рдкреНрдд рд╣реБрдЖ:

рдпрд╛рдВрдбреЗрдХреНрд╕ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдореЗрд▓ рднреЗрдЬрддреЗ рд╣реИрдВ

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

рдпрд╛рдВрдбреЗрдХреНрд╕ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдореЗрд▓ рднреЗрдЬрддреЗ рд╣реИрдВ

рдмрд╕ рдЗрддрдирд╛ рд╣реА, рджреЛрд╕реНрддреЛрдВ (рдФрд░ рд▓рдбрд╝рдХрд┐рдпреЛрдВ, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ) - рд╕рдм рдХреБрдЫ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмрд╣реБрдд рд╕рд░рд▓ рдФрд░ рд╕реБрд░реБрдЪрд┐рдкреВрд░реНрдг рд╣реИ! рдФрд░ рднреА рд▓реЗрдЦ рд╣реЛрдВрдЧреЗ. рдпрджрд┐ рдХрд┐рд╕реА рдХреЛ рдРрд╕рд╛ рдХреБрдЫ рдкрдврд╝рдиреЗ рдореЗрдВ рд░реБрдЪрд┐ рд╣реИ, рддреЛ рд╕рджрд╕реНрдпрддрд╛ рд▓реЗрдВ рддрд╛рдХрд┐ рдЖрдк рдЪреВрдХ рди рдЬрд╛рдПрдВред

4. рджрд╛рди

рдпрд╛рдВрдбреЗрдХреНрд╕ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдореЗрд▓ рднреЗрдЬрддреЗ рд╣реИрдВ

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

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