Amazon Kinesis рд╕рд╣ Aviasales API рдПрдХрддреНрд░реАрдХрд░рдг рдЖрдгрд┐ рд╕рд░реНрд╡реНрд╣рд░рд▓реЗрд╕ рд╕рд╛рдзреЗрдкрдгрд╛

рдЕрд╣реЛ рд╣рд╛рдмреНрд░!

рддреБрдореНрд╣рд╛рд▓рд╛ рдЙрдбрдгрд╛рд░реА рд╡рд┐рдорд╛рдиреЗ рдЖрд╡рдбрддрд╛рдд рдХрд╛? рдорд▓рд╛ рддреЗ рдЖрд╡рдбрддреЗ, рдкрд░рдВрддреБ рд╕реЗрд▓реНрдл-рдЖрдпрд╕реЛрд▓реЗрд╢рди рджрд░рдореНрдпрд╛рди рдореА рдПрдХрд╛ рд╕реБрдкреНрд░рд╕рд┐рджреНрдз рд╕реНрддреНрд░реЛрдд - рдПрд╡реНрд╣рд┐рдпрд╛рд╕реЗрд▓реНрд╕рдЪреНрдпрд╛ рд╣рд╡рд╛рдИ рддрд┐рдХрд┐рдЯрд╛рд╡рд░реАрд▓ рдбреЗрдЯрд╛рдЪреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдгреНрдпрд╛рдЪреНрдпрд╛ рдкреНрд░реЗрдорд╛рдд рдкрдбрд▓реЛ.

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

рд╕рд░реНрд╡ рддрдкрд╢реАрд▓ рдХрдЯ рдЕрдВрддрд░реНрдЧрдд рдЖрд╣реЗрдд! рдЬрд╛!

Amazon Kinesis рд╕рд╣ Aviasales API рдПрдХрддреНрд░реАрдХрд░рдг рдЖрдгрд┐ рд╕рд░реНрд╡реНрд╣рд░рд▓реЗрд╕ рд╕рд╛рдзреЗрдкрдгрд╛

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

рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рдЖрдореНрд╣рд╛рд▓рд╛ рдкреНрд░рд╡реЗрд╢ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ Aviasales API. рддреНрдпрд╛рдд рдкреНрд░рд╡реЗрд╢ рд╡рд┐рдирд╛рдореВрд▓реНрдп рдЖрдгрд┐ рдирд┐рд░реНрдмрдВрдзрд╛рдВрд╢рд┐рд╡рд╛рдп рдкреНрд░рджрд╛рди рдХреЗрд▓рд╛ рдЬрд╛рддреЛ; рдбреЗрдЯрд╛ рдНрдХреНрд╕реЗрд╕ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рддреБрдордЪреЗ API рдЯреЛрдХрди рдкреНрд░рд╛рдкреНрдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рддреБрдореНрд╣рд╛рд▓рд╛ рдлрдХреНрдд тАЬрдбреЗрд╡реНрд╣рд▓рдкрд░тАЭ рд╡рд┐рднрд╛рдЧрд╛рдд рдиреЛрдВрджрдгреА рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ.

рдпрд╛ рд▓реЗрдЦрд╛рдЪрд╛ рдореБрдЦреНрдп рдЙрджреНрджреЗрд╢ AWS рдордзреАрд▓ рдорд╛рд╣рд┐рддреА рдкреНрд░рд╡рд╛рд╣рд╛рдЪреНрдпрд╛ рд╡рд╛рдкрд░рд╛рдмрджреНрджрд▓ рд╕рд╛рдорд╛рдиреНрдп рд╕рдордЬ рджреЗрдгреЗ рдЖрд╣реЗ; рдЖрдореНрд╣реА рд╣реЗ рд▓рдХреНрд╖рд╛рдд рдШреЗрддреЛ рдХреА рд╡рд╛рдкрд░рд▓реЗрд▓реНрдпрд╛ API рджреНрд╡рд╛рд░реЗ рдкрд░рдд рдХреЗрд▓реЗрд▓рд╛ рдбреЗрдЯрд╛ рдХрд╛рдЯреЗрдХреЛрд░рдкрдгреЗ рдЕрджреНрдпрдпрд╛рд╡рдд рдирд╛рд╣реА рдЖрдгрд┐ рдХреЕрд╢реЗрдордзреВрди рдкреНрд░рд╕рд╛рд░рд┐рдд рдХреЗрд▓рд╛ рдЬрд╛рддреЛ, рдЬреЗ рдЧреЗрд▓реНрдпрд╛ рекрео рддрд╛рд╕рд╛рдВрдкрд╛рд╕реВрди Aviasales.ru рдЖрдгрд┐ Jetradar.com рд╕рд╛рдЗрдЯреНрд╕рдЪреНрдпрд╛ рд╡рд╛рдкрд░рдХрд░реНрддреНрдпрд╛рдВрдиреА рдХреЗрд▓реЗрд▓реНрдпрд╛ рд╢реЛрдзрд╛рдВрд╡рд░ рдЖрдзрд╛рд░рд┐рдд.

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

рд╕рдВрдкреВрд░реНрдг рдкрд╛рдпрд╛рднреВрдд рд╕реБрд╡рд┐рдзрд╛ рддреИрдирд╛рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЖрдореНрд╣реА рджреЛрди рдкрд░реНрдпрд╛рдпрд╛рдВрдЪрд╛ рд╡рд┐рдЪрд╛рд░ рдХрд░реВ:

  • рдореЕрдиреНрдпреБрдЕрд▓ - AWS рд╡реНрдпрд╡рд╕реНрдерд╛рдкрди рдХрдиреНрд╕реЛрд▓ рджреНрд╡рд╛рд░реЗ;
  • рдЯреЗрд░рд╛рдлреЙрд░реНрдо рдХреЛрдбрдордзреАрд▓ рдкрд╛рдпрд╛рднреВрдд рд╕реБрд╡рд┐рдзрд╛ рдЖрд│рд╢реА рдСрдЯреЛрдореЗрдЯрд░реНрд╕рд╕рд╛рдареА рдЖрд╣реЗ;

рд╡рд┐рдХрд╕рд┐рдд рдкреНрд░рдгрд╛рд▓реАрдЪреЗ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░

Amazon Kinesis рд╕рд╣ Aviasales API рдПрдХрддреНрд░реАрдХрд░рдг рдЖрдгрд┐ рд╕рд░реНрд╡реНрд╣рд░рд▓реЗрд╕ рд╕рд╛рдзреЗрдкрдгрд╛
рд╡рд╛рдкрд░рд▓реЗрд▓реЗ рдШрдЯрдХ:

  • Aviasales API тАФ рдпрд╛ API рджреНрд╡рд╛рд░реЗ рдкрд░рдд рдХреЗрд▓реЗрд▓рд╛ рдбреЗрдЯрд╛ рдкреБрдвреАрд▓ рд╕рд░реНрд╡ рдХрд╛рдорд╛рдВрд╕рд╛рдареА рд╡рд╛рдкрд░рд▓рд╛ рдЬрд╛рдИрд▓;
  • EC2 рдирд┐рд░реНрдорд╛рддрд╛ рдЙрджрд╛рд╣рд░рдг тАФ рдХреНрд▓рд╛рдЙрдбрдордзреАрд▓ рдПрдХ рдирд┐рдпрдорд┐рдд рд╡реНрд╣рд░реНрдЪреНрдпреБрдЕрд▓ рдорд╢реАрди рдЬреНрдпрд╛рд╡рд░ рдЗрдирдкреБрдЯ рдбреЗрдЯрд╛ рдкреНрд░рд╡рд╛рд╣ рддрдпрд╛рд░ рдХреЗрд▓рд╛ рдЬрд╛рдИрд▓:
    • рдХрд┐рдиреЗрд╕рд┐рд╕ рдПрдЬрдВрдЯ рдорд╢реАрдирд╡рд░ рд╕реНрдерд╛рдирд┐рдХрд░рд┐рддреНрдпрд╛ рд╕реНрдерд╛рдкрд┐рдд рдХреЗрд▓реЗрд▓рд╛ Java рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдЖрд╣реЗ рдЬреЛ Kinesis (Kinesis Data Streams рдХрд┐рдВрд╡рд╛ Kinesis Firehose) рд▓рд╛ рдбреЗрдЯрд╛ рдЧреЛрд│рд╛ рдХрд░рдгреНрдпрд╛рдЪрд╛ рдЖрдгрд┐ рдкрд╛рдард╡рдгреНрдпрд╛рдЪрд╛ рдПрдХ рд╕реЛрдкрд╛ рдорд╛рд░реНрдЧ рдкреНрд░рджрд╛рди рдХрд░рддреЛ. рдПрдЬрдВрдЯ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд┐рд░реНрджреЗрд╢рд┐рдХреЗрддреАрд▓ рдлрд╛рдпрд▓реАрдВрдЪреНрдпрд╛ рд╕рдВрдЪрд╛рдЪреЗ рд╕рддрдд рдирд┐рд░реАрдХреНрд╖рдг рдХрд░рддреЛ рдЖрдгрд┐ рдХрд┐рдиреЗрд╕рд┐рд╕рд▓рд╛ рдирд╡реАрди рдбреЗрдЯрд╛ рдкрд╛рдард╡рддреЛ;
    • API рдХреЙрд▓рд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯ тАФ рдПрдХ рдкрд╛рдпрдерди рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЬреА API рд▓рд╛ рд╡рд┐рдирдВрддреА рдХрд░рддреЗ рдЖрдгрд┐ рдкреНрд░рддрд┐рд╕рд╛рдж рдПрдХрд╛ рдлреЛрд▓реНрдбрд░рдордзреНрдпреЗ рдареЗрд╡рддреЗ рдЬреНрдпрд╛рдЪреЗ рдирд┐рд░реАрдХреНрд╖рдг рдХрд┐рдиреЗрд╕рд┐рд╕ рдПрдЬрдВрдЯрджреНрд╡рд╛рд░реЗ рдХреЗрд▓реЗ рдЬрд╛рддреЗ;
  • Kinesis рдбреЗрдЯрд╛ рдкреНрд░рд╡рд╛рд╣ тАФ рд╡рд┐рд╕реНрддреГрдд рд╕реНрдХреЗрд▓рд┐рдВрдЧ рдХреНрд╖рдорддрд╛рдВрд╕рд╣ рд░рд┐рдЕрд▓-рдЯрд╛рдЗрдо рдбреЗрдЯрд╛ рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рд╕реЗрд╡рд╛;
  • Kinesis рд╡рд┐рд╢реНрд▓реЗрд╖рдг рд╣реА рдПрдХ рд╕рд░реНрд╡реНрд╣рд░рд▓реЗрд╕ рд╕реЗрд╡рд╛ рдЖрд╣реЗ рдЬреА рд░рд┐рдЕрд▓ рдЯрд╛рдЗрдордордзреНрдпреЗ рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдбреЗрдЯрд╛рдЪреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рд╕реБрд▓рдн рдХрд░рддреЗ. Amazon Kinesis Data Analytics рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╕рдВрд╕рд╛рдзрдиреЗ рдХреЙрдиреНрдлрд┐рдЧрд░ рдХрд░рддреЗ рдЖрдгрд┐ рдпреЗрдгрд╛рд░реНтАНрдпрд╛ рдбреЗрдЯрд╛рдЪрд╛ рдХреЛрдгрддрд╛рд╣реА рдЦрдВрдб рд╣рд╛рддрд╛рд│рдгреНрдпрд╛рд╕рд╛рдареА рд╕реНрд╡рдпрдВрдЪрд▓рд┐рддрдкрдгреЗ рд╕реНрдХреЗрд▓ рдХрд░рддреЗ;
  • рдПрдбрдмреНрд▓реНрдпреВрдПрд╕ рд▓рдВрдмрдбрд╛ тАФ рдПрдХ рд╕реЗрд╡рд╛ рдЬреА рддреБрдореНрд╣рд╛рд▓рд╛ рд╕рд░реНрд╡реНрд╣рд░рдЪрд╛ рдмреЕрдХрдЕрдк рди рдШреЗрддрд╛ рдХрд┐рдВрд╡рд╛ рд╕реЗрдЯ рдЕрдк рди рдХрд░рддрд╛ рдХреЛрдб рдЪрд╛рд▓рд╡рдгреНрдпрд╛рдЪреА рдкрд░рд╡рд╛рдирдЧреА рджреЗрддреЗ. рдкреНрд░рддреНрдпреЗрдХ рдХреЙрд▓рд╕рд╛рдареА рд╕рд░реНрд╡ рд╕рдВрдЧрдгрдХреАрдп рд╢рдХреНрддреА рд╕реНрд╡рдпрдВрдЪрд▓рд┐рддрдкрдгреЗ рдореЛрдЬрд▓реА рдЬрд╛рддреЗ;
  • рдЕтАНреЕрдореЗрдЭреЙрди рдбрд╛рдпрдирд╛рдореЛрдбреАрдмреА - рдХреА-рд╡реНрд╣реЕрд▓реНрдпреВ рдЬреЛрдбреНрдпрд╛ рдЖрдгрд┐ рджрд╕реНрддрдРрд╡рдЬрд╛рдВрдЪрд╛ рдбреЗрдЯрд╛рдмреЗрд╕ рдЬреЛ рдХреЛрдгрддреНрдпрд╛рд╣реА рд╕реНрдХреЗрд▓рд╡рд░ рдЪрд╛рд▓рдд рдЕрд╕рддрд╛рдирд╛ 10 рдорд┐рд▓рд┐рд╕реЗрдХрдВрджрд╛рдВрдкреЗрдХреНрд╖рд╛ рдХрдореА рд╡рд┐рд▓рдВрдм рдкреНрд░рджрд╛рди рдХрд░рддреЛ. DynamoDB рд╡рд╛рдкрд░рддрд╛рдирд╛, рддреБрдореНрд╣рд╛рд▓рд╛ рдХреЛрдгрддреНрдпрд╛рд╣реА рд╕рд░реНрд╡реНрд╣рд░рдЪреА рддрд░рддреВрдж, рдкреЕрдЪ рдХрд┐рдВрд╡рд╛ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдгреНрдпрд╛рдЪреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╛рд╣реА. DynamoDB рдЙрдкрд▓рдмреНрдз рд╕рдВрд╕рд╛рдзрдирд╛рдВрдЪреЗ рдкреНрд░рдорд╛рдг рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЖрдгрд┐ рдЙрдЪреНрдЪ рдХрд╛рд░реНрдпрдкреНрд░рджрд░реНрд╢рди рд░рд╛рдЦрдгреНрдпрд╛рд╕рд╛рдареА рдЖрдкреЛрдЖрдк рд╕рд╛рд░рдгреНрдпрд╛рдВрдЪреЗ рд╕реНрдХреЗрд▓ рдХрд░рддреЗ. рд╕рд┐рд╕реНрдЯрдо рдкреНрд░рд╢рд╛рд╕рдирд╛рдЪреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╛рд╣реА;
  • рдНрдореЗрдЭреЙрди SNS - рдкреНрд░рдХрд╛рд╢рдХ-рд╕рджрд╕реНрдпрддрд╛ (рдкрдм/рд╕рдм) рдореЙрдбреЗрд▓рдЪрд╛ рд╡рд╛рдкрд░ рдХрд░реВрди рд╕рдВрджреЗрд╢ рдкрд╛рдард╡рдгреНтАНрдпрд╛рд╕рд╛рдареА рдПрдХ рдкреВрд░реНрдгрддрдГ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрд┐рдд рд╕реЗрд╡рд╛, рдЬрд┐рдЪреНтАНрдпрд╛ рдорджрддреАрдиреЗ рддреБрдореНрд╣реА рдорд╛рдпрдХреНрд░реЛрд╕рд░реНрд╡реНрд╣рд┐рд╕реЗрд╕, рд╡рд┐рддрд░рд┐рдд рд╕рд┐рд╕реНтАНрдЯрдо рдЖрдгрд┐ рд╕рд░реНрд╡реНрд╣рд░рд▓реЗрд╕ рдЕреЕрдкреНрд▓рд┐рдХреЗрд╢рди рд╡реЗрдЧрд│реЗ рдХрд░реВ рд╢рдХрддрд╛. рдореЛрдмрд╛рдЗрд▓ рдкреБрд╢ рд╕реВрдЪрдирд╛, рдПрд╕рдПрдордПрд╕ рд╕рдВрджреЗрд╢ рдЖрдгрд┐ рдИрдореЗрд▓рджреНрд╡рд╛рд░реЗ рдЕрдВрддрд┐рдо рд╡рд╛рдкрд░рдХрд░реНрддреНрдпрд╛рдВрдирд╛ рдорд╛рд╣рд┐рддреА рдкрд╛рдард╡рдгреНрдпрд╛рд╕рд╛рдареА 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 рджрд╢рд▓рдХреНрд╖ рдХреНрд╡реЗрд░реА. рдЖрдгрд┐ рджрд░рдорд╣рд╛ рдПрдХ рджрд╢рд▓рдХреНрд╖ рд▓реЕрдореНрдмрдбрд╛ рдлрдВрдХреНрд╢рди рдХреЙрд▓.

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

Kinesis рдбреЗрдЯрд╛ рдкреНрд░рд╡рд╛рд╣ рд╕реЗрдЯ рдХрд░рдгреЗ

рдЪрд▓рд╛ Kinesis рдбреЗрдЯрд╛ рд╕реНрдЯреНрд░реАрдо рд╕реЗрд╡реЗрд╡рд░ рдЬрд╛рдК рдЖрдгрд┐ рджреЛрди рдирд╡реАрди рдкреНрд░рд╡рд╛рд╣ рддрдпрд╛рд░ рдХрд░реВ, рдкреНрд░рддреНрдпреЗрдХрд╛рд╕рд╛рдареА рдПрдХ рд╢рд╛рд░реНрдб.

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

рддреБрдордЪреНрдпрд╛ рдкреНрд░рд╡рд╛рд╣рд╛рдд рдЬрд┐рддрдХреЗ рдЬрд╛рд╕реНрдд рд╢рд╛рд░реНрдбреНрд╕, рддрд┐рддрдХреЗ рддреНрдпрд╛рдЪреЗ рдереНрд░реВрдкреБрдЯ рдЬрд╛рд╕реНрдд. рддрддреНрд╡рддрдГ, рдЕрд╢рд╛ рдкреНрд░рдХрд╛рд░реЗ рдкреНрд░рд╡рд╛рд╣ рдореЛрдЬрд▓реЗ рдЬрд╛рддрд╛рдд - рд╢рд╛рд░реНрдбреНрд╕ рдЬреЛрдбреВрди. рдкрд░рдВрддреБ рдЖрдкрд▓реНрдпрд╛рдХрдбреЗ рдЬрд┐рддрдХреЗ рдЕрдзрд┐рдХ рд╢рд╛рд░реНрдбреНрд╕ рдЕрд╕рддреАрд▓ рддрд┐рддрдХреА рдХрд┐рдВрдордд рдЬрд╛рд╕реНрдд. рдкреНрд░рддреНрдпреЗрдХ рд╢рд╛рд░реНрдбрдЪреА рдХрд┐рдВрдордд 1,5 рд╕реЗрдВрдЯ рдкреНрд░рддрд┐ рддрд╛рд╕ рдЖрдгрд┐ рдкреНрд░рддреНрдпреЗрдХ рджрд╢рд▓рдХреНрд╖ PUT рдкреЗрд▓реЛрдб рдпреБрдирд┐рдЯрд╕рд╛рдареА рдЕрддрд┐рд░рд┐рдХреНрдд 1.4 рд╕реЗрдВрдЯ.

рдирд╛рд╡рд╛рд╕рд╣ рдПрдХ рдирд╡реАрди рдкреНрд░рд╡рд╛рд╣ рддрдпрд╛рд░ рдХрд░реВрдпрд╛ рд╡рд┐рдорд╛рди_рддрд┐рдХреАрдЯреЗ, 1 рд╢рд╛рд░реНрдб рддреНрдпрд╛рдЪреНрдпрд╛рд╕рд╛рдареА рдкреБрд░реЗрд╕реЗ рдЕрд╕реЗрд▓:

Amazon Kinesis рд╕рд╣ Aviasales API рдПрдХрддреНрд░реАрдХрд░рдг рдЖрдгрд┐ рд╕рд░реНрд╡реНрд╣рд░рд▓реЗрд╕ рд╕рд╛рдзреЗрдкрдгрд╛
рдЖрддрд╛ рдирд╛рд╡рд╛рдЪрд╛ рджреБрд╕рд░рд╛ рдзрд╛рдЧрд╛ рдмрдирд╡реВ рд╡рд┐рд╢реЗрд╖_рдкреНрд░рд╡рд╛рд╣:

Amazon Kinesis рд╕рд╣ Aviasales API рдПрдХрддреНрд░реАрдХрд░рдг рдЖрдгрд┐ рд╕рд░реНрд╡реНрд╣рд░рд▓реЗрд╕ рд╕рд╛рдзреЗрдкрдгрд╛

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

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

рдорд╣рддреНрддреНрд╡рд╛рдЪреА рдЯреАрдк: рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рддреБрдореНрд╣реА рдЗрдореЗрдЬ рд╡рд╛рдкрд░рд╛рд╡реА - Amazon Linux AMI 2018.03.0, рддреНрдпрд╛рдд Kinesis Agent рд▓рд╛рдБрдЪ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдХрдореА рд╕реЗрдЯрд┐рдВрдЧреНрдЬ рдЖрд╣реЗрдд.

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 рдПрдХрддреНрд░реАрдХрд░рдг рдЖрдгрд┐ рд╕рд░реНрд╡реНрд╣рд░рд▓реЗрд╕ рд╕рд╛рдзреЗрдкрдгрд╛
рдХрд┐рдиреЗрд╕рд┐рд╕ рдбреЗрдЯрд╛ рдЕреЕрдирд╛рд▓рд┐рдЯрд┐рдХреНрд╕ рддреБрдореНрд╣рд╛рд▓рд╛ рдПрд╕рдХреНрдпреВрдПрд▓ рднрд╛рд╖рд╛ рд╡рд╛рдкрд░реВрди рдХрд┐рдиреЗрд╕рд┐рд╕ рд╕реНрдЯреНрд░реАрдордордзреВрди рд░рд┐рдЕрд▓-рдЯрд╛рдЗрдо рдбреЗрдЯрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдгреЗ рдХрд░рдгреНрдпрд╛рдЪреА рдкрд░рд╡рд╛рдирдЧреА рджреЗрддреЗ. рд╣реА рдПрдХ рдкреВрд░реНрдгрдкрдгреЗ рдСрдЯреЛрд╕реНрдХреЗрд▓рд┐рдВрдЧ рд╕реЗрд╡рд╛ рдЖрд╣реЗ (рдХрд╛рдпрдиреЗрд╕рд┐рд╕ рд╕реНрдЯреНрд░реАрдореНрд╕рдЪреНрдпрд╛ рд╡рд┐рдкрд░реАрдд) рдЬреА:

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

рд╣реА рд╕реНрд╡рд╕реНрдд рд╕реЗрд╡рд╛ рдирд╛рд╣реА - 0.11 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 рдПрдХрддреНрд░реАрдХрд░рдг рдЖрдгрд┐ рд╕рд░реНрд╡реНрд╣рд░рд▓реЗрд╕ рд╕рд╛рдзреЗрдкрдгрд╛
рдПрд╕рдХреНрдпреВрдПрд▓ рдПрдбрд┐рдЯрд░ рд╡рд┐рдВрдбреЛрдордзреНрдпреЗ рдЦрд╛рд▓реАрд▓ рд╕реЛрдкреА рдХреНрд╡реЗрд░реА рдШрд╛рд▓рд╛ рдЖрдгрд┐ рд╕реЗрд╡реНрд╣ рдЖрдгрд┐ рд░рди рдПрд╕рдХреНрдпреВрдПрд▓ рд╡рд░ рдХреНрд▓рд┐рдХ рдХрд░рд╛:

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 рдордзреНрдпреЗ рддреНрдпрд╛рдЪ рдирд╛рд╡рд╛рдиреЗ рдПрдХ рдЯреЗрдмрд▓ рддрдпрд╛рд░ рдХрд░реВрдпрд╛. рдЖрдореНрд╣реА рдкреНрд░рд╛рдердорд┐рдХ рдХреА рдореНрд╣рдгреВрди рд░реЗрдХреЙрд░реНрдб_рдЖрдпрдбреА рд╡рд╛рдкрд░реВ:

Amazon Kinesis рд╕рд╣ Aviasales API рдПрдХрддреНрд░реАрдХрд░рдг рдЖрдгрд┐ рд╕рд░реНрд╡реНрд╣рд░рд▓реЗрд╕ рд╕рд╛рдзреЗрдкрдгрд╛

рд▓реЕрдореНрдмрдбрд╛ рдлрдВрдХреНрд╢рди рдХрд▓реЗрдХреНрдЯрд░ рддрдпрд╛рд░ рдХрд░рдгреЗ

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

рдХрд▓реЗрдХреНрдЯрд░ рд▓реЕрдореНрдмрдбрд╛ рдлрдВрдХреНрд╢рдирд╕рд╛рдареА IAM рднреВрдорд┐рдХрд╛ рддрдпрд╛рд░ рдХрд░рдгреЗ
рдкреНрд░рдердо, Lambda-TicketsProcessingRole рдирд╛рд╡рд╛рдЪреНрдпрд╛ рд▓реЕрдореНрдмрдбрд╛рд╕рд╛рдареА рдПрдХ рдирд╡реАрди IAM рднреВрдорд┐рдХрд╛ рддрдпрд╛рд░ рдХрд░реВрдпрд╛:

Amazon Kinesis рд╕рд╣ Aviasales API рдПрдХрддреНрд░реАрдХрд░рдг рдЖрдгрд┐ рд╕рд░реНрд╡реНрд╣рд░рд▓реЗрд╕ рд╕рд╛рдзреЗрдкрдгрд╛
рдЪрд╛рдЪрдгреА рдЙрджрд╛рд╣рд░рдгрд╛рд╕рд╛рдареА, рдЦрд╛рд▓реАрд▓ рдЪрд┐рддреНрд░рд╛рдд рджрд╛рдЦрд╡рд▓реНрдпрд╛рдкреНрд░рдорд╛рдгреЗ, рдкреВрд░реНрд╡-рдХреЙрдиреНрдлрд┐рдЧрд░ рдХреЗрд▓реЗрд▓реА AmazonKinesisReadOnlyAccess рдЖрдгрд┐ AmazonDynamoDBFullAccess рдзреЛрд░рдгреЗ рдЕрдЧрджреА рдпреЛрдЧреНрдп рдЖрд╣реЗрдд:

Amazon Kinesis рд╕рд╣ Aviasales API рдПрдХрддреНрд░реАрдХрд░рдг рдЖрдгрд┐ рд╕рд░реНрд╡реНрд╣рд░рд▓реЗрд╕ рд╕рд╛рдзреЗрдкрдгрд╛
Amazon Kinesis рд╕рд╣ Aviasales API рдПрдХрддреНрд░реАрдХрд░рдг рдЖрдгрд┐ рд╕рд░реНрд╡реНрд╣рд░рд▓реЗрд╕ рд╕рд╛рдзреЗрдкрдгрд╛

рдЬреЗрд╡реНрд╣рд╛ рдирд╡реАрди рдиреЛрдВрджреА airline_stream рдордзреНрдпреЗ рдкреНрд░рд╡реЗрд╢ рдХрд░рддрд╛рдд рддреЗрд╡реНрд╣рд╛ рд╣рд╛ lambda Kinesis рдЪреНрдпрд╛ рдЯреНрд░рд┐рдЧрд░рджреНрд╡рд╛рд░реЗ рд▓реЙрдиреНрдЪ рдХреЗрд▓рд╛ рдЬрд╛рд╡рд╛, рдореНрд╣рдгреВрди рдЖрдореНрд╣рд╛рд▓рд╛ рдПрдХ рдирд╡реАрди рдЯреНрд░рд┐рдЧрд░ рдЬреЛрдбрдгреНрдпрд╛рдЪреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЖрд╣реЗ:

Amazon Kinesis рд╕рд╣ Aviasales API рдПрдХрддреНрд░реАрдХрд░рдг рдЖрдгрд┐ рд╕рд░реНрд╡реНрд╣рд░рд▓реЗрд╕ рд╕рд╛рдзреЗрдкрдгрд╛
Amazon Kinesis рд╕рд╣ Aviasales API рдПрдХрддреНрд░реАрдХрд░рдг рдЖрдгрд┐ рд╕рд░реНрд╡реНрд╣рд░рд▓реЗрд╕ рд╕рд╛рдзреЗрдкрдгрд╛
рдХреЛрдб рдШрд╛рд▓рдгреЗ рдЖрдгрд┐ рд▓реЕрдореНрдмрдбрд╛ рдЬрддрди рдХрд░рдгреЗ рдмрд╛рдХреА рдЖрд╣реЗ.

"""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 рд▓рд╛ рд╕реВрдЪрдирд╛ рдкрд╛рдард╡реЗрд▓, рддреНрдпрд╛рдЪ рдкреНрд░рдХрд╛рд░реЗ рддрдпрд╛рд░ рдХреЗрд▓реЗ рдЖрд╣реЗ. рдореНрд╣рдгреВрди, рдпрд╛ lambda рд▓рд╛ Kinesis рд╡рд░реВрди рд╡рд╛рдЪрдгреНрдпрд╛рд╕рд╛рдареА рдЖрдгрд┐ рджрд┐рд▓реЗрд▓реНрдпрд╛ SNS рд╡рд┐рд╖рдпрд╛рд╡рд░ рд╕рдВрджреЗрд╢ рдкрд╛рдард╡рдгреНрдпрд╛рдЪрд╛ рдкреНрд░рд╡реЗрд╢ рдЕрд╕рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ, рдЬреЗ рдирдВрддрд░ SNS рд╕реЗрд╡реЗрджреНрд╡рд╛рд░реЗ рдпрд╛ рд╡рд┐рд╖рдпрд╛рдЪреНрдпрд╛ рд╕рд░реНрд╡ рд╕рджрд╕реНрдпрд╛рдВрдирд╛ (рдИрдореЗрд▓, рдПрд╕рдПрдордПрд╕, рдЗ.) рдкрд╛рдард╡рд▓реЗ рдЬрд╛рдИрд▓.

IAM рднреВрдорд┐рдХрд╛ рддрдпрд╛рд░ рдХрд░рдгреЗ
рдкреНрд░рдердо, рдЖрдореНрд╣реА рдпрд╛ рд▓реЕрдореНрдмрдбрд╛рд╕рд╛рдареА IAM рднреВрдорд┐рдХрд╛ Lambda-KinesisAlarm рддрдпрд╛рд░ рдХрд░рддреЛ рдЖрдгрд┐ рдирдВрддрд░ рддрдпрд╛рд░ рд╣реЛрдд рдЕрд╕рд▓реЗрд▓реНрдпрд╛ рдЕрд▓рд╛рд░реНрдо_рдиреЛрдЯрд┐рдлрд╛рдпрд░рд▓рд╛ рд╣реА рднреВрдорд┐рдХрд╛ рдирд┐рдпреБрдХреНрдд рдХрд░рддреЛ:

Amazon Kinesis рд╕рд╣ Aviasales API рдПрдХрддреНрд░реАрдХрд░рдг рдЖрдгрд┐ рд╕рд░реНрд╡реНрд╣рд░рд▓реЗрд╕ рд╕рд╛рдзреЗрдкрдгрд╛
Amazon Kinesis рд╕рд╣ Aviasales API рдПрдХрддреНрд░реАрдХрд░рдг рдЖрдгрд┐ рд╕рд░реНрд╡реНрд╣рд░рд▓реЗрд╕ рд╕рд╛рдзреЗрдкрдгрд╛

рд╕реНрдкреЗрд╢рд▓_рд╕реНрдЯреНрд░реАрдордордзреНрдпреЗ рдкреНрд░рд╡реЗрд╢ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдпрд╛ рд▓реЕрдореНрдмрдбрд╛рдиреЗ рдирд╡реАрди рд░реЗрдХреЙрд░реНрдбрд╕рд╛рдареА рдЯреНрд░рд┐рдЧрд░рд╡рд░ рдХрд╛рд░реНрдп рдХреЗрд▓реЗ рдкрд╛рд╣рд┐рдЬреЗ, рдореНрд╣рдгреВрди рдЖрдореНрд╣реА рдХрд▓реЗрдХреНрдЯрд░ рд▓реЕрдореНрдмрдбрд╛рд╕рд╛рдареА рдЬрд╕реЗ рдХреЗрд▓реЗ рддрд╕реЗ рддреБрдореНрд╣рд╛рд▓рд╛ рдЯреНрд░рд┐рдЧрд░ рдХреЙрдиреНрдлрд┐рдЧрд░ рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ.

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

Amazon Kinesis рд╕рд╣ Aviasales API рдПрдХрддреНрд░реАрдХрд░рдг рдЖрдгрд┐ рд╕рд░реНрд╡реНрд╣рд░рд▓реЗрд╕ рд╕рд╛рдзреЗрдкрдгрд╛
рдЖрдгрд┐ рд▓реЕрдореНрдмрдбрд╛ рдХреЛрдб рдШрд╛рд▓рд╛, рд╣реЗ рдЕрдЬрд┐рдмрд╛рдд рдХреНрд▓рд┐рд╖реНрдЯ рдирд╛рд╣реА:

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

рдЕрд╕реЗ рджрд┐рд╕рддреЗ рдХреА рдпреЗрдереЗрдЪ рдореЕрдиреНрдпреБрдЕрд▓ рд╕рд┐рд╕реНрдЯрдо рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рдкреВрд░реНрдг рдЭрд╛рд▓реЗ рдЖрд╣реЗ. рдЖрдореНрд╣реА рд╕рд░реНрд╡ рдХрд╛рд╣реА рдпреЛрдЧреНрдпрд░рд┐рддреАрдиреЗ рдХреЙрдиреНрдлрд┐рдЧрд░ рдХреЗрд▓реЗ рдЖрд╣реЗ рдпрд╛рдЪреА рдЪрд╛рдЪрдгреА рдШреЗрдгреЗ рдЖрдгрд┐ рдЦрд╛рддреНрд░реА рдХрд░рдгреЗ рдмрд╛рдХреА рдЖрд╣реЗ.

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

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

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

рдЖрдкрдг рд╡рд┐рддрд░рдг рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реВ рд╢рдХрддрд╛ рдпреЗрдереВрди. рд╕рд░реНрд╡ рдЯреЗрд░рд╛рдлреЙрд░реНрдо рдХреНрд╖рдорддрд╛рдВрдЪреЗ рддрдкрд╢реАрд▓рд╡рд╛рд░ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдпрд╛ рд▓реЗрдЦрд╛рдЪреНрдпрд╛ рд╡реНрдпрд╛рдкреНрддреАрдЪреНрдпрд╛ рдкрд▓реАрдХрдбреЗ рдЖрд╣реЗ, рдореНрд╣рдгреВрди рдЖрдореНрд╣реА рд╕реНрд╡рддрдГрд▓рд╛ рдореБрдЦреНрдп рдореБрджреНрджреНрдпрд╛рдВрдкреБрд░рддреЗ рдорд░реНрдпрд╛рджрд┐рдд рдХрд░реВ.

рдХрд╕реЗ рд╕реБрд░реВ рдХрд░рд╛рд╡реЗ

рдкреНрд░рдХрд▓реНрдкрд╛рдЪрд╛ рд╕рдВрдкреВрд░реНрдг рдХреЛрдб рдЖрд╣реЗ рдорд╛рдЭреНрдпрд╛ рднрд╛рдВрдбрд╛рд░рд╛рдд. рдЖрдореНрд╣реА рд╕реНрд╡рддрдГрд╕рд╛рдареА рднрд╛рдВрдбрд╛рд░ рдХреНрд▓реЛрди рдХрд░рддреЛ. рд╕реБрд░реВ рдХрд░рдгреНрдпрд╛рдкреВрд░реНрд╡реА, рддреБрдореНрд╣реА AWS CLI рд╕реНрдерд╛рдкрд┐рдд рдЖрдгрд┐ рдХреЙрдиреНрдлрд┐рдЧрд░ рдХреЗрд▓реЗ рдЕрд╕рд▓реНрдпрд╛рдЪреА рдЦрд╛рддреНрд░реА рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ, рдХрд╛рд░рдг... рдЯреЗрд░рд╛рдлреЙрд░реНрдо ~/.aws/credentials рдлрд╛рдЗрд▓рдордзреНрдпреЗ рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓ рд╢реЛрдзреЗрд▓.

рдЯреЗрд░рд╛рдлреЙрд░реНрдо рд╕рдзреНрдпрд╛ рдХреНрд▓рд╛рдЙрдбрдордзреНрдпреЗ рдЖрдордЪреНрдпрд╛рд╕рд╛рдареА рдХрд╛рдп рддрдпрд╛рд░ рдХрд░рдд рдЖрд╣реЗ рд╣реЗ рдкрд╛рд╣рдгреНрдпрд╛рд╕рд╛рдареА рд╕рдВрдкреВрд░реНрдг рдкрд╛рдпрд╛рднреВрдд рд╕реБрд╡рд┐рдзрд╛ рддреИрдирд╛рдд рдХрд░рдгреНрдпрд╛рдкреВрд░реНрд╡реА рдкреНрд▓реЕрди рдХрдорд╛рдВрдб рдЪрд╛рд▓рд╡рдгреЗ рд╣рд╛ рдПрдХ рдЪрд╛рдВрдЧрд▓рд╛ рд╕рд░рд╛рд╡ рдЖрд╣реЗ:

terraform.exe plan

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

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

terraform.exe apply

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

рдЯреЗрд░рд╛рдлреЙрд░реНрдо рдХреЛрдбрджреНрд╡рд╛рд░реЗ рд╕рд░реНрд╡ рд╕рдВрд╕рд╛рдзрдиреЗ рдпрд╢рд╕реНрд╡реАрд░рд┐рддреНрдпрд╛ рддрдпрд╛рд░ рдХреЗрд▓реНрдпрд╛рд╡рд░, рддреБрдореНрд╣рд╛рд▓рд╛ рдХрд┐рдиреЗрд╕рд┐рд╕ рдЕреЕрдирд╛рд▓рд┐рдЯрд┐рдХреНрд╕ рдНрдкреНрд▓рд┐рдХреЗрд╢рдирдЪреНрдпрд╛ рддрдкрд╢реАрд▓рд╛рдВрдордзреНрдпреЗ рдЬрд╛рдгреНрдпрд╛рдЪреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЖрд╣реЗ (рджреБрд░реНрджреИрд╡рд╛рдиреЗ, рдХреЛрдбрдордзреВрди рд╣реЗ рдХрд╕реЗ рдХрд░рд╛рдпрдЪреЗ рддреЗ рдорд▓рд╛ рд╕рд╛рдкрдбрд▓реЗ рдирд╛рд╣реА).

рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд▓рд╛рдБрдЪ рдХрд░рд╛:

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 рд╡рд░ рдЖрдзрд╛рд░рд┐рдд рдСрдирд▓рд╛рдЗрди рдбреЗрдЯрд╛ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рдд рдЖрд▓реА. рдХрд┐рдиреЗрд╕рд┐рд╕ рдбреЗрдЯрд╛ рд╕реНрдЯреНрд░реАрдореНрд╕ рдЖрдгрд┐ рд░реАрдЕрд▓-рдЯрд╛рдЗрдо рдЕреЕрдирд╛рд▓рд┐рдЯрд┐рдХреНрд╕ рдХрд┐рдиреЗрд╕рд┐рд╕ рдЕреЕрдирд╛рд▓рд┐рдЯрд┐рдХреНрд╕рдЪреНрдпрд╛ рд╕рдВрдпреЛрдЧрд╛рдиреЗ рдПрд╕рдХреНрдпреВрдПрд▓ рдХрдорд╛рдВрдбреНрд╕ рд╡рд╛рдкрд░реВрди рдХрд┐рдиреЗрд╕рд┐рд╕ рдПрдЬрдВрдЯ рд╡рд╛рдкрд░рдгреНрдпрд╛рдЪреЗ рдкрд░реНрдпрд╛рдп, рддрд╕реЗрдЪ рдЕреЕрдореЗрдЭреЙрди рдХрд┐рдиреЗрд╕рд┐рд╕рдЪрд╛ рдЗрддрд░ AWS рд╕реЗрд╡рд╛рдВрд╕рд╣ рдкрд░рд╕реНрдкрд░рд╕рдВрд╡рд╛рджрд╛рдЪрд╛ рд╡рд┐рдЪрд╛рд░ рдХрд░рдгреНрдпрд╛рдд рдЖрд▓рд╛.

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

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

рд▓реЗрдЦрд╛рд╡рд░ рдЪрд░реНрдЪрд╛ рдХрд░рдгреНрдпрд╛рдд рдорд▓рд╛ рдЖрдирдВрдж рдЭрд╛рд▓рд╛, рдореА рддреБрдордЪреНрдпрд╛ рдЯрд┐рдкреНрдкрдгреНрдпрд╛рдВрд╕рд╛рдареА рдЙрддреНрд╕реБрдХ рдЖрд╣реЗ. рдорд▓рд╛ рд╡рд┐рдзрд╛рдпрдХ рдЯреАрдХреЗрдЪреА рдЕрдкреЗрдХреНрд╖рд╛ рдЖрд╣реЗ.

рдореА рддреБрдореНрд╣рд╛рд▓рд╛ рдпрд╢ рдЗрдЪреНрдЫрд┐рддреЛ!

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

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╛