Amazon Kinesis рд░ рд╕рд░реНрднрд░рд░рд╣рд┐рдд рд╕рд╛рджрдЧреАрдХреЛ рд╕рд╛рде Aviasales API рдПрдХреАрдХрд░рдг

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

рдХреЗ рддрдкрд╛рдИ рдЙрдбреНрдиреЗ рд╣рд╡рд╛рдЗрдЬрд╣рд╛рдЬ рдорди рдкрд░рд╛рдЙрдиреБрд╣реБрдиреНрдЫ? рдорд▓рд╛рдИ рдпреЛ рдордирдкрд░реНрдЫ, рддрд░ рдЖрддреНрдо-рдкреГрдердХрддрд╛рдХреЛ рд╕рдордпрдорд╛ рдо рдкрдирд┐ рдПрдХ рдкреНрд░рд╕рд┐рджреНрдз рд╕реНрд░реЛрдд - Aviasales рдмрд╛рдЯ рдПрдпрд░ рдЯрд┐рдХрдЯрд╣рд░реВрдорд╛ рдбреЗрдЯрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдЧрд░реНрди рдкреНрд░реЗрдордорд╛ рдкрд░реЗрдВред

рдЖрдЬ рд╣рд╛рдореА Amazon Kinesis рдХреЛ рдХрд╛рдордХреЛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдЧрд░реНрдиреЗрдЫреМрдВ, рд╡рд╛рд╕реНрддрд╡рд┐рдХ-рд╕рдордп рдПрдирд╛рд▓рд┐рдЯрд┐рдХреНрд╕рдХреЛ рд╕рд╛рде рд╕реНрдЯреНрд░рд┐рдорд┐рдЩ рдкреНрд░рдгрд╛рд▓реА рдирд┐рд░реНрдорд╛рдг рдЧрд░реНрдиреЗрдЫреМрдВ, Amazon DynamoDB NoSQL рдбрд╛рдЯрд╛рдмреЗрд╕рд▓рд╛рдИ рдореБрдЦреНрдп рдбрд╛рдЯрд╛ рднрдгреНрдбрд╛рд░рдгрдХреЛ рд░реВрдкрдорд╛ рд╕реНрдерд╛рдкрдирд╛ рдЧрд░реНрдиреЗрдЫреМрдВ, рд░ рд░реЛрдЪрдХ рдЯрд┐рдХрдЯрд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ SMS рд╕реВрдЪрдирд╛рд╣рд░реВ рд╕реЗрдЯрдЕрдк рдЧрд░реНрдиреЗрдЫреМрдВред

рд╕рдмреИ рд╡рд┐рд╡рд░рдгрд╣рд░реВ рдХрдЯ рдЕрдиреНрддрд░реНрдЧрдд рдЫрдиреН! рдЬрд╛рдЙ!

Amazon Kinesis рд░ рд╕рд░реНрднрд░рд░рд╣рд┐рдд рд╕рд╛рджрдЧреАрдХреЛ рд╕рд╛рде Aviasales API рдПрдХреАрдХрд░рдг

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

рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐, рд╣рд╛рдореАрд▓рд╛рдИ рдкрд╣реБрдБрдЪ рдЪрд╛рд╣рд┐рдиреНрдЫ Aviasales APIред рдпрд╕рдорд╛ рдкрд╣реБрдБрдЪ рдирд┐рдГрд╢реБрд▓реНрдХ рд░ рдкреНрд░рддрд┐рдмрдиреНрдз рдмрд┐рдирд╛ рдкреНрд░рджрд╛рди рдЧрд░рд┐рдПрдХреЛ рдЫ; рдбрд╛рдЯрд╛ рдкрд╣реБрдБрдЪ рдЧрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐ рддрдкрд╛рдЗрдБрдХреЛ рдПрдкреАрдЖрдИ рдЯреЛрдХрди рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрди "рд╡рд┐рдХрд╛рд╕рдХрд░реНрддрд╛" рдЦрдгреНрдбрдорд╛ рджрд░реНрддрд╛ рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫред

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

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

рд╣рд╛рдореА рд╕рдореНрдкреВрд░реНрдг рдкреВрд░реНрд╡рд╛рдзрд╛рд░ рдкрд░рд┐рдЪрд╛рд▓рдирдХреЛ рд▓рд╛рдЧрд┐ рджреБрдИ рд╡рд┐рдХрд▓реНрдкрд╣рд░реВ рд╡рд┐рдЪрд╛рд░ рдЧрд░реНрдиреЗрдЫреМрдВ:

  • рдореНрдпрд╛рдиреБрдЕрд▓ - AWS рд╡реНрдпрд╡рд╕реНрдерд╛рдкрди рдХрдиреНрд╕реЛрд▓ рдорд╛рд░реНрдлрдд;
  • рдЯреЗрд░рд╛рдлрд░реНрдо рдХреЛрдбрдмрд╛рдЯ рдкреВрд░реНрд╡рд╛рдзрд╛рд░ рдЕрд▓реНрдЫреА рд╕реНрд╡рдЪрд╛рд▓рдирдХрд░реНрддрд╛рд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рд╣реЛ;

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

Amazon Kinesis рд░ рд╕рд░реНрднрд░рд░рд╣рд┐рдд рд╕рд╛рджрдЧреАрдХреЛ рд╕рд╛рде Aviasales API рдПрдХреАрдХрд░рдг
рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдПрдХрд╛ рдЕрд╡рдпрд╡рд╣рд░реВ:

  • Aviasales API тАФ рдпрд╕ API рджреНрд╡рд╛рд░рд╛ рдлрд┐рд░реНрддрд╛ рдЧрд░рд┐рдПрдХреЛ рдбрд╛рдЯрд╛ рд╕рдмреИ рдкрдЫрд┐рд▓реНрд▓рд╛ рдХрд╛рдордХрд╛ рд▓рд╛рдЧрд┐ рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдиреЗрдЫ;
  • EC2 рдирд┐рд░реНрдорд╛рддрд╛ рдЙрджрд╛рд╣рд░рдг - рдХреНрд▓рд╛рдЙрдбрдорд╛ рдПрдХ рдирд┐рдпрдорд┐рдд рднрд░реНрдЪреБрдЕрд▓ рдореЗрд╕рд┐рди рдЬрд╕рдорд╛ рдЗрдирдкреБрдЯ рдбреЗрдЯрд╛ рд╕реНрдЯреНрд░рд┐рдо рдЙрддреНрдкрдиреНрди рд╣реБрдиреЗрдЫ:
    • Kinesis рдПрдЬреЗрдиреНрдЯ рдореЗрд╕рд┐рдирдорд╛ рд╕реНрдерд╛рдиреАрдп рд░реВрдкрдорд╛ рд╕реНрдерд╛рдкрд┐рдд рдПрдЙрдЯрд╛ Java рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╣реЛ рдЬрд╕рд▓реЗ Kinesis (Kinesis Data Streams рд╡рд╛ Kinesis Firehose) рд▓рд╛рдИ рдбрд╛рдЯрд╛ рд╕рдЩреНрдХрд▓рди рд░ рдкрдард╛рдЙрди рд╕рдЬрд┐рд▓реЛ рддрд░рд┐рдХрд╛ рдкреНрд░рджрд╛рди рдЧрд░реНрджрдЫред рдПрдЬреЗрдиреНрдЯрд▓реЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдбрд╛рдЗрд░реЗрдХреНрдЯрд░реАрд╣рд░реВрдорд╛ рдлрд╛рдЗрд▓рд╣рд░реВрдХреЛ рд╕реЗрдЯрд▓рд╛рдИ рдирд┐рд░рдиреНрддрд░ рдирд┐рдЧрд░рд╛рдиреА рдЧрд░реНрджрдЫ рд░ Kinesis рдорд╛ рдирдпрд╛рдБ рдбрд╛рдЯрд╛ рдкрдард╛рдЙрдБрдЫ;
    • API рдХрд▓рд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯ - рдПрдХ рдкрд╛рдЗрдерди рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЬрд╕рд▓реЗ API рдорд╛ рдЕрдиреБрд░реЛрдз рдЧрд░реНрджрдЫ рд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд▓рд╛рдИ рдлреЛрд▓реНрдбрд░рдорд╛ рд░рд╛рдЦреНрдЫ рдЬреБрди рдХрд┐рдиреЗрд╕рд┐рд╕ рдПрдЬреЗрдиреНрдЯрджреНрд╡рд╛рд░рд╛ рдирд┐рдЧрд░рд╛рдиреА рдЧрд░рд┐рдиреНрдЫ;
  • Kinesis рдбрд╛рдЯрд╛ рд╕реНрдЯреНрд░рд┐рдорд╣рд░реВ - рд╡реНрдпрд╛рдкрдХ рд╕реНрдХреЗрд▓рд┐рдВрдЧ рдХреНрд╖рдорддрд╛рд╣рд░реВрдХреЛ рд╕рд╛рде рд╡рд╛рд╕реНрддрд╡рд┐рдХ-рд╕рдордп рдбрд╛рдЯрд╛ рд╕реНрдЯреНрд░рд┐рдорд┐рдЩ рд╕реЗрд╡рд╛;
  • Kinesis рдПрдирд╛рд▓рд┐рдЯрд┐рдХреНрд╕ рд╕рд░реНрднрд░рд░рд╣рд┐рдд рд╕реЗрд╡рд╛ рд╣реЛ рдЬрд╕рд▓реЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордпрдорд╛ рд╕реНрдЯреНрд░рд┐рдорд┐рдЩ рдбреЗрдЯрд╛рдХреЛ рд╡рд┐рд╢реНрд▓реЗрд╖рдгрд▓рд╛рдИ рд╕рд░рд▓ рдмрдирд╛рдЙрдБрдЫред Amazon Kinesis рдбреЗрдЯрд╛ рдПрдирд╛рд▓рд┐рдЯрд┐рдХреНрд╕рд▓реЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╕реНрд░реЛрддрд╣рд░реВ рдХрдиреНрдлрд┐рдЧрд░ рдЧрд░реНрджрдЫ рд░ рдЖрдЧрдорди рдбреЗрдЯрд╛рдХреЛ рдХреБрдиреИ рдкрдирд┐ рдорд╛рддреНрд░рд╛ рд╣реНрдпрд╛рдиреНрдбрд▓ рдЧрд░реНрди рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдкрдорд╛ рдорд╛рдкрди рдЧрд░реНрджрдЫ;
  • AWS Lambda - рдПрдХ рд╕реЗрд╡рд╛ рдЬрд╕рд▓реЗ рддрдкрд╛рдИрдВрд▓рд╛рдИ рдЬрдЧреЗрдбрд╛ рд╡рд╛ рд╕рд░реНрднрд░ рд╕реЗрдЯрдЕрдк рдмрд┐рдирд╛ рдХреЛрдб рдЪрд▓рд╛рдЙрди рдЕрдиреБрдорддрд┐ рджрд┐рдиреНрдЫред рд╕рдмреИ рдХрдореНрдкреНрдпреБрдЯрд┐рдЩ рдкрд╛рд╡рд░ рдкреНрд░рддреНрдпреЗрдХ рдХрд▓рдХреЛ рд▓рд╛рдЧрд┐ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдкрдорд╛ рдорд╛рдкрди рдЧрд░рд┐рдПрдХреЛ рдЫ;
  • рдЕрдореЗрдЬрди рдбрд╛рдпрдирд╛рдореЛрдбрд┐рдмреА - рдХреБрдиреИ рдкрдирд┐ рд╕реНрдХреЗрд▓рдорд╛ рдЪрд▓реНрджрд╛ резреж рдорд┐рд▓рд┐рд╕реЗрдХреЗрдиреНрдб рднрдиреНрджрд╛ рдХрдордХреЛ рд╡рд┐рд▓рдореНрдмрддрд╛ рдкреНрд░рджрд╛рди рдЧрд░реНрдиреЗ рдХреБрдЮреНрдЬреА-рдорд╛рди рдЬреЛрдбреА рд░ рдХрд╛рдЧрдЬрд╛рддрд╣рд░реВрдХреЛ рдбрд╛рдЯрд╛рдмреЗрд╕ред DynamoDB рдкреНрд░рдпреЛрдЧ рдЧрд░реНрджрд╛, рддрдкрд╛рдИрдВрд▓реЗ рдХреБрдиреИ рдкрдирд┐ рд╕рд░реНрднрд░рд╣рд░реВ рдкреНрд░рд╛рд╡рдзрд╛рди, рдкреНрдпрд╛рдЪ рд╡рд╛ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрди рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдкрд░реНрджреИрдиред DynamoDB рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдкрдорд╛ рдЙрдкрд▓рдмреНрдз рд╕реНрд░реЛрддрд╣рд░реВрдХреЛ рдорд╛рддреНрд░рд╛ рд╕рдорд╛рдпреЛрдЬрди рдЧрд░реНрди рд░ рдЙрдЪреНрдЪ рдкреНрд░рджрд░реНрд╢рди рдХрд╛рдпрдо рд░рд╛рдЦреНрди рддрд╛рд▓рд┐рдХрд╛рд╣рд░реВ рдорд╛рдкрди рдЧрд░реНрджрдЫред рдХреБрдиреИ рдкреНрд░рдгрд╛рд▓реА рдкреНрд░рд╢рд╛рд╕рди рдЖрд╡рд╢реНрдпрдХ рдЫреИрди;
  • рдЕрдореЗрдЬрди рдПрд╕рдПрдирдПрд╕ - рдкреНрд░рдХрд╛рд╢рдХ-рд╕рджрд╕реНрдпрддрд╛ (рдкрдм/рд╕рдм) рдореЛрдбреЗрд▓ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рд╕рдиреНрджреЗрд╢рд╣рд░реВ рдкрдард╛рдЙрдирдХреЛ рд▓рд╛рдЧрд┐ рдкреВрд░реНрдг рд░реВрдкрдорд╛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рд╕реЗрд╡рд╛, рдЬрд╕рдХреЛ рд╕рд╛рде рддрдкрд╛рдИрдВ рдорд╛рдЗрдХреНрд░реЛрд╕реЗрд╡рд╛рд╣рд░реВ, рд╡рд┐рддрд░рдг рдкреНрд░рдгрд╛рд▓реАрд╣рд░реВ рд░ рд╕рд░реНрднрд░рд░рд╣рд┐рдд рдЕрдиреБрдкреНрд░рдпреЛрдЧрд╣рд░реВ рдЕрд▓рдЧ рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫред рдореЛрдмрд╛рдЗрд▓ рдкреБрд╢ рд╕реВрдЪрдирд╛рд╣рд░реВ, рдПрд╕рдПрдордПрд╕ рд╕рдиреНрджреЗрд╢рд╣рд░реВ рд░ рдЗрдореЗрд▓рд╣рд░реВ рдорд╛рд░реНрдлрдд рдЕрдиреНрдд рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛рд╣рд░реВрд▓рд╛рдИ рдЬрд╛рдирдХрд╛рд░реА рдкрдард╛рдЙрди SNS рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫред

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

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

рддреНрдпрд╕реЛрднрдП, рджрд░реНрддрд╛ рдЧрд░реМрдВ рд░ рд╣рд╛рдореНрд░реЛ рдЯреЛрдХрди рдкреНрд░рд╛рдкреНрдд рдЧрд░реМрдВред

рдПрдХ рдЙрджрд╛рд╣рд░рдг рдЕрдиреБрд░реЛрдз рддрд▓ рдЫ:

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

рдЕрдиреБрд░реЛрдзрдорд╛ рдЯреЛрдХрди рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЧрд░реЗрд░ 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
   }]
}

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

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

рд╕реМрднрд╛рдЧреНрдп рджреЗрдЦрд┐, DynamoDb рд░ lambda рдкреНрд░рдХрд╛рд░реНрдпрд╣рд░реВ рд╣рд╛рдореНрд░реЛ рд▓рд╛рдЧрд┐ рдирд┐рдГрд╢реБрд▓реНрдХ рд╣реБрдиреЗрдЫ рдпрджрд┐ рд╣рд╛рдореАрд▓реЗ рд╣рд╛рдореНрд░реЛ рдорд╛рд╕рд┐рдХ рдирд┐рдГрд╢реБрд▓реНрдХ рд╕реАрдорд╛рд╣рд░реВ рдкреВрд░рд╛ рдЧрд░реНрдЫреМрдВред рдЙрджрд╛рд╣рд░рдг рдХреЛ рд▓рд╛рдЧреА, DynamoDB рдХреЛ рд▓рд╛рдЧреА: рднрдгреНрдбрд╛рд░рдг рдХреЛ 25 GB, 25 WCU/RCU рд░ 100 рдорд┐рд▓рд┐рдпрди рдкреНрд░рд╢реНрдирд╣рд░реБред рд░ рдкреНрд░рддрд┐ рдорд╣рд┐рдирд╛ рдПрдХ рд▓рд╛рдЦ Lambda рд╕рдорд╛рд░реЛрд╣ рдХрд▓ред

рдореНрдпрд╛рдиреБрдЕрд▓ рдкреНрд░рдгрд╛рд▓реА рддреИрдирд╛рддреА

Kinesis рдбрд╛рдЯрд╛ рд╕реНрдЯреНрд░рд┐рдорд╣рд░реВ рд╕реЗрдЯрдЕрдк рдЧрд░реНрджреИ

Kinesis рдбреЗрдЯрд╛ рд╕реНрдЯреНрд░рд┐рдо рд╕реЗрд╡рд╛рдорд╛ рдЬрд╛рдФрдВ рд░ рджреБрдИрд╡рдЯрд╛ рдирдпрд╛рдБ рд╕реНрдЯреНрд░рд┐рдорд╣рд░реВ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реМрдВ, рдкреНрд░рддреНрдпреЗрдХрдХреЛ рд▓рд╛рдЧрд┐ рдПрдХ рд╢рд╛рд░реНрдбред

рд╢рд╛рд░реНрдб рднрдиреЗрдХреЛ рдХреЗ рд╣реЛ?
рдПрдХ рд╢рд╛рд░реНрдб рдПрдХ Amazon Kinesis рд╕реНрдЯреНрд░рд┐рдо рдХреЛ рдЖрдзрд╛рд░рднреВрдд рдбреЗрдЯрд╛ рд╕реНрдерд╛рдирд╛рдиреНрддрд░рдг рдПрдХрд╛рдЗ рд╣реЛред рдПрдЙрдЯрд╛ рдЦрдгреНрдбрд▓реЗ 1 MB/s рдХреЛ рдЧрддрд┐рдорд╛ рдЗрдирдкреБрдЯ рдбреЗрдЯрд╛ рд╕реНрдерд╛рдирд╛рдиреНрддрд░рдг рд░ 2 MB/s рдХреЛ рдЧрддрд┐рдорд╛ рдЖрдЙрдЯрдкреБрдЯ рдбреЗрдЯрд╛ рд╕реНрдерд╛рдирд╛рдиреНрддрд░рдг рдкреНрд░рджрд╛рди рдЧрд░реНрджрдЫред рдПрдЙрдЯрд╛ рдЦрдгреНрдбрд▓реЗ рдкреНрд░рддрд┐ рд╕реЗрдХреЗрдиреНрдб 1000 PUT рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рд╣рд░реВрд▓рд╛рдИ рд╕рдорд░реНрдерди рдЧрд░реНрджрдЫред рдбрд╛рдЯрд╛ рд╕реНрдЯреНрд░рд┐рдо рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрджрд╛, рддрдкрд╛рдИрдВрд▓реЗ рдЦрдгреНрдбрд╣рд░реВрдХреЛ рдЖрд╡рд╢реНрдпрдХ рд╕рдВрдЦреНрдпрд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫред рдЙрджрд╛рд╣рд░рдг рдХреЛ рд▓рд╛рдЧреА, рддрдкрд╛рдИрдВ рджреБрдИ рдЦрдгреНрдбрд╣рд░реБ рд╕рдВрдЧ рдбрд╛рдЯрд╛ рд╕реНрдЯреНрд░рд┐рдо рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫред рдпрд╕ рдбреЗрдЯрд╛ рд╕реНрдЯреНрд░рд┐рдорд▓реЗ 2 MB/s рдорд╛ рдЗрдирдкреБрдЯ рдбреЗрдЯрд╛ рд╕реНрдерд╛рдирд╛рдиреНрддрд░рдг рд░ 4 MB/s рдорд╛ рдЖрдЙрдЯрдкреБрдЯ рдбреЗрдЯрд╛ рд╕реНрдерд╛рдирд╛рдиреНрддрд░рдг рдкреНрд░рджрд╛рди рдЧрд░реНрджрдЫ, рдкреНрд░рддрд┐ рд╕реЗрдХреЗрдиреНрдб 2000 PUT рд░реЗрдХрд░реНрдбрд╣рд░реВрд▓рд╛рдИ рд╕рдорд░реНрдерди рдЧрд░реНрджрдЫред

рддрдкрд╛рдИрдВрдХреЛ рд╕реНрдЯреНрд░рд┐рдордорд╛ рдЬрддрд┐ рдзреЗрд░реИ рд╢рд╛рд░реНрдбрд╣рд░реВ, рдпрд╕рдХреЛ рдереНрд░реБрдкреБрдЯ рддреНрдпрддрд┐ рдиреИ рдареВрд▓реЛ рд╣реБрдиреНрдЫред рд╕рд┐рджреНрдзрд╛рдиреНрддрдорд╛, рдпрд╕рд░реА рдкреНрд░рд╡рд╛рд╣рд╣рд░реВ рдорд╛рдкрди рдЧрд░рд┐рдиреНрдЫ - рд╢рд╛рд░реНрдбрд╣рд░реВ рдердкреЗрд░ред рддрд░ рддрдкрд╛рдИрдВрд╕рдБрдЧ рдЬрддрд┐ рдзреЗрд░реИ рд╢рд╛рд░реНрдбрд╣рд░реВ рдЫрдиреН, рдЙрддрд┐ рдЙрдЪреНрдЪ рдореВрд▓реНрдпред рдкреНрд░рддреНрдпреЗрдХ рд╢рд╛рд░реНрдбрдХреЛ рд▓рд╛рдЧрдд рез.рел рд╕реЗрдиреНрдЯ рдкреНрд░рддрд┐ рдШрдгреНрдЯрд╛ рд░ рдердк рез.рек рд╕реЗрдиреНрдЯ рдкреНрд░рддреНрдпреЗрдХ рдорд┐рд▓рд┐рдпрди PUT рдкреЗрд▓реЛрдб рдПрдХрд╛рдЗрд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ред

рдирд╛рдордХреЛ рд╕рд╛рде рдирдпрд╛рдБ рд╕реНрдЯреНрд░рд┐рдо рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реМрдВ airline_tickets, 1 рд╢рд░реНрдб рдЙрдирдХреЛ рд▓рд╛рдЧрд┐ рдкрд░реНрдпрд╛рдкреНрдд рд╣реБрдиреЗрдЫ:

Amazon Kinesis рд░ рд╕рд░реНрднрд░рд░рд╣рд┐рдд рд╕рд╛рджрдЧреАрдХреЛ рд╕рд╛рде Aviasales API рдПрдХреАрдХрд░рдг
рдЕрдм рдирд╛рдордХреЛ рд╕рд╛рде рдЕрд░реНрдХреЛ рдереНрд░реЗрдб рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реМрдВ рд╡рд┐рд╢реЗрд╖_рд╕реНрдЯреНрд░рд┐рдо:

Amazon Kinesis рд░ рд╕рд░реНрднрд░рд░рд╣рд┐рдд рд╕рд╛рджрдЧреАрдХреЛ рд╕рд╛рде Aviasales API рдПрдХреАрдХрд░рдг

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

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

рдорд╣рддреНрддреНрд╡рдкреВрд░реНрдг рдиреЛрдЯ: рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐, рддрдкрд╛рдИрдВрд▓реЗ рдЫрд╡рд┐ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреБрдкрд░реНрдЫ - Amazon Linux AMI 2018.03.0, рдпрд╕рдорд╛ рдЫрд┐рдЯреЛ Kinesis рдПрдЬреЗрдиреНрдЯ рд╕реБрд░реВ рдЧрд░реНрди рдХрдо рд╕реЗрдЯрд┐рдЩреНрд╣рд░реВ рдЫрдиреНред

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

Amazon Kinesis рд░ рд╕рд░реНрднрд░рд░рд╣рд┐рдд рд╕рд╛рджрдЧреАрдХреЛ рд╕рд╛рде Aviasales API рдПрдХреАрдХрд░рдг
рдирдпрд╛рдБ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░рд┐рдПрдХреЛ рднрд░реНрдЪреБрдЕрд▓ рдореЗрд╕рд┐рдирд▓рд╛рдИ рдХрд┐рдиреЗрд╕рд┐рд╕ рд╕реЗрд╡рд╛рд╕рдБрдЧ рдЕрдиреНрддрд░реНрдХреНрд░рд┐рдпрд╛ рдЧрд░реНрди рд╕рдХреНрд╖рдо рд╣реБрдирдХреЛ рд▓рд╛рдЧрд┐, рдпрд╕рд▓рд╛рдИ рддреНрдпрд╕реЛ рдЧрд░реНрдиреЗ рдЕрдзрд┐рдХрд╛рд░ рджрд┐рдЗрдиреБрдкрд░реНрдЫред рдпреЛ рдЧрд░реНрдиреЗ рдЙрддреНрддрдо рддрд░рд┐рдХрд╛ рднрдиреЗрдХреЛ IAM рднреВрдорд┐рдХрд╛ рддреЛрдХреНрдиреЗ рд╣реЛред рддреНрдпрд╕рдХрд╛рд░рдг, рдЪрд░рдг 3 рдорд╛: рдЙрджрд╛рд╣рд░рдг рд╡рд┐рд╡рд░рдгрд╣рд░реВ рд╕реНрдХреНрд░рд┐рди рдХрдиреНрдлрд┐рдЧрд░ рдЧрд░реНрдиреБрд╣реЛрд╕реН, рддрдкрд╛рдИрдВрд▓реЗ рдЪрдпрди рдЧрд░реНрдиреБрдкрд░реНрдЫ рдирдпрд╛рдБ IAM рднреВрдорд┐рдХрд╛ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдиреБрд╣реЛрд╕реН:

EC2 рдХреЛ рд▓рд╛рдЧрд┐ IAM рднреВрдорд┐рдХрд╛ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрджреИ
Amazon Kinesis рд░ рд╕рд░реНрднрд░рд░рд╣рд┐рдд рд╕рд╛рджрдЧреАрдХреЛ рд╕рд╛рде Aviasales API рдПрдХреАрдХрд░рдг
рдЦреБрд▓реНрдиреЗ рд╡рд┐рдиреНрдбреЛрдорд╛, рд╣рд╛рдореА EC2 рдХреЛ рд▓рд╛рдЧрд┐ рдирдпрд╛рдБ рднреВрдорд┐рдХрд╛ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрджреИрдЫреМрдВ рднрдиреЗрд░ рдЪрдпрди рдЧрд░реНрдиреБрд╣реЛрд╕реН рд░ рдЕрдиреБрдорддрд┐ рдЦрдгреНрдбрдорд╛ рдЬрд╛рдиреБрд╣реЛрд╕реН:

Amazon Kinesis рд░ рд╕рд░реНрднрд░рд░рд╣рд┐рдд рд╕рд╛рджрдЧреАрдХреЛ рд╕рд╛рде Aviasales API рдПрдХреАрдХрд░рдг
рдкреНрд░рд╢рд┐рдХреНрд╖рдгрдХреЛ рдЙрджрд╛рд╣рд░рдг рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░, рд╣рд╛рдореАрд▓реЗ рд╕реНрд░реЛрдд рдЕрдзрд┐рдХрд╛рд░рдХреЛ рджрд╛рдиреЗрджрд╛рд░ рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рдирдХрд╛ рд╕рдмреИ рдЬрдЯрд┐рд▓рддрд╛рд╣рд░реВрдорд╛ рдЬрд╛рдиреБ рдкрд░реНрджреИрди, рддреНрдпрд╕реИрд▓реЗ рд╣рд╛рдореА Amazon рджреНрд╡рд╛рд░рд╛ рдкреВрд░реНрд╡-рдХрдиреНрдлрд┐рдЧрд░ рдЧрд░рд┐рдПрдХрд╛ рдиреАрддрд┐рд╣рд░реВ рдЪрдпрди рдЧрд░реНрдиреЗрдЫреМрдВ: AmazonKinesisFullAccess рд░ CloudWatchFullAccessред

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

Amazon Kinesis рд░ рд╕рд░реНрднрд░рд░рд╣рд┐рдд рд╕рд╛рджрдЧреАрдХреЛ рд╕рд╛рде Aviasales API рдПрдХреАрдХрд░рдг
рдпреЛ рдирдпрд╛рдБ рднреВрдорд┐рдХрд╛ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реЗрдкрдЫрд┐, рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░рд┐рдПрдХреЛ рднрд░реНрдЪреБрдЕрд▓ рдореЗрд╕рд┐рди рдЙрджрд╛рд╣рд░рдгрдорд╛ рд╕рдВрд▓рдЧреНрди рдЧрд░реНрди рдирдмрд┐рд░реНрд╕рдиреБрд╣реЛрд╕реН:

Amazon Kinesis рд░ рд╕рд░реНрднрд░рд░рд╣рд┐рдд рд╕рд╛рджрдЧреАрдХреЛ рд╕рд╛рде Aviasales API рдПрдХреАрдХрд░рдг
рд╣рд╛рдореА рдпреЛ рд╕реНрдХреНрд░рд┐рдирдорд╛ рдЕрд░реВ рдХреЗрд╣реА рдкрд░рд┐рд╡рд░реНрддрди рдЧрд░реНрджреИрдиреМрдВ рд░ рдЕрд░реНрдХреЛ рд╡рд┐рдиреНрдбреЛрдЬрдорд╛ рдЬрд╛рдиреНрдЫреМрдВред

рд╣рд╛рд░реНрдб рдбреНрд░рд╛рдЗрдн рд╕реЗрдЯрд┐рдЩрд╣рд░реВ рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд░реВрдкрдорд╛ рдЫреЛрдбреНрди рд╕рдХрд┐рдиреНрдЫ, рд╕рд╛рдереИ рдЯреНрдпрд╛рдЧрд╣рд░реВ (рдпрджреНрдпрдкрд┐ рдЯреНрдпрд╛рдЧрд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд░рд╛рдореНрд░реЛ рдЕрднреНрдпрд╛рд╕ рд╣реЛ, рдХрдореНрддрд┐рдорд╛ рдЙрджрд╛рд╣рд░рдгрд▓рд╛рдИ рдирд╛рдо рджрд┐рдиреБрд╣реЛрд╕реН рд░ рд╡рд╛рддрд╛рд╡рд░рдг рд╕рдВрдХреЗрдд рдЧрд░реНрдиреБрд╣реЛрд╕реН)ред

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

Amazon Kinesis рд░ рд╕рд░реНрднрд░рд░рд╣рд┐рдд рд╕рд╛рджрдЧреАрдХреЛ рд╕рд╛рде Aviasales API рдПрдХреАрдХрд░рдг
рдпреЛ рдЪрд▓рд┐рд░рд╣реЗрдХреЛ рд╕реНрдерд┐рддрд┐рдорд╛ рд╕реНрд╡рд┐рдЪ рдЧрд░реНрдиреЗ рдмрд┐рддреНрддрд┐рдХреИ, рддрдкрд╛рдЗрдБ рдпрд╕рд▓рд╛рдИ ssh рдорд╛рд░реНрдлрдд рдЬрдбрд╛рди рдЧрд░реНрди рдкреНрд░рдпрд╛рд╕ рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫред

Kinesis рдПрдЬреЗрдиреНрдЯрд╕рдБрдЧ рдХрд╛рдо рдЧрд░реНрди рд╕рдХреНрд╖рдо рд╣реБрди, рдореЗрд╕рд┐рдирдорд╛ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдЬрдбрд╛рди рдЧрд░реЗрдкрдЫрд┐, рддрдкрд╛рдИрдВрд▓реЗ рдЯрд░реНрдорд┐рдирд▓рдорд╛ рдирд┐рдореНрди рдЖрджреЗрд╢рд╣рд░реВ рдкреНрд░рд╡рд┐рд╖реНрдЯ рдЧрд░реНрдиреБрдкрд░реНрдЫ:

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

API рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╣рд░реВ рдмрдЪрдд рдЧрд░реНрди рдлреЛрд▓реНрдбрд░ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реМрдВ:

sudo mkdir /var/log/airline_tickets

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

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

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 рд╡рд┐рд╕реНрддрд╛рд░рд╕рдБрдЧ рдирд┐рдЧрд░рд╛рдиреА рдЧрд░реНрдиреЗрдЫ, рддрд┐рдиреАрд╣рд░реВрд▓рд╛рдИ рдкрд╛рд░реНрд╕ рдЧрд░реНрдиреЗрдЫ рд░ рддрд┐рдиреАрд╣рд░реВрд▓рд╛рдИ airline_tickets рд╕реНрдЯреНрд░рд┐рдордорд╛ рд╕реНрдерд╛рдирд╛рдиреНрддрд░рдг рдЧрд░реНрдиреЗрдЫред

рд╣рд╛рдореА рд╕реЗрд╡рд╛ рдкреБрди: рд╕реБрд░реБ рдЧрд░реНрдЫреМрдВ рд░ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдЧрд░реНрдЫреМрдВ рдХрд┐ рдпреЛ рдЪрд▓рд┐рд░рд╣реЗрдХреЛ рдЫ:

sudo service aws-kinesis-agent restart

рдЕрдм рдкрд╛рдЗрдерди рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдбрд╛рдЙрдирд▓реЛрдб рдЧрд░реМрдВ рдЬрд╕рд▓реЗ API рдмрд╛рдЯ рдбрд╛рдЯрд╛ рдЕрдиреБрд░реЛрдз рдЧрд░реНрдиреЗрдЫ:

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 рдмрд╛рдЯ рдбреЗрдЯрд╛ рдЕрдиреБрд░реЛрдз рдЧрд░реНрдЫ рд░ Kinesis рдПрдЬреЗрдиреНрдЯрд▓реЗ рд╕реНрдХреНрдпрд╛рди рдЧрд░реЗрдХреЛ рдбрд╛рдЗрд░реЗрдХреНрдЯрд░реАрдорд╛ рдкреНрд░рд╛рдкреНрдд рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдмрдЪрдд рдЧрд░реНрдЫред рдпрд╕ рд╕реНрдХреНрд░рд┐рдкреНрдЯрдХреЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдПрдХрджрдо рдорд╛рдирдХ рдЫ, рддреНрдпрд╣рд╛рдБ рдПрдХ TicketsApi рд╡рд░реНрдЧ рдЫ, рдпрд╕рд▓реЗ рддрдкрд╛рдИрдВрд▓рд╛рдИ рдПрд╕рд┐рдиреНрдХреНрд░реЛрдирд╕ рд░реВрдкрдорд╛ API рд▓рд╛рдИ рддрд╛рдиреНрди рдЕрдиреБрдорддрд┐ рджрд┐рдиреНрдЫред рд╣рд╛рдореА рдЯреЛрдХрдирдХреЛ рд╕рд╛рде рд╣реЗрдбрд░ рдкрд╛рд╕ рдЧрд░реНрдЫреМрдВ рд░ рдпрд╕ рдХрдХреНрд╖рд╛рдорд╛ рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░рд╣рд░реВ рдЕрдиреБрд░реЛрдз рдЧрд░реНрдЫреМрдВ:

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

Amazon Kinesis рд░ рд╕рд░реНрднрд░рд░рд╣рд┐рдд рд╕рд╛рджрдЧреАрдХреЛ рд╕рд╛рде Aviasales API рдПрдХреАрдХрд░рдг
рд░ рд╣рд╛рдореА рдПрдЬреЗрдиреНрдЯ рд▓рдЧрд╣рд░реВрдорд╛ рд░ airline_tickets рдбрд╛рдЯрд╛ рд╕реНрдЯреНрд░рд┐рдордорд╛ рдирд┐рдЧрд░рд╛рдиреА рдЯреНрдпрд╛рдмрдорд╛ рдХрд╛рдордХреЛ рдирддрд┐рдЬрд╛ рд╣реЗрд░реНрдЫреМрдВ:

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

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

Kinesis рдбрд╛рдЯрд╛ рдПрдирд╛рд▓рд┐рдЯрд┐рдХреНрд╕ рд╕реЗрдЯрдЕрдк рдЧрд░реНрджреИ

рд╕рдореНрдкреВрд░реНрдг рдкреНрд░рдгрд╛рд▓реАрдХреЛ рдХреЗрдиреНрджреНрд░реАрдп рдХрдореНрдкреЛрдиреЗрдиреНрдЯрдорд╛ рдЬрд╛рдФрдВ - Kinesis_analytics_airlines_app рдирд╛рдордХ Kinesis рдбрд╛рдЯрд╛ рдПрдирд╛рд▓рд┐рдЯрд┐рдХреНрд╕рдорд╛ рдПрдЙрдЯрд╛ рдирдпрд╛рдБ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдиреБрд╣реЛрд╕реН:

Amazon Kinesis рд░ рд╕рд░реНрднрд░рд░рд╣рд┐рдд рд╕рд╛рджрдЧреАрдХреЛ рд╕рд╛рде Aviasales API рдПрдХреАрдХрд░рдг
Kinesis рдбреЗрдЯрд╛ рдПрдирд╛рд▓рд┐рдЯрд┐рдХреНрд╕рд▓реЗ рддрдкрд╛рдИрдВрд▓рд╛рдИ SQL рднрд╛рд╖рд╛ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ Kinesis рд╕реНрдЯреНрд░рд┐рдорд╣рд░реВрдмрд╛рдЯ рд╡рд╛рд╕реНрддрд╡рд┐рдХ-рд╕рдордп рдбреЗрдЯрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдЧрд░реНрди рдЕрдиреБрдорддрд┐ рджрд┐рдиреНрдЫред рдпреЛ рдкреВрд░реНрдг рд░реВрдкрдорд╛ рд╕реНрд╡рдд: рд╕реНрдХреЗрд▓рд┐рдВрдЧ рд╕реЗрд╡рд╛ рд╣реЛ (рдХрд┐рдиреЗрд╕рд┐рд╕ рд╕реНрдЯреНрд░рд┐рдорд╣рд░реВрдХреЛ рд╡рд┐рдкрд░реАрдд) рдЬреБрди:

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

рдпреЛ рд╕рд╕реНрддреЛ рд╕реЗрд╡рд╛ рд╣реЛрдЗрди - реж.резрез USD рдкреНрд░рддрд┐ рдШрдгреНрдЯрд╛ рдХрд╛рдо, рддреНрдпрд╕реИрд▓реЗ рддрдкрд╛рдИрдВрд▓реЗ рдпрд╕рд▓рд╛рдИ рд╕рд╛рд╡рдзрд╛рдиреАрдкреВрд░реНрд╡рдХ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреБрдкрд░реНрдЫ рд░ рд╕рдорд╛рдкреНрдд рднрдПрдкрдЫрд┐ рдпрд╕рд▓рд╛рдИ рдореЗрдЯрд╛рдЙрдиреБрдкрд░реНрдЫред

рдЕрдиреБрдкреНрд░рдпреЛрдЧрд▓рд╛рдИ рдбрд╛рдЯрд╛ рд╕реНрд░реЛрддрдорд╛ рдЬрдбрд╛рди рдЧрд░реМрдВ:

Amazon Kinesis рд░ рд╕рд░реНрднрд░рд░рд╣рд┐рдд рд╕рд╛рджрдЧреАрдХреЛ рд╕рд╛рде Aviasales API рдПрдХреАрдХрд░рдг
рд╣рд╛рдореАрд▓реЗ рдЬрдбрд╛рди рдЧрд░реНрди рд▓рд╛рдЧреЗрдХреЛ рд╕реНрдЯреНрд░рд┐рдо рдЪрдпрди рдЧрд░реНрдиреБрд╣реЛрд╕реН (airline_tickets):

Amazon Kinesis рд░ рд╕рд░реНрднрд░рд░рд╣рд┐рдд рд╕рд╛рджрдЧреАрдХреЛ рд╕рд╛рде Aviasales API рдПрдХреАрдХрд░рдг
рдЕрд░реНрдХреЛ, рддрдкрд╛рдИрдВрд▓реЗ рдирдпрд╛рдБ IAM рднреВрдорд┐рдХрд╛ рд╕рдВрд▓рдЧреНрди рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫ рддрд╛рдХрд┐ рдЕрдиреБрдкреНрд░рдпреЛрдЧрд▓реЗ рд╕реНрдЯреНрд░рд┐рдордмрд╛рдЯ рдкрдвреНрди рд░ рд╕реНрдЯреНрд░рд┐рдордорд╛ рд▓реЗрдЦреНрди рд╕рдХреЛрд╕реНред рдпреЛ рдЧрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐, рдкрд╣реБрдБрдЪ рдЕрдиреБрдорддрд┐ рдмреНрд▓рдХрдорд╛ рдХреЗрд╣рд┐ рдкрд░рд┐рд╡рд░реНрддрди рдирдЧрд░реНрди рдкрд░реНрдпрд╛рдкреНрдд рдЫ:

Amazon Kinesis рд░ рд╕рд░реНрднрд░рд░рд╣рд┐рдд рд╕рд╛рджрдЧреАрдХреЛ рд╕рд╛рде Aviasales API рдПрдХреАрдХрд░рдг
рдЕрдм рд╕реНрдЯреНрд░рд┐рдордорд╛ рдбрд╛рдЯрд╛ рд╕реНрдХрд┐рдорд╛ рдЦреЛрдЬреНрди рдЕрдиреБрд░реЛрдз рдЧрд░реМрдВ; рдпреЛ рдЧрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐, "рдбрд┐рд╕реНрдХрднрд░ рд╕реНрдХрд┐рдорд╛" рдмрдЯрдирдорд╛ рдХреНрд▓рд┐рдХ рдЧрд░реНрдиреБрд╣реЛрд╕реНред рдирддрд┐рдЬрд╛рдХреЛ рд░реВрдкрдорд╛, IAM рднреВрдорд┐рдХрд╛ рдЕрджреНрдпрд╛рд╡рдзрд┐рдХ рд╣реБрдиреЗрдЫ (рдПрдЙрдЯрд╛ рдирдпрд╛рдБ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░рд┐рдиреЗрдЫ) рд░ рд╕реНрдЯреНрд░рд┐рдордорд╛ рдкрд╣рд┐рд▓реЗ рдиреИ рдЖрдЗрдкреБрдЧреЗрдХреЛ рдбреЗрдЯрд╛рдмрд╛рдЯ рд╕реНрдХрд┐рдорд╛ рдкрддреНрддрд╛ рд▓рдЧрд╛рдЙрди рд╕реБрд░реБ рдЧрд░рд┐рдиреЗрдЫ:

Amazon Kinesis рд░ рд╕рд░реНрднрд░рд░рд╣рд┐рдд рд╕рд╛рджрдЧреАрдХреЛ рд╕рд╛рде Aviasales API рдПрдХреАрдХрд░рдг
рдЕрдм рддрдкрд╛рдИрд▓реЗ SQL рд╕рдореНрдкрд╛рджрдХрдорд╛ рдЬрд╛рдиреБ рдкрд░реНрдЫред рдЬрдм рддрдкрд╛рдЗрдБ рдпреЛ рдмрдЯрдирдорд╛ рдХреНрд▓рд┐рдХ рдЧрд░реНрдиреБрд╣реБрдиреНрдЫ, рдПрдЙрдЯрд╛ рд╡рд┐рдиреНрдбреЛ рджреЗрдЦрд╛ рдкрд░реНрдиреЗрдЫ рддрдкрд╛рдЗрдБрд▓рд╛рдИ рдПрдкреНрд▓рд┐рдХреЗрд╕рди рд╕реБрд░реБ рдЧрд░реНрди рд╕реЛрдзреНрджреИ - рддрдкрд╛рдЗрдБ рдХреЗ рд╕реБрд░реБ рдЧрд░реНрди рдЪрд╛рд╣рдиреБрд╣реБрдиреНрдЫ рдЪрдпрди рдЧрд░реНрдиреБрд╣реЛрд╕реН:

Amazon Kinesis рд░ рд╕рд░реНрднрд░рд░рд╣рд┐рдд рд╕рд╛рджрдЧреАрдХреЛ рд╕рд╛рде Aviasales API рдПрдХреАрдХрд░рдг
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 рд╕реНрдЯреЗрдЯрдореЗрдиреНрдЯ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рддрд╛рд▓рд┐рдХрд╛рд╣рд░реВрд╕рдБрдЧ рдХрд╛рдо рдЧрд░реНрдиреБрд╣реБрдиреНрдЫред Amazon Kinesis рдбреЗрдЯрд╛ рдПрдирд╛рд▓рд┐рдЯрд┐рдХреНрд╕рдорд╛, рддрдкрд╛рдИрдВ рд╕реНрдЯреНрд░рд┐рдорд╣рд░реВ (рд╕реНрдЯреНрд░рд┐рдорд╣рд░реВ) рд░ рдкрдореНрдкрд╣рд░реВ (PUMPs) рд╕рдБрдЧ рдХрд╛рдо рдЧрд░реНрдиреБрд╣реБрдиреНрдЫ тАФ рдПрдХ рд╕реНрдЯреНрд░рд┐рдордмрд╛рдЯ рдЕрд░реНрдХреЛ рд╕реНрдЯреНрд░рд┐рдордорд╛ рдПрдкреНрд▓рд┐рдХреЗрд╕рдирдорд╛ рдбреЗрдЯрд╛ рдШреБрд╕рд╛рдЙрдиреЗ рдирд┐рд░рдиреНрддрд░ рдЕрдиреБрд░реЛрдзрд╣рд░реВред

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

Amazon Kinesis рд░ рд╕рд░реНрднрд░рд░рд╣рд┐рдд рд╕рд╛рджрдЧреАрдХреЛ рд╕рд╛рде Aviasales API рдПрдХреАрдХрд░рдг
рдЧрдиреНрддрд╡реНрдп рдмреНрд▓рдХрдорд╛, рд╡рд┐рд╢реЗрд╖_рд╕реНрдЯреНрд░рд┐рдо рд╕реНрдЯреНрд░рд┐рдо рдЪрдпрди рдЧрд░реНрдиреБрд╣реЛрд╕реН, рд░ рдЗрди-рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕реНрдЯреНрд░рд┐рдо рдирд╛рдо DESTINATION_SQL_STREAM рдбреНрд░рдк-рдбрд╛рдЙрди рд╕реВрдЪреАрдорд╛:

Amazon Kinesis рд░ рд╕рд░реНрднрд░рд░рд╣рд┐рдд рд╕рд╛рджрдЧреАрдХреЛ рд╕рд╛рде Aviasales API рдПрдХреАрдХрд░рдг
рд╕рдмреИ рд╣реЗрд░рдлреЗрд░ рдХреЛ рдирддрд┐рдЬрд╛ рддрд▓ рдЪрд┐рддреНрд░ рдЬрд╕реНрддреИ рдХреЗрд╣рд┐ рд╣реБрдиреБрдкрд░реНрдЫ:

Amazon Kinesis рд░ рд╕рд░реНрднрд░рд░рд╣рд┐рдд рд╕рд╛рджрдЧреАрдХреЛ рд╕рд╛рде Aviasales API рдПрдХреАрдХрд░рдг

SNS рд╡рд┐рд╖рдп рд╕рд┐рд░реНрдЬрдирд╛ рд░ рд╕рджрд╕реНрдпрддрд╛ рд▓рд┐рдБрджреИ

рд╕рд╛рдзрд╛рд░рдг рд╕реВрдЪрдирд╛ рд╕реЗрд╡рд╛рдорд╛ рдЬрд╛рдиреБрд╣реЛрд╕реН рд░ рддреНрдпрд╣рд╛рдБ рдПрдпрд░рд▓рд╛рдЗрдиреНрд╕ рдирд╛рдордХреЛ рд╕рд╛рде рдирдпрд╛рдБ рд╡рд┐рд╖рдп рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдиреБрд╣реЛрд╕реН:

Amazon Kinesis рд░ рд╕рд░реНрднрд░рд░рд╣рд┐рдд рд╕рд╛рджрдЧреАрдХреЛ рд╕рд╛рде Aviasales API рдПрдХреАрдХрд░рдг
рдпрд╕ рд╡рд┐рд╖рдпрдорд╛ рд╕рджрд╕реНрдпрддрд╛ рд▓рд┐рдиреБрд╣реЛрд╕реН рд░ рдореЛрдмрд╛рдЗрд▓ рдлреЛрди рдирдореНрдмрд░ рд╕рдВрдХреЗрдд рдЧрд░реНрдиреБрд╣реЛрд╕реН рдЬрд╕рдорд╛ рдПрд╕рдПрдордПрд╕ рд╕реВрдЪрдирд╛рд╣рд░реВ рдкрдард╛рдЗрдиреЗрдЫ:

Amazon Kinesis рд░ рд╕рд░реНрднрд░рд░рд╣рд┐рдд рд╕рд╛рджрдЧреАрдХреЛ рд╕рд╛рде Aviasales API рдПрдХреАрдХрд░рдг

DynamoDB рдорд╛ рддрд╛рд▓рд┐рдХрд╛ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдиреБрд╣реЛрд╕реН

рддрд┐рдиреАрд╣рд░реВрдХреЛ airline_tickets рд╕реНрдЯреНрд░рд┐рдордмрд╛рдЯ рдХрдЪреНрдЪрд╛ рдбрд╛рдЯрд╛ рднрдгреНрдбрд╛рд░рдг рдЧрд░реНрди, DynamoDB рдорд╛ рд╕рдорд╛рди рдирд╛рдордХреЛ рддрд╛рд▓рд┐рдХрд╛ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реМрдВред рд╣рд╛рдореА рдкреНрд░рд╛рдердорд┐рдХ рдХреБрдЮреНрдЬреАрдХреЛ рд░реВрдкрдорд╛ record_id рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреЗрдЫреМрдВ:

Amazon Kinesis рд░ рд╕рд░реНрднрд░рд░рд╣рд┐рдд рд╕рд╛рджрдЧреАрдХреЛ рд╕рд╛рде Aviasales API рдПрдХреАрдХрд░рдг

Lambda рдкреНрд░рдХрд╛рд░реНрдп рдХрд▓реЗрдХреНрдЯрд░ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрджреИ

рдХрд▓реЗрдХреНрдЯрд░ рдирд╛рдордХ lambda рдкреНрд░рдХрд╛рд░реНрдп рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реМрдВ, рдЬрд╕рдХреЛ рдХрд╛рд░реНрдп airline_tickets рд╕реНрдЯреНрд░рд┐рдордорд╛ рдкреЛрд▓ рдЧрд░реНрдиреЗ рд╣реЛ рд░, рдпрджрд┐ рддреНрдпрд╣рд╛рдБ рдирдпрд╛рдБ рд░реЗрдХрд░реНрдбрд╣рд░реВ рднреЗрдЯрд┐рдПрдорд╛, рдпреА рд░реЗрдХрд░реНрдбрд╣рд░реВрд▓рд╛рдИ DynamoDB рддрд╛рд▓рд┐рдХрд╛рдорд╛ рдШреБрд╕рд╛рдЙрдиреБрд╣реЛрд╕реНред рдЬрд╛рд╣рд┐рд░ рдЫ, рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдЕрдзрд┐рдХрд╛рд░рдХреЛ рдЕрддрд┐рд░рд┐рдХреНрдд, рдпреЛ рд▓реНрдпрд╛рдореНрдмреНрдбрд╛рд▓реЗ рдХрд┐рдиреЗрд╕рд┐рд╕ рдбрд╛рдЯрд╛ рд╕реНрдЯреНрд░рд┐рдордорд╛ рдкрдвреНрдиреЗ рдкрд╣реБрдБрдЪ рд░ DynamoDB рдорд╛ рд▓реЗрдЦреНрди рдкрд╣реБрдБрдЪ рдЧрд░реЗрдХреЛ рд╣реБрдиреБрдкрд░реНрдЫред

рдХрд▓реЗрдХреНрдЯрд░ lambda рдкреНрд░рдХрд╛рд░реНрдпрдХреЛ рд▓рд╛рдЧрд┐ IAM рднреВрдорд┐рдХрд╛ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрджреИ
рдкрд╣рд┐рд▓реЗ, Lambda-TicketsProcessingRole рдирд╛рдордХ lambda рдХреЛ рд▓рд╛рдЧреА рдирдпрд╛рдБ IAM рднреВрдорд┐рдХрд╛ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реМрдВ:

Amazon Kinesis рд░ рд╕рд░реНрднрд░рд░рд╣рд┐рдд рд╕рд╛рджрдЧреАрдХреЛ рд╕рд╛рде Aviasales API рдПрдХреАрдХрд░рдг
рдкрд░реАрдХреНрд╖рдг рдЙрджрд╛рд╣рд░рдгрдХреЛ рд▓рд╛рдЧрд┐, рдкреВрд░реНрд╡-рдХрдиреНрдлрд┐рдЧрд░ рдЧрд░рд┐рдПрдХреЛ AmazonKinesisReadOnlyAccess рд░ AmazonDynamoDBFullAccess рдиреАрддрд┐рд╣рд░реВ рдПрдХрджрдо рдЙрдкрдпреБрдХреНрдд рдЫрдиреН, рдЬрд╕реНрддреИ рддрд▓рдХреЛ рдЪрд┐рддреНрд░рдорд╛ рджреЗрдЦрд╛рдЗрдПрдХреЛ рдЫ:

Amazon Kinesis рд░ рд╕рд░реНрднрд░рд░рд╣рд┐рдд рд╕рд╛рджрдЧреАрдХреЛ рд╕рд╛рде Aviasales API рдПрдХреАрдХрд░рдг
Amazon Kinesis рд░ рд╕рд░реНрднрд░рд░рд╣рд┐рдд рд╕рд╛рджрдЧреАрдХреЛ рд╕рд╛рде Aviasales API рдПрдХреАрдХрд░рдг

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

Amazon Kinesis рд░ рд╕рд░реНрднрд░рд░рд╣рд┐рдд рд╕рд╛рджрдЧреАрдХреЛ рд╕рд╛рде Aviasales API рдПрдХреАрдХрд░рдг
Amazon Kinesis рд░ рд╕рд░реНрднрд░рд░рд╣рд┐рдд рд╕рд╛рджрдЧреАрдХреЛ рд╕рд╛рде Aviasales API рдПрдХреАрдХрд░рдг
рдХреЛрдб рдШреБрд╕рд╛рдЙрди рд░ lambda рдмрдЪрдд рдЧрд░реНрди рдмрд╛рдБрдХреА рдЫред

"""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()

Lambda рдкреНрд░рдХрд╛рд░реНрдп рд╕реВрдЪрдирд╛рдХрд░реНрддрд╛ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрджреИ

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

IAM рднреВрдорд┐рдХрд╛ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрджреИ
рдкрд╣рд┐рд▓реЗ, рд╣рд╛рдореА рдпреЛ lambda рдХреЛ рд▓рд╛рдЧрд┐ IAM рднреВрдорд┐рдХрд╛ Lambda-KinesisAlarm рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдЫреМрдВ, рд░ рддреНрдпрд╕рдкрдЫрд┐ рдпреЛ рднреВрдорд┐рдХрд╛ alarm_notifier lambda рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░рд┐рдБрджреИ рдЫ:

Amazon Kinesis рд░ рд╕рд░реНрднрд░рд░рд╣рд┐рдд рд╕рд╛рджрдЧреАрдХреЛ рд╕рд╛рде Aviasales API рдПрдХреАрдХрд░рдг
Amazon Kinesis рд░ рд╕рд░реНрднрд░рд░рд╣рд┐рдд рд╕рд╛рджрдЧреАрдХреЛ рд╕рд╛рде Aviasales API рдПрдХреАрдХрд░рдг

рдпреЛ lambda рд▓реЗ special_stream рдорд╛ рдкреНрд░рд╡реЗрд╢ рдЧрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐ рдирдпрд╛рдБ рд░реЗрдХрд░реНрдбрд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рдЯреНрд░рд┐рдЧрд░рдорд╛ рдХрд╛рдо рдЧрд░реНрдиреБрдкрд░реНрдЫ, рддреНрдпрд╕реИрд▓реЗ рд╣рд╛рдореАрд▓реЗ рдХрд▓реЗрдХреНрдЯрд░ lambda рдХреЛ рд▓рд╛рдЧрд┐ рдЧрд░реЗ рдЬрд╕реНрддреИ рддрдкрд╛рдИрдВрд▓реЗ рдЯреНрд░рд┐рдЧрд░ рдХрдиреНрдлрд┐рдЧрд░ рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫред

рдпреЛ lambda рдХрдиреНрдлрд┐рдЧрд░ рдЧрд░реНрди рд╕рдЬрд┐рд▓реЛ рдмрдирд╛рдЙрдирдХреЛ рд▓рд╛рдЧрд┐, рдПрдЙрдЯрд╛ рдирдпрд╛рдБ рд╡рд╛рддрд╛рд╡рд░рдгреАрдп рдЪрд░ рдкрд░рд┐рдЪрдп рдЧрд░реМрдВ - TOPIC_ARN, рдЬрд╣рд╛рдБ рд╣рд╛рдореАрд▓реЗ рдПрдпрд░рд▓рд╛рдЗрдиреНрд╕ рд╡рд┐рд╖рдпрдХреЛ ANR (Amazon Recourse Names) рд░рд╛рдЦреНрдЫреМрдВ:

Amazon Kinesis рд░ рд╕рд░реНрднрд░рд░рд╣рд┐рдд рд╕рд╛рджрдЧреАрдХреЛ рд╕рд╛рде Aviasales API рдПрдХреАрдХрд░рдг
рд░ lambda рдХреЛрдб рдШреБрд╕рд╛рдЙрдиреБрд╣реЛрд╕реН, рдпреЛ рдХреБрдиреИ рдкрдирд┐ рдЬрдЯрд┐рд▓ рдЫреИрди:

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 рдХреЛрдбрдмрд╛рдЯ рдбрд┐рдкреНрд▓реЛрдЗ рдЧрд░реНрдиреБрд╣реЛрд╕реН

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

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

рддрдкрд╛рдИрдВ рд╡рд┐рддрд░рдг рдбрд╛рдЙрдирд▓реЛрдб рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ рдпрд╣рд╛рдБ рджреЗрдЦрд┐ред рд╕рдмреИ Terraform рдХреНрд╖рдорддрд╛рд╣рд░реВрдХреЛ рд╡рд┐рд╕реНрддреГрдд рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдпрд╕ рд▓реЗрдЦрдХреЛ рджрд╛рдпрд░рд╛рднрдиреНрджрд╛ рдмрд╛рд╣рд┐рд░ рдЫ, рддреНрдпрд╕реИрд▓реЗ рд╣рд╛рдореА рдореБрдЦреНрдп рдмреБрдБрджрд╛рд╣рд░реВрдорд╛ рд╕реАрдорд┐рдд рдЧрд░реНрдиреЗрдЫреМрдВред

рдХрд╕рд░реА рд╕реБрд░реВ рдЧрд░реНрдиреЗ

рдкрд░рд┐рдпреЛрдЬрдирд╛рдХреЛ рдкреВрд░реНрдг рдХреЛрдб рд╣реЛ рдореЗрд░реЛ рднрдгреНрдбрд╛рд░рдорд╛ред рд╣рд╛рдореА рдЖрдлреИрдВрдорд╛ рднрдгреНрдбрд╛рд░ рдХреНрд▓реЛрди рдЧрд░реНрдЫреМрдВред рд╕реБрд░реБ рдЧрд░реНрдиреБ рдЕрдШрд┐, рддрдкрд╛рдИрдВрд▓реЗ AWS CLI рд╕реНрдерд╛рдкрд┐рдд рд░ рдХрдиреНрдлрд┐рдЧрд░ рдЧрд░рд┐рдПрдХреЛ рдЫ рднрдиреА рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫ, рдХрд┐рдирднрдиреЗ... Terraform рд▓реЗ ~/.aws/credentials рдлрд╛рдЗрд▓рдорд╛ рдкреНрд░рдорд╛рдгрд╣рд░реВ рдЦреЛрдЬреНрдиреЗрдЫред

рдЯреЗрд░рд╛рдлрд░реНрдорд▓реЗ рд╣рд╛рд▓ рдХреНрд▓рд╛рдЙрдбрдорд╛ рд╣рд╛рдореНрд░реЛ рд▓рд╛рдЧрд┐ рдХреЗ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░рд┐рд░рд╣реЗрдХреЛ рдЫ рднрдиреЗрд░ рд╣реЗрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐ рд╕рдореНрдкреВрд░реНрдг рдкреВрд░реНрд╡рд╛рдзрд╛рд░рд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреБ рдЕрдШрд┐ рдпреЛрдЬрдирд╛ рдЖрджреЗрд╢ рдЪрд▓рд╛рдЙрдиреБ рд░рд╛рдореНрд░реЛ рдЕрднреНрдпрд╛рд╕ рд╣реЛ:

terraform.exe plan

рддрдкрд╛рдИрдВрд▓рд╛рдИ рд╕реВрдЪрдирд╛рд╣рд░реВ рдкрдард╛рдЙрдирдХреЛ рд▓рд╛рдЧрд┐ рдлреЛрди рдирдореНрдмрд░ рдкреНрд░рд╡рд┐рд╖реНрдЯ рдЧрд░реНрди рдкреНрд░реЗрд░рд┐рдд рдЧрд░рд┐рдиреЗрдЫред рдпреЛ рдЪрд░рдгрдорд╛ рдкреНрд░рд╡реЗрд╢ рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫреИрдиред

Amazon Kinesis рд░ рд╕рд░реНрднрд░рд░рд╣рд┐рдд рд╕рд╛рджрдЧреАрдХреЛ рд╕рд╛рде Aviasales API рдПрдХреАрдХрд░рдг
рдХрд╛рд░реНрдпрдХреНрд░рдордХреЛ рд╕рдЮреНрдЪрд╛рд▓рди рдпреЛрдЬрдирд╛рдХреЛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдЧрд░рд┐рд╕рдХреЗрдкрдЫрд┐, рд╣рд╛рдореА рд╕реНрд░реЛрддрд╣рд░реВ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрди рд╕реБрд░реБ рдЧрд░реНрди рд╕рдХреНрдЫреМрдВ:

terraform.exe apply

рдпреЛ рдЖрджреЗрд╢ рдкрдард╛рдПрдкрдЫрд┐, рддрдкрд╛рдИрдВрд▓рд╛рдИ рдлреЗрд░рд┐ рдлреЛрди рдирдореНрдмрд░ рдкреНрд░рд╡рд┐рд╖реНрдЯ рдЧрд░реНрди рд╕реЛрдзрд┐рдиреЗрдЫ; рд╡рд╛рд╕реНрддрд╡рдорд╛ рдХрд╛рд░реНрдпрд╣рд░реВ рдкреНрд░рджрд░реНрд╢рди рдЧрд░реНрдиреЗ рдмрд╛рд░реЗ рдкреНрд░рд╢реНрди рджреЗрдЦрд╛рдЙрдБрджрд╛ "рд╣реЛ" рдбрд╛рдпрд▓ рдЧрд░реНрдиреБрд╣реЛрд╕реНред рдпрд╕рд▓реЗ рддрдкрд╛рдИрдВрд▓рд╛рдИ рд╕рдореНрдкреВрд░реНрдг рдкреВрд░реНрд╡рд╛рдзрд╛рд░ рд╕реЗрдЯрдЕрдк рдЧрд░реНрди, EC2 рдХреЛ рд╕рдмреИ рдЖрд╡рд╢реНрдпрдХ рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рдирд╣рд░реВ рдкреВрд░рд╛ рдЧрд░реНрди, lambda рдкреНрд░рдХрд╛рд░реНрдпрд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди, рдЖрджрд┐ рдЧрд░реНрди рдЕрдиреБрдорддрд┐ рджрд┐рдиреНрдЫред

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

рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╕реБрд░реБ рдЧрд░реНрдиреБрд╣реЛрд╕реН:

Amazon Kinesis рд░ рд╕рд░реНрднрд░рд░рд╣рд┐рдд рд╕рд╛рджрдЧреАрдХреЛ рд╕рд╛рде Aviasales API рдПрдХреАрдХрд░рдг
рдпрд╕рдкрдЫрд┐, рддрдкрд╛рдИрдВрд▓реЗ рдбреНрд░рдк-рдбрд╛рдЙрди рд╕реВрдЪреАрдмрд╛рдЯ рдЪрдпрди рдЧрд░реЗрд░ рдЗрди-рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕реНрдЯреНрд░рд┐рдо рдирд╛рдо рд╕реНрдкрд╖реНрдЯ рд░реВрдкрдорд╛ рд╕реЗрдЯ рдЧрд░реНрдиреБрдкрд░реНрдЫ:

Amazon Kinesis рд░ рд╕рд░реНрднрд░рд░рд╣рд┐рдд рд╕рд╛рджрдЧреАрдХреЛ рд╕рд╛рде Aviasales API рдПрдХреАрдХрд░рдг
Amazon Kinesis рд░ рд╕рд░реНрднрд░рд░рд╣рд┐рдд рд╕рд╛рджрдЧреАрдХреЛ рд╕рд╛рде Aviasales API рдПрдХреАрдХрд░рдг
рдЕрдм рд╕рдмреИ рдЬрд╛рди рддрдпрд╛рд░ рдЫред

рдЖрд╡реЗрджрди рдкрд░реАрдХреНрд╖рдг рдЧрд░реНрджреИ

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

рд╣рд╛рдореА SSH рдорд╛рд░реНрдлрдд EC2 рднрд░реНрдЪреБрдЕрд▓ рдореЗрд╕рд┐рдирдорд╛ рд▓рдЧ рдЗрди рдЧрд░реНрдЫреМрдВ рдЬрд╣рд╛рдБ Kinesis Agent рд╕реНрдерд╛рдкрдирд╛ рдЧрд░рд┐рдПрдХреЛ рдЫ рд░ api_caller.py рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЪрд▓рд╛рдЙрдиреБрд╣реЛрд╕реНред

sudo ./api_caller.py TOKEN

рддрдкрд╛рдИрд▓реЗ рдЧрд░реНрдиреБрдкрд░реНрдиреЗ рднрдиреЗрдХреЛ рддрдкрд╛рдИрдХреЛ рдирдореНрдмрд░рдорд╛ рдПрд╕рдПрдордПрд╕рдХреЛ рд▓рд╛рдЧрд┐ рдкрд░реНрдЦрдиреБ рд╣реЛ:

Amazon Kinesis рд░ рд╕рд░реНрднрд░рд░рд╣рд┐рдд рд╕рд╛рджрдЧреАрдХреЛ рд╕рд╛рде Aviasales API рдПрдХреАрдХрд░рдг
рдПрд╕рдПрдордПрд╕ - рд▓рдЧрднрдЧ 1 рдорд┐рдиреЗрдЯрдорд╛ рдлреЛрдирдорд╛ рд╕рдиреНрджреЗрд╢ рдЖрдЙрдБрдЫ:

Amazon Kinesis рд░ рд╕рд░реНрднрд░рд░рд╣рд┐рдд рд╕рд╛рджрдЧреАрдХреЛ рд╕рд╛рде Aviasales API рдПрдХреАрдХрд░рдг
DynamoDB рдбрд╛рдЯрд╛рдмреЗрд╕рдорд╛ рдкрдЫрд┐рд▓реНрд▓рд╛, рдердк рд╡рд┐рд╕реНрддреГрдд рд╡рд┐рд╢реНрд▓реЗрд╖рдгрдХрд╛ рд▓рд╛рдЧрд┐ рд░реЗрдХрд░реНрдбрд╣рд░реВ рд╕реБрд░рдХреНрд╖рд┐рдд рдЧрд░рд┐рдпреЛ рдХрд┐ рднрдПрди рднрдиреА рд╣реЗрд░реНрди рдмрд╛рдБрдХреА рдЫред airline_tickets рддрд╛рд▓рд┐рдХрд╛рд▓реЗ рд▓рдЧрднрдЧ рдирд┐рдореНрди рдбреЗрдЯрд╛ рд╕рдорд╛рд╡реЗрд╢ рдЧрд░реНрджрдЫ:

Amazon Kinesis рд░ рд╕рд░реНрднрд░рд░рд╣рд┐рдд рд╕рд╛рджрдЧреАрдХреЛ рд╕рд╛рде Aviasales API рдПрдХреАрдХрд░рдг

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

рдХрд╛рдордХреЛ рдХреНрд░рдордорд╛, рдПрдХ рдЕрдирд▓рд╛рдЗрди рдбрд╛рдЯрд╛ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдкреНрд░рдгрд╛рд▓реА Amazon Kinesis рдорд╛ рдЖрдзрд╛рд░рд┐рдд рдмрдирд╛рдЗрдПрдХреЛ рдерд┐рдпреЛред рдХрд┐рдиреЗрд╕рд┐рд╕ рдПрдЬреЗрдиреНрдЯ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдирдХрд╛ рд▓рд╛рдЧрд┐ рд╡рд┐рдХрд▓реНрдкрд╣рд░реВ Kinesis рдбрд╛рдЯрд╛ рд╕реНрдЯреНрд░рд┐рдорд╣рд░реВ рд░ рд╡рд╛рд╕реНрддрд╡рд┐рдХ-рд╕рдордп рдПрдирд╛рд▓рд┐рдЯрд┐рдХреНрд╕ Kinesis рдПрдирд╛рд▓рд┐рдЯрд┐рдХреНрд╕ SQL тАЛтАЛрдЖрджреЗрд╢рд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░, рд╕рд╛рдереИ рдЕрдиреНрдп AWS рд╕реЗрд╡рд╛рд╣рд░реВрд╕рдБрдЧ Amazon Kinesis рдХреЛ рдЕрдиреНрддрд░рдХреНрд░рд┐рдпрд╛рд▓рд╛рдИ рд╡рд┐рдЪрд╛рд░ рдЧрд░рд┐рдпреЛред

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

рд╕рдмреИ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕реНрд░реЛрдд рдХреЛрдб рдЙрдкрд▓рдмреНрдз рдЫ рдореЗрд░реЛ GitHub рднрдгреНрдбрд╛рд░рдорд╛, рдо рд╕реБрдЭрд╛рд╡ рджрд┐рдиреНрдЫреБ рдХрд┐ рддрдкрд╛рдИ рдЖрдлреИрд▓рд╛рдИ рдпрд╕рд╕рдБрдЧ рдкрд░рд┐рдЪрд┐рдд рд╣реБрдиреБрд╣реЛрд╕реНред

рдо рд▓реЗрдЦрдорд╛ рдЫрд▓рдлрд▓ рдЧрд░реНрди рдкрд╛рдЙрдБрджрд╛ рдЦреБрд╕реА рдЫреБ, рдо рддрдкрд╛рдИрдВрдХреЛ рдЯрд┐рдкреНрдкрдгреАрд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рддрддреНрдкрд░ рдЫреБред рд░рдЪрдирд╛рддреНрдордХ рдЖрд▓реЛрдЪрдирд╛рдХреЛ рдЕрдкреЗрдХреНрд╖рд╛ рдЧрд░реНрджрдЫреБред

рдо рддрдкрд╛рдИрдВрд▓рд╛рдИ рд╕рдлрд▓рддрд╛рдХреЛ рдХрд╛рдордирд╛ рдЧрд░реНрджрдЫреБ!

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

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдердкреНрди