рд╣реЗрд▓реЛ, рд╣реЗрдмреНрд░!рдХреНрдпрд╛ рдЖрдк рд╣рд╡рд╛рдИ рдЬрд╣рд╛рдЬ рдЙрдбрд╝рд╛рдирд╛ рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВ? рдореБрдЭреЗ рдпрд╣ рдкрд╕рдВрдж рд╣реИ, рд▓реЗрдХрд┐рди рдЖрддреНрдо-рдЕрд▓рдЧрд╛рд╡ рдкрд░ рдореБрдЭреЗ рдПрдХ рдкреНрд░рд╕рд┐рджреНрдз рд╕рдВрд╕рд╛рдзрди - рдПрд╡рд┐рдПрд▓реЗрд╕ рдХреЗ рдПрдпрд░рдлреЗрдпрд░ рдбреЗрдЯрд╛ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдирд╛ рднреА рдкрд╕рдВрдж рд╣реИредрдЖрдЬ рд╣рдо 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 рд╕реЗ рдбреЗрдЯрд╛ рдХрд╛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдмрдирд╛рддрд╛ рд╣реИред рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдСрдЯреЛ-рд╕реНрдХреЗрд▓реЗрдмрд▓ рд╕реЗрд╡рд╛ рд╣реИ (рдХрд┐рдирд┐рд╕ рд╕реНрдЯреНрд░реАрдореНрд╕ рдХреЗ рд╡рд┐рдкрд░реАрдд), рдЬреЛ:- рдЖрдкрдХреЛ рд╕реНрд░реЛрдд рдбреЗрдЯрд╛ рдХреЗ рдкреНрд░рд╢реНрдиреЛрдВ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдирдИ рд╕реНрдЯреНрд░реАрдо (рдЖрдЙрдЯрдкреБрдЯ рд╕реНрдЯреНрд░реАрдо) рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ;
- рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдСрдкрд░реЗрд╢рди (рддреНрд░реБрдЯрд┐ рд╕реНрдЯреНрд░реАрдо) рдХреЗ рджреМрд░рд╛рди рд╣реБрдИ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рд╕реНрдЯреНрд░реАрдо рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ;
- рдпрд╣ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЗрдирдкреБрдЯ рдбреЗрдЯрд╛ рдпреЛрдЬрдирд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ (рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ рддреЛ рдЗрд╕реЗ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ)ред
рдпрд╣ рдПрдХ рдорд╣рдВрдЧреА рд╕реЗрд╡рд╛ рд╣реИ - рдкреНрд░рддрд┐ рдШрдВрдЯреЗ 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 рдкрд░ рдореЗрд░реА рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╣реИ , рдореЗрд░рд╛ рд╕реБрдЭрд╛рд╡ рд╣реИ рдХрд┐ рдЖрдк рдЗрд╕рдХреЗ рд╕рд╛рде рдЦреБрдж рдХреЛ рдкрд░рд┐рдЪрд┐рдд рдХрд░реЗрдВредрдореИрдВ рд▓реЗрдЦ рдкрд░ рдЦреБрд╢реА рдХреЗ рд╕рд╛рде рдЪрд░реНрдЪрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реВрдВ, рдореБрдЭреЗ рдЖрдкрдХреА рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХрд╛ рдЗрдВрддрдЬрд╛рд░ рд╣реИред рдореБрдЭреЗ рд░рдЪрдирд╛рддреНрдордХ рдЖрд▓реЛрдЪрдирд╛ рдХреА рдЙрдореНрдореАрдж рд╣реИредрдЖрдкрдХреА рд╕рдлрд▓рддрд╛ рдХреА рдХрд╛рдордирд╛ рдХрд░рддреЗ рд╣реИ!