Amazon Kinesis рдФрд░ рд╕рд░реНрд╡рд░ рд░рд╣рд┐рдд рд╕рд╛рджрдЧреА рдХреЗ рд╕рд╛рде Aviasales рдПрдкреАрдЖрдИ рдПрдХреАрдХрд░рдг

рд╣реЗрд▓реЛ, рд╣реЗрдмреНрд░!

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

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

рдХрдЯ рдХреЗ рддрд╣рдд рд╕рднреА рд╡рд┐рд╡рд░рдг! рдЬрд╛рдУ!



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


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

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

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

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

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

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



рдкреНрд░рдпреБрдХреНрдд рдШрдЯрдХ:

  • Aviasales API - рдЗрд╕ API рджреНрд╡рд╛рд░рд╛ рджрд┐рдП рдЧрдП рдбреЗрдЯрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдмрд╛рдж рдХреЗ рд╕рднреА рдХрд╛рдореЛрдВ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛;
  • EC2 рдирд┐рд░реНрдорд╛рддрд╛ рдЙрджрд╛рд╣рд░рдг - рдХреНрд▓рд╛рдЙрдб рдореЗрдВ рдПрдХ рдирд┐рдпрдорд┐рдд рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рдЬрд┐рд╕ рдкрд░ рдЗрдирдкреБрдЯ рдбреЗрдЯрд╛ рд╕реНрдЯреНрд░реАрдо рдЙрддреНрдкрдиреНрди рд╣реЛрдЧреА:

    • Kinesis Agent рдПрдХ рд╕реНрдерд╛рдиреАрдп рд░реВрдк рд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдЬрд╛рд╡рд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╣реИ рдЬреЛ Kinesis (Kinesis Data Streams рдпрд╛ Kinesis Firehose) рдХреЛ рдбреЗрдЯрд╛ рдПрдХрддреНрд░ рдХрд░рдиреЗ рдФрд░ рднреЗрдЬрдиреЗ рдХрд╛ рдПрдХ рд╕рд░рд▓ рддрд░реАрдХрд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдПрдЬреЗрдВрдЯ рд▓рдЧрд╛рддрд╛рд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдУрдВ рдореЗрдВ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рдПрдХ рд╕реЗрдЯ рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХрд░рддрд╛ рд╣реИ рдФрд░ рдХрд┐рдирд┐рд╕ рдХреЛ рдирдпрд╛ рдбреЗрдЯрд╛ рднреЗрдЬрддрд╛ рд╣реИ;
    • рдХреЙрд▓рд░ рдПрдкреАрдЖрдИ рд╕реНрдХреНрд░рд┐рдкреНрдЯ - рдПрдХ рдкрд╛рдпрдерди рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЬреЛ рдПрдкреАрдЖрдИ рдЕрдиреБрд░реЛрдз рдХрд░рддреА рд╣реИ рдФрд░ рдПрдХ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдбрд╛рд▓рддреА рд╣реИ рдЬреЛ рдХрд┐рдиреЗрд╕рд┐рд╕ рдПрдЬреЗрдВрдЯ рдореЙрдирд┐рдЯрд░ рдХрд░рддрд╛ рд╣реИ;
  • Kinesis Data Streams тАФ ;
  • Kinesis Analytics тАФ , . Amazon Kinesis Data Analytics ;
  • AWS Lambda тАФ , . ;
  • Amazon DynamoDB тАФ ┬лтАС┬╗ , 10 . DynamoDB - , . DynamoDB , . ;
  • Amazon SNS тАФ ┬л тАФ ┬╗ (Pub/Sub), , . SNS push-, SMS- .

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


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

рдЗрд╕рд▓рд┐рдП, рдкрдВрдЬреАрдХрд░рдг рдХрд░реЗрдВ, рдЕрдкрдирд╛ рдЯреЛрдХрди рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВред

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

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

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

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

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

рдКрдкрд░ рджреА рдЧрдИ рдПрдкреАрдЖрдИ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдЙрджрд╛рд╣рд░рдг рд╕реЗрдВрдЯ рдкреАрдЯрд░реНрд╕рдмрд░реНрдЧ рд╕реЗ рдлреБрдХ ... рдУрд╣, рдХреНрдпрд╛ рд╕рдкрдирд╛ рд╣реИ ... рдХрд╛ рдЯрд┐рдХрдЯ рджрд┐рдЦрд╛ рд░рд╣реА рд╣реИ,
рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рдХрдЬрд╝рд╛рди рд╕реЗ рд╣реВрдВ, рдФрд░ рдлреБрдХреЗрдд "рдЕрднреА рд╣рдорд╛рд░реЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рдкрдирд╛ рджреЗрдЦ рд░рд╣рд╛ рд╣реИ", рд╣рдо рд╕реЗрдВрдЯ рдкреАрдЯрд░реНрд╕рдмрд░реНрдЧ рд╕реЗ рдХрдЬрд╝рд╛рди рддрдХ рдХреЗ рдЯрд┐рдХрдЯреЛрдВ рдХреА рддрд▓рд╛рд╢ рдХрд░реЗрдВрдЧреЗред
рдпрд╣ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА AWS рдЦрд╛рддрд╛ рд╣реИред рдореИрдВ рдЗрд╕ рдмрд╛рдд рдкрд░ рд╡рд┐рд╢реЗрд╖ рдзреНрдпрд╛рди рджреЗрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ Kinesis рдФрд░ SMS рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реВрдЪрдирд╛рдПрдВ рднреЗрдЬрдирд╛ рд╡рд╛рд░реНрд╖рд┐рдХ Free Tier (рдореБрдлреНрдд рдЙрдкрдпреЛрдЧ) рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реИ ред рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рдмрд╛рд╡рдЬреВрдж, рдХреБрдЫ рдбреЙрд▓рд░ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реБрдП, рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдкреНрд░рдгрд╛рд▓реА рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдФрд░ рдЗрд╕рдХреЗ рд╕рд╛рде рдЦреЗрд▓рдирд╛ рдХрд╛рдлреА рд╕рдВрднрд╡ рд╣реИред рдФрд░, рдЬрд╝рд╛рд╣рд┐рд░ рд╣реИ, рдЕрдирд╛рд╡рд╢реНрдпрдХ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рд╕рднреА рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдордд рднреВрд▓рдирд╛ред
рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, DynamoDb рдФрд░ lambda рдлрд╝рдВрдХреНрд╢рди рд╣рдорд╛рд░реЗ рд▓рд┐рдП рд╢реЗрдпрд░рд╡реЗрдпрд░ рд╣реЛрдВрдЧреЗ рдпрджрд┐ рдЖрдк рдорд╛рд╕рд┐рдХ рдореБрдХреНрдд рд╕реАрдорд╛ рдХреЗ рднреАрддрд░ рд░рдЦрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдбрд╛рдпрдирдореЛрдбреАрдмреА рдХреЗ рд▓рд┐рдП: 25 рдЬреАрдмреА рд╕реНрдЯреЛрд░реЗрдЬ, 25 рдбрдмреНрд▓реНрдпреВрд╕реАрдпреВ / рдЖрд░рд╕реАрдпреВ рдФрд░ 100 рдорд┐рд▓рд┐рдпрди рдЕрдиреБрд░реЛрдзред рдФрд░ рдПрдХ рд▓рд╛рдЦ рдкреНрд░рддрд┐ рдорд╛рд╣ рд▓реИрдВрдмрдбрд╛ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдмреБрд▓рд╛рддрд╛ рд╣реИред

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


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


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

рд╢рд╛рд░реНрдж рдХреНрдпрд╛ рд╣реИ?
тАФ Amazon Kinesis. 1 / 2 /. 1000 PUT . . , . 2 / 4 / 2000 PUT .

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

рдирд╛рдо рдХреЗ рд╕рд╛рде рдПрдХ рдирдпрд╛ рдзрд╛рдЧрд╛ рдмрдирд╛рдПрдВ рдПрдпрд░рд▓рд╛рдЗрди_рдЯрд┐рдХреНрд╕ , 1 рд╢рд╛рд░реНрдж рдЗрд╕рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛрдЧрд╛:


рдЕрдм special_stream рдирд╛рдордХ рдПрдХ рдФрд░ рд╕реНрдЯреНрд░реАрдо рдмрдирд╛рдПрдВ :


рдирд┐рд░реНрдорд╛рддрд╛ рд╕реЗрдЯрд┐рдВрдЧ


рдХрд┐рд╕реА рдХрд╛рд░реНрдп рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рдирд┐рд░реНрдорд╛рддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ, рдпрд╣ рдПрдХ рдирд┐рдпрдорд┐рдд EC2 рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред рдпрд╣ рдПрдХ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдорд╣рдВрдЧреА рдЖрднрд╛рд╕реА рдорд╢реАрди рд╣реЛрдиреЗ рдХреА рдЬрд░реВрд░рдд рдирд╣реАрдВ рд╣реИ, рд╕реНрдкреЙрдЯ t2.micro рдХрд╛рдлреА рдЙрдкрдпреБрдХреНрдд рд╣реИред

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

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


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

EC2 рдХреЗ рд▓рд┐рдП IAM рд░реЛрд▓реНрд╕ рдмрдирд╛рдирд╛

, , EC2 Permissions:


, : AmazonKinesisFullAccess CloudWatchFullAccess.

- , : EC2-KinesisStreams-FullAccess. , , :


, :


.

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

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


рдПрдХ рдмрд╛рд░ рдЬрдм рдпрд╣ рд░рдирд┐рдВрдЧ рд╕реНрдЯреЗрдЯрд╕ рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЖрдк рдЗрд╕реЗ ssh рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

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

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

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

sudo mkdir /var/log/airline_tickets

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

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

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"]
         }
      ]
    }
  ]
}

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

рд╣рдо рд╕реЗрд╡рд╛ рдХреЛ рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ:

sudo service aws-kinesis-agent restart

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

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

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

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

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

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

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


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

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


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

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

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

sudo ./api_caller.py TOKEN


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

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



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

Kinesis Data Analytics рдХреА рд╕реНрдерд╛рдкрдирд╛


рдЪрд▓реЛ рдкреВрд░реЗ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рдХреЗрдВрджреНрд░реАрдп рдШрдЯрдХ рдкрд░ рдЪрд▓рддреЗ рд╣реИрдВ - Kinesis рдбреЗрдЯрд╛ рдПрдирд╛рд▓рд┐рдЯрд┐рдХреНрд╕ рдореЗрдВ рдПрдХ рдирдпрд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рддреЗ рд╣реИрдВ рдЬрд┐рд╕реЗ kinesis_analytics_a caps_app рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ:


Kinesis Data Analytics SQL рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ Kinesis Streams рд╕реЗ рдбреЗрдЯрд╛ рдХрд╛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдмрдирд╛рддрд╛ рд╣реИред рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдСрдЯреЛ-рд╕реНрдХреЗрд▓реЗрдмрд▓ рд╕реЗрд╡рд╛ рд╣реИ (рдХрд┐рдирд┐рд╕ рд╕реНрдЯреНрд░реАрдореНрд╕ рдХреЗ рд╡рд┐рдкрд░реАрдд), рдЬреЛ:

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

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

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


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


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


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


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


SQL рд╕рдВрдкрд╛рджрдХ рд╡рд┐рдВрдбреЛ рдореЗрдВ, рдРрд╕реА рд╕рд░рд▓ рдХреНрд╡реЗрд░реА рдбрд╛рд▓реЗрдВ рдФрд░ SQL рдХреЛ рд╕рд╣реЗрдЬреЗрдВ рдФрд░ рдЪрд▓рд╛рдПрдБ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ:

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

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

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

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


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


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



SNS рд╡рд┐рд╖рдп рдХреЛ рдмрдирд╛рдирд╛ рдФрд░ рд╕рджрд╕реНрдпрддрд╛ рд▓реЗрдирд╛


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


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


рдбрд╛рдпрдиреЗрдореЛрдбреАрдмреА рдореЗрдВ рдПрдХ рддрд╛рд▓рд┐рдХрд╛ рдмрдирд╛рдирд╛


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


рдПрдХ рд▓рдВрдмреЛрджрд░ рдХрд▓реЗрдХреНрдЯрд░ рдлрд╝рдВрдХреНрд╢рди рдмрдирд╛рдирд╛


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

рдПрдХ рд▓рдВрдмреЛ рдХрд▓реЗрдХреНрдЯрд░ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП IAM рднреВрдорд┐рдХрд╛ рдмрдирд╛рдирд╛
IAM Lambda-TicketsProcessingRole:


AmazonKinesisReadOnlyAccess AmazonDynamoDBFullAccess, :



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



рдпрд╣ рдХреЛрдб рдбрд╛рд▓рдиреЗ рдФрд░ рдореЗрдордиреЗ рдХреЛ рдмрдЪрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдиреА рд╣реБрдИ рд╣реИред

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

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

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

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

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

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

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

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

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

рдПрдХ рд▓рдВрдмреЛрджрд░ рдлрд╝рдВрдХреНрд╢рди рдиреЛрдЯрд┐рдлрд╝рд╛рдпрд░ рдмрдирд╛рдирд╛


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

IAM рд░реЛрд▓реНрд╕ рдмрдирд╛рдПрдВ
IAM Lambda-KinesisAlarm , alarm_notifier:



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

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


рдФрд░ рд▓реИрдореНрдмреНрдбрд╛ рдХреЛрдб рдбрд╛рд▓реЗрдВ, рдпрд╣ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИ:

import boto3
import base64
import os

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


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

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

Terraform рдХреЛрдб рд╕реЗ рдирд┐рдпреЛрдЬрд┐рдд рдХрд░реЗрдВ


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


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

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

рдХреИрд╕реЗ рд╢реБрд░реВ рдХрд░реЗрдВ


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

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

terraform.exe plan

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


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

terraform.exe apply

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

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

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


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



рдЕрдм рд╕рдм рдХреБрдЫ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИред

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


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

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

sudo ./api_caller.py TOKEN

рдпрд╣ рдЖрдкрдХреЗ рдирдВрдмрд░ рдкрд░ рдПрдХ рдПрд╕рдПрдордПрд╕ рдХрд╛ рдЗрдВрддрдЬрд╛рд░ рдХрд░рддрд╛ рд╣реИ:


рдПрд╕рдПрдордПрд╕ - рд╕рдВрджреЗрд╢ рд▓рдЧрднрдЧ 1 рдорд┐рдирдЯ рдореЗрдВ рдлреЛрди рдкрд░ рдЖрддрд╛ рд╣реИ:


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


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


рдХрд┐рдП рдЧрдП рдХрд╛рд░реНрдп рдХреЗ рджреМрд░рд╛рди, рдЕрдореЗрдЬрд╝реЕрди рдХрд┐рдиреЗрд╕рд┐рд╕ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдПрдХ рдСрдирд▓рд╛рдЗрди рдбреЗрдЯрд╛ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ред рд╣рдордиреЗ Kinesis Data Streams рдХреЗ рд╕рд╛рде Kinesis Agent рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдФрд░ Kinesis Analytics рдХреЗ рд░реАрдпрд▓-рдЯрд╛рдЗрдо рдПрдирд╛рд▓рд┐рдЯрд┐рдХреНрд╕ рдХреЗ рд╕рд╛рде SQL рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд╕рд╛рде-рд╕рд╛рде рдЕрдиреНрдп AWS рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рд╕рд╛рде Amazon Kinesis рдХреА рдмрд╛рддрдЪреАрдд рдХреЗ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреА рдЬрд╛рдВрдЪ рдХреАред

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

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

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

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

All Articles