рдЕрдореЗрдЬрд╝реЕрди рдХрд┐рдиреЗрд╕рд┐рд╕ рдФрд░ рд╕рд░реНрд╡рд░ рд░рд╣рд┐рдд рд╕рд░рд▓рддрд╛ рдХреЗ рд╕рд╛рде рдПрд╡рд┐рдПрд╕реЗрд▓реНрд╕ рдПрдкреАрдЖрдИ рдПрдХреАрдХрд░рдг

рд╣реЗ рд╣рдмрд░!

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

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

рд╕рднреА рд╡рд┐рд╡рд░рдг рдХрдЯреМрддреА рдХреЗ рдЕрдзреАрди рд╣реИрдВ! рдЬрд╛рдирд╛!

рдЕрдореЗрдЬрд╝реЕрди рдХрд┐рдиреЗрд╕рд┐рд╕ рдФрд░ рд╕рд░реНрд╡рд░ рд░рд╣рд┐рдд рд╕рд░рд▓рддрд╛ рдХреЗ рд╕рд╛рде рдПрд╡рд┐рдПрд╕реЗрд▓реНрд╕ рдПрдкреАрдЖрдИ рдПрдХреАрдХрд░рдг

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

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

рдЗрд╕ рд▓реЗрдЦ рдХрд╛ рдореБрдЦреНрдп рдЙрджреНрджреЗрд╢реНрдп AWS рдореЗрдВ рд╕реВрдЪрдирд╛ рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреА рд╕рд╛рдорд╛рдиреНрдп рд╕рдордЭ рджреЗрдирд╛ рд╣реИ; рд╣рдо рдЗрд╕ рдмрд╛рдд рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реИрдВ рдХрд┐ рдЙрдкрдпреЛрдЧ рдХреА рдЧрдИ рдПрдкреАрдЖрдИ рджреНрд╡рд╛рд░рд╛ рд▓реМрдЯрд╛рдпрд╛ рдЧрдпрд╛ рдбреЗрдЯрд╛ рд╕рдЦреНрддреА рд╕реЗ рдЕрджреНрдпрддрд┐рдд рдирд╣реАрдВ рд╣реИ рдФрд░ рдХреИрд╢ рд╕реЗ рдкреНрд░рд╕рд╛рд░рд┐рдд рд╣реЛрддрд╛ рд╣реИ, рдЬреЛ рд╣реИ рдкрд┐рдЫрд▓реЗ 48 рдШрдВрдЯреЛрдВ рдореЗрдВ Aviasales.ru рдФрд░ Jetradar.com рд╕рд╛рдЗрдЯреЛрдВ рдХреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рджреНрд╡рд╛рд░рд╛ рдХреА рдЧрдИ рдЦреЛрдЬреЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред

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

рд╣рдо рд╕рдВрдкреВрд░реНрдг рдмреБрдирд┐рдпрд╛рджреА рдврд╛рдВрдЪреЗ рдХреЛ рддреИрдирд╛рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рджреЛ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗ:

  • рдореИрдиреБрдЕрд▓ - AWS рдкреНрд░рдмрдВрдзрди рдХрдВрд╕реЛрд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ;
  • рдЯреЗрд░рд╛рдлреЙрд░реНрдо рдХреЛрдб рдХрд╛ рдЗрдВрдлреНрд░рд╛рд╕реНрдЯреНрд░рдХреНрдЪрд░ рдЖрд▓рд╕реА рдСрдЯреЛрдореЗрдЯрд░реНрд╕ рдХреЗ рд▓рд┐рдП рд╣реИ;

рд╡рд┐рдХрд╕рд┐рдд рдкреНрд░рдгрд╛рд▓реА рдХреА рд╡рд╛рд╕реНрддреБрдХрд▓рд╛

рдЕрдореЗрдЬрд╝реЕрди рдХрд┐рдиреЗрд╕рд┐рд╕ рдФрд░ рд╕рд░реНрд╡рд░ рд░рд╣рд┐рдд рд╕рд░рд▓рддрд╛ рдХреЗ рд╕рд╛рде рдПрд╡рд┐рдПрд╕реЗрд▓реНрд╕ рдПрдкреАрдЖрдИ рдПрдХреАрдХрд░рдг
рдкреНрд░рдпреБрдХреНрдд рдШрдЯрдХ:

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

рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдкреНрд░рд╢рд┐рдХреНрд╖рдг

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

рддреЛ, рдЖрдЗрдП рдкрдВрдЬреАрдХрд░рдг рдХрд░реЗрдВ рдФрд░ рдЕрдкрдирд╛ рдЯреЛрдХрди рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВред

рдПрдХ рдЙрджрд╛рд╣рд░рдг рдЕрдиреБрд░реЛрдз рдиреАрдЪреЗ рд╣реИ:

http://api.travelpayouts.com/v2/prices/month-matrix?currency=rub&origin=LED&destination=HKT&show_to_affiliates=true&token=TOKEN_API

рдЕрдиреБрд░реЛрдз рдореЗрдВ рдЯреЛрдХрди рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдХреЗ рдПрдкреАрдЖрдИ рд╕реЗ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЙрдкрд░реЛрдХреНрдд рд╡рд┐рдзрд┐ рдХрд╛рдо рдХрд░реЗрдЧреА, рд▓реЗрдХрд┐рди рдореИрдВ рд╣реЗрдбрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХреНрд╕реЗрд╕ рдЯреЛрдХрди рдкрд╛рд╕ рдХрд░рдирд╛ рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реВрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдЗрд╕ рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ api_caller.py рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдХрд░реЗрдВрдЧреЗред

рдЙрддреНрддрд░ рдЙрджрд╛рд╣рд░рдг:

{{
   "success":true,
   "data":[{
      "show_to_affiliates":true,
      "trip_class":0,
      "origin":"LED",
      "destination":"HKT",
      "depart_date":"2015-10-01",
      "return_date":"",
      "number_of_changes":1,
      "value":29127,
      "found_at":"2015-09-24T00:06:12+04:00",
      "distance":8015,
      "actual":true
   }]
}

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

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

рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рдпрджрд┐ рд╣рдо рдЕрдкрдиреА рдорд╛рд╕рд┐рдХ рдирд┐рдГрд╢реБрд▓реНрдХ рд╕реАрдорд╛ рдХреЛ рдкреВрд░рд╛ рдХрд░рддреЗ рд╣реИрдВ рддреЛ DynamoDb рдФрд░ Lambda рдлрд╝рдВрдХреНрд╢рди рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдирд┐рдГрд╢реБрд▓реНрдХ рд╣реЛрдВрдЧреЗред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, DynamoDB рдХреЗ рд▓рд┐рдП: 25 рдЬреАрдмреА рд╕реНрдЯреЛрд░реЗрдЬ, 25 WCU/RCU рдФрд░ 100 рдорд┐рд▓рд┐рдпрди рдХреНрд╡реЗрд░реАрдЬрд╝ред рдФрд░ рдкреНрд░рддрд┐ рдорд╛рд╣ рджрд╕ рд▓рд╛рдЦ рд▓реИрдореНрдмреНрдбрд╛ рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ред

рдореИрдиреБрдЕрд▓ рд╕рд┐рд╕реНрдЯрдо рдкрд░рд┐рдирд┐рдпреЛрдЬрди

рдХрд┐рдиреЗрд╕рд┐рд╕ рдбреЗрдЯрд╛ рд╕реНрдЯреНрд░реАрдо рдХреА рд╕реНрдерд╛рдкрдирд╛

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

рд╢рд╛рд░реНрдб рдХреНрдпрд╛ рд╣реИ?
рд╢рд╛рд░реНрдб рдЕрдореЗрдЬрд╝реЕрди рдХрд┐рдиреЗрд╕рд┐рд╕ рд╕реНрдЯреНрд░реАрдо рдХреА рдореВрд▓ рдбреЗрдЯрд╛ рдЯреНрд░рд╛рдВрд╕рдлрд░ рдЗрдХрд╛рдИ рд╣реИред рдПрдХ рдЦрдВрдб 1 рдПрдордмреА/рд╕реЗрдХреЗрдВрдб рдХреА рдЧрддрд┐ рд╕реЗ рдЗрдирдкреБрдЯ рдбреЗрдЯрд╛ рдЯреНрд░рд╛рдВрд╕рдлрд░ рдФрд░ 2 рдПрдордмреА/рд╕реЗрдХреЗрдВрдб рдХреА рдЧрддрд┐ рд╕реЗ рдЖрдЙрдЯрдкреБрдЯ рдбреЗрдЯрд╛ рдЯреНрд░рд╛рдВрд╕рдлрд░ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдПрдХ рдЦрдВрдб рдкреНрд░рддрд┐ рд╕реЗрдХрдВрдб 1000 PUT рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред рдбреЗрдЯрд╛ рд╕реНрдЯреНрд░реАрдо рдмрдирд╛рддреЗ рд╕рдордп, рдЖрдкрдХреЛ рд╕реЗрдЧрдореЗрдВрдЯ рдХреА рдЖрд╡рд╢реНрдпрдХ рд╕рдВрдЦреНрдпрд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдк рджреЛ рдЦрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдбреЗрдЯрд╛ рд╕реНрдЯреНрд░реАрдо рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдбреЗрдЯрд╛ рд╕реНрдЯреНрд░реАрдо 2 рдПрдордмреА/рдПрд╕ рдкрд░ рдЗрдирдкреБрдЯ рдбреЗрдЯрд╛ рдЯреНрд░рд╛рдВрд╕рдлрд░ рдФрд░ 4 рдПрдордмреА/рдПрд╕ рдкрд░ рдЖрдЙрдЯрдкреБрдЯ рдбреЗрдЯрд╛ рдЯреНрд░рд╛рдВрд╕рдлрд░ рдкреНрд░рджрд╛рди рдХрд░реЗрдЧрд╛, рдкреНрд░рддрд┐ рд╕реЗрдХрдВрдб 2000 рдкреБрдЯ рд░рд┐рдХреЙрд░реНрдб рддрдХ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░реЗрдЧрд╛ред

рдЖрдкрдХреА рд╕реНрдЯреНрд░реАрдо рдореЗрдВ рдЬрд┐рддрдиреЗ рдЕрдзрд┐рдХ рдЯреБрдХрдбрд╝реЗ рд╣реЛрдВрдЧреЗ, рдЙрд╕рдХрд╛ рдереНрд░реВрдкреБрдЯ рдЙрддрдирд╛ рд╣реА рдЕрдзрд┐рдХ рд╣реЛрдЧрд╛ред рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рдЗрд╕ рддрд░рд╣ рд╕реЗ рдкреНрд░рд╡рд╛рд╣ рдХреЛ рдмрдврд╝рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ - рдЯреБрдХрдбрд╝реЛрдВ рдХреЛ рдЬреЛрдбрд╝рдХрд░ред рд▓реЗрдХрд┐рди рдЖрдкрдХреЗ рдкрд╛рд╕ рдЬрд┐рддрдиреЗ рдЕрдзрд┐рдХ рдЯреБрдХрдбрд╝реЗ рд╣реЛрдВрдЧреЗ, рдХреАрдордд рдЙрддрдиреА рд╣реА рдЕрдзрд┐рдХ рд╣реЛрдЧреАред рдкреНрд░рддреНрдпреЗрдХ рд╢рд╛рд░реНрдб рдХреА рд▓рд╛рдЧрдд 1,5 рд╕реЗрдВрдЯ рдкреНрд░рддрд┐ рдШрдВрдЯрд╛ рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдорд┐рд▓рд┐рдпрди PUT рдкреЗрд▓реЛрдб рдЗрдХрд╛рдЗрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрддрд┐рд░рд┐рдХреНрдд 1.4 рд╕реЗрдВрдЯ рд╣реИред

рдЖрдЗрдП рдирд╛рдо рдХреЗ рд╕рд╛рде рдПрдХ рдирдИ рд╕реНрдЯреНрд░реАрдо рдмрдирд╛рдПрдВ рдПрдпрд░рд▓рд╛рдЗрди рдЯрд┐рдХрдЯ, 1 рдЯреБрдХрдбрд╝рд╛ рдЙрд╕рдХреЗ рд▓рд┐рдП рдХрд╛рдлреА рд╣реЛрдЧрд╛:

рдЕрдореЗрдЬрд╝реЕрди рдХрд┐рдиреЗрд╕рд┐рд╕ рдФрд░ рд╕рд░реНрд╡рд░ рд░рд╣рд┐рдд рд╕рд░рд▓рддрд╛ рдХреЗ рд╕рд╛рде рдПрд╡рд┐рдПрд╕реЗрд▓реНрд╕ рдПрдкреАрдЖрдИ рдПрдХреАрдХрд░рдг
рдЕрдм рдирд╛рдо рдХреЗ рд╕рд╛рде рдПрдХ рдФрд░ рдереНрд░реЗрдб рдмрдирд╛рддреЗ рд╣реИрдВ рд╡рд┐рд╢реЗрд╖ рдзрд╛рд░рд╛:

рдЕрдореЗрдЬрд╝реЕрди рдХрд┐рдиреЗрд╕рд┐рд╕ рдФрд░ рд╕рд░реНрд╡рд░ рд░рд╣рд┐рдд рд╕рд░рд▓рддрд╛ рдХреЗ рд╕рд╛рде рдПрд╡рд┐рдПрд╕реЗрд▓реНрд╕ рдПрдкреАрдЖрдИ рдПрдХреАрдХрд░рдг

рдирд┐рд░реНрдорд╛рддрд╛ рд╕реЗрдЯрдЕрдк

рдХрд┐рд╕реА рдХрд╛рд░реНрдп рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдбреЗрдЯрд╛ рдирд┐рд░реНрдорд╛рддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдирд┐рдпрдорд┐рдд EC2 рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА, рдорд╣рдВрдЧреА рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рд╣реЛрдирд╛ рдЬрд░реВрд░реА рдирд╣реАрдВ рд╣реИ; рдПрдХ рд╕реНрдкреЙрдЯ t2.micro рдареАрдХ рдХрд╛рдо рдХрд░реЗрдЧрд╛ред

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

EC2 рд╕реЗрд╡рд╛ рдкрд░ рдЬрд╛рдПрдВ, рдПрдХ рдирдИ рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рдмрдирд╛рдПрдВ, t2.micro рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рд╛рде рд╡рд╛рдВрдЫрд┐рдд AMI рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ, рдЬреЛ рдлреНрд░реА рдЯрд┐рдпрд░ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИ:

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

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

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

рдЖрдЗрдП рдЗрд╕ рднреВрдорд┐рдХрд╛ рдХреЛ рдХреБрдЫ рд╕рд╛рд░реНрдердХ рдирд╛рдо рджреЗрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП: EC2-KinesisStreams-FullAccessред рдкрд░рд┐рдгрд╛рдо рд╡реИрд╕рд╛ рд╣реА рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреИрд╕рд╛ рдиреАрдЪреЗ рдЪрд┐рддреНрд░ рдореЗрдВ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ:

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

рдЕрдореЗрдЬрд╝реЕрди рдХрд┐рдиреЗрд╕рд┐рд╕ рдФрд░ рд╕рд░реНрд╡рд░ рд░рд╣рд┐рдд рд╕рд░рд▓рддрд╛ рдХреЗ рд╕рд╛рде рдПрд╡рд┐рдПрд╕реЗрд▓реНрд╕ рдПрдкреАрдЖрдИ рдПрдХреАрдХрд░рдг
рд╣рдо рдЗрд╕ рд╕реНрдХреНрд░реАрди рдкрд░ рдФрд░ рдХреБрдЫ рдирд╣реАрдВ рдмрджрд▓рддреЗ рд╣реИрдВ рдФрд░ рдЕрдЧрд▓реА рд╡рд┐рдВрдбреЛ рдкрд░ рдЪрд▓реЗ рдЬрд╛рддреЗ рд╣реИрдВред

рд╣рд╛рд░реНрдб рдбреНрд░рд╛рдЗрд╡ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдЫреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд╕рд╛рде рд╣реА рдЯреИрдЧ рднреА (рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЯреИрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЕрдЪреНрдЫрд╛ рдЕрднреНрдпрд╛рд╕ рд╣реИ, рдХрдо рд╕реЗ рдХрдо рдЙрджрд╛рд╣рд░рдг рдХреЛ рдПрдХ рдирд╛рдо рджреЗрдВ рдФрд░ рдкрд░реНрдпрд╛рд╡рд░рдг рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░реЗрдВ)ред

рдЕрдм рд╣рдо рдЪрд░рдг 6 рдкрд░ рд╣реИрдВ: рд╕реБрд░рдХреНрд╖рд╛ рд╕рдореВрд╣ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВ рдЯреИрдм, рдЬрд╣рд╛рдВ рдЖрдкрдХреЛ рдПрдХ рдирдпрд╛ рдмрдирд╛рдиреЗ рдпрд╛ рдЕрдкрдиреЗ рдореМрдЬреВрджрд╛ рд╕реБрд░рдХреНрд╖рд╛ рд╕рдореВрд╣ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬреЛ рдЖрдкрдХреЛ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдПрд╕рдПрд╕рдПрдЪ (рдкреЛрд░реНрдЯ 22) рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рд╡рд╣рд╛рдВ рд╕реНрд░реЛрдд -> рдореЗрд░рд╛ рдЖрдИрдкреА рдЪреБрдиреЗрдВ рдФрд░ рдЖрдк рдЗрдВрд╕реНрдЯреЗрдВрд╕ рд▓реЙрдиреНрдЪ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдЕрдореЗрдЬрд╝реЕрди рдХрд┐рдиреЗрд╕рд┐рд╕ рдФрд░ рд╕рд░реНрд╡рд░ рд░рд╣рд┐рдд рд╕рд░рд▓рддрд╛ рдХреЗ рд╕рд╛рде рдПрд╡рд┐рдПрд╕реЗрд▓реНрд╕ рдПрдкреАрдЖрдИ рдПрдХреАрдХрд░рдг
рдЬреИрд╕реЗ рд╣реА рдпрд╣ рдЪрд╛рд▓реВ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдЖ рдЬрд╛рддрд╛ рд╣реИ, рдЖрдк ssh рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЗрд╕рд╕реЗ рдЬреБрдбрд╝рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдорд╢реАрди рд╕реЗ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдХрдиреЗрдХреНрдЯ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рдХрд╛рдЗрдиреЗрд╕рд┐рд╕ рдПрдЬреЗрдВрдЯ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЯрд░реНрдорд┐рдирд▓ рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрдорд╛рдВрдб рджрд░реНрдЬ рдХрд░рдирд╛ рд╣реЛрдЧрд╛:

sudo yum -y update
sudo yum install -y python36 python36-pip
sudo /usr/bin/pip-3.6 install --upgrade pip
sudo yum install -y aws-kinesis-agent

рдЖрдЗрдП рдПрдкреАрдЖрдИ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рд╕рд╣реЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдлрд╝реЛрд▓реНрдбрд░ рдмрдирд╛рдПрдВ:

sudo mkdir /var/log/airline_tickets

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

sudo vim /etc/aws-kinesis/agent.json

рдПрдЬреЗрдВрдЯ.рдЬреЗрд╕рди рдлрд╝рд╛рдЗрд▓ рдХреА рд╕рд╛рдордЧреНрд░реА рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрдиреА рдЪрд╛рд╣рд┐рдП:

{
  "cloudwatch.emitMetrics": true,
  "kinesis.endpoint": "",
  "firehose.endpoint": "",

  "flows": [
    {
      "filePattern": "/var/log/airline_tickets/*log",
      "kinesisStream": "airline_tickets",
      "partitionKeyOption": "RANDOM",
      "dataProcessingOptions": [
         {
            "optionName": "CSVTOJSON",
            "customFieldNames": ["cost","trip_class","show_to_affiliates",
                "return_date","origin","number_of_changes","gate","found_at",
                "duration","distance","destination","depart_date","actual","record_id"]
         }
      ]
    }
  ]
}

рдЬреИрд╕рд╛ рдХрд┐ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рд╕реЗ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдПрдЬреЗрдВрдЯ /var/log/airline_tickets/ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ .log рдПрдХреНрд╕рдЯреЗрдВрд╢рди рд╡рд╛рд▓реА рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХрд░реЗрдЧрд╛, рдЙрдиреНрд╣реЗрдВ рдкрд╛рд░реНрд╕ рдХрд░реЗрдЧрд╛ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдПрдпрд░рд▓рд╛рдЗрди_рдЯрд┐рдХрдЯ рд╕реНрдЯреНрд░реАрдо рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░реЗрдЧрд╛ред

рд╣рдо рд╕реЗрд╡рд╛ рдХреЛ рдкреБрдирдГ рдЖрд░рдВрдн рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдЪрд╛рд▓реВ рд╣реИ:

sudo service aws-kinesis-agent restart

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

REPO_PATH=https://raw.githubusercontent.com/igorgorbenko/aviasales_kinesis/master/producer

wget $REPO_PATH/api_caller.py -P /home/ec2-user/
wget $REPO_PATH/requirements.txt -P /home/ec2-user/
sudo chmod a+x /home/ec2-user/api_caller.py
sudo /usr/local/bin/pip3 install -r /home/ec2-user/requirements.txt

Api_caller.py рд╕реНрдХреНрд░рд┐рдкреНрдЯ Aviasales рд╕реЗ рдбреЗрдЯрд╛ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рддреА рд╣реИ рдФрд░ рдкреНрд░рд╛рдкреНрдд рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЛ рдЙрд╕ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рд╕рд╣реЗрдЬрддреА рд╣реИ рдЬрд┐рд╕реЗ Kinetic рдПрдЬреЗрдВрдЯ рд╕реНрдХреИрди рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛рдлреА рдорд╛рдирдХ рд╣реИ, рдПрдХ рдЯрд┐рдХрдЯрдПрдкреА рдХреНрд▓рд╛рд╕ рд╣реИ, рдпрд╣ рдЖрдкрдХреЛ рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рд░реВрдк рд╕реЗ рдПрдкреАрдЖрдИ рдЦреАрдВрдЪрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рд╣рдо рдЗрд╕ рд╡рд░реНрдЧ рдХреЗ рд▓рд┐рдП рдЯреЛрдХрди рдФрд░ рдЕрдиреБрд░реЛрдз рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд╕рд╛рде рдПрдХ рд╣реЗрдбрд░ рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ:

class TicketsApi:
    """Api caller class."""

    def __init__(self, headers):
        """Init method."""
        self.base_url = BASE_URL
        self.headers = headers

    async def get_data(self, data):
        """Get the data from API query."""
        response_json = {}
        async with ClientSession(headers=self.headers) as session:
            try:
                response = await session.get(self.base_url, data=data)
                response.raise_for_status()
                LOGGER.info('Response status %s: %s',
                            self.base_url, response.status)
                response_json = await response.json()
            except HTTPError as http_err:
                LOGGER.error('Oops! HTTP error occurred: %s', str(http_err))
            except Exception as err:
                LOGGER.error('Oops! An error ocurred: %s', str(err))
            return response_json


def prepare_request(api_token):
    """Return the headers and query fot the API request."""
    headers = {'X-Access-Token': api_token,
               'Accept-Encoding': 'gzip'}

    data = FormData()
    data.add_field('currency', CURRENCY)
    data.add_field('origin', ORIGIN)
    data.add_field('destination', DESTINATION)
    data.add_field('show_to_affiliates', SHOW_TO_AFFILIATES)
    data.add_field('trip_duration', TRIP_DURATION)
    return headers, data


async def main():
    """Get run the code."""
    if len(sys.argv) != 2:
        print('Usage: api_caller.py <your_api_token>')
        sys.exit(1)
        return
    api_token = sys.argv[1]
    headers, data = prepare_request(api_token)

    api = TicketsApi(headers)
    response = await api.get_data(data)
    if response.get('success', None):
        LOGGER.info('API has returned %s items', len(response['data']))
        try:
            count_rows = log_maker(response)
            LOGGER.info('%s rows have been saved into %s',
                        count_rows,
                        TARGET_FILE)
        except Exception as e:
            LOGGER.error('Oops! Request result was not saved to file. %s',
                         str(e))
    else:
        LOGGER.error('Oops! API request was unsuccessful %s!', response)

рдПрдЬреЗрдВрдЯ рдХреА рд╕рд╣реА рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдФрд░ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдЗрдП api_caller.py рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░реЗрдВ:

sudo ./api_caller.py TOKEN

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

tail -f /var/log/aws-kinesis-agent/aws-kinesis-agent.log

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

рдХрд┐рдиреЗрд╕рд┐рд╕ рдбреЗрдЯрд╛ рдПрдирд╛рд▓рд┐рдЯрд┐рдХреНрд╕ рдХреА рд╕реНрдерд╛рдкрдирд╛

рдЖрдЗрдП рдкреВрд░реЗ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рдХреЗрдВрджреНрд░реАрдп рдШрдЯрдХ рдХреА рдУрд░ рдмрдврд╝рддреЗ рд╣реИрдВ - рдХрд╛рдЗрдиреЗрд╕рд┐рд╕ рдбреЗрдЯрд╛ рдПрдирд╛рд▓рд┐рдЯрд┐рдХреНрд╕ рдореЗрдВ рдПрдХ рдирдпрд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдПрдВ рдЬрд┐рд╕рдХрд╛ рдирд╛рдо рдХрд┐рдиреЗрд╕рд┐рд╕_рдПрдирд╛рд▓рд┐рдЯрд┐рдХреНрд╕_рдПрдпрд░рд▓рд╛рдЗрдиреНрд╕_рдПрдк рд╣реИ:

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

  1. рдЖрдкрдХреЛ рд╕реНрд░реЛрдд рдбреЗрдЯрд╛ рдХреЗ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдирдИ рд╕реНрдЯреНрд░реАрдо (рдЖрдЙрдЯрдкреБрдЯ рд╕реНрдЯреНрд░реАрдо) рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ;
  2. рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЪрд▓рдиреЗ рдХреЗ рджреМрд░рд╛рди рд╣реЛрдиреЗ рд╡рд╛рд▓реА рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рд╕реНрдЯреНрд░реАрдо рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ (рддреНрд░реБрдЯрд┐ рд╕реНрдЯреНрд░реАрдо);
  3. рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЗрдирдкреБрдЯ рдбреЗрдЯрд╛ рдпреЛрдЬрдирд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ (рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ рддреЛ рдЗрд╕реЗ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ)ред

рдпрд╣ рдХреЛрдИ рд╕рд╕реНрддреА рд╕реЗрд╡рд╛ рдирд╣реАрдВ рд╣реИ - рдХрд╛рдо рдХреЗ рдкреНрд░рддрд┐ рдШрдВрдЯреЗ 0.11 рдЕрдореЗрд░рд┐рдХреА рдбреЙрд▓рд░, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕рд╛рд╡рдзрд╛рдиреА рд╕реЗ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдХрд╛рдо рдкреВрд░рд╛ рд╣реЛрдиреЗ рдкрд░ рдЗрд╕реЗ рд╣рдЯрд╛ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдЖрдЗрдП рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдбреЗрдЯрд╛ рд╕реНрд░реЛрдд рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░реЗрдВ:

рдЕрдореЗрдЬрд╝реЕрди рдХрд┐рдиреЗрд╕рд┐рд╕ рдФрд░ рд╕рд░реНрд╡рд░ рд░рд╣рд┐рдд рд╕рд░рд▓рддрд╛ рдХреЗ рд╕рд╛рде рдПрд╡рд┐рдПрд╕реЗрд▓реНрд╕ рдПрдкреАрдЖрдИ рдПрдХреАрдХрд░рдг
рдЙрд╕ рд╕реНрдЯреНрд░реАрдо рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ рдЬрд┐рд╕рд╕реЗ рд╣рдо рдХрдиреЗрдХреНрдЯ рд╣реЛрдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ (рдПрдпрд░рд▓рд╛рдЗрди_рдЯрд┐рдХрдЯ):

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

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

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

рдЕрдореЗрдЬрд╝реЕрди рдХрд┐рдиреЗрд╕рд┐рд╕ рдФрд░ рд╕рд░реНрд╡рд░ рд░рд╣рд┐рдд рд╕рд░рд▓рддрд╛ рдХреЗ рд╕рд╛рде рдПрд╡рд┐рдПрд╕реЗрд▓реНрд╕ рдПрдкреАрдЖрдИ рдПрдХреАрдХрд░рдг
SQL рд╕рдВрдкрд╛рджрдХ рд╡рд┐рдВрдбреЛ рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рд░рд▓ рдХреНрд╡реЗрд░реА рдбрд╛рд▓реЗрдВ рдФрд░ рд╕рд╣реЗрдЬреЗрдВ рдФрд░ SQL рдЪрд▓рд╛рдПрдБ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ:

CREATE OR REPLACE STREAM "DESTINATION_SQL_STREAM" ("cost" DOUBLE, "gate" VARCHAR(16));

CREATE OR REPLACE PUMP "STREAM_PUMP" AS INSERT INTO "DESTINATION_SQL_STREAM"
SELECT STREAM "cost", "gate"
FROM "SOURCE_SQL_STREAM_001"
WHERE "cost" < 5000
    and "gate" = 'Aeroflot';

рд░рд┐рд▓реЗрд╢рдирд▓ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ, рдЖрдк рд░рд┐рдХреЙрд░реНрдб рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП INSERT рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдФрд░ рдХреНрд╡реЗрд░реА рдбреЗрдЯрд╛ рдХреЗ рд▓рд┐рдП SELECT рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред рдЕрдореЗрдЬрд╝реЕрди рдХрд┐рдиреЗрд╕рд┐рд╕ рдбреЗрдЯрд╛ рдПрдирд╛рд▓рд┐рдЯрд┐рдХреНрд╕ рдореЗрдВ, рдЖрдк рд╕реНрдЯреНрд░реАрдо (рд╕реНрдЯреНрд░реАрдо) рдФрд░ рдкрдВрдк (рдкрдВрдк) рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ - рдирд┐рд░рдВрддрд░ рд╕рдореНрдорд┐рд▓рд┐рдд рдЕрдиреБрд░реЛрдз рдЬреЛ рдПрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдПрдХ рд╕реНрдЯреНрд░реАрдо рд╕реЗ рджреВрд╕рд░реЗ рд╕реНрдЯреНрд░реАрдо рдореЗрдВ рдбреЗрдЯрд╛ рдбрд╛рд▓рддреЗ рд╣реИрдВред

рдЙрдкрд░реЛрдХреНрдд рдкреНрд░рд╕реНрддреБрдд SQL рдХреНрд╡реЗрд░реА рдкрд╛рдБрдЪ рд╣рдЬрд╛рд░ рд░реВрдмрд▓ рд╕реЗ рдХрдо рдХреАрдордд рдкрд░ рдПрдЕрд░реЛрдлрд╝реНрд▓реЛрдд рдЯрд┐рдХрдЯреЛрдВ рдХреА рдЦреЛрдЬ рдХрд░рддреА рд╣реИред рдЗрди рд╢рд░реНрддреЛрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╕рднреА рд░рд┐рдХреЙрд░реНрдб DESTINATION_SQL_STREAM рд╕реНрдЯреНрд░реАрдо рдореЗрдВ рд░рдЦреЗ рдЬрд╛рдПрдВрдЧреЗред

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

рдЕрдореЗрдЬрд╝реЕрди рдХрд┐рдиреЗрд╕рд┐рд╕ рдФрд░ рд╕рд░реНрд╡рд░ рд░рд╣рд┐рдд рд╕рд░рд▓рддрд╛ рдХреЗ рд╕рд╛рде рдПрд╡рд┐рдПрд╕реЗрд▓реНрд╕ рдПрдкреАрдЖрдИ рдПрдХреАрдХрд░рдг
рд╕рднреА рдЬреЛрдбрд╝рддреЛрдбрд╝ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдиреАрдЪреЗ рджреА рдЧрдИ рддрд╕реНрд╡реАрд░ рдХреЗ рд╕рдорд╛рди рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП:

рдЕрдореЗрдЬрд╝реЕрди рдХрд┐рдиреЗрд╕рд┐рд╕ рдФрд░ рд╕рд░реНрд╡рд░ рд░рд╣рд┐рдд рд╕рд░рд▓рддрд╛ рдХреЗ рд╕рд╛рде рдПрд╡рд┐рдПрд╕реЗрд▓реНрд╕ рдПрдкреАрдЖрдИ рдПрдХреАрдХрд░рдг

рдПрд╕рдПрдирдПрд╕ рд╡рд┐рд╖рдп рдмрдирд╛рдирд╛ рдФрд░ рдЙрд╕рдХреА рд╕рджрд╕реНрдпрддрд╛ рд▓реЗрдирд╛

рд╕рд┐рдВрдкрд▓ рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди рд╕рд░реНрд╡рд┐рд╕ рдкрд░ рдЬрд╛рдПрдВ рдФрд░ рд╡рд╣рд╛рдВ рдПрдпрд░рд▓рд╛рдЗрдВрд╕ рдирд╛рдо рд╕реЗ рдПрдХ рдирдпрд╛ рд╡рд┐рд╖рдп рдмрдирд╛рдПрдВ:

рдЕрдореЗрдЬрд╝реЕрди рдХрд┐рдиреЗрд╕рд┐рд╕ рдФрд░ рд╕рд░реНрд╡рд░ рд░рд╣рд┐рдд рд╕рд░рд▓рддрд╛ рдХреЗ рд╕рд╛рде рдПрд╡рд┐рдПрд╕реЗрд▓реНрд╕ рдПрдкреАрдЖрдИ рдПрдХреАрдХрд░рдг
рдЗрд╕ рд╡рд┐рд╖рдп рдХреА рд╕рджрд╕реНрдпрддрд╛ рд▓реЗрдВ рдФрд░ рд╡рд╣ рдореЛрдмрд╛рдЗрд▓ рдлрд╝реЛрди рдирдВрдмрд░ рдмрддрд╛рдПрдВ рдЬрд┐рд╕ рдкрд░ рдПрд╕рдПрдордПрд╕ рд╕реВрдЪрдирд╛рдПрдВ рднреЗрдЬреА рдЬрд╛рдПрдВрдЧреА:

рдЕрдореЗрдЬрд╝реЕрди рдХрд┐рдиреЗрд╕рд┐рд╕ рдФрд░ рд╕рд░реНрд╡рд░ рд░рд╣рд┐рдд рд╕рд░рд▓рддрд╛ рдХреЗ рд╕рд╛рде рдПрд╡рд┐рдПрд╕реЗрд▓реНрд╕ рдПрдкреАрдЖрдИ рдПрдХреАрдХрд░рдг

DynamoDB рдореЗрдВ рдПрдХ рддрд╛рд▓рд┐рдХрд╛ рдмрдирд╛рдПрдВ

рдЙрдирдХреЗ рдПрдпрд░рд▓рд╛рдЗрди_рдЯрд┐рдХрдЯ рд╕реНрдЯреНрд░реАрдо рд╕реЗ рдХрдЪреНрдЪреЗ рдбреЗрдЯрд╛ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдЗрдП DynamoDB рдореЗрдВ рдЙрд╕реА рдирд╛рдо рд╕реЗ рдПрдХ рддрд╛рд▓рд┐рдХрд╛ рдмрдирд╛рдПрдВред рд╣рдо рдкреНрд░рд╛рдердорд┐рдХ рдХреБрдВрдЬреА рдХреЗ рд░реВрдк рдореЗрдВ рд░рд┐рдХреЙрд░реНрдб_рдЖрдИрдбреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ:

рдЕрдореЗрдЬрд╝реЕрди рдХрд┐рдиреЗрд╕рд┐рд╕ рдФрд░ рд╕рд░реНрд╡рд░ рд░рд╣рд┐рдд рд╕рд░рд▓рддрд╛ рдХреЗ рд╕рд╛рде рдПрд╡рд┐рдПрд╕реЗрд▓реНрд╕ рдПрдкреАрдЖрдИ рдПрдХреАрдХрд░рдг

рд▓реИрдореНрдмреНрдбрд╛ рдлрд╝рдВрдХреНрд╢рди рдХрд▓реЗрдХреНрдЯрд░ рдмрдирд╛рдирд╛

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

рдХрд▓реЗрдХреНрдЯрд░ рд▓реИрдореНрдмреНрдбрд╛ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдПрдХ IAM рднреВрдорд┐рдХрд╛ рдмрдирд╛рдирд╛
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЖрдЗрдП рд▓реИрдореНрдмреНрдбрд╛ рдХреЗ рд▓рд┐рдП Lambda-TicketsProcessingRole рдирд╛рдордХ рдПрдХ рдирдИ IAM рднреВрдорд┐рдХрд╛ рдмрдирд╛рдПрдБ:

рдЕрдореЗрдЬрд╝реЕрди рдХрд┐рдиреЗрд╕рд┐рд╕ рдФрд░ рд╕рд░реНрд╡рд░ рд░рд╣рд┐рдд рд╕рд░рд▓рддрд╛ рдХреЗ рд╕рд╛рде рдПрд╡рд┐рдПрд╕реЗрд▓реНрд╕ рдПрдкреАрдЖрдИ рдПрдХреАрдХрд░рдг
рдкрд░реАрдХреНрд╖рдг рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдкреВрд░реНрд╡-рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ AmazonKinesisReadOnlyAccess рдФрд░ AmazonDynamoDBFullAccess рдиреАрддрд┐рдпрд╛рдВ рдХрд╛рдлреА рдЙрдкрдпреБрдХреНрдд рд╣реИрдВ, рдЬреИрд╕рд╛ рдХрд┐ рдиреАрдЪреЗ рдЪрд┐рддреНрд░ рдореЗрдВ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ:

рдЕрдореЗрдЬрд╝реЕрди рдХрд┐рдиреЗрд╕рд┐рд╕ рдФрд░ рд╕рд░реНрд╡рд░ рд░рд╣рд┐рдд рд╕рд░рд▓рддрд╛ рдХреЗ рд╕рд╛рде рдПрд╡рд┐рдПрд╕реЗрд▓реНрд╕ рдПрдкреАрдЖрдИ рдПрдХреАрдХрд░рдг
рдЕрдореЗрдЬрд╝реЕрди рдХрд┐рдиреЗрд╕рд┐рд╕ рдФрд░ рд╕рд░реНрд╡рд░ рд░рд╣рд┐рдд рд╕рд░рд▓рддрд╛ рдХреЗ рд╕рд╛рде рдПрд╡рд┐рдПрд╕реЗрд▓реНрд╕ рдПрдкреАрдЖрдИ рдПрдХреАрдХрд░рдг

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

рдЕрдореЗрдЬрд╝реЕрди рдХрд┐рдиреЗрд╕рд┐рд╕ рдФрд░ рд╕рд░реНрд╡рд░ рд░рд╣рд┐рдд рд╕рд░рд▓рддрд╛ рдХреЗ рд╕рд╛рде рдПрд╡рд┐рдПрд╕реЗрд▓реНрд╕ рдПрдкреАрдЖрдИ рдПрдХреАрдХрд░рдг
рдЕрдореЗрдЬрд╝реЕрди рдХрд┐рдиреЗрд╕рд┐рд╕ рдФрд░ рд╕рд░реНрд╡рд░ рд░рд╣рд┐рдд рд╕рд░рд▓рддрд╛ рдХреЗ рд╕рд╛рде рдПрд╡рд┐рдПрд╕реЗрд▓реНрд╕ рдПрдкреАрдЖрдИ рдПрдХреАрдХрд░рдг
рдЬреЛ рдХреБрдЫ рдмрдЪрд╛ рд╣реИ рд╡рд╣ рдХреЛрдб рдбрд╛рд▓рдирд╛ рдФрд░ рд▓реИрдореНрдмреНрдбрд╛ рдХреЛ рд╕рд╣реЗрдЬрдирд╛ рд╣реИред

"""Parsing the stream and inserting into the DynamoDB table."""
import base64
import json
import boto3
from decimal import Decimal

DYNAMO_DB = boto3.resource('dynamodb')
TABLE_NAME = 'airline_tickets'

class TicketsParser:
    """Parsing info from the Stream."""

    def __init__(self, table_name, records):
        """Init method."""
        self.table = DYNAMO_DB.Table(table_name)
        self.json_data = TicketsParser.get_json_data(records)

    @staticmethod
    def get_json_data(records):
        """Return deserialized data from the stream."""
        decoded_record_data = ([base64.b64decode(record['kinesis']['data'])
                                for record in records])
        json_data = ([json.loads(decoded_record)
                      for decoded_record in decoded_record_data])
        return json_data

    @staticmethod
    def get_item_from_json(json_item):
        """Pre-process the json data."""
        new_item = {
            'record_id': json_item.get('record_id'),
            'cost': Decimal(json_item.get('cost')),
            'trip_class': json_item.get('trip_class'),
            'show_to_affiliates': json_item.get('show_to_affiliates'),
            'origin': json_item.get('origin'),
            'number_of_changes': int(json_item.get('number_of_changes')),
            'gate': json_item.get('gate'),
            'found_at': json_item.get('found_at'),
            'duration': int(json_item.get('duration')),
            'distance': int(json_item.get('distance')),
            'destination': json_item.get('destination'),
            'depart_date': json_item.get('depart_date'),
            'actual': json_item.get('actual')
        }
        return new_item

    def run(self):
        """Batch insert into the table."""
        with self.table.batch_writer() as batch_writer:
            for item in self.json_data:
                dynamodb_item = TicketsParser.get_item_from_json(item)
                batch_writer.put_item(dynamodb_item)

        print('Has been added ', len(self.json_data), 'items')

def lambda_handler(event, context):
    """Parse the stream and insert into the DynamoDB table."""
    print('Got event:', event)
    parser = TicketsParser(TABLE_NAME, event['Records'])
    parser.run()

рд▓реИрдореНрдмреНрдбрд╛ рдлрд╝рдВрдХреНрд╢рди рдиреЛрдЯрд┐рдлрд╝рд╛рдпрд░ рдмрдирд╛рдирд╛

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

IAM рднреВрдорд┐рдХрд╛ рдмрдирд╛рдирд╛
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рдЗрд╕ рд▓реИрдореНрдмреНрдбрд╛ рдХреЗ рд▓рд┐рдП IAM рднреВрдорд┐рдХрд╛ рд▓реИрдореНрдмреНрдбрд╛-рдХрд┐рдиреЗрд╕рд┐рд╕рдЕрд▓рд╛рд░реНрдо рдмрдирд╛рддреЗ рд╣реИрдВ, рдФрд░ рдлрд┐рд░ рдЗрд╕ рднреВрдорд┐рдХрд╛ рдХреЛ рдмрдирд╛рдП рдЬрд╛ рд░рд╣реЗ рдЕрд▓рд╛рд░реНрдо_рдиреЛрдЯрд┐рдлрд╝рд╛рдпрд░ рд▓реИрдореНрдмреНрдбрд╛ рдХреЛ рд╕реМрдВрдкрддреЗ рд╣реИрдВ:

рдЕрдореЗрдЬрд╝реЕрди рдХрд┐рдиреЗрд╕рд┐рд╕ рдФрд░ рд╕рд░реНрд╡рд░ рд░рд╣рд┐рдд рд╕рд░рд▓рддрд╛ рдХреЗ рд╕рд╛рде рдПрд╡рд┐рдПрд╕реЗрд▓реНрд╕ рдПрдкреАрдЖрдИ рдПрдХреАрдХрд░рдг
рдЕрдореЗрдЬрд╝реЕрди рдХрд┐рдиреЗрд╕рд┐рд╕ рдФрд░ рд╕рд░реНрд╡рд░ рд░рд╣рд┐рдд рд╕рд░рд▓рддрд╛ рдХреЗ рд╕рд╛рде рдПрд╡рд┐рдПрд╕реЗрд▓реНрд╕ рдПрдкреАрдЖрдИ рдПрдХреАрдХрд░рдг

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

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

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

import boto3
import base64
import os

SNS_CLIENT = boto3.client('sns')
TOPIC_ARN = os.environ['TOPIC_ARN']


def lambda_handler(event, context):
    try:
        SNS_CLIENT.publish(TopicArn=TOPIC_ARN,
                           Message='Hi! I have found an interesting stuff!',
                           Subject='Airline tickets alarm')
        print('Alarm message has been successfully delivered')
    except Exception as err:
        print('Delivery failure', str(err))

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣реАрдВ рдкрд░ рдореИрдиреНрдпреБрдЕрд▓ рд╕рд┐рд╕реНрдЯрдо рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдкреВрд░рд╛ рд╣реЛ рдЧрдпрд╛ рд╣реИред рдЬреЛ рдХреБрдЫ рдмрдЪрд╛ рд╣реИ рд╡рд╣ рдкрд░реАрдХреНрд╖рдг рдХрд░рдирд╛ рдФрд░ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рд╣реИ рдХрд┐ рд╣рдордиреЗ рд╕рдм рдХреБрдЫ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рд╣реИред

рдЯреЗрд░рд╛рдлрд╝реЙрд░реНрдо рдХреЛрдб рд╕реЗ рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдХрд░реЗрдВ

рдЖрд╡рд╢реНрдпрдХ рддреИрдпрд╛рд░реА

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

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

рдХреИрд╕реЗ рдЪрд▓рд╛рдирд╛ рд╣реИ?

рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХрд╛ рдкреВрд░рд╛ рдХреЛрдб рд╣реИ рдореЗрд░реЗ рднрдВрдбрд╛рд░ рдореЗрдВ. рд╣рдо рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЛ рдЕрдкрдиреЗ рдкрд╛рд╕ рдХреНрд▓реЛрди рдХрд░рддреЗ рд╣реИрдВред рд╢реБрд░реВ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдЖрдкрдХреЛ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдЖрдкрдиреЗ AWS CLI рд╕реНрдерд╛рдкрд┐рдд рдФрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐... рдЯреЗрд░рд╛рдлрд╝реЙрд░реНрдо ~/.aws/credentials рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓ рдЦреЛрдЬреЗрдЧрд╛ред

рдЯреЗрд░рд╛рдлреЙрд░реНрдо рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдХреНрд▓рд╛рдЙрдб рдореЗрдВ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдХреНрдпрд╛ рдмрдирд╛ рд░рд╣рд╛ рд╣реИ рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрдкреВрд░реНрдг рдмреБрдирд┐рдпрд╛рджреА рдврд╛рдВрдЪреЗ рдХреЛ рддреИрдирд╛рдд рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдпреЛрдЬрдирд╛ рдХрдорд╛рдВрдб рдЪрд▓рд╛рдирд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рдЕрднреНрдпрд╛рд╕ рд╣реИ:

terraform.exe plan

рдЖрдкрдХреЛ рд╕реВрдЪрдирд╛рдПрдВ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдлрд╝реЛрди рдирдВрдмрд░ рджрд░реНрдЬ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рд╛ рдЬрд╛рдПрдЧрд╛ред рдЗрд╕ рд╕реНрддрд░ рдкрд░ рдЗрд╕реЗ рджрд░реНрдЬ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИред

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

terraform.exe apply

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

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

рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓реЙрдиреНрдЪ рдХрд░реЗрдВ:

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

рдЕрдореЗрдЬрд╝реЕрди рдХрд┐рдиреЗрд╕рд┐рд╕ рдФрд░ рд╕рд░реНрд╡рд░ рд░рд╣рд┐рдд рд╕рд░рд▓рддрд╛ рдХреЗ рд╕рд╛рде рдПрд╡рд┐рдПрд╕реЗрд▓реНрд╕ рдПрдкреАрдЖрдИ рдПрдХреАрдХрд░рдг
рдЕрдореЗрдЬрд╝реЕрди рдХрд┐рдиреЗрд╕рд┐рд╕ рдФрд░ рд╕рд░реНрд╡рд░ рд░рд╣рд┐рдд рд╕рд░рд▓рддрд╛ рдХреЗ рд╕рд╛рде рдПрд╡рд┐рдПрд╕реЗрд▓реНрд╕ рдПрдкреАрдЖрдИ рдПрдХреАрдХрд░рдг
рдЕрдм рд╕рдм рдХреБрдЫ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИ.

рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рдкрд░реАрдХреНрд╖рдг

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

рд╣рдо SSH рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ EC2 рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рдореЗрдВ рд▓реЙрдЧ рдЗрди рдХрд░рддреЗ рд╣реИрдВ рдЬрд╣рд╛рдВ рдХрд╛рдЗрдиреЗрд╕рд┐рд╕ рдПрдЬреЗрдВрдЯ рд╕реНрдерд╛рдкрд┐рдд рд╣реИ рдФрд░ api_caller.py рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЪрд▓рд╛рддреЗ рд╣реИрдВ

sudo ./api_caller.py TOKEN

рдЖрдкрдХреЛ рдмрд╕ рдЕрдкрдиреЗ рдирдВрдмрд░ рдкрд░ рдПрдХ рдПрд╕рдПрдордПрд╕ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рдиреА рд╣реИ:

рдЕрдореЗрдЬрд╝реЕрди рдХрд┐рдиреЗрд╕рд┐рд╕ рдФрд░ рд╕рд░реНрд╡рд░ рд░рд╣рд┐рдд рд╕рд░рд▓рддрд╛ рдХреЗ рд╕рд╛рде рдПрд╡рд┐рдПрд╕реЗрд▓реНрд╕ рдПрдкреАрдЖрдИ рдПрдХреАрдХрд░рдг
рдПрд╕рдПрдордПрд╕ - рд▓рдЧрднрдЧ 1 рдорд┐рдирдЯ рдореЗрдВ рдлрд╝реЛрди рдкрд░ рдПрдХ рд╕рдВрджреЗрд╢ рдЖрддрд╛ рд╣реИ:

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

рдЕрдореЗрдЬрд╝реЕрди рдХрд┐рдиреЗрд╕рд┐рд╕ рдФрд░ рд╕рд░реНрд╡рд░ рд░рд╣рд┐рдд рд╕рд░рд▓рддрд╛ рдХреЗ рд╕рд╛рде рдПрд╡рд┐рдПрд╕реЗрд▓реНрд╕ рдПрдкреАрдЖрдИ рдПрдХреАрдХрд░рдг

рдирд┐рд╖реНрдХрд░реНрд╖

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

рд╣рдордиреЗ рдЙрдкрд░реЛрдХреНрдд рдкреНрд░рдгрд╛рд▓реА рдХреЛ рджреЛ рддрд░реАрдХреЛрдВ рд╕реЗ рддреИрдирд╛рдд рдХрд┐рдпрд╛ рд╣реИ: рдПрдХ рдХрд╛рдлреА рд▓рдВрдмрд╛ рдореИрдиреБрдЕрд▓ рдФрд░ рдЯреЗрд░рд╛рдлреЙрд░реНрдо рдХреЛрдб рд╕реЗ рдПрдХ рддреНрд╡рд░рд┐рддред

рд╕рднреА рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕реНрд░реЛрдд рдХреЛрдб рдЙрдкрд▓рдмреНрдз рд╣реИ рдореЗрд░реЗ GitHub рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ, рдореЗрд░рд╛ рд╕реБрдЭрд╛рд╡ рд╣реИ рдХрд┐ рдЖрдк рд╕реНрд╡рдпрдВ рдХреЛ рдЗрд╕рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рдХрд░ рд▓реЗрдВред

рдореБрдЭреЗ рд▓реЗрдЦ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░рдиреЗ рдореЗрдВ рдЦреБрд╢реА рд╣реЛ рд░рд╣реА рд╣реИ, рдореИрдВ рдЖрдкрдХреА рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдореИрдВ рд░рдЪрдирд╛рддреНрдордХ рдЖрд▓реЛрдЪрдирд╛ рдХреА рдЖрд╢рд╛ рдХрд░рддрд╛ рд╣реВрдБред

рдореИрдВ рдЖрдкрдХреЛ рд╕рдлрд▓рддрд╛ рдХреА рдХрд╛рдордирд╛ рдХрд░рддрд╛ рд╣реВрдВ!

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

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