рдЪрд▓рд┐рдП рдЦрдмрд░ рд╕реЗ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ. рдХрд▓ Yandex.Cloud рдиреЗ рд╕рд░реНрд╡рд░ рд░рд╣рд┐рдд рдХрдВрдкреНрдпреВрдЯрд┐рдВрдЧ рд╕реЗрд╡рд╛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреА рдШреЛрд╖рдгрд╛ рдХреА
рд╣рд╛рд▓рд╛рдБрдХрд┐, рдХреБрдЫ рд▓реЛрдЧ рдмрд┐рд▓реНрдХреБрд▓ рднреА рднреБрдЧрддрд╛рди рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпреЗ рдбреЗрд╡рд▓рдкрд░ рд╣реИрдВ
рд▓реЗрдХрд┐рди рдХреБрдЫ рдмрд╛рд░реАрдХрд┐рдпрд╛рдБ рд╣реИрдВред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЖрдкрдХреЗ рдкрд┐рдЯ рдХреЛрдб рдХреЛ рдХреБрдЫ рдирд┐рд░реНрднрд░рддрд╛рдУрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ, рдФрд░ рдЙрдиреНрд╣реЗрдВ рдХреНрд▓рд╛рдЙрдб рдореЗрдВ рдЦреАрдВрдЪрдирд╛ рдЧреИрд░-рддреБрдЪреНрдЫ рд╣реИред рджреВрд╕рд░реЗ, рдХрд┐рд╕реА рднреА рд╕рд╛рдорд╛рдиреНрдп рдЪреИрдЯрдмреЙрдЯ рдХреЛ рд╕рдВрд╡рд╛рдж рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рдХрд╣реАрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ (рдЗрд╕рд▓рд┐рдП рд╕реНрдЯреЗрдЯрдлреБрд▓); рд╕рд░реНрд╡рд░ рд░рд╣рд┐рдд рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдРрд╕рд╛ рдХрд░рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рдХреНрдпрд╛ рд╣реИ? рддреАрд╕рд░рд╛, рдЖрдк рдРрд▓рд┐рд╕ рдпрд╛ рдЧреИрд░-рд╢реВрдиреНрдп рдХрдерд╛рдирдХ рд╡рд╛рд▓реЗ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреЗ рдмреЙрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рддреНрд╡рд░рд┐рдд рдФрд░ рдЧрдВрджрд╛ рдХреМрд╢рд▓ рдХреИрд╕реЗ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ? рд▓реЗрдЦ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЗрди рдмрд╛рд░реАрдХрд┐рдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИред
рдиреИрддрд┐рдХ рддреИрдпрд╛рд░реА
рдЕрдзреАрд░ рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП: рдореИрдВ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреНрд▓рд╛рдЙрдб рдкрд░ рдЕрдкрд▓реЛрдб рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдореЗрдХрдлрд╝рд╛рдЗрд▓ рдХреЗ рд╕рд╛рде рдЖрд╡рд╢реНрдпрдХ рдирд┐рд░реНрднрд░рддрд╛рдПрдБ рдПрдХрддреНрд░ рдХрд░рддрд╛ рд╣реВрдВ, рдореИрдВ рдбрд╛рдпрд▓реЙрдЧ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рдпрд╛рдВрдбреЗрдХреНрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рд╕реНрдЯреЛрд░реЗрдЬ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реВрдВ (рдпрд╣ S3 рдПрдкреАрдЖрдИ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ), рдФрд░ рдореИрдВ рдбрд╛рдпрд▓реЙрдЧ рдХреЛ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ
рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЬреЛ рдереЛрдбрд╝реЗ рдХрдо рдЕрдзреАрд░ рд╣реИрдВ, рдЬрдЯрд┐рд▓рддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореЗрд░реА рдХрд╣рд╛рдиреА рдореЗрдВ рдЙрддрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдореИрдВ рдЕрддреНрдпрдзрд┐рдХ рдХреБрдЫ рд╕рд░рд▓ рд╕реЗ рд╢реБрд░реБрдЖрдд рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВред рдЕрд░реНрдерд╛рддреН, рдПрдХ рдПрдХрд▓-рдлрд╝рд╛рдЗрд▓ рдЗрдХреЛрдмреЙрдЯ рдлрд╝рдВрдХреНрд╢рди рдмрдирд╛рдПрдВ, рдЗрд╕реЗ рдбрд╛рдпрд▓реЙрдЧ рдбреЗрд╡рд▓рдкрд░ рдХрдВрд╕реЛрд▓ рдореЗрдВ рдкрдВрдЬреАрдХреГрдд рдХрд░реЗрдВ рдФрд░ рдкрд░реАрдХреНрд╖рдг рдХрд░реЗрдВ; рд╡рд┐рд╡рд░рдг - рдореЗрдВ
рдпрджрд┐ рдЖрдк рддреБрд░рдВрдд рдорд╣рд╕реВрд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рд╣рдо рдпрд╣рд╛рдВ рдХрд┐рд╕ рд▓рд┐рдП рд▓рдбрд╝ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдРрд▓рд┐рд╕ рд╕реЗ рдкреВрдЫреЗрдВ '
рдРрд▓рд┐рд╕: рдирдорд╕реНрддреЗ! рдЖрдк "рдЖрдИрдЯреА рд░рд╛рд╢рд┐рдлрд▓" рдХреМрд╢рд▓ рдореЗрдВ рд╣реИрдВред рд╕рд┐рддрд╛рд░реЗ рдЖрдкрд╕реЗ рдХреНрдпрд╛ рд╡рд╛рджрд╛ рдХрд░рддреЗ рд╣реИрдВ рдпрд╣ рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП "рдкреНрд░рд╛рд░рдВрдн рдХрд░реЗрдВ" рдХрд╣реЗрдВред
рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛: рдкреНрд░рд╛рд░рдВрдн рдХрд░реЗрдВ
рдЙрддреНрддрд░: рдХреГрдкрдпрд╛ рдЕрдкрдирд╛ рдирд╛рдо рдмрддрд╛рдПрдВ
рдпреБ: рд╡рд╕реАрд╕реБрдЕрд▓рд┐
рдЙрддреНрддрд░: рдЕрдм рдореБрдЭреЗ рдЕрдкрдиреЗ рдЬрдиреНрдо рдХрд╛ рд╡рд░реНрд╖ рдмрддрд╛рдУред рдХреЗрд╡рд▓ рдЪрд╛рд░ рдЕрдВрдХ, рдЕрддрд┐рд░рд┐рдХреНрдд рдХреБрдЫ рдирд╣реАрдВред
рдпреВ: рджреВрд╕рд░рд╛
рдЙрддреНрддрд░: рдХреГрдкрдпрд╛ рдкреБрдирдГ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ. рдЕрдкрдиреЗ рдЬрдиреНрдо рдХрд╛ рд╡рд░реНрд╖ рджрд░реНрдЬ рдХрд░реЗрдВ - рдЪрд╛рд░ рдЕрдВрдХред
рдпреБ: 2002
рдорд╣рд╛рди! рдЕрдм рдЕрдкрдиреЗ рдЬрдиреНрдо рдХрд╛ рдорд╣реАрдирд╛ рдмрддрд╛рдПрдВ.
рдпреВ: рдлрд░рд╡рд░реА
рдорд╣рд╛рди! рдЕрдВрдд рдореЗрдВ, рдореБрдЭреЗ рдЕрдкрдиреА рдЬрдиреНрдорддрд┐рдерд┐ рдмрддрд╛рдПрдВ - рдХреЗрд╡рд▓ рдПрдХ рд╕рдВрдЦреНрдпрд╛, рдХреЗрд╡рд▓ рдПрдХ рдпрд╛ рджреЛ рдЕрдВрдХред
рдпреБ: 18
рдЙрддреНрддрд░: рдзрдиреНрдпрд╡рд╛рдж, рд╡рд╛рд╕рд╕реБрдЕрд▓реА! рдЕрдм рд╣рдо рдЬрд╛рдирддреЗ рд╣реИрдВ: рдЖрдк 17 рд╡рд░реНрд╖ рдХреЗ рд╣реИрдВ рдФрд░ рдХреБрдВрдн рд░рд╛рд╢рд┐ рдХреЗ рд╣реИрдВред рдЦреИрд░, рдирд┐рдГрд╕рдВрджреЗрд╣, рдЖрдк рднрд╛рдЧреНрдпрд╢рд╛рд▓реА рд╣реИрдВ! рд╕рд┐рддрд╛рд░реЗ рдЖрдкрдХреЛ рдмрддрд╛рддреЗ рд╣реИрдВ: ╨░ ╤З╤В╨╛ ╨│╨╛╨▓╨╛╤А╤П╤В ╨╖╨▓╤С╨╖╨┤╤Л, ╨▓╤Л ╤Г╨╖╨╜╨░╨╡╤В╨╡, ╨╖╨░╨┐╤Г╤Б╤В╨╕╨▓ ╨╜╨░╨▓╤Л╨║.
рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЗрддрдирд╛ рд╕рд░рд▓ рд╕рдВрд╡рд╛рдж рдмрдирд╛рдП рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд╛ рдирд╛рдо рдФрд░ рдЬрдиреНрдорддрд┐рдерд┐ рдпрд╛рдж рд░рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдФрд░ рд╕рд░реНрд╡рд░ рд░рд╣рд┐рдд рдлрд╝рдВрдХреНрд╢рди рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рдпрд╣ рдЧреИрд░-рддреБрдЪреНрдЫ рд╣реИред рд╕рдВрджрд░реНрдн рдХреЛ рд░реИрдо рдореЗрдВ рдпрд╛ рдбрд┐рд╕реНрдХ рдкрд░ рдлрд╝рд╛рдЗрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реЛрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ Yandex.Cloud рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдХрдИ рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрдиреЛрдВ рдкрд░ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдЪрд▓рд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЗрдЪреНрдЫрд╛рдиреБрд╕рд╛рд░ рдЙрдирдХреЗ рдмреАрдЪ рд╕реНрд╡рд┐рдЪ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдЖрдкрдХреЛ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреЗ рдмрд╛рд╣реНрдп рд╕рдВрдЧреНрд░рд╣рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛. рдСрдмреНрдЬреЗрдХреНрдЯ рд╕реНрдЯреЛрд░реЗрдЬ рдХреЛ рд╕реАрдзреЗ Yandex.Cloud (рдпрд╛рдиреА, рд╢рд╛рдпрдж рддреЗрдЬрд╝) рдореЗрдВ рдХрд╛рдлреА рд╕рд╕реНрддреЗ рдФрд░ рд╕рд░рд▓ рд╕реНрдЯреЛрд░реЗрдЬ рдХреЗ рд░реВрдк рдореЗрдВ рдЪреБрдирд╛ рдЧрдпрд╛ рдерд╛ред рдПрдХ рдореБрдлрд╝реНрдд рд╡рд┐рдХрд▓реНрдк рдХреЗ рд░реВрдк рдореЗрдВ, рдЖрдк, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдореБрдлрд╝реНрдд рдЯреБрдХрдбрд╝рд╛ рдЖрдЬрд╝рдорд╛ рд╕рдХрддреЗ рд╣реИрдВ
рдПрдХ рдФрд░ рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдСрдмреНрдЬреЗрдХреНрдЯ рд╕реНрдЯреЛрд░реЗрдЬ, рдореЛрдВрдЧреЛрдбреАрдмреА рдФрд░ рдХрд┐рд╕реА рдЕрдиреНрдп рдбреЗрдЯрд╛рдмреЗрд╕ рдпрд╛ рдбреЗрдЯрд╛ рд╕реНрдЯреЛрд░ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдХреБрдЫ рдмрд╛рд╣рд░реА рдирд┐рд░реНрднрд░рддрд╛рдУрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ рдЖрдкрдХреЗ рдлрд╝рдВрдХреНрд╢рди рдХреЛрдб рдХреЗ рд╕рд╛рде рдпреИрдВрдбреЗрдХреНрд╕ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдкрд░ рдЕрдкрд▓реЛрдб рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдФрд░ рдореИрдВ рдЗрд╕реЗ рд╕реБрд╡рд┐рдзрд╛рдкреВрд░реНрд╡рдХ рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛. рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдирд╣реАрдВ рд╣реЛрдЧрд╛ (рд╣реЗрд░реЛрдХреВ рдХреА рддрд░рд╣), рд▓реЗрдХрд┐рди рдкрд░реНрдпрд╛рд╡рд░рдг рдмрдирд╛рдиреЗ (рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдВ) рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓рд┐рдЦрдХрд░ рдХреБрдЫ рдмреБрдирд┐рдпрд╛рджреА рд╕реБрд╡рд┐рдзрд╛ рдкреИрджрд╛ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИред
рдХреБрдВрдбрд▓реА рдХреМрд╢рд▓ рдХреИрд╕реЗ рд▓реЙрдиреНрдЪ рдХрд░реЗрдВ
- рддреИрдпрд╛рд░реА рдХрд░реЗрдВ: рд▓рд┐рдирдХреНрд╕ рд╡рд╛рд▓реА рдХрд┐рд╕реА рдорд╢реАрди рдкрд░ рдЬрд╛рдПрдВред рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рдЖрдк рд╢рд╛рдпрдж рд╡рд┐рдВрдбреЛрдЬрд╝ рдХреЗ рд╕рд╛рде рднреА рдХрд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рдЖрдкрдХреЛ рдореЗрдХрдлрд╝рд╛рдЗрд▓ рд▓реЙрдиреНрдЪ рдХрд░рдиреЗ рдХреЗ рд╕рд╛рде рдХреБрдЫ рдЬрд╛рджреВ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдФрд░ рдХрд┐рд╕реА рднреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдЖрдкрдХреЛ рдХрдо рд╕реЗ рдХрдо Python 3.6 рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред
- рдЗрд╕реЗ рдЬреАрдереВрдм рд╕реЗ рдХреНрд▓реЛрди рдХрд░реЗрдВ
рдХреБрдВрдбрд▓реА рдХреМрд╢рд▓ рдХрд╛ рдЙрджрд╛рд╣рд░рдг . - рд╡рд╛рдИ.рдХреНрд▓рд╛рдЙрдб рдореЗрдВ рд░рдЬрд┐рд╕реНрдЯрд░ рдХрд░реЗрдВ:
https://cloud.yandex.ru - рдЕрдкрдиреЗ рд▓рд┐рдП рджреЛ рдмрд╛рд▓реНрдЯрд┐рдпрд╛рдБ рдмрдирд╛рдПрдБ
рдСрдмреНрдЬреЗрдХреНрдЯ рд╕реНрдЯреЛрд░реЗрдЬ , рдЙрдиреНрд╣реЗрдВ рдХрд┐рд╕реА рднреА рдирд╛рдо рд╕реЗ рдмреБрд▓рд╛рдПрдВ{BUCKET NAME}
╨╕tgalice-test-cold-storage
(рдпрд╣ рджреВрд╕рд░рд╛ рдирд╛рдо рдЕрдм рд╣рд╛рд░реНрдбрдХреЛрдб рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИmain.py
рдореЗрд░рд╛ рдЙрджрд╛рд╣рд░рдг)ред рдкрд╣рд▓реА рдмрд╛рд▓реНрдЯреА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗрд╡рд▓ рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдХреЗ рд▓рд┐рдП рд╣реЛрдЧреА, рджреВрд╕рд░реА - рд╕рдВрд╡рд╛рдж рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред - рдмрдирд╛рдПрдБ
рд╕реЗрд╡рд╛ рдЦрд╛рддрд╛ , рдЙрд╕реЗ рдПрдХ рднреВрдорд┐рдХрд╛ рджреЗрдВeditor
, рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рд╕реНрдерд┐рд░ рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ{KEY ID}
╨╕{KEY VALUE}
- рд╣рдо рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рд╕рдВрд╡рд╛рдж рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рд░рд┐рдХреЙрд░реНрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░реЗрдВрдЧреЗред рдпрд╣ рд╕рдм рдЗрд╕рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИ рддрд╛рдХрд┐ Ya.Cloud рдХрд╛ рдПрдХ рдлрд╝рдВрдХреНрд╢рди Ya.Cloud рд╕реЗ рд╕реНрдЯреЛрд░реЗрдЬ рддрдХ рдкрд╣реБрдВрдЪ рд╕рдХреЗред рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдХрд┐рд╕реА рджрд┐рди рдкреНрд░рд╛рдзрд┐рдХрд░рдг рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд╣реЛ рдЬрд╛рдПрдЧрд╛, рд▓реЗрдХрд┐рди рдЕрднреА рдпрд╣ рд╡реИрд╕рд╛ рд╣реА рд╣реИред - (рд╡реИрдХрд▓реНрдкрд┐рдХ) рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ
рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдЗрдВрдЯрд░рдлреЗрд╕ yc
. рдЖрдк рд╡реЗрдм рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рднреА рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╕реАрдПрд▓рдЖрдИ рдЕрдЪреНрдЫрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдореЗрдВ рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рдирд╡рд╛рдЪрд╛рд░ рддреЗрдЬреА рд╕реЗ рджрд┐рдЦрд╛рдИ рджреЗрддреЗ рд╣реИрдВред - рдЕрдм рдЖрдк рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдирд┐рд░реНрднрд░рддрд╛ рдЕрд╕реЗрдВрдмрд▓реА рддреИрдпрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: рдЗрд╕реЗ рдХреМрд╢рд▓ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рд╛рде рдлрд╝реЛрд▓реНрдбрд░ рд╕реЗ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдкрд░ рдЪрд▓рд╛рдПрдБ
make all
. рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХрд╛ рдПрдХ рд╕рдореВрд╣ (рдЬреНрдпрд╛рджрд╛рддрд░, рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣, рдЕрдирд╛рд╡рд╢реНрдпрдХ) рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛dist
. - рдСрдмреНрдЬреЗрдХреНрдЯ рд╕реНрдЯреЛрд░реЗрдЬ рдореЗрдВ рд╣рд╛рде рд╕реЗ (рдмрд╛рд▓реНрдЯреА рдореЗрдВ) рдбрд╛рд▓реЗрдВ
{BUCKET NAME}
) рдкрд┐рдЫрд▓реЗ рдЪрд░рдг рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рд╕рдВрдЧреНрд░рд╣dist.zip
. рдпрджрд┐ рд╡рд╛рдВрдЫрд┐рдд рд╣реИ, рддреЛ рдЖрдк рдЗрд╕реЗ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рд╕реЗ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗAWS рд╕реАрдПрд▓рдЖрдИ . - рд╡реЗрдм рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдпрд╛ рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рд╕рд░реНрд╡рд░ рд░рд╣рд┐рдд рдлрд╝рдВрдХреНрд╢рди рдмрдирд╛рдПрдВ
yc
. рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХреЗ рд▓рд┐рдП, рдХрдорд╛рдВрдб рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:
yc serverless function version create
--function-name=horoscope
--environment=AWS_ACCESS_KEY_ID={KEY ID},AWS_SECRET_ACCESS_KEY={KEY VALUE}
--runtime=python37
--package-bucket-name={BUCKET NAME}
--package-object-name=dist.zip
--entrypoint=main.alice_handler
--memory=128M
--execution-timeout=3s
рдХрд┐рд╕реА рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдмрдирд╛рддреЗ рд╕рдордп, рд╕рднреА рдкреИрд░рд╛рдореАрдЯрд░ рдЙрд╕реА рддрд░рд╣ рднрд░реЗ рдЬрд╛рддреЗ рд╣реИрдВред
рдЕрдм рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдП рдЧрдП рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдбреЗрд╡рд▓рдкрд░ рдХрдВрд╕реЛрд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рдХреМрд╢рд▓ рдореЗрдВ рд╕реБрдзрд╛рд░ рдФрд░ рдкреНрд░рдХрд╛рд╢рди рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рд╣реБрдб рдХреЗ рдиреАрдЪреЗ рдХреНрдпрд╛ рд╣реИ
рдореЗрдХрдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдирд┐рд░реНрднрд░рддрд╛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдФрд░ рдЙрдиреНрд╣реЗрдВ рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рдбрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдХрд╛рдлреА рд╕рд░рд▓ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╢рд╛рдорд┐рд▓ рд╣реИ dist.zip
, рд▓рдЧрднрдЧ рдЗрд╕ рдкреНрд░рдХрд╛рд░:
mkdir -p dist/
pip3 install -r requirements.txt --target dist/
cp main.py dist/main.py
cp form.yaml dist/form.yaml
cd dist && zip --exclude '*.pyc' -r ../dist.zip ./*
рдмрд╛рдХреА рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рд▓рд┐рдкрдЯреЗ рдХреБрдЫ рд╕рд░рд▓ рдЙрдкрдХрд░рдг рд╣реИрдВ tgalice
. рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдбреЗрдЯрд╛ рднрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рджреНрд╡рд╛рд░рд╛ рд╡рд░реНрдгрд┐рдд рд╣реИ form.yaml
:
form_name: 'horoscope_form'
start:
regexp: '╤Б╤В╨░╤А╤В|╨╜╨░╤З(╨░╤В╤М|╨╜╨╕)'
suggests:
- ╨б╤В╨░╤А╤В
fields:
- name: 'name'
question: ╨Я╨╛╨╢╨░╨╗╤Г╨╣╤Б╤В╨░, ╨╜╨░╨╖╨╛╨▓╨╕╤В╨╡ ╤Б╨▓╨╛╤С ╨╕╨╝╤П.
- name: 'year'
question: ╨в╨╡╨┐╨╡╤А╤М ╤Б╨║╨░╨╢╨╕╤В╨╡ ╨╝╨╜╨╡ ╨│╨╛╨┤ ╨▓╨░╤И╨╡╨│╨╛ ╤А╨╛╨╢╨┤╨╡╨╜╨╕╤П. ╨в╨╛╨╗╤М╨║╨╛ ╤З╨╡╤В╤Л╤А╨╡ ╤Ж╨╕╤Д╤А╤Л, ╨╜╨╕╤З╨╡╨│╨╛ ╨╗╨╕╤И╨╜╨╡╨│╨╛.
validate_regexp: '^[0-9]{4}$'
validate_message: ╨Я╨╛╨╢╨░╨╗╤Г╨╣╤Б╤В╨░, ╨┐╨╛╨┐╤А╨╛╨▒╤Г╨╣╤В╨╡ ╨╡╤Й╤С ╤А╨░╨╖. ╨Э╨░╨╖╨╛╨▓╨╕╤В╨╡ ╨│╨╛╨┤ ╨▓╨░╤И╨╡╨│╨╛ ╤А╨╛╨╢╨┤╨╡╨╜╨╕╤П - ╤З╨╡╤В╤Л╤А╨╡ ╤Ж╨╕╤Д╤А╤Л.
- name: 'month'
question: ╨Ч╨░╨╝╨╡╤З╨░╤В╨╡╨╗╤М╨╜╨╛! ╨в╨╡╨┐╨╡╤А╤М ╨╜╨░╨╖╨╛╨▓╨╕╤В╨╡ ╨╝╨╡╤Б╤П╤Ж ╨▓╨░╤И╨╡╨│╨╛ ╤А╨╛╨╢╨┤╨╡╨╜╨╕╤П.
options:
- ╤П╨╜╨▓╨░╤А╤М
...
- ╨┤╨╡╨║╨░╨▒╤А╤М
validate_message: ╨в╨╛, ╤З╤В╨╛ ╨▓╤Л ╨╜╨░╨╖╨▓╨░╨╗╨╕, ╨╜╨╡ ╨┐╨╛╤Е╨╛╨╢╨╡ ╨╜╨░ ╨╝╨╡╤Б╤П╤Ж. ╨Я╨╛╨╢╨░╨╗╤Г╨╣╤Б╤В╨░, ╨╜╨░╨╖╨╛╨▓╨╕╤В╨╡ ╨╝╨╡╤Б╤П╤Ж ╨▓╨░╤И╨╡╨│╨╛ ╤А╨╛╨╢╨┤╨╡╨╜╨╕╤П, ╨▒╨╡╨╖ ╨┤╤А╤Г╨│╨╕╤Е ╤Б╨╗╨╛╨▓.
- name: 'day'
question: ╨Ю╤В╨╗╨╕╤З╨╜╨╛! ╨Э╨░╨║╨╛╨╜╨╡╤Ж, ╨╜╨░╨╖╨╛╨▓╨╕╤В╨╡ ╨╝╨╜╨╡ ╨┤╨░╤В╤Г ╨▓╨░╤И╨╡╨│╨╛ ╤А╨╛╨╢╨┤╨╡╨╜╨╕╤П - ╤В╨╛╨╗╤М╨║╨╛ ╤З╨╕╤Б╨╗╨╛, ╨▓╤Б╨╡╨│╨╛ ╨╛╨┤╨╜╨░ ╨╕╨╗╨╕ ╨┤╨▓╨╡ ╤Ж╨╕╤Д╤А╤Л.
validate_regexp: '[0123]?d$'
validate_message: ╨Я╨╛╨╢╨░╨╗╤Г╨╣╤Б╤В╨░, ╨┐╨╛╨┐╤А╨╛╨▒╤Г╨╣╤В╨╡ ╨╡╤Й╤С ╤А╨░╨╖. ╨Т╨░╨╝ ╨╜╤Г╨╢╨╜╨╛ ╨╜╨░╨╖╨▓╨░╤В╤М ╤З╨╕╤Б╨╗╨╛ ╤Б╨▓╨╛╨╡╨│╨╛ ╤А╨╛╨╢╨┤╨╡╨╜╨╕╤П (╨╜╨░╨┐╤А╨╕╨╝╨╡╤А, ╨┤╨▓╨░╨┤╤Ж╨░╤В╨╛╨╡); ╤Н╤В╨╛ ╨╛╨┤╨╜╨░ ╨╕╨╗╨╕ ╨┤╨▓╨╡ ╤Ж╨╕╤Д╤А╤Л.
рдЗрд╕ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдФрд░ рдЕрдВрддрд┐рдо рдкрд░рд┐рдгрд╛рдо рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХрд╛ рдХрд╛рдо рдкрд╛рдпрдерди рдХреНрд▓рд╛рд╕ рджреНрд╡рд╛рд░рд╛ рд▓рд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ
class CheckableFormFiller(tgalice.dialog_manager.form_filling.FormFillingDialogManager):
SIGNS = {
'╤П╨╜╨▓╨░╤А╤М': '╨Ъ╨╛╨╖╨╡╤А╨╛╨│',
...
}
def handle_completed_form(self, form, user_object, ctx):
response = tgalice.dialog_manager.base.Response(
text='╨б╨┐╨░╤Б╨╕╨▒╨╛, {}! ╨в╨╡╨┐╨╡╤А╤М ╨╝╤Л ╨╖╨╜╨░╨╡╨╝: ╨▓╨░╨╝ {} ╨╗╨╡╤В, ╨╕ ╨▓╤Л {}. n'
'╨Т╨╛╤В ╤Н╤В╨╛ ╨▓╨░╨╝, ╨║╨╛╨╜╨╡╤З╨╜╨╛, ╨┐╨╛╨▓╨╡╨╖╨╗╨╛! ╨Ч╨▓╤С╨╖╨┤╤Л ╨│╨╛╨▓╨╛╤А╤П╤В ╨▓╨░╨╝: {}'.format(
form['fields']['name'],
2019 - int(form['fields']['year']),
self.SIGNS[form['fields']['month']],
random.choice(FORECASTS),
),
user_object=user_object,
)
return response
рдЕрдзрд┐рдХ рд╕рдЯреАрдХ рд░реВрдк рд╕реЗ, рдмреЗрд╕ рдХреНрд▓рд╛рд╕ FormFillingDialogManager
"рдлреЙрд░реНрдо" рднрд░рдиреЗ рдФрд░ рдЪрд╛рдЗрд▓реНрдб рдХреНрд▓рд╛рд╕ рдкрджреНрдзрддрд┐ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ handle_completed_form
рдЙрд╕реЗ рдмрддрд╛рддреА рд╣реИ рдХрд┐ рдЬрдм рд╡рд╣ рддреИрдпрд╛рд░ рд╣реЛ рддреЛ рдЙрд╕реЗ рдХреНрдпрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
рд╕рдВрд╡рд╛рдж рдХреЗ рдЗрд╕ рдореБрдЦреНрдп рдкреНрд░рд╡рд╛рд╣ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд╛ рд╕реНрд╡рд╛рдЧрдд рднреА рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рд╕рд╛рде рд╣реА "рд╕рд╣рд╛рдпрддрд╛" рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рд╣рд╛рдпрддрд╛ рджреА рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдП рдФрд░ "рдирд┐рдХрд╛рд╕" рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреМрд╢рд▓ рд╕реЗ рдореБрдХреНрдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕ рдкреНрд░рдпреЛрдЬрди рдХреЗ рд▓рд┐рдП рдореЗрдВ tgalice
рдПрдХ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рднреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╕рдВрдкреВрд░реНрдг рд╕рдВрд╡рд╛рдж рдкреНрд░рдмрдВрдзрдХ рдЯреБрдХрдбрд╝реЛрдВ рд╕реЗ рдмрдирд╛ рд╣реИ:
dm = tgalice.dialog_manager.CascadeDialogManager(
tgalice.dialog_manager.GreetAndHelpDialogManager(
greeting_message=DEFAULT_MESSAGE,
help_message=DEFAULT_MESSAGE,
exit_message='╨Ф╨╛ ╤Б╨▓╨╕╨┤╨░╨╜╨╕╤П, ╨┐╤А╨╕╤Е╨╛╨┤╨╕╤В╨╡ ╨▓ ╨╜╨░╨▓╤Л╨║ "╨Р╨╣╤В╨╕╤И╨╜╤Л╨╣ ╨│╨╛╤А╨╛╤Б╨║╨╛╨┐" ╨╡╤Й╤С!'
),
CheckableFormFiller(`form.yaml`, default_message=DEFAULT_MESSAGE)
)
CascadeDialogManager
рдпрд╣ рд╕рд░рд▓рддрд╛ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ: рдпрд╣ рдЕрдкрдиреЗ рд╕рднреА рдШрдЯрдХреЛрдВ рдХреЛ рдмрд╛рд░реА-рдмрд╛рд░реА рд╕реЗ рд╕рдВрд╡рд╛рдж рдХреА рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдкрд╣рд▓реЗ рдЙрдкрдпреБрдХреНрдд рдХрд╛ рдЪрдпрди рдХрд░рддрд╛ рд╣реИред
рд╕рдВрд╡рд╛рдж рдкреНрд░рдмрдВрдзрдХ рдкреНрд░рддреНрдпреЗрдХ рд╕рдВрджреЗрд╢ рдХреЗ рдЬрд╡рд╛рдм рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рдкрд╛рдпрдерди рдСрдмреНрдЬреЗрдХреНрдЯ рд▓реМрдЯрд╛рддрд╛ рд╣реИред Response
, рдЬрд┐рд╕реЗ рдлрд┐рд░ рд╕рд╛рджреЗ рдкрд╛рда рдореЗрдВ, рдпрд╛ рдРрд▓рд┐рд╕ рдпрд╛ рдЯреЗрд▓реАрдЧреНрд░рд╛рдо рдореЗрдВ рдПрдХ рд╕рдВрджреЗрд╢ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ - рдпрд╣ рдЗрд╕ рдмрд╛рдд рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдмреЙрдЯ рдХрд╣рд╛рдБ рдЪрд▓ рд░рд╣рд╛ рд╣реИ; рдЗрд╕рдореЗрдВ рд╕рдВрд╡рд╛рдж рдХреА рдмрджрд▓реА рд╣реБрдИ рд╕реНрдерд┐рддрд┐ рднреА рд╢рд╛рдорд┐рд▓ рд╣реИ рдЬрд┐рд╕реЗ рд╕рд╣реЗрдЬрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрд╣ рдкреВрд░реА рд░рд╕реЛрдИ рдПрдХ рдЕрдиреНрдп рд╡рд░реНрдЧ рджреНрд╡рд╛рд░рд╛ рд╕рдВрднрд╛рд▓реА рдЬрд╛рддреА рд╣реИ, DialogConnector
, рдЗрд╕рд▓рд┐рдП рдпрд╛рдВрдбреЗрдХреНрд╕ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдкрд░ рдПрдХ рдХреМрд╢рд▓ рд▓реЙрдиреНрдЪ рдХрд░рдиреЗ рдХреА рд╕реАрдзреА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддреА рд╣реИ:
...
session = boto3.session.Session()
s3 = session.client(
service_name='s3',
endpoint_url='https://storage.yandexcloud.net',
aws_access_key_id=os.environ['AWS_ACCESS_KEY_ID'],
aws_secret_access_key=os.environ['AWS_SECRET_ACCESS_KEY'],
region_name='ru-central1',
)
storage = tgalice.session_storage.S3BasedStorage(s3_client=s3, bucket_name='tgalice-test-cold-storage')
connector = tgalice.dialog_connector.DialogConnector(dialog_manager=dm, storage=storage)
alice_handler = connector.serverless_alice_handler
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕ рдХреЛрдб рдХрд╛ рдЕрдзрд┐рдХрд╛рдВрд╢ рднрд╛рдЧ рдСрдмреНрдЬреЗрдХреНрдЯ рд╕реНрдЯреЛрд░реЗрдЬ рдХреЗ S3 рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╕реЗ рдХрдиреЗрдХреНрд╢рди рдмрдирд╛рддрд╛ рд╣реИред рдЖрдк рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЗрд╕ рдХрдиреЗрдХреНрд╢рди рдХрд╛ рд╕реАрдзреЗ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ
рдЕрдВрддрд┐рдо рдкрдВрдХреНрддрд┐ рдлрд╝рдВрдХреНрд╢рди рдмрдирд╛рддреА рд╣реИ alice_handler
тАФ рд╡рд╣реА рдЬрд┐рд╕реЗ рд╣рдордиреЗ рдкреИрд░рд╛рдореАрдЯрд░ рд╕реЗрдЯ рдХрд░рддреЗ рд╕рдордп Yandex.Cloud рдХреЛ рдЦреАрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рд╛ рдерд╛ --entrypoint=main.alice_handler
.
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмрд╕ рдЗрддрдирд╛ рд╣реАред рдЕрд╕реЗрдВрдмрд▓реА рдХреЗ рд▓рд┐рдП рдореЗрдХрдлрд╝рд╛рдЗрд▓реЗрдВ, рд╕рдВрджрд░реНрдн рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП S3-рдЬреИрд╕рд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рд╕реНрдЯреЛрд░реЗрдЬ рдФрд░ рдПрдХ рдкрд╛рдпрдерди рд▓рд╛рдЗрдмреНрд░реЗрд░реА tgalice
. рдкрд╛рдпрдерди рдХреЗ рд╕рд░реНрд╡рд░ рд░рд╣рд┐рдд рдХрд╛рд░реНрдпреЛрдВ рдФрд░ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЗ рд╕рд╛рде рд╕рдВрдпреБрдХреНрдд, рдпрд╣ рдПрдХ рд╕реНрд╡рд╕реНрде рдорд╛рдирд╡ рдХреМрд╢рд▓ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред
рдЖрдк рдкреВрдЫ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЗрд╕реЗ рдмрдирд╛рдирд╛ рдХреНрдпреЛрдВ рдЬрд░реВрд░реА рдерд╛ tgalice
? рд╕рднреА рдмреЛрд░рд┐рдВрдЧ рдХреЛрдб рдЬреЛ JSONs рдХреЛ рдЕрдиреБрд░реЛрдз рд╕реЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рддрдХ рдФрд░ рд╕реНрдЯреЛрд░реЗрдЬ рд╕реЗ рдореЗрдореЛрд░реА рдФрд░ рдмреИрдХ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рд╡рд╣ рдЗрд╕рдореЗрдВ рдирд┐рд╣рд┐рдд рд╣реИред рдПрдХ рдирд┐рдпрдорд┐рдд рдХреЛрдб рдПрдкреНрд▓рд┐рдХреЗрд╢рди рднреА рд╣реИ, рдпрд╣ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХрд┐ "рдлрд░рд╡рд░реА" "рдлрд░рд╡рд░реА" рдХреЗ рд╕рдорд╛рди рд╣реИ, рдФрд░ рдЧрд░реАрдмреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдиреНрдп рдПрдирдПрд▓рдпреВред рдореЗрд░реЗ рд╡рд┐рдЪрд╛рд░ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рддрд╛рдХрд┐ рдЖрдк рддрдХрдиреАрдХреА рд╡рд┐рд╡рд░рдгреЛрдВ рд╕реЗ рд╡рд┐рдЪрд▓рд┐рдд рд╣реБрдП рдмрд┐рдирд╛ YAML рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рдХреМрд╢рд▓ рдХреЗ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдХреЛ рд╕реНрдХреЗрдЪ рдХрд░ рд╕рдХреЗрдВред
рдпрджрд┐ рдЖрдк рдЕрдзрд┐рдХ рдЧрдВрднреАрд░ рдПрдирдПрд▓рдпреВ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдЗрд╕реЗ рдЕрдкрдиреЗ рдХреМрд╢рд▓ рд╕реЗ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ
рдЦреИрд░, рдЕрдм рд╢рд╛рдорд┐рд▓ рд╣реЛрдВ
рд╕реНрд░реЛрдд: www.habr.com