เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเป‚เบเบ‡ Aviasales API เบเบฑเบš Amazon Kinesis เปเบฅเบฐเบ„เบงเบฒเบกเบฅเบฝเบšเบ‡เปˆเบฒเบ serverless

Hey Habr!

เป€เบˆเบปเป‰เบฒเบกเบฑเบเบเบปเบ™เบšเบดเบ™เบšเปเปˆ? เบ‚เป‰เบญเบเบฎเบฑเบเบกเบฑเบ™, เปเบ•เปˆเปƒเบ™เบฅเบฐเบซเบงเปˆเบฒเบ‡เบเบฒเบ™เป‚เบ”เบ”เบ”เปˆเบฝเบงเบ•เบปเบ™เป€เบญเบ‡เบ‚เป‰เบญเบเบเปเปˆเบ•เบปเบเบซเบฅเบธเบกเบฎเบฑเบเบเบฑเบšเบเบฒเบ™เบงเบดเป€เบ„เบฒเบฐเบ‚เปเป‰เบกเบนเบ™เบเปˆเบฝเบงเบเบฑเบšเบ›เบตเป‰เบเบปเบ™เบˆเบฒเบเปเบซเบผเปˆเบ‡เบ—เบตเปˆเบกเบตเบŠเบทเปˆเบชเบฝเบ‡เบซเบ™เบถเปˆเบ‡ - Aviasales.

เบกเบทเป‰เบ™เบตเป‰เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบงเบดเป€เบ„เบฒเบฐเบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบ‚เบญเบ‡ Amazon Kinesis, เบชเป‰เบฒเบ‡เบฅเบฐเบšเบปเบšเบเบฒเบ™เบ–เปˆเบฒเบเบ—เบญเบ”เบ”เป‰เบงเบเบเบฒเบ™เบงเบดเป€เบ„เบฒเบฐเปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเปเบ—เป‰เบˆเบดเบ‡, เบ•เบดเบ”เบ•เบฑเป‰เบ‡เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™ Amazon DynamoDB NoSQL เป€เบ›เบฑเบ™เบเบฒเบ™เป€เบเบฑเบšเบฎเบฑเบเบชเบฒเบ‚เปเป‰เบกเบนเบ™เบ•เบปเป‰เบ™เบ•เป, เปเบฅเบฐเบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบเบฒเบ™เปเบˆเป‰เบ‡เป€เบ•เบทเบญเบ™ SMS เบชเปเบฒเบฅเบฑเบšเบ›เบตเป‰เบ—เบตเปˆเบซเบ™เป‰เบฒเบชเบปเบ™เปƒเบˆ.

เบฅเบฒเบเบฅเบฐเบญเบฝเบ”เบ—เบฑเบ‡เปเบปเบ”เปเบกเปˆเบ™เบขเบนเปˆเบžเบฒเบเปƒเบ•เป‰เบเบฒเบ™เบ•เบฑเบ”! เป„เบ›!

เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเป‚เบเบ‡ Aviasales API เบเบฑเบš Amazon Kinesis เปเบฅเบฐเบ„เบงเบฒเบกเบฅเบฝเบšเบ‡เปˆเบฒเบ serverless

เบเบฒเบ™เบ™เปเบฒเบชเบฐเป€เบซเบ™เบต

เบ•เบปเบงเบขเปˆเบฒเบ‡, เบžเบงเบเป€เบฎเบปเบฒเบ•เป‰เบญเบ‡เบเบฒเบ™เบเบฒเบ™เป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡ Aviasales API. เบเบฒเบ™เป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡เบกเบฑเบ™เบ–เบทเบเบชเบฐเบซเบ™เบญเบ‡เปƒเบซเป‰เป‚เบ”เบเบšเปเปˆเป€เบชเบเบ„เปˆเบฒเปเบฅเบฐเบšเปเปˆเบกเบตเบ‚เปเป‰เบˆเปเบฒเบเบฑเบ”; เบ—เปˆเบฒเบ™เบžเบฝเบ‡เปเบ•เปˆเบ•เป‰เบญเบ‡เบเบฒเบ™เบฅเบปเบ‡เบ—เบฐเบšเบฝเบ™เปƒเบ™เบชเปˆเบงเบ™ "เบ™เบฑเบเบžเบฑเบ”เบ—เบฐเบ™เบฒ" เป€เบžเบทเปˆเบญเบฎเบฑเบš token API เบ‚เบญเบ‡เบ—เปˆเบฒเบ™เป€เบžเบทเปˆเบญเป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡เบ‚เปเป‰เบกเบนเบ™.

เบˆเบธเบ”เบ›เบฐเบชเบปเบ‡เบ•เบปเป‰เบ™เบ•เปเบ‚เบญเบ‡เบšเบปเบ”เบ„เบงเบฒเบกเบ™เบตเป‰เปเบกเปˆเบ™เป€เบžเบทเปˆเบญเปƒเบซเป‰เบ„เบงเบฒเบกเป€เบ‚เบปเป‰เบฒเปƒเบˆเบ—เบปเปˆเบงเป„เบ›เบเปˆเบฝเบงเบเบฑเบšเบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เบเบฒเบ™เบ–เปˆเบฒเบเบ—เบญเบ”เบ‚เปเป‰เบกเบนเบ™เปƒเบ™ AWS; เบžเบงเบเป€เบฎเบปเบฒเบžเบดเบˆเบฒเบฅเบฐเบ™เบฒเบงเปˆเบฒเบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเบชเบปเปˆเบ‡เบ„เบทเบ™เป‚เบ”เบ API เบ—เบตเปˆเปƒเบŠเป‰เปเบกเปˆเบ™เบšเปเปˆเบ—เบฑเบ™เบชเบฐเป„เบซเบกเบขเปˆเบฒเบ‡เป€เบ‚เบฑเป‰เบกเบ‡เบงเบ”เปเบฅเบฐเบ–เบทเบเบชเบปเปˆเบ‡เบˆเบฒเบ cache, เป€เบŠเบดเปˆเบ‡เปเบกเปˆเบ™. เบชเป‰เบฒเบ‡เบ‚เบถเป‰เบ™เป‚เบ”เบเบญเบตเบ‡เปƒเบชเปˆเบเบฒเบ™เบ„เบปเป‰เบ™เบซเบฒเป‚เบ”เบเบœเบนเป‰เปƒเบŠเป‰เบ‚เบญเบ‡เป€เบงเบฑเบšเป„เบŠ Aviasales.ru เปเบฅเบฐ Jetradar.com เบชเปเบฒเบฅเบฑเบš 48 เบŠเบปเปˆเบงเป‚เบกเบ‡เบ—เบตเปˆเบœเปˆเบฒเบ™เบกเบฒ.

Kinesis-agent, เบ•เบดเบ”เบ•เบฑเป‰เบ‡เบขเบนเปˆเปƒเบ™เป€เบ„เบทเปˆเบญเบ‡เบœเบฐเบฅเบดเบ”, เบ—เบตเปˆเป„เบ”เป‰เบฎเบฑเบšเบœเปˆเบฒเบ™ API เบˆเบฐเบงเบดเป€เบ„เบฒเบฐเปเบฅเบฐเบชเบปเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™เป„เบ›เบเบฑเบ‡เบเบฐเปเบชเบ—เบตเปˆเบ•เป‰เบญเบ‡เบเบฒเบ™เบœเปˆเบฒเบ™ Kinesis Data Analytics เป‚เบ”เบเบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ”. เบชเบฐเบšเบฑเบšเบ”เบดเบšเบ‚เบญเบ‡เบเบฐเปเบชเบ™เบตเป‰เบˆเบฐเบ–เบทเบเบ‚เบฝเบ™เป‚เบ”เบเบเบปเบ‡เบซเบฒเบฎเป‰เบฒเบ™. เบเบฒเบ™เป€เบเบฑเบšเบฎเบฑเบเบชเบฒเบ‚เปเป‰เบกเบนเบ™เบ”เบดเบšเบ—เบตเปˆเปƒเบŠเป‰เปƒเบ™ DynamoDB เบˆเบฐเบŠเปˆเบงเบเปƒเบซเป‰เบเบฒเบ™เบงเบดเป€เบ„เบฒเบฐเบ•เบปเป‹เบงเบ—เบตเปˆเป€เบฅเบดเบเป€เบŠเบดเปˆเบ‡เบœเปˆเบฒเบ™เป€เบ„เบทเปˆเบญเบ‡เบกเบท BI เป€เบŠเบฑเปˆเบ™ AWS Quick Sight.

เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบžเบดเบˆเบฒเบฅเบฐเบ™เบฒเบชเบญเบ‡เบ—เบฒเบ‡เป€เบฅเบทเบญเบเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เป‚เบ„เบ‡เบชเป‰เบฒเบ‡เบžเบทเป‰เบ™เบ–เบฒเบ™เบ—เบฑเบ‡เบซเบกเบปเบ”:

  • เบ„เบนเปˆเบกเบท - เบœเปˆเบฒเบ™ AWS Management Console;
  • เป‚เบ„เบ‡เบชเป‰เบฒเบ‡เบžเบทเป‰เบ™เบ–เบฒเบ™เบˆเบฒเบเบฅเบฐเบซเบฑเบ” Terraform เปเบกเปˆเบ™เบชเปเบฒเบฅเบฑเบšเป€เบ„เบทเปˆเบญเบ‡เบˆเบฑเบเบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ”เบ‚เบตเป‰เบเบฝเบ”;

เบชเบฐเบ–เบฒเบ›เบฑเบ”เบ•เบฐเบเบฐเบเปเบฒเบ‚เบญเบ‡เบฅเบฐเบšเบปเบšเบเบฒเบ™เบžเบฑเบ”เบ—เบฐเบ™เบฒ

เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเป‚เบเบ‡ Aviasales API เบเบฑเบš Amazon Kinesis เปเบฅเบฐเบ„เบงเบฒเบกเบฅเบฝเบšเบ‡เปˆเบฒเบ serverless
เบญเบปเบ‡โ€‹เบ›เบฐโ€‹เบเบญเบšโ€‹เบ—เบตเปˆโ€‹เบ™เปเบฒโ€‹เปƒเบŠเป‰โ€‹:

  • Aviasales API โ€” เบ‚เปเป‰โ€‹เบกเบนเบ™โ€‹เบ—เบตเปˆโ€‹เบชเบปเปˆเบ‡โ€‹เบ„เบทเบ™โ€‹เป‚เบ”เบ API เบ™เบตเป‰โ€‹เบˆเบฐโ€‹เบ–เบทเบโ€‹เบ™เปเบฒโ€‹เปƒเบŠเป‰โ€‹เบชเปเบฒโ€‹เบฅเบฑเบšโ€‹เบเบฒเบ™โ€‹เป€เบฎเบฑเบ”โ€‹เบงเบฝเบโ€‹เบ•เปเปˆโ€‹เบกเบฒโ€‹เบ—เบฑเบ‡โ€‹เบซเบกเบปเบ”โ€‹;
  • เบ•เบปเบงเบขเปˆเบฒเบ‡เบœเบนเป‰เบœเบฐเบฅเบดเบ” EC2 โ€” เป€เบ„เบทเปˆเบญเบ‡ virtual เบ›เบปเบเบเบฐเบ•เบดเบขเบนเปˆเปƒเบ™เบ„เบฅเบฒเบงเบ—เบตเปˆเบเบฐเปเบชเบ‚เปเป‰เบกเบนเบ™เบ›เป‰เบญเบ™เป€เบ‚เบปเป‰เบฒเบˆเบฐเบ–เบทเบเบœเบฐเบฅเบดเบ”:
    • เบ•เบปเบงเปเบ—เบ™ Kinesis เป€เบ›เบฑเบ™เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™ Java เบ—เบตเปˆเบ•เบดเบ”เบ•เบฑเป‰เบ‡เบขเบนเปˆเปƒเบ™เป€เบ„เบทเปˆเบญเบ‡เบ—เบตเปˆเปƒเบซเป‰เบงเบดเบ—เบตเบ—เบตเปˆเบ‡เปˆเบฒเบเปƒเบ™เบเบฒเบ™เป€เบเบฑเบšเบเปเบฒเปเบฅเบฐเบชเบปเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™เป„เบ›เบซเบฒ Kinesis (Kinesis Data Streams เบซเบผเบท Kinesis Firehose). เบ•เบปเบงเปเบ—เบ™เบ•เบดเบ”เบ•เบฒเบกเบŠเบธเบ”เบ‚เบญเบ‡เป„เบŸเบฅเปŒเบขเบนเปˆเปƒเบ™เป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบตเบ—เบตเปˆเบฅเบฐเบšเบธเป„เบงเป‰เบขเปˆเบฒเบ‡เบ•เปเปˆเป€เบ™เบทเปˆเบญเบ‡เปเบฅเบฐเบชเบปเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™เปƒเบซเบกเปˆเป„เบ›เบซเบฒ Kinesis;
    • API Caller Script โ€” A Python script เบ—เบตเปˆเป€เบฎเบฑเบ”เบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เปเป„เบ›เบซเบฒ API เปเบฅเบฐเบงเบฒเบ‡เบเบฒเบ™เบ•เบญเบšเบชเบฐเบซเบ™เบญเบ‡เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เป‚เบŸเบ™เป€เบ”เบตเบ—เบตเปˆเบ–เบทเบเบเบงเบ”เบชเบญเบšเป‚เบ”เบ Kinesis Agent;
  • Kinesis Data Stream โ€” เบเบฒเบ™โ€‹เบšเปโ€‹เบฅเบดโ€‹เบเบฒเบ™โ€‹เบ™โ€‹เป‰โ€‹เปโ€‹เบฒโ€‹เบ‚เปเป‰โ€‹เบกเบนเบ™โ€‹เบ—เบตเปˆโ€‹เปƒเบŠเป‰โ€‹เป€เบงโ€‹เบฅเบฒโ€‹เบ—เบตเปˆโ€‹เปเบ—เป‰โ€‹เบˆเบดเบ‡โ€‹เบ—เบตเปˆโ€‹เบกเบตโ€‹เบ„เบงเบฒเบกโ€‹เบชเบฒโ€‹เบกเบฒเบ”โ€‹เบ‚เบฐโ€‹เบซเบ™เบฒเบ”โ€‹เบเบงเป‰เบฒเบ‡โ€‹;
  • Kinesis Analytics เป€เบ›เบฑเบ™เบเบฒเบ™เบšเปเบฅเบดเบเบฒเบ™เป€เบŠเบตเบšเป€เบงเบตเบ—เบตเปˆเบ‡เปˆเบฒเบเปƒเบ™เบเบฒเบ™เบงเบดเป€เบ„เบฒเบฐเบ‚เปเป‰เบกเบนเบ™เบเบฒเบ™เบ–เปˆเบฒเบเบ—เบญเบ”เปƒเบ™เป€เบงเบฅเบฒเบˆเบดเบ‡. Amazon Kinesis Data Analytics เบเบณเบ™เบปเบ”เบ„เปˆเบฒเบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™ เปเบฅเบฐเบ›เบฑเบšเบ‚เบฐเปœเบฒเบ”เบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ”เป€เบžเบทเปˆเบญเบˆเบฑเบ”เบเบฒเบ™เบ›เบฐเบฅเบดเบกเบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบ‚เบฒเป€เบ‚เบปเป‰เบฒ;
  • AWS Lambda โ€” เบเบฒเบ™เบšเปเบฅเบดเบเบฒเบ™เบ—เบตเปˆเบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบฅเบฐเบซเบฑเบ”เป‚เบ”เบเบšเปเปˆเบกเบตเบเบฒเบ™เบชเปเบฒเบฎเบญเบ‡เบ‚เปเป‰เบกเบนเบ™เบซเบผเบทเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบ. เบžเบฐเบฅเบฑเบ‡เบ‡เบฒเบ™เบ„เบญเบกเบžเบดเบงเป€เบ•เบตเบ—เบฑเบ‡เบซเบกเบปเบ”เบˆเบฐเบ–เบทเบเบ›เบฑเบšเบ‚เบฐเบซเบ™เบฒเบ”เบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ”เบชเปเบฒเบฅเบฑเบšเปเบ•เปˆเบฅเบฐเบเบฒเบ™เป‚เบ—;
  • Amazon DynamoDB - เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบ‚เบญเบ‡เบ„เบนเปˆเบ„เบต-เบ„เปˆเบฒ เปเบฅเบฐเป€เบญเบเบฐเบชเบฒเบ™เบ—เบตเปˆเบชเบฐเปœเบญเบ‡เป€เบงเบฅเบฒเปเบžเบฑเบเป€เบเบฑเบ”เปœเป‰เบญเบเบเบงเปˆเบฒ 10 เบกเบดเบ™เบฅเบดเบงเบดเบ™เบฒเบ—เบต เป€เบกเบทเปˆเบญเปเบฅเปˆเบ™เบขเบนเปˆเบ—เบธเบเบ‚เบฐเปœเบฒเบ”. เป€เบกเบทเปˆเบญเปƒเบŠเป‰ DynamoDB, เบ—เปˆเบฒเบ™เบšเปเปˆเบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบชเบฐเบซเบ™เบญเบ‡, เปเบเป‰เป„เบ‚, เบซเบผเบทเบˆเบฑเบ”เบเบฒเบ™เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเปƒเบ”เป†. DynamoDB เบ›เบฑเบšเบ•เบฒเบ•เบฐเบฅเบฒเบ‡เบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ”เป€เบžเบทเปˆเบญเบ›เบฑเบšเบ›เบฐเบฅเบดเบกเบฒเบ™เบ‚เบญเบ‡เบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เบ—เบตเปˆเบกเบตเบขเบนเปˆเปเบฅเบฐเบฎเบฑเบเบชเบฒเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเบชเบนเบ‡. เบšเปเปˆเบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบกเบตเบเบฒเบ™เบ„เบธเป‰เบกเบ„เบญเบ‡เบฅเบฐเบšเบปเบš;
  • Amazon SNS - เบเบฒเบ™เบšเปเบฅเบดเบเบฒเบ™เบ—เบตเปˆเบกเบตเบเบฒเบ™เบˆเบฑเบ”เบเบฒเบ™เบขเปˆเบฒเบ‡เป€เบ•เบฑเบกเบ—เบตเปˆเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบชเบปเปˆเบ‡เบ‚เปเป‰เบ„เบงเบฒเบกเป‚เบ”เบเปƒเบŠเป‰เบ•เบปเบงเปเบšเบšเบ‚เบญเบ‡เบœเบนเป‰เบˆเบฑเบ”เบžเบดเบก (Pub/Sub), เป€เบŠเบดเปˆเบ‡เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เปเบเบ microservices, เบฅเบฐเบšเบปเบšเปเบˆเบเบขเบฒเบเปเบฅเบฐเปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™เบ—เบตเปˆเบšเปเปˆเบกเบตเป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบ. SNS เบชเบฒเบกเบฒเบ”เปƒเบŠเป‰เป€เบžเบทเปˆเบญเบชเบปเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™เป„เบ›เบเบฑเบ‡เบœเบนเป‰เปƒเบŠเป‰เบชเบธเบ”เบ—เป‰เบฒเบเบœเปˆเบฒเบ™เบเบฒเบ™เปเบˆเป‰เบ‡เป€เบ•เบทเบญเบ™เบ—เบฒเบ‡เป‚เบ—เบฅเบฐเบชเบฑเบšเบกเบทเบ–เบท, เบ‚เปเป‰เบ„เบงเบฒเบก SMS เปเบฅเบฐเบญเบตเป€เบกเบฅเปŒ.

เบเบฒเบ™เบเบถเบเบญเบปเบšเบฎเบปเบกเป€เบšเบทเป‰เบญเบ‡เบ•เบปเป‰เบ™

เป€เบžเบทเปˆเบญเป€เบฎเบฑเบ”เบ•เบฒเบกเบเบฒเบ™เป„เบซเบผเป€เบ‚เบปเป‰เบฒเบ‚เบญเบ‡เบ‚เปเป‰เบกเบนเบ™, เบ‚เป‰เบญเบเป„เบ”เป‰เบ•เบฑเบ”เบชเบดเบ™เปƒเบˆเปƒเบŠเป‰เบ‚เปเป‰เบกเบนเบ™เบ›เบตเป‰เบชเบฒเบเบเบฒเบ™เบšเบดเบ™เบ—เบตเปˆเบชเบปเปˆเบ‡เบ„เบทเบ™เป‚เบ”เบ Aviasales API. IN เป€เบญเบเบฐเบชเบฒเบ™ เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเบขเปˆเบฒเบ‡เบเบงเป‰เบฒเบ‡เบ‚เบงเบฒเบ‡เบ‚เบญเบ‡เบงเบดเบ—เบตเบเบฒเบ™เบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™, เปƒเบซเป‰เป€เบญเบปเบฒเบซเบ™เบถเปˆเบ‡เปƒเบ™เบ™เบฑเป‰เบ™ - "เบ›เบฐเบ•เบดเบ—เบดเบ™เบฅเบฒเบ„เบฒเบ›เบฐเบˆเปเบฒเป€เบ”เบทเบญเบ™", เป€เบŠเบดเปˆเบ‡เบชเบปเปˆเบ‡เบ„เบทเบ™เบฅเบฒเบ„เบฒเบชเปเบฒเบฅเบฑเบšเปเบ•เปˆเบฅเบฐเบกเบทเป‰เบ‚เบญเบ‡เป€เบ”เบทเบญเบ™, เบˆเบฑเบ”เบเบธเปˆเบกเป‚เบ”เบเบˆเปเบฒเบ™เบงเบ™เบเบฒเบ™เป‚เบญเบ™. เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบšเปเปˆเบฅเบฐเบšเบธเป€เบ”เบทเบญเบ™เบ„เบปเป‰เบ™เบซเบฒเปƒเบ™เบ„เปเบฒเบฎเป‰เบญเบ‡เบ‚เป, เบ‚เปเป‰เบกเบนเบ™เบˆเบฐเบ–เบทเบเบชเบปเปˆเบ‡เบ„เบทเบ™เบชเปเบฒเบฅเบฑเบšเป€เบ”เบทเบญเบ™เบ•เปเปˆเป„เบ›เบ™เบตเป‰.

เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เปƒเบซเป‰เบžเบงเบเป€เบฎเบปเบฒเบฅเบปเบ‡เบ—เบฐเบšเบฝเบ™เปเบฅเบฐเป„เบ”เป‰เบฎเบฑเบš token เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ.

เบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เปเบ•เบปเบงเบขเปˆเบฒเบ‡เปเบกเปˆเบ™เบ‚เป‰เบฒเบ‡เบฅเบธเปˆเบกเบ™เบตเป‰:

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

เบงเบดเบ—เบตเบเบฒเบ™เบ‚เป‰เบฒเบ‡เป€เบ—เบดเบ‡เบ‚เบญเบ‡เบเบฒเบ™เบฎเบฑเบšเบ‚เปเป‰เบกเบนเบ™เบˆเบฒเบ API เป‚เบ”เบเบเบฒเบ™เบฅเบฐเบšเบธ token เปƒเบ™เบ„เปเบฒเบฎเป‰เบญเบ‡เบ‚เปเบˆเบฐเป€เบฎเบฑเบ”เบงเบฝเบ, เปเบ•เปˆเบ‚เป‰เบญเบเบกเบฑเบเบ—เบตเปˆเบˆเบฐเบœเปˆเบฒเบ™ token เบเบฒเบ™เป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡เบœเปˆเบฒเบ™ header, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเปƒเบŠเป‰เบงเบดเบ—เบตเบ™เบตเป‰เปƒเบ™เบชเบฐเบ„เบดเบš 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 เบ‚เป‰เบฒเบ‡เป€เบ—เบดเบ‡เบชเบฐเปเบ”เบ‡เปƒเบซเป‰เป€เบซเบฑเบ™เบ›เบตเป‰เบˆเบฒเบเป€เบŠเบ™เบ›เบตเป€เบ•เบตเบชเบฐเป€เบšเบตเบเป„เบ›เบžเบนเบ... เป‚เบญเป‰, เบเบฑเบ™เบ”เบต...
เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบงเปˆเบฒเบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบกเบฒเบˆเบฒเบ Kazan, เปเบฅเบฐ Phuket เปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™เปเบกเปˆเบ™ "เบžเบฝเบ‡เปเบ•เปˆเบ„เบงเบฒเบกเบเบฑเบ™", เปƒเบซเป‰เบŠเบญเบเบซเบฒเบ›เบตเป‰เบˆเบฒเบ St. Petersburg เป„เบ› Kazan.

เบกเบฑเบ™เบชเบปเบกเบกเบธเบ”เบงเปˆเบฒเบ—เปˆเบฒเบ™เบกเบตเบšเบฑเบ™เบŠเบต AWS เปเบฅเป‰เบง. เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบขเบฒเบเบˆเบฐเป€เบญเบปเบฒเปƒเบˆเปƒเบชเปˆเป€เบ›เบฑเบ™เบžเบดเป€เบชเบ”เปƒเบ™เบ—เบฑเบ™เบ—เบตเบงเปˆเบฒ Kinesis เปเบฅเบฐเบเบฒเบ™เบชเบปเปˆเบ‡เบเบฒเบ™เปเบˆเป‰เบ‡เป€เบ•เบทเบญเบ™เบœเปˆเบฒเบ™ SMS เบšเปเปˆเป„เบ”เป‰เบฅเบงเบกเบขเบนเปˆเปƒเบ™เบ›เบฐเบˆเปเบฒเบ›เบต. Free Tier (เปƒเบŠเป‰เบŸเบฃเบต). เปเบ•เปˆเป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒเบ™เบตเป‰, เบ”เป‰เบงเบเบชเบญเบ‡เบชเบฒเบกเป‚เบ”เบฅเบฒเบขเบนเปˆเปƒเบ™เปƒเบˆ, เบกเบฑเบ™เบเปเปˆเป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰เบ—เบตเปˆเบˆเบฐเบชเป‰เบฒเบ‡เบฅเบฐเบšเบปเบšเบ—เบตเปˆเบชเบฐเป€เบซเบ™เบตเปเบฅเบฐเบซเบผเบตเป‰เบ™เบเบฑเบšเบกเบฑเบ™. เปเบฅเบฐ, เปเบ™เปˆเบ™เบญเบ™, เบขเปˆเบฒเบฅเบทเบกเบฅเบถเบšเบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เบ—เบฑเบ‡เบซเบกเบปเบ”เบซเบผเบฑเบ‡เบˆเบฒเบเบ—เบตเปˆเบžเบงเบเป€เบ‚เบปเบฒเบšเปเปˆเบˆเปเบฒเป€เบ›เบฑเบ™.

เป‚เบŠเบเบ”เบต, เบŸเบฑเบ‡เบŠเบฑเบ™ DynamoDb เปเบฅเบฐ lambda เบˆเบฐเบšเปเปˆเป€เบชเบเบ„เปˆเบฒเบชเปเบฒเบฅเบฑเบšเบžเบงเบเป€เบฎเบปเบฒเบ–เป‰เบฒเบžเบงเบเป€เบฎเบปเบฒเบ•เบญเบšเบชเบฐเบซเบ™เบญเบ‡เบ‚เบญเบšเป€เบ‚เบ”เบˆเปเบฒเบเบฑเบ”เบŸเบฃเบตเบ›เบฐเบˆเปเบฒเป€เบ”เบทเบญเบ™เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ. เบ•เบปเบงเบขเปˆเบฒเบ‡, เบชเปเบฒเบฅเบฑเบš DynamoDB: 25 GB เบ‚เบญเบ‡เบเบฒเบ™เป€เบเบฑเบšเบฎเบฑเบเบชเบฒ, 25 WCU/RCU เปเบฅเบฐ 100 เบฅเป‰เบฒเบ™เบชเบญเบšเบ–เบฒเบก. เปเบฅเบฐเบŸเบฑเบ‡เบŠเบฑเบ™ lambda เบฅเป‰เบฒเบ™เป‚เบ—เบ•เปเปˆเป€เบ”เบทเบญเบ™.

เบเบฒเบ™เบ™เบณเปƒเบŠเป‰เบฅเบฐเบšเบปเบšเบ„เบนเปˆเบกเบท

เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒ Kinesis Data Stream

เปƒเบซเป‰เป„เบ›เบ—เบตเปˆเบšเปเบฅเบดเบเบฒเบ™ Kinesis Data Stream เปเบฅเบฐเบชเป‰เบฒเบ‡เบชเบญเบ‡เบชเบฒเบเบ™เป‰เปเบฒเปƒเบซเบกเปˆ, เบซเบ™เบถเปˆเบ‡ shard เบชเปเบฒเบฅเบฑเบšเปเบ•เปˆเบฅเบฐเบ„เบปเบ™.

shard เปเบกเปˆเบ™เบซเบเบฑเบ‡?
A shard เปเบกเปˆเบ™เบซเบปเบงเบซเบ™เปˆเบงเบเบเบฒเบ™เป‚เบญเบ™เบ‚เปเป‰เบกเบนเบ™เบžเบทเป‰เบ™เบ–เบฒเบ™เบ‚เบญเบ‡ Amazon Kinesis stream. เบžเบฒเบเบชเปˆเบงเบ™เบซเบ™เบถเปˆเบ‡เบชเบฐเบซเบ™เบญเบ‡เบเบฒเบ™เป‚เบญเบ™เบ‚เปเป‰เบกเบนเบ™เป€เบ‚เบปเป‰เบฒเบ”เป‰เบงเบเบ„เบงเบฒเบกเป„เบง 1 MB/s เปเบฅเบฐเบเบฒเบ™เป‚เบญเบ™เบ‚เปเป‰เบกเบนเบ™เบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบšเบขเบนเปˆเบ—เบตเปˆเบ„เบงเบฒเบกเป„เบง 2 MB/s. เบžเบฒเบเบชเปˆเบงเบ™เปœเบถเปˆเบ‡เบฎเบญเบ‡เบฎเบฑเบšเป„เบ”เป‰เป€เบ–เบดเบ‡ 1000 PUT entry เบ•เปเปˆเบงเบดเบ™เบฒเบ—เบต. เป€เบกเบทเปˆเบญเบชเป‰เบฒเบ‡เบเบฒเบ™เบ–เปˆเบฒเบเบ—เบญเบ”เบ‚เปเป‰เบกเบนเบ™, เบ—เปˆเบฒเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบฅเบฐเบšเบธเบˆเปเบฒเบ™เบงเบ™เบชเปˆเบงเบ™เบ—เบตเปˆเบ•เป‰เบญเบ‡เบเบฒเบ™. เบ•เบปเบงเบขเปˆเบฒเบ‡, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบชเป‰เบฒเบ‡เบเบฐเปเบชเบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเบกเบตเบชเบญเบ‡เบชเปˆเบงเบ™. เบเบฒเบ™เบ–เปˆเบฒเบเบ—เบญเบ”เบ‚เปเป‰เบกเบนเบ™เบ™เบตเป‰เบˆเบฐเบชเบฐเปœเบญเบ‡เบ‚เปเป‰เบกเบนเบ™เบเบฒเบ™เบ›เป‰เบญเบ™เบ‚เปเป‰เบกเบนเบ™เปƒเบ™เบ„เบงเบฒเบกเป„เบง 2 MB/s เปเบฅเบฐเป‚เบญเบ™เบ‚เปเป‰เบกเบนเบ™เบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบšเบขเบนเปˆเบ—เบตเปˆ 4 MB/s, เบฎเบญเบ‡เบฎเบฑเบšเบเบฒเบ™เบชเบปเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™เป„เบ”เป‰เบชเบนเบ‡เบชเบธเบ” 2000 PUT เบ•เปเปˆเบงเบดเบ™เบฒเบ—เบต.

เบซเบผเบฒเบ shards เปƒเบ™ stream เบ‚เบญเบ‡เบ—เปˆเบฒเบ™, เป‚เบ”เบเบœเปˆเบฒเบ™เบเบฒเบ™เบซเบผเบฒเบเบ‚เบญเบ‡เบกเบฑเบ™. เปƒเบ™เบซเบผเบฑเบเบเบฒเบ™, เบ™เบตเป‰เปเบกเปˆเบ™เบงเบดเบ—เบตเบเบฒเบ™เบ‚เบฐเบซเบเบฒเบเบเบฒเบ™เป„เบซเบผเป€เบ‚เบปเป‰เบฒ - เป‚เบ”เบเบเบฒเบ™เป€เบžเบตเปˆเบก shards. เปเบ•เปˆเบซเบผเบฒเบ shards เบ—เปˆเบฒเบ™เบกเบต, เบฅเบฒเบ„เบฒเบชเบนเบ‡เบ‚เบถเป‰เบ™. เปเบ•เปˆเบฅเบฐ shard เบฅเบฒเบ„เบฒ 1,5 เป€เบŠเบฑเบ™เบ•เปเปˆเบŠเบปเปˆเบงเป‚เบกเบ‡เปเบฅเบฐ 1.4 เป€เบŠเบฑเบ™เป€เบžเบตเปˆเบกเป€เบ•เบตเบกเบชเปเบฒเบฅเบฑเบšเบ—เบธเบเป†เบฅเป‰เบฒเบ™ PUT payload เบซเบ™เปˆเบงเบ.

เบกเบฒเบชเป‰เบฒเบ‡เบเบฐเปเบชเปƒเปเปˆเบ”เป‰เบงเบเบŠเบทเปˆ airline_tickets, 1 shard เบˆเบฐเบžเบฝเบ‡เบžเปเบชเปเบฒเบฅเบฑเบšเบฅเบฒเบง:

เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเป‚เบเบ‡ Aviasales API เบเบฑเบš Amazon Kinesis เปเบฅเบฐเบ„เบงเบฒเบกเบฅเบฝเบšเบ‡เปˆเบฒเบ serverless
เบ•เบญเบ™เบ™เบตเป‰เปƒเบซเป‰เบžเบงเบเป€เบฎเบปเบฒเบชเป‰เบฒเบ‡เบซเบปเบงเบ‚เปเป‰เบญเบทเปˆเบ™เบ—เบตเปˆเบกเบตเบŠเบทเปˆ special_stream:

เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเป‚เบเบ‡ Aviasales API เบเบฑเบš Amazon Kinesis เปเบฅเบฐเบ„เบงเบฒเบกเบฅเบฝเบšเบ‡เปˆเบฒเบ serverless

เบเบฒเบ™โ€‹เบ•เบฑเป‰เบ‡โ€‹เบ„เปˆเบฒโ€‹เบœเบนเป‰โ€‹เบœเบฐโ€‹เบฅเบดเบ”โ€‹

เป€เบžเบทเปˆเบญเบงเบดเป€เบ„เบฒเบฐเบงเบฝเบเบ‡เบฒเบ™, เบกเบฑเบ™เบžเบฝเบ‡เบžเปเบ—เบตเปˆเบˆเบฐเปƒเบŠเป‰เบ•เบปเบงเบขเปˆเบฒเบ‡ EC2 เบ›เบปเบเบเบฐเบ•เบดเป€เบ›เบฑเบ™เบœเบนเป‰เบœเบฐเบฅเบดเบ”เบ‚เปเป‰เบกเบนเบ™. เบกเบฑเบ™เบšเปเปˆเบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เป€เบ›เบฑเบ™เป€เบ„เบทเปˆเบญเบ‡ virtual เบ—เบตเปˆเบกเบตเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบš, เบฅเบฒเบ„เบฒเปเบžเบ‡; เบˆเบธเบ” t2.micro เบˆเบฐเป€เบฎเบฑเบ”เป„เบ”เป‰เบ”เบต.

เบซเบกเบฒเบเป€เบซเบ”เบ—เบตเปˆเบชเปเบฒเบ„เบฑเบ™: เบ•เบปเบงเบขเปˆเบฒเบ‡, เบ—เปˆเบฒเบ™เบ„เบงเบ™เปƒเบŠเป‰เบฎเบนเบšเบžเบฒเบš - Amazon Linux AMI 2018.03.0, เบกเบฑเบ™เบกเบตเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบซเบ™เป‰เบญเบเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เป€เบ›เบตเบ”เบ•เบปเบง Kinesis Agent เบขเปˆเบฒเบ‡เป„เบงเบงเบฒ.

เป„เบ›เบ—เบตเปˆเบšเปเบฅเบดเบเบฒเบ™ EC2, เบชเป‰เบฒเบ‡เป€เบ„เบทเปˆเบญเบ‡ virtual เปƒเบซเบกเปˆ, เป€เบฅเบทเบญเบ AMI เบ—เบตเปˆเบ•เป‰เบญเบ‡เบเบฒเบ™เบ”เป‰เบงเบเบ›เบฐเป€เบžเบ” t2.micro, เป€เบŠเบดเปˆเบ‡เบฅเบงเบกเบขเบนเปˆเปƒเบ™ Free Tier:

เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเป‚เบเบ‡ Aviasales API เบเบฑเบš Amazon Kinesis เปเบฅเบฐเบ„เบงเบฒเบกเบฅเบฝเบšเบ‡เปˆเบฒเบ serverless
เป€เบžเบทเปˆเบญเปƒเบซเป‰เป€เบ„เบทเปˆเบญเบ‡ virtual เบ—เบตเปˆเบชเป‰เบฒเบ‡เบ‚เบถเป‰เบ™เปƒเบซเบกเปˆเบชเบฒเบกเบฒเบ”เบžเบปเบงเบžเบฑเบ™เบเบฑเบšเบเบฒเบ™เบšเปเบฅเบดเบเบฒเบ™ Kinesis เป„เบ”เป‰, เบกเบฑเบ™เบ•เป‰เบญเบ‡เป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เปƒเบซเป‰เบชเบดเบ”เบ—เบตเปˆเบˆเบฐเป€เบฎเบฑเบ”เปเบ™เบงเบ™เบฑเป‰เบ™. เบงเบดเบ—เบตเบ—เบตเปˆเบ”เบตเบ—เบตเปˆเบชเบธเบ”เบ—เบตเปˆเบˆเบฐเป€เบฎเบฑเบ”เบ„เบทเบเบฒเบ™เบกเบญเบšเบซเบกเบฒเบเบšเบปเบ”เบšเบฒเบ” IAM. เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เปƒเบ™เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบ—เบต 3: Configure Instance Details เบซเบ™เป‰เบฒเบˆเป, เบ—เปˆเบฒเบ™เบ„เบงเบ™เป€เบฅเบทเบญเบ เบชเป‰เบฒเบ‡เบšเบปเบ”เบšเบฒเบ” IAM เปƒเปเปˆ:

เบเบฒเบ™เบชเป‰เบฒเบ‡เบšเบปเบ”เบšเบฒเบ” IAM เบชเปเบฒเบฅเบฑเบš EC2
เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเป‚เบเบ‡ Aviasales API เบเบฑเบš Amazon Kinesis เปเบฅเบฐเบ„เบงเบฒเบกเบฅเบฝเบšเบ‡เปˆเบฒเบ serverless
เปƒเบ™เบ›เปˆเบญเบ‡เบขเป‰เบฝเบกเบ—เบตเปˆเป€เบ›เบตเบ”, เป€เบฅเบทเบญเบเป€เบญเบปเบฒเบงเปˆเบฒเบžเบงเบเป€เบฎเบปเบฒเบเปเบฒเบฅเบฑเบ‡เบชเป‰เบฒเบ‡เบšเบปเบ”เบšเบฒเบ”เปƒเบซเบกเปˆเบชเปเบฒเบฅเบฑเบš EC2 เปเบฅเบฐเป„เบ›เบ—เบตเปˆเบžเบฒเบเบเบฒเบ™เบญเบฐเบ™เบธเบเบฒเบ”:

เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเป‚เบเบ‡ Aviasales API เบเบฑเบš Amazon Kinesis เปเบฅเบฐเบ„เบงเบฒเบกเบฅเบฝเบšเบ‡เปˆเบฒเบ serverless
เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เบ•เบปเบงเบขเปˆเบฒเบ‡เบเบฒเบ™เบเบถเบเบญเบปเบšเบฎเบปเบก, เบžเบงเบเป€เบฎเบปเบฒเบšเปเปˆเบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบ„เบงเบฒเบกเบชเบฑเบšเบชเบปเบ™เบ—เบฑเบ‡เบซเบกเบปเบ”เบ‚เบญเบ‡เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒ granular เบ‚เบญเบ‡เบชเบดเบ”เบ—เบดเบ‚เบญเบ‡เบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเป€เบฅเบทเบญเบเป€เบญเบปเบฒเบ™เบฐเป‚เบเบšเบฒเบ pre-configured เป‚เบ”เบ Amazon: AmazonKinesisFullAccess เปเบฅเบฐ CloudWatchFullAccess.

เปƒเบซเป‰เบŠเบทเปˆเบ—เบตเปˆเบกเบตเบ„เบงเบฒเบกเบซเบกเบฒเบเบชเปเบฒเบฅเบฑเบšเบšเบปเบ”เบšเบฒเบ”เบ™เบตเป‰, เบ•เบปเบงเบขเปˆเบฒเบ‡: EC2-KinesisStreams-FullAccess. เบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบšเบ„เบงเบ™เบˆเบฐเบ„เบทเบเบฑเบ™เบเบฑเบšเบเบฒเบ™เบชเบฐเปเบ”เบ‡เบขเบนเปˆเปƒเบ™เบฎเบนเบšเบ‚เป‰เบฒเบ‡เบฅเบธเปˆเบกเบ™เบตเป‰:

เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเป‚เบเบ‡ Aviasales API เบเบฑเบš Amazon Kinesis เปเบฅเบฐเบ„เบงเบฒเบกเบฅเบฝเบšเบ‡เปˆเบฒเบ serverless
เบซเบผเบฑเบ‡เบˆเบฒเบเบชเป‰เบฒเบ‡เบšเบปเบ”เบšเบฒเบ”เปƒเบซเบกเปˆเบ™เบตเป‰, เบขเปˆเบฒเบฅเบทเบกเบ•เบดเบ”เบกเบฑเบ™เปƒเบชเปˆเบเบฑเบšเป€เบ„เบทเปˆเบญเบ‡ virtual เบ—เบตเปˆเบชเป‰เบฒเบ‡เบ‚เบถเป‰เบ™:

เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเป‚เบเบ‡ Aviasales API เบเบฑเบš Amazon Kinesis เปเบฅเบฐเบ„เบงเบฒเบกเบฅเบฝเบšเบ‡เปˆเบฒเบ serverless
เบžเบงเบเป€เบฎเบปเบฒเบšเปเปˆเบ›เปˆเบฝเบ™เปเบ›เบ‡เบญเบฑเบ™เบญเบทเปˆเบ™เปƒเบ™เปœเป‰เบฒเบˆเปเบ™เบตเป‰ เปเบฅเบฐเบเป‰เบฒเบเป„เบ›เปœเป‰เบฒเบˆเปเบ•เปเปˆเป„เบ›.

เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบฎเบฒเบ”เบ”เบดเบ”เบชเบฒเบกเบฒเบ”เบ–เบทเบเบ›เบฐเป„เบงเป‰เป€เบ›เบฑเบ™เบ„เปˆเบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™, เป€เบŠเบฑเปˆเบ™เบ”เบฝเบงเบเบฑเบ™เบเบฑเบšเปเบ—เบฑเบ (เป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒเบกเบฑเบ™เป€เบ›เบฑเบ™เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบ—เบตเปˆเบ”เบตเบ—เบตเปˆเบˆเบฐเปƒเบŠเป‰เปเบ—เบฑเบ, เบขเปˆเบฒเบ‡เบซเบ™เป‰เบญเบเปƒเบซเป‰เบŠเบทเปˆเบ•เบปเบงเบขเปˆเบฒเบ‡เปเบฅเบฐเบŠเบตเป‰เบšเบญเบเบชเบฐเบžเบฒเบšเปเบงเบ”เบฅเป‰เบญเบก).

เปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™เบžเบงเบเป€เบฎเบปเบฒเบขเบนเปˆเปƒเบ™เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบ—เบต 6: เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเปเบ–เบšเบเบธเปˆเบกเบ„เบงเบฒเบกเบ›เบญเบ”เป„เบž, เบšเปˆเบญเบ™เบ—เบตเปˆเบ—เปˆเบฒเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบชเป‰เบฒเบ‡เปƒเบซเบกเปˆเบซเบผเบทเบฅเบฐเบšเบธเบเบธเปˆเบกเบ„เบงเบฒเบกเบ›เบญเบ”เป„เบžเบ—เบตเปˆเบกเบตเบขเบนเปˆเบ‚เบญเบ‡เบ—เปˆเบฒเบ™, เป€เบŠเบดเปˆเบ‡เบŠเปˆเบงเบเปƒเบซเป‰เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบœเปˆเบฒเบ™ ssh (เบžเบญเบ” 22) เบเบฑเบš instance. เป€เบฅเบทเบญเบเปเบซเบผเปˆเบ‡ -> IP เบ‚เบญเบ‡เบ‚เป‰เบญเบเบขเบนเปˆเบ—เบตเปˆเบ™เบฑเป‰เบ™เปเบฅเบฐเบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เป€เบ›เบตเบ”เบ•เบปเบงเบ•เบปเบงเบขเปˆเบฒเบ‡.

เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเป‚เบเบ‡ Aviasales API เบเบฑเบš Amazon Kinesis เปเบฅเบฐเบ„เบงเบฒเบกเบฅเบฝเบšเบ‡เปˆเบฒเบ serverless
เบ—เบฑเบ™เบ—เบตเบ—เบตเปˆเบกเบฑเบ™เบชเบฐเบซเบผเบฑเบšเบเบฑเบšเบชเบฐเบ–เบฒเบ™เบฐเบเบฒเบ™เปเบฅเปˆเบ™, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบžเบฐเบเบฒเบเบฒเบกเป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบเบฑเบšเบกเบฑเบ™เบœเปˆเบฒเบ™ ssh.

เป€เบžเบทเปˆเบญเปƒเบซเป‰เบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เบงเบฝเบเบเบฑเบš Kinesis Agent เป„เบ”เป‰, เบซเบผเบฑเบ‡เบˆเบฒเบเบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบเบฑเบšเป€เบ„เบทเปˆเบญเบ‡เบˆเบฑเบเบขเปˆเบฒเบ‡เบชเปเบฒเป€เบฅเบฑเบ”เบœเบปเบ™, เบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เปƒเบชเปˆเบ„เปเบฒเบชเบฑเปˆเบ‡เบ•เปเปˆเป„เบ›เบ™เบตเป‰เปƒเบ™ terminal:

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

เบ”เบฑเปˆเบ‡เบ—เบตเปˆเป€เบซเบฑเบ™เป„เบ”เป‰เบˆเบฒเบเป„เบŸเบฅเปŒเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒ, เบ•เบปเบงเปเบ—เบ™เบˆเบฐเบเบงเบ”เบชเบญเบšเป„เบŸเบฅเปŒเบ—เบตเปˆเบกเบตเบ™เบฒเบกเบชเบฐเบเบธเบ™ .log เปƒเบ™เป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบต /var/log/airline_tickets/, เบงเบดเป€เบ„เบฒเบฐเบžเบงเบเบกเบฑเบ™ เปเบฅเบฐเป‚เบญเบ™เบžเบงเบเบกเบฑเบ™เป„เบ›เบ—เบตเปˆเบชเบฐเบ•เบฃเบตเบก airline_tickets.

เบžเบงเบเป€เบฎเบปเบฒเบฃเบตเบชเบฐเบ•เบฒเบ”เบเบฒเบ™เบšเปเบฅเบดเบเบฒเบ™ เปเบฅเบฐเปƒเบซเป‰เปเบ™เปˆเปƒเบˆเบงเปˆเบฒเบกเบฑเบ™เป€เบฎเบฑเบ”เบงเบฝเบเปเบฅเป‰เบง:

sudo service aws-kinesis-agent restart

เบ•เบญเบ™เบ™เบตเป‰เปƒเบซเป‰เบ”เบฒเบงเป‚เบซเบผเบ”เบชเบฐเบ„เบฃเบดเบš Python เบ—เบตเปˆเบˆเบฐเบฎเป‰เบญเบ‡เบ‚เปเบ‚เปเป‰เบกเบนเบ™เบˆเบฒเบ 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 เป„เบ”เป‰ asynchronously. เบžเบงเบเป€เบฎเบปเบฒเบชเบปเปˆเบ‡เบชเปˆเบงเบ™เบซเบปเบงเบ—เบตเปˆเบกเบต token เปเบฅเบฐเบฎเป‰เบญเบ‡เบ‚เปเบžเบฒเบฅเบฒเบกเบดเป€เบ•เบตเป„เบ›เบซเบฒเบŠเบฑเป‰เบ™เบฎเบฝเบ™เบ™เบตเป‰:

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

เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเป‚เบเบ‡ Aviasales API เบเบฑเบš Amazon Kinesis เปเบฅเบฐเบ„เบงเบฒเบกเบฅเบฝเบšเบ‡เปˆเบฒเบ serverless
เปเบฅเบฐเบžเบงเบเป€เบฎเบปเบฒเป€เบšเบดเปˆเบ‡เบœเบปเบ™เบ‚เบญเบ‡เบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบขเบนเปˆเปƒเบ™เบšเบฑเบ™เบ—เบถเบเบ‚เบญเบ‡เบ•เบปเบงเปเบ—เบ™ เปเบฅเบฐเปƒเบ™เปเบ–เบšเบเบฒเบ™เบ•เบดเบ”เบ•เบฒเบกเปƒเบ™เบเบฐเปเบชเบ‚เปเป‰เบกเบนเบ™ airline_tickets:

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

เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเป‚เบเบ‡ Aviasales API เบเบฑเบš Amazon Kinesis เปเบฅเบฐเบ„เบงเบฒเบกเบฅเบฝเบšเบ‡เปˆเบฒเบ serverless
เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเป‚เบเบ‡ Aviasales API เบเบฑเบš Amazon Kinesis เปเบฅเบฐเบ„เบงเบฒเบกเบฅเบฝเบšเบ‡เปˆเบฒเบ serverless
เบ”เบฑเปˆเบ‡เบ—เบตเปˆเบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เป€เบซเบฑเบ™เป„เบ”เป‰, เบ—เบธเบเบชเบดเปˆเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡เป€เบฎเบฑเบ”เบงเบฝเบเปเบฅเบฐ Kinesis Agent เบชเบปเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™เป„เบ›เบชเบนเปˆเบเบฒเบ™เบ–เปˆเบฒเบเบ—เบญเบ”เบขเปˆเบฒเบ‡เบชเปเบฒเป€เบฅเบฑเบ”เบœเบปเบ™. เปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™เปƒเบซเป‰เบžเบงเบเป€เบฎเบปเบฒ configure เบœเบนเป‰เบšเปเบฅเบดเป‚เบžเบ.

เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒ Kinesis Data Analytics

เบ‚เปเปƒเบซเป‰เบเป‰เบฒเบงเป„เบ›เบชเบนเปˆเบญเบปเบ‡เบ›เบฐเบเบญเบšเบชเบนเบ™เบเบฒเบ‡เบ‚เบญเบ‡เบฅเบฐเบšเบปเบšเบ—เบฑเบ‡เบซเบกเบปเบ” - เบชเป‰เบฒเบ‡เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™เปƒเบซเบกเปˆเปƒเบ™ Kinesis Data Analytics เบ—เบตเปˆเบกเบตเบŠเบทเปˆเบงเปˆเบฒ kinesis_analytics_airlines_app:

เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเป‚เบเบ‡ Aviasales API เบเบฑเบš Amazon Kinesis เปเบฅเบฐเบ„เบงเบฒเบกเบฅเบฝเบšเบ‡เปˆเบฒเบ serverless
Kinesis Data Analytics เบŠเปˆเบงเบเปƒเบซเป‰เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เบงเบดเป€เบ„เบฒเบฐเบ‚เปเป‰เบกเบนเบ™เปƒเบ™เป€เบงเบฅเบฒเบˆเบดเบ‡เบˆเบฒเบ Kinesis Stream เป‚เบ”เบเปƒเบŠเป‰เบžเบฒเบชเบฒ SQL. เบกเบฑเบ™โ€‹เป€เบ›เบฑเบ™โ€‹เบเบฒเบ™โ€‹เบšเปโ€‹เบฅเบดโ€‹เบเบฒเบ™โ€‹เบ‚เบฐโ€‹เบซเบเบฒเบโ€‹เบ•เบปเบงโ€‹เบขเปˆเบฒเบ‡โ€‹เป€เบ•เบฑเบกโ€‹เบ—เบตเปˆ (เบšเปเปˆโ€‹เบ„เบท Kinesis Streamsโ€‹) เบ—เบตเปˆโ€‹:

  1. เบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰เบ—เปˆเบฒเบ™เบชเป‰เบฒเบ‡เบชเบฒเบเบ™เป‰เปเบฒเปƒเบซเบกเปˆ (Output Stream) เป‚เบ”เบเบญเบตเบ‡เปƒเบชเปˆเบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เปเบ‚เปเป‰เบกเบนเบ™เปเบซเบผเปˆเบ‡;
  2. เบชเบฐเบซเบ™เบญเบ‡เบเบฒเบ™เบ–เปˆเบฒเบเบ—เบญเบ”เบ—เบตเปˆเบกเบตเบ‚เปเป‰เบœเบดเบ”เบžเบฒเบ”เบ—เบตเปˆเป€เบเบตเบ”เบ‚เบถเป‰เบ™เปƒเบ™เบ‚เบฐเบ™เบฐเบ—เบตเปˆเปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™เบเปเบฒเบฅเบฑเบ‡เป€เบฎเบฑเบ”เบงเบฝเบ (Error Stream);
  3. เบชเบฒเบกเบฒเบ”เบเปเบฒเบ™เบปเบ”เบฅเบฐเบšเบปเบšเบเบฒเบ™เบ›เป‰เบญเบ™เบ‚เปเป‰เบกเบนเบ™เบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ” (เบกเบฑเบ™เบชเบฒเบกเบฒเบ”เบ–เบทเบเบเปเบฒเบ™เบปเบ”เบ„เบทเบ™เปƒเบซเบกเปˆเบ”เป‰เบงเบเบ•เบปเบ™เป€เบญเบ‡เบ–เป‰เบฒเบˆเปเบฒเป€เบ›เบฑเบ™).

เบ™เบตเป‰เบšเปเปˆเปเบกเปˆเบ™เบเบฒเบ™เบšเปเบฅเบดเบเบฒเบ™เบ—เบตเปˆเบกเบตเบฅเบฒเบ„เบฒเบ–เบทเบ - 0.11 USD เบ•เปเปˆเบŠเบปเปˆเบงเป‚เบกเบ‡เบ‚เบญเบ‡เบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบ, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบ—เปˆเบฒเบ™เบ„เบงเบ™เปƒเบŠเป‰เบกเบฑเบ™เบขเปˆเบฒเบ‡เบฅเบฐเบกเบฑเบ”เบฅเบฐเบงเบฑเบ‡เปเบฅเบฐเบฅเบถเบšเบกเบฑเบ™เป€เบกเบทเปˆเบญเบ—เปˆเบฒเบ™เบชเปเบฒเป€เบฅเบฑเบ”.

เปƒเบซเป‰เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™เบเบฑเบšเปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™:

เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเป‚เบเบ‡ Aviasales API เบเบฑเบš Amazon Kinesis เปเบฅเบฐเบ„เบงเบฒเบกเบฅเบฝเบšเบ‡เปˆเบฒเบ serverless
เป€เบฅเบทเบญเบเบเบฐเปเบชเบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเป€เบŠเบทเปˆเบญเบกเบ•เปเปˆ (airline_tickets):

เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเป‚เบเบ‡ Aviasales API เบเบฑเบš Amazon Kinesis เปเบฅเบฐเบ„เบงเบฒเบกเบฅเบฝเบšเบ‡เปˆเบฒเบ serverless
เบ•เปเปˆเป„เบ›, เบ—เปˆเบฒเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เป„เบ”เป‰เปเบ™เบšเบšเบปเบ”เบšเบฒเบ” IAM เปƒเบซเบกเปˆเป€เบžเบทเปˆเบญเปƒเบซเป‰เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™เบชเบฒเบกเบฒเบ”เบญเปˆเบฒเบ™เบˆเบฒเบเบชเบฐเบ•เบฃเบตเบกเปเบฅเบฐเบ‚เบฝเบ™เปƒเบชเปˆเบชเบฐเบ•เบฃเบตเบกเป„เบ”เป‰. เป€เบžเบทเปˆเบญเป€เบฎเบฑเบ”เบชเบดเปˆเบ‡เบ™เบตเป‰, เบกเบฑเบ™เบžเบฝเบ‡เบžเปเบ—เบตเปˆเบˆเบฐเบšเปเปˆเบ›เปˆเบฝเบ™เปเบ›เบ‡เบชเบดเปˆเบ‡เปƒเบ”เปƒเบ™เบšเบฅเบฑเบญเบเบเบฒเบ™เบญเบฐเบ™เบธเบเบฒเบ”เบเบฒเบ™เป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡:

เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเป‚เบเบ‡ Aviasales API เบเบฑเบš Amazon Kinesis เปเบฅเบฐเบ„เบงเบฒเบกเบฅเบฝเบšเบ‡เปˆเบฒเบ serverless
เบ•เบญเบ™เบ™เบตเป‰เบ‚เปเปƒเบซเป‰เบ„เบปเป‰เบ™เบžเบปเบšเปเบœเบ™เบœเบฑเบ‡เบ‚เปเป‰เบกเบนเบ™เปƒเบ™เบเบฐเปเบช; เป€เบžเบทเปˆเบญเป€เบฎเบฑเบ”เบชเบดเปˆเบ‡เบ™เบตเป‰, เปƒเบซเป‰เบ„เบฅเบดเบเปƒเบชเปˆเบ›เบธเปˆเบก "Discover schema". เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เบšเบปเบ”เบšเบฒเบ” IAM เบˆเบฐเบ–เบทเบเบ›เบฑเบšเบ›เบธเบ‡ (เบญเบฑเบ™เปƒเปเปˆเบˆเบฐเบ–เบทเบเบชเป‰เบฒเบ‡) เปเบฅเบฐเบเบฒเบ™เบเบงเบ”เบซเบฒ schema เบˆเบฐเบ–เบทเบเป€เบ›เบตเบ”เบ•เบปเบงเบˆเบฒเบเบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเบกเบฒเบฎเบญเบ”เปเบฅเป‰เบงเปƒเบ™เบเบฐเปเบช:

เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเป‚เบเบ‡ Aviasales API เบเบฑเบš Amazon Kinesis เปเบฅเบฐเบ„เบงเบฒเบกเบฅเบฝเบšเบ‡เปˆเบฒเบ serverless
เบ•เบญเบ™เบ™เบตเป‰เบ—เปˆเบฒเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เป„เบ›เบ—เบตเปˆเบšเบฑเบ™เบ™เบฒเบ—เบดเบเบฒเบ™ SQL. เป€เบกเบทเปˆเบญโ€‹เบ—เปˆเบฒเบ™โ€‹เบ„เบฅเบดเบโ€‹เปƒเบชเปˆโ€‹เบ›เบธเปˆเบกโ€‹เบ™เบตเป‰โ€‹, เบ›เปˆเบญเบ‡โ€‹เบขเป‰เบฝเบกโ€‹เบˆเบฐโ€‹เบ›เบฒโ€‹เบเบปเบ”โ€‹เบ‚เบถเป‰เบ™โ€‹เบ‚เปโ€‹เปƒเบซเป‰โ€‹เบ—เปˆเบฒเบ™โ€‹เป€เบ›เบตเบ”โ€‹เบ„เปเบฒโ€‹เบฎเป‰เบญเบ‡โ€‹เบชเบฐโ€‹เบซเบกเบฑเบ - เป€เบฅเบทเบญเบโ€‹เป€เบญเบปเบฒโ€‹เบชเบดเปˆเบ‡โ€‹เบ—เบตเปˆโ€‹เบ—เปˆเบฒเบ™โ€‹เบ•เป‰เบญเบ‡โ€‹เบเบฒเบ™โ€‹เบ—เบตเปˆโ€‹เบˆเบฐโ€‹เป€เบ›เบตเบ”โ€‹:

เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเป‚เบเบ‡ Aviasales API เบเบฑเบš Amazon Kinesis เปเบฅเบฐเบ„เบงเบฒเบกเบฅเบฝเบšเบ‡เปˆเบฒเบ serverless
เปƒเบชเปˆเบ„เปเบฒเบ–เบฒเบกเบ‡เปˆเบฒเบเป†เบ•เปเปˆเป„เบ›เบ™เบตเป‰เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบ›เปˆเบญเบ‡เบขเป‰เบฝเบกเบšเบฑเบ™เบ™เบฒเบ—เบดเบเบฒเบ™ SQL เปเบฅเบฐเบ„เบฅเบดเบเบšเบฑเบ™เบ—เบถเบเปเบฅเบฐเบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™ SQL:

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

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

เปƒเบ™เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเบเปˆเบฝเบงเบ‚เป‰เบญเบ‡, เบ—เปˆเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบเบฑเบšเบ•เบฒเบ•เบฐเบฅเบฒเบ‡เป‚เบ”เบเปƒเบŠเป‰เบ„เปเบฒเบ–เบฐเปเบซเบผเบ‡เบ—เบตเปˆ INSERT เป€เบžเบทเปˆเบญเป€เบžเบตเปˆเบกเบšเบฑเบ™เบ—เบถเบเปเบฅเบฐเบ„เปเบฒเบชเบฑเปˆเบ‡ SELECT เป€เบžเบทเปˆเบญเบชเบญเบšเบ–เบฒเบกเบ‚เปเป‰เบกเบนเบ™. เปƒเบ™ Amazon Kinesis Data Analytics, เบ—เปˆเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบเบฑเบšเบชเบฐเบ•เบฃเบตเบก (เบชเบฐเบ•เบฃเบตเบก) เปเบฅเบฐเบ›เป‰เบณ (PUMPs)โ€”เบ„เบณเบฎเป‰เบญเบ‡เบ‚เปเบเบฒเบ™เปเบŠเบเบขเปˆเบฒเบ‡เบ•เปเปˆเป€เบ™เบทเปˆเบญเบ‡เบ—เบตเปˆเปƒเบชเปˆเบ‚เปเป‰เบกเบนเบ™เบˆเบฒเบเบเบฐเปเบชเปœเบถเปˆเบ‡เปƒเบ™เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบเบฐเปเบชเบญเบทเปˆเบ™.

เบ„เปเบฒเบ–เบฒเบก SQL เบ—เบตเปˆเบ™เปเบฒเบชเบฐเป€เบซเบ™เบตเบ‚เป‰เบฒเบ‡เป€เบ—เบดเบ‡เบŠเบญเบเบซเบฒเบ•เบปเป‹เบง Aeroflot เปƒเบ™เบฅเบฒเบ„เบฒเบ•เปเปˆเบฒเบเบงเปˆเบฒเบซเป‰เบฒเบžเบฑเบ™เบฎเบนเป€เบšเบตเบ™. เบšเบฑเบ™เบ—เบถเบเบ—เบฑเบ‡เปเบปเบ”เบ—เบตเปˆเบเบปเบ‡เบเบฑเบšเป€เบ‡เบทเปˆเบญเบ™เป„เบ‚เป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เบˆเบฐเบ–เบทเบเบงเบฒเบ‡เป„เบงเป‰เปƒเบ™เบชเบฐเบ•เบฃเบตเบก DESTINATION_SQL_STREAM.

เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเป‚เบเบ‡ Aviasales API เบเบฑเบš Amazon Kinesis เปเบฅเบฐเบ„เบงเบฒเบกเบฅเบฝเบšเบ‡เปˆเบฒเบ serverless
เปƒเบ™เบšเบฅเบฑเบญเบเบ›เบฒเบเบ—เบฒเบ‡, เป€เบฅเบทเบญเบ special_stream stream, เปเบฅเบฐเปƒเบ™เบŠเบทเปˆเบเบฒเบ™เบ–เปˆเบฒเบเบ—เบญเบ”เปƒเบ™เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™ DESTINATION_SQL_STREAM เปเบšเบšเป€เบฅเบทเปˆเบญเบ™เบฅเบปเบ‡:

เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเป‚เบเบ‡ Aviasales API เบเบฑเบš Amazon Kinesis เปเบฅเบฐเบ„เบงเบฒเบกเบฅเบฝเบšเบ‡เปˆเบฒเบ serverless
เบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบšเบ‚เบญเบ‡เบเบฒเบ™เบซเบกเบนเบ™เปƒเบŠเป‰เบ—เบฑเบ‡เบซเบกเบปเบ”เบ„เบงเบ™เบˆเบฐเป€เบ›เบฑเบ™เบšเบฒเบ‡เบชเบดเปˆเบ‡เบšเบฒเบ‡เบขเปˆเบฒเบ‡เบ—เบตเปˆเบ„เป‰เบฒเบเบ„เบทเบเบฑเบ™เบเบฑเบšเบฎเบนเบšเบ‚เป‰เบฒเบ‡เบฅเบธเปˆเบกเบ™เบตเป‰:

เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเป‚เบเบ‡ Aviasales API เบเบฑเบš Amazon Kinesis เปเบฅเบฐเบ„เบงเบฒเบกเบฅเบฝเบšเบ‡เปˆเบฒเบ serverless

เบเบฒเบ™เบชเป‰เบฒเบ‡ เปเบฅเบฐเบชเบฐเปเบฑเบเปƒเบŠเป‰เบซเบปเบงเบ‚เปเป‰ SNS

เป„เบ›เบ—เบตเปˆเบšเปเบฅเบดเบเบฒเบ™เบเบฒเบ™เปเบˆเป‰เบ‡เป€เบ•เบทเบญเบ™เปเบšเบšเบ‡เปˆเบฒเบเป† เปเบฅเบฐเบชเป‰เบฒเบ‡เบซเบปเบงเบ‚เปเป‰เปƒเปเปˆเบขเบนเปˆเบ—เบตเปˆเบ™เบฑเป‰เบ™เบ”เป‰เบงเบเบŠเบทเปˆเบชเบฒเบเบเบฒเบ™เบšเบดเบ™:

เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเป‚เบเบ‡ Aviasales API เบเบฑเบš Amazon Kinesis เปเบฅเบฐเบ„เบงเบฒเบกเบฅเบฝเบšเบ‡เปˆเบฒเบ serverless
เบˆเบญเบ‡เบซเบปเบงเบ‚เปเป‰เบ™เบตเป‰เปเบฅเบฐเบŠเบตเป‰เบšเบญเบเบซเบกเบฒเบเป€เบฅเบเป‚เบ—เบฅเบฐเบชเบฑเบšเบกเบทเบ–เบทเบ—เบตเปˆเบˆเบฐเบชเบปเปˆเบ‡เบเบฒเบ™เปเบˆเป‰เบ‡เป€เบ•เบทเบญเบ™ SMS:

เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเป‚เบเบ‡ Aviasales API เบเบฑเบš Amazon Kinesis เปเบฅเบฐเบ„เบงเบฒเบกเบฅเบฝเบšเบ‡เปˆเบฒเบ serverless

เบชเป‰เบฒเบ‡เบ•เบฒเบ•เบฐเบฅเบฒเบ‡เปƒเบ™ DynamoDB

เป€เบžเบทเปˆเบญเป€เบเบฑเบšเบ‚เปเป‰เบกเบนเบ™เบ”เบดเบšเบˆเบฒเบเบเบฒเบ™เบ–เปˆเบฒเบเบ—เบญเบ” airline_tickets เบ‚เบญเบ‡เบžเบงเบเป€เบ‚เบปเบฒ, เปƒเบซเป‰เบชเป‰เบฒเบ‡เบ•เบฒเบ•เบฐเบฅเบฒเบ‡เปƒเบ™ DynamoDB เบ—เบตเปˆเบกเบตเบŠเบทเปˆเบ”เบฝเบงเบเบฑเบ™. เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเปƒเบŠเป‰ record_id เป€เบ›เบฑเบ™เบฅเบฐเบซเบฑเบ”เบซเบผเบฑเบ:

เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเป‚เบเบ‡ Aviasales API เบเบฑเบš Amazon Kinesis เปเบฅเบฐเบ„เบงเบฒเบกเบฅเบฝเบšเบ‡เปˆเบฒเบ serverless

เบเบฒเบ™เบชเป‰เบฒเบ‡เบ•เบปเบงเป€เบเบฑเบšเบฅเบงเบšเบฅเบงเบกเบŸเบฑเบ‡เบŠเบฑเบ™ lambda

เบกเบฒเบชเป‰เบฒเบ‡เบŸเบฑเบ‡เบŠเบฑเบ™ lambda เบ—เบตเปˆเป€เบญเบตเป‰เบ™เบงเปˆเบฒ Collector, เป€เบŠเบดเปˆเบ‡เปœเป‰เบฒเบงเบฝเบเบ‚เบญเบ‡เบกเบฑเบ™เบˆเบฐเป€เบ›เบฑเบ™เปเบšเบšเบชเบณเบซเบผเบงเบ” airline_tickets stream เปเบฅเบฐ เบ–เป‰เบฒเบžเบปเบšเบšเบฑเบ™เบ—เบถเบเปƒเปเปˆเบขเบนเปˆเบ—เบตเปˆเบ™เบฑเป‰เบ™, เปƒเบชเปˆเบšเบฑเบ™เบ—เบถเบเป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เปƒเบชเปˆเปƒเบ™เบ•เบฒเบ•เบฐเบฅเบฒเบ‡ DynamoDB. เปเบ™เปˆเบ™เบญเบ™, เบ™เบญเบเป€เบซเบ™เบทเบญเบˆเบฒเบเบชเบดเบ”เบ—เบดเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™, lambda เบ™เบตเป‰เบ•เป‰เบญเบ‡เบกเบตเบเบฒเบ™เป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡เบเบฒเบ™เบญเปˆเบฒเบ™เบ‚เปเป‰เบกเบนเบ™ Kinesis เปเบฅเบฐเบเบฒเบ™เป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡เบเบฒเบ™เบ‚เบฝเบ™เป€เบ‚เบปเป‰เบฒ DynamoDB.

เบเบฒเบ™เบชเป‰เบฒเบ‡เบšเบปเบ”เบšเบฒเบ” IAM เบชเปเบฒเบฅเบฑเบšเบŸเบฑเบ‡เบŠเบฑเบ™ lambda เบ‚เบญเบ‡เบœเบนเป‰เป€เบเบฑเบš
เบ—เปเบฒเบญเบดเบ”, เปƒเบซเป‰เบชเป‰เบฒเบ‡เบšเบปเบ”เบšเบฒเบ” IAM เปƒเบซเบกเปˆเบชเปเบฒเบฅเบฑเบš lambda เบ—เบตเปˆเบกเบตเบŠเบทเปˆเบงเปˆเบฒ Lambda-TicketsProcessingRole:

เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเป‚เบเบ‡ Aviasales API เบเบฑเบš Amazon Kinesis เปเบฅเบฐเบ„เบงเบฒเบกเบฅเบฝเบšเบ‡เปˆเบฒเบ serverless
เบ•เบปเบงเบขเปˆเบฒเบ‡เบเบฒเบ™เบ—เบปเบ”เบชเบญเบš, เบ™เบฐเป‚เบเบšเบฒเบ AmazonKinesisReadOnlyAccess เปเบฅเบฐ AmazonDynamoDBFullAccess เบ—เบตเปˆเบเปเบฒเบ™เบปเบ”เป„เบงเป‰เบเปˆเบญเบ™เปเบกเปˆเบ™เบ‚เป‰เบญเบ™เบ‚เป‰เบฒเบ‡เป€เบซเบกเบฒเบฐเบชเบปเบก, เบ”เบฑเปˆเบ‡เบ—เบตเปˆเบชเบฐเปเบ”เบ‡เบขเบนเปˆเปƒเบ™เบฎเบนเบšเบ‚เป‰เบฒเบ‡เบฅเบธเปˆเบกเบ™เบตเป‰:

เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเป‚เบเบ‡ Aviasales API เบเบฑเบš Amazon Kinesis เปเบฅเบฐเบ„เบงเบฒเบกเบฅเบฝเบšเบ‡เปˆเบฒเบ serverless
เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเป‚เบเบ‡ Aviasales API เบเบฑเบš Amazon Kinesis เปเบฅเบฐเบ„เบงเบฒเบกเบฅเบฝเบšเบ‡เปˆเบฒเบ serverless

lambda เบ™เบตเป‰เบ„เบงเบ™เบˆเบฐเบ–เบทเบเป€เบ›เบตเบ”เบ•เบปเบงเป‚เบ”เบ trigger เบˆเบฒเบ Kinesis เป€เบกเบทเปˆเบญเบฅเบฒเบเบเบฒเบ™เปƒเบซเบกเปˆเป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™ airline_stream, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบžเบงเบเป€เบฎเบปเบฒเบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เป€เบžเบตเปˆเบก trigger เปƒเบซเบกเปˆ:

เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเป‚เบเบ‡ Aviasales API เบเบฑเบš Amazon Kinesis เปเบฅเบฐเบ„เบงเบฒเบกเบฅเบฝเบšเบ‡เปˆเบฒเบ serverless
เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเป‚เบเบ‡ Aviasales API เบเบฑเบš Amazon Kinesis เปเบฅเบฐเบ„เบงเบฒเบกเบฅเบฝเบšเบ‡เปˆเบฒเบ serverless
เบชเบดเปˆเบ‡เบ—เบตเปˆเบเบฑเบ‡เป€เบซเบผเบทเบญเปเบกเปˆเบ™เปƒเบชเปˆเบฅเบฐเบซเบฑเบ”เปเบฅเบฐเบšเบฑเบ™เบ—เบถเบ lambda.

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

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

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

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

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

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

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

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

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

เบเบฒเบ™เบชเป‰เบฒเบ‡เบ•เบปเบงเปเบˆเป‰เบ‡เป€เบ•เบทเบญเบ™เบŸเบฑเบ‡เบŠเบฑเบ™ lambda

เบŸเบฑเบ‡เบŠเบฑเบ™ lambda เบ—เบตเบชเบญเบ‡, เป€เบŠเบดเปˆเบ‡เบˆเบฐเบ•เบดเบ”เบ•เบฒเบกเบเบฒเบ™เบ–เปˆเบฒเบเบ—เบญเบ”เบ—เบตเบชเบญเบ‡ (special_stream) เปเบฅเบฐเบชเบปเปˆเบ‡เบเบฒเบ™เปเบˆเป‰เบ‡เป€เบ•เบทเบญเบ™เป„เบ›เบซเบฒ SNS, เบ–เบทเบเบชเป‰เบฒเบ‡เบ‚เบถเป‰เบ™เปƒเบ™เบฅเบฑเบเบชเบฐเบ™เบฐเบ—เบตเปˆเบ„เป‰เบฒเบเบ„เบทเบเบฑเบ™. เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, lambda เบ™เบตเป‰เบ•เป‰เบญเบ‡เบกเบตเบเบฒเบ™เป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡เบเบฒเบ™เบญเปˆเบฒเบ™เบˆเบฒเบ Kinesis เปเบฅเบฐเบชเบปเปˆเบ‡เบ‚เปเป‰เบ„เบงเบฒเบกเป„เบ›เบซเบฒเบซเบปเบงเบ‚เปเป‰ SNS เบ—เบตเปˆเปƒเบซเป‰, เป€เบŠเบดเปˆเบ‡เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบˆเบฐเบ–เบทเบเบชเบปเปˆเบ‡เป‚เบ”เบเบšเปเบฅเบดเบเบฒเบ™ SNS เป„เบ›เบซเบฒเบœเบนเป‰เบˆเบญเบ‡เบ—เบฑเบ‡เบซเบกเบปเบ”เบ‚เบญเบ‡เบซเบปเบงเบ‚เปเป‰เบ™เบตเป‰ (เบญเบตเป€เบกเบง, SMS, เปเบฅเบฐเบญเบทเปˆเบ™เป†).

เบเบฒเบ™เบชเป‰เบฒเบ‡เบšเบปเบ”เบšเบฒเบ” IAM
เบ—เปเบฒเบญเบดเบ”, เบžเบงเบเป€เบฎเบปเบฒเบชเป‰เบฒเบ‡เบšเบปเบ”เบšเบฒเบ” IAM Lambda-KinesisAlarm เบชเปเบฒเบฅเบฑเบš lambda เบ™เบตเป‰, เปเบฅเบฐเบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบกเบญเบšเบซเบกเบฒเบเบšเบปเบ”เบšเบฒเบ”เบ™เบตเป‰เปƒเบซเป‰เบเบฑเบš lambda alarm_notifier เบ—เบตเปˆเบ–เบทเบเบชเป‰เบฒเบ‡เบ‚เบทเป‰เบ™:

เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเป‚เบเบ‡ Aviasales API เบเบฑเบš Amazon Kinesis เปเบฅเบฐเบ„เบงเบฒเบกเบฅเบฝเบšเบ‡เปˆเบฒเบ serverless
เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเป‚เบเบ‡ Aviasales API เบเบฑเบš Amazon Kinesis เปเบฅเบฐเบ„เบงเบฒเบกเบฅเบฝเบšเบ‡เปˆเบฒเบ serverless

lambda เบ™เบตเป‰เบ„เบงเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบขเบนเปˆเปƒเบ™ trigger เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบšเบฑเบ™เบ—เบถเบเปƒเบซเบกเปˆเป€เบžเบทเปˆเบญเป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™ special_stream, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบ—เปˆเบฒเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เป„เบ”เป‰ configure trigger เปƒเบ™เบฅเบฑเบเบชเบฐเบ™เบฐเบ”เบฝเบงเบเบฑเบ™เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เป€เบฎเบฑเบ”เบชเปเบฒเบฅเบฑเบš Collector lambda.

เป€เบžเบทเปˆเบญเป€เบฎเบฑเบ”เปƒเบซเป‰เบกเบฑเบ™เบ‡เปˆเบฒเบเบ•เปเปˆเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒ lambda เบ™เบตเป‰, เบ‚เปเปเบ™เบฐเบ™เปเบฒเบ•เบปเบงเปเบ›เบชเบฐเบžเบฒเบšเปเบงเบ”เบฅเป‰เบญเบกเปƒเบซเบกเปˆ - TOPIC_ARN, เบšเปˆเบญเบ™เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบงเบฒเบ‡ ANR (Amazon Recourse Names) เบ‚เบญเบ‡เบซเบปเบงเบ‚เปเป‰เบชเบฒเบเบเบฒเบ™เบšเบดเบ™:

เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเป‚เบเบ‡ Aviasales API เบเบฑเบš Amazon Kinesis เปเบฅเบฐเบ„เบงเบฒเบกเบฅเบฝเบšเบ‡เปˆเบฒเบ serverless
เปเบฅเบฐเปƒเบชเปˆเบฅเบฐเบซเบฑเบ” lambda, เบกเบฑเบ™เบšเปเปˆเบชเบฑเบšเบชเบปเบ™เป€เบฅเบตเบ:

import boto3
import base64
import os

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


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

เบกเบฑเบ™เป€เบšเบดเปˆเบ‡เบ„เบทเบงเปˆเบฒเบ™เบตเป‰เปเบกเปˆเบ™เบšเปˆเบญเบ™เบ—เบตเปˆเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบฅเบฐเบšเบปเบšเบ„เบนเปˆเบกเบทเปเบกเปˆเบ™เบชเปเบฒเป€เบฅเบฑเบ”. เบ—เบฑเบ‡เบซเบกเบปเบ”เบ—เบตเปˆเบเบฑเบ‡เป€เบซเบผเบทเบญเปเบกเปˆเบ™เบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเปเบฅเบฐเปƒเบซเป‰เปเบ™เปˆเปƒเบˆเบงเปˆเบฒเบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰ configure เบ—เบธเบเบชเบดเปˆเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡เบขเปˆเบฒเบ‡เบ–เบทเบเบ•เป‰เบญเบ‡.

เบ™เบณเปƒเบŠเป‰เบˆเบฒเบเบฅเบฐเบซเบฑเบ” Terraform

เบเบฒเบ™เบเบฐเบเบฝเบกเบ—เบตเปˆเบˆเปเบฒเป€เบ›เบฑเบ™

Terraform เป€เบ›เบฑเบ™เป€เบ„เบทเปˆเบญเบ‡เบกเบทเป€เบ›เบตเบ”เปเบซเบผเปˆเบ‡เบ—เบตเปˆเบชเบฐเบ”เบงเบเบซเบผเบฒเบเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เป‚เบ„เบ‡เบชเป‰เบฒเบ‡เบžเบทเป‰เบ™เบ–เบฒเบ™เบˆเบฒเบเบฅเบฐเบซเบฑเบ”. เบกเบฑเบ™เบกเบต syntax เบ‚เบญเบ‡เบ•เบปเบ™เป€เบญเบ‡เบ—เบตเปˆเบ‡เปˆเบฒเบเบ•เปเปˆเบเบฒเบ™เบฎเบฝเบ™เบฎเบนเป‰เปเบฅเบฐเบกเบตเบ•เบปเบงเบขเปˆเบฒเบ‡เบซเบผเบฒเบเบขเปˆเบฒเบ‡เบเปˆเบฝเบงเบเบฑเบšเบงเบดเบ—เบตเบเบฒเบ™เปเบฅเบฐเบชเบดเปˆเบ‡เบ—เบตเปˆเบˆเบฐเปƒเบŠเป‰. Atom editor เบซเบผเบท Visual Studio Code เบกเบต plugins เบ—เบตเปˆเบกเบตเบ›เบฐเป‚เบซเบเบ”เบซเบผเบฒเบเบขเปˆเบฒเบ‡เบ—เบตเปˆเป€เบฎเบฑเบ”เปƒเบซเป‰เบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบเบฑเบš Terraform เบ‡เปˆเบฒเบเบ‚เบถเป‰เบ™.

เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ”เบฒเบงเป‚เบซเบฅเบ”เบเบฒเบ™เปเบˆเบเบขเบฒเบ เบˆเบฒเบเบ™เบตเป‰. เบเบฒเบ™เบงเบดเป€เบ„เบฒเบฐเบฅเบฒเบเบฅเบฐเบญเบฝเบ”เบเปˆเบฝเบงเบเบฑเบšเบ„เบงเบฒเบกเบชเบฒเบกเบฒเบ”เบ‚เบญเบ‡ Terraform เบ—เบฑเบ‡เบซเบกเบปเบ”เปเบกเปˆเบ™เป€เบเบตเบ™เบ‚เบญเบšเป€เบ‚เบ”เบ‚เบญเบ‡เบšเบปเบ”เบ„เบงเบฒเบกเบ™เบตเป‰, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบˆเปเบฒเบเบฑเบ”เบ•เบปเบงเป€เบญเบ‡เบเบฑเบšเบˆเบธเบ”เบ•เบปเป‰เบ™เบ•เป.

เบงเบดเบ—เบตเบเบฒเบ™เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™

เบฅเบฐเบซเบฑเบ”เป€เบ•เบฑเบกเบ‚เบญเบ‡เป‚เบ„เบ‡เบเบฒเบ™เปเบกเปˆเบ™ เบขเบนเปˆเปƒเบ™เบšเปˆเบญเบ™เป€เบเบฑเบšเบกเป‰เบฝเบ™เบ‚เบญเบ‡เบ‚เป‰เบญเบ. เบžเบงเบเป€เบฎเบปเบฒ clone repository เบเบฑเบšเบ•เบปเบงเป€เบฎเบปเบฒเป€เบญเบ‡. เบเปˆเบญเบ™เบ—เบตเปˆเบˆเบฐเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™, เบ—เปˆเบฒเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เปƒเบซเป‰เปเบ™เปˆเปƒเบˆเบงเปˆเบฒเบ—เปˆเบฒเบ™เบกเบต AWS CLI เบ•เบดเบ”เบ•เบฑเป‰เบ‡เปเบฅเบฐเบเปเบฒเบซเบ™เบปเบ”เบ„เปˆเบฒ, เป€เบžเบฒเบฐเบงเปˆเบฒ ... Terraform เบˆเบฐเบŠเบญเบเบซเบฒเบ‚เปเป‰เบกเบนเบ™เบ›เบฐเบˆเปเบฒเบ•เบปเบงเบขเบนเปˆเปƒเบ™เป„เบŸเบฅเปŒ ~/.aws/credentials.

เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบ—เบตเปˆเบ”เบตเปเบกเปˆเบ™เบเบฒเบ™เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบ„เปเบฒเบชเบฑเปˆเบ‡เปเบœเบ™เบเบฒเบ™เบเปˆเบญเบ™เบ—เบตเปˆเบˆเบฐเบ™เปเบฒเปƒเบŠเป‰เป‚เบ„เบ‡เบชเป‰เบฒเบ‡เบžเบทเป‰เบ™เบ–เบฒเบ™เบ—เบฑเบ‡เบซเบกเบปเบ”เป€เบžเบทเปˆเบญเป€เบšเบดเปˆเบ‡เบชเบดเปˆเบ‡เบ—เบตเปˆ Terraform เบเปเบฒเบฅเบฑเบ‡เบชเป‰เบฒเบ‡เบชเปเบฒเบฅเบฑเบšเบžเบงเบเป€เบฎเบปเบฒเบขเบนเปˆเปƒเบ™เบ„เบฅเบฒเบง:

terraform.exe plan

เบ—เปˆเบฒเบ™เบˆเบฐเบ–เบทเบเป€เบ•เบทเบญเบ™เปƒเบซเป‰เปƒเบชเปˆเป€เบšเบตเป‚เบ—เบฅเบฐเบชเบฑเบšเป€เบžเบทเปˆเบญเบชเบปเปˆเบ‡เบเบฒเบ™เปเบˆเป‰เบ‡เป€เบ•เบทเบญเบ™เป„เบ›เบซเบฒ. เบกเบฑเบ™เบšเปเปˆเบˆเปเบฒเป€เบ›เบฑเบ™เบ—เบตเปˆเบˆเบฐเปƒเบชเปˆเบกเบฑเบ™เบขเบนเปˆเปƒเบ™เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบ™เบตเป‰.

เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเป‚เบเบ‡ Aviasales API เบเบฑเบš Amazon Kinesis เปเบฅเบฐเบ„เบงเบฒเบกเบฅเบฝเบšเบ‡เปˆเบฒเบ serverless
เบกเบตเบเบฒเบ™เบงเบดเป€เบ„เบฒเบฐเปเบœเบ™เบเบฒเบ™เบ”เปเบฒเป€เบ™เบตเบ™เบ‡เบฒเบ™เบ‚เบญเบ‡เป‚เบ„เบ‡เบเบฒเบ™, เบžเบงเบเป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ”เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบชเป‰เบฒเบ‡เบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™:

terraform.exe apply

เบซเบผเบฑเบ‡เบˆเบฒเบเบชเบปเปˆเบ‡เบ„เปเบฒเบชเบฑเปˆเบ‡เบ™เบตเป‰, เบ—เปˆเบฒเบ™เบˆเบฐเบ–เบทเบเบฎเป‰เบญเบ‡เบ‚เปเปƒเบซเป‰เปƒเบชเปˆเป€เบšเบตเป‚เบ—เบฅเบฐเบชเบฑเบšเบญเบตเบเป€เบ—เบทเปˆเบญเบซเบ™เบถเปˆเบ‡; เบเบปเบ” "เปเบกเปˆเบ™เปเบฅเป‰เบง" เป€เบกเบทเปˆเบญเบ„เปเบฒเบ–เบฒเบกเบเปˆเบฝเบงเบเบฑเบšเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบ•เบปเบงเบˆเบดเบ‡เบ–เบทเบเบชเบฐเปเบ”เบ‡. เบ™เบตเป‰เบˆเบฐเบŠเปˆเบงเบเปƒเบซเป‰เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเป‚เบ„เบ‡เบชเป‰เบฒเบ‡เบžเบทเป‰เบ™เบ–เบฒเบ™เบ—เบฑเบ‡เบซเบกเบปเบ”, เบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบ—เบตเปˆเบˆเปเบฒเป€เบ›เบฑเบ™เบ—เบฑเบ‡เบซเบกเบปเบ”เบ‚เบญเบ‡ EC2, เบ›เบฐเบ•เบดเบšเบฑเบ”เบซเบ™เป‰เบฒเบ—เบตเปˆ lambda, เปเบฅเบฐเบญเบทเปˆเบ™เป†.

เบซเบผเบฑเบ‡เบˆเบฒเบเบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เบ—เบฑเบ‡เบซเบกเบปเบ”เป„เบ”เป‰เบ–เบทเบเบชเป‰เบฒเบ‡เบ‚เบทเป‰เบ™เบขเปˆเบฒเบ‡เบชเปเบฒเป€เบฅเบฑเบ”เบœเบปเบ™เป‚เบ”เบเบœเปˆเบฒเบ™เบฅเบฐเบซเบฑเบ” Terraform, เบ—เปˆเบฒเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบฅเบฒเบเบฅเบฐเบญเบฝเบ”เบ‚เบญเบ‡เบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบ Kinesis Analytics (เปเบ•เปˆเบซเบ™เป‰เบฒเป€เบชเบเบ”เบฒเบ, เบ‚เป‰เบญเบเบšเปเปˆเป„เบ”เป‰เบŠเบญเบเบซเบฒเบงเบดเบ—เบตเบ™เบตเป‰เป‚เบ”เบเบเบปเบ‡เบˆเบฒเบเบฅเบฐเบซเบฑเบ”).

เป€เบ›เบตเบ”เบ•เบปเบงเปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™:

เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเป‚เบเบ‡ Aviasales API เบเบฑเบš Amazon Kinesis เปเบฅเบฐเบ„เบงเบฒเบกเบฅเบฝเบšเบ‡เปˆเบฒเบ serverless
เบซเบผเบฑเบ‡โ€‹เบˆเบฒเบโ€‹เบ™เบตเป‰โ€‹, เบ—เปˆเบฒเบ™โ€‹เบˆเบฐโ€‹เบ•เป‰เบญเบ‡โ€‹เบเปเบฒโ€‹เบ™เบปเบ”โ€‹เบขเปˆเบฒเบ‡โ€‹เบŠเบฑเบ”โ€‹เป€เบˆเบ™โ€‹เบŠเบทเปˆโ€‹เบ™โ€‹เป‰โ€‹เปโ€‹เบฒโ€‹เปƒเบ™โ€‹เบ„เปเบฒโ€‹เบฎเป‰เบญเบ‡โ€‹เบชเบฐโ€‹เบซเบกเบฑเบโ€‹เป‚เบ”เบโ€‹เบเบฒเบ™โ€‹เป€เบฅเบทเบญเบโ€‹เบˆเบฒเบโ€‹เบšเบฑเบ™โ€‹เบŠเบตโ€‹เบฅเบฒเบโ€‹เบเบฒเบ™โ€‹เป€เบฅเบทเปˆเบญเบ™โ€‹เบฅเบปเบ‡โ€‹:

เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเป‚เบเบ‡ Aviasales API เบเบฑเบš Amazon Kinesis เปเบฅเบฐเบ„เบงเบฒเบกเบฅเบฝเบšเบ‡เปˆเบฒเบ serverless
เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเป‚เบเบ‡ Aviasales API เบเบฑเบš Amazon Kinesis เปเบฅเบฐเบ„เบงเบฒเบกเบฅเบฝเบšเบ‡เปˆเบฒเบ serverless
เปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™เบ—เบธเบเบชเบดเปˆเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡เปเบกเปˆเบ™เบžเป‰เบญเบกเบ—เบตเปˆเบˆเบฐเป„เบ›.

เบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบ

เบšเปเปˆเบงเปˆเบฒเบ—เปˆเบฒเบ™เบˆเบฐเบ™เบณเปƒเบŠเป‰เบฅเบฐเบšเบปเบšเปเบ™เบงเปƒเบ”, เบ”เป‰เบงเบเบ•เบปเบ™เป€เบญเบ‡ เบซเบผเบทเบœเปˆเบฒเบ™เบฅเบฐเบซเบฑเบ” Terraform, เบกเบฑเบ™เบˆเบฐเป€เบฎเบฑเบ”เบงเบฝเบเบ„เบทเบเบฑเบ™.

เบžเบงเบเป€เบฎเบปเบฒเป€เบ‚เบปเป‰เบฒเบชเบนเปˆเบฅเบฐเบšเบปเบšเบœเปˆเบฒเบ™ SSH เป„เบ›เบซเบฒเป€เบ„เบทเปˆเบญเบ‡ virtual EC2 เบ—เบตเปˆ Kinesis Agent เบ–เบทเบเบ•เบดเบ”เบ•เบฑเป‰เบ‡ เปเบฅเบฐเปเบฅเปˆเบ™เบชเบฐเบ„เบฃเบดเบš api_caller.py

sudo ./api_caller.py TOKEN

เบชเบดเปˆเบ‡เบ—เบตเปˆเบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เป€เบฎเบฑเบ”เปเบกเปˆเบ™เบฅเปเบ–เป‰เบฒ SMS เป„เบ›เบซเบฒเป€เบšเบตเบ‚เบญเบ‡เบ—เปˆเบฒเบ™:

เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเป‚เบเบ‡ Aviasales API เบเบฑเบš Amazon Kinesis เปเบฅเบฐเบ„เบงเบฒเบกเบฅเบฝเบšเบ‡เปˆเบฒเบ serverless
SMS - เบ‚เปเป‰เบ„เบงเบฒเบกเบกเบฒเบฎเบญเบ”เป‚เบ—เบฅเบฐเบชเบฑเบšเบ‚เบญเบ‡เบ—เปˆเบฒเบ™เปƒเบ™เป€เบเบทเบญเบš 1 เบ™เบฒเบ—เบต:

เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเป‚เบเบ‡ Aviasales API เบเบฑเบš Amazon Kinesis เปเบฅเบฐเบ„เบงเบฒเบกเบฅเบฝเบšเบ‡เปˆเบฒเบ serverless
เบกเบฑเบ™เบเบฑเบ‡เบ„เบปเบ‡เบขเบนเปˆเป€เบžเบทเปˆเบญเป€เบšเบดเปˆเบ‡เบงเปˆเบฒเบšเบฑเบ™เบ—เบถเบเป„เบ”เป‰เบ–เบทเบเบšเบฑเบ™เบ—เบถเบเป„เบงเป‰เปƒเบ™เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™ DynamoDB เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบงเบดเป€เบ„เบฒเบฐเบฅเบฒเบเบฅเบฐเบญเบฝเบ”เป€เบžเบตเปˆเบกเป€เบ•เบตเบกเบ•เปเปˆเบกเบฒ. เบ•เบฒเบ•เบฐเบฅเบฒเบ‡ airline_tickets เบกเบตเบ›เบฐเบกเบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบ•เปเปˆเป„เบ›เบ™เบตเป‰:

เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเป‚เบเบ‡ Aviasales API เบเบฑเบš Amazon Kinesis เปเบฅเบฐเบ„เบงเบฒเบกเบฅเบฝเบšเบ‡เปˆเบฒเบ serverless

เบชเบฐเบซเบฅเบธเบš

เปƒเบ™เป„เบฅเบเบฐเบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบชเปเบฒเป€เบฅเบฑเบ”, เบฅเบฐเบšเบปเบšเบเบฒเบ™เบ›เบฐเบกเบงเบ™เบœเบปเบ™เบ‚เปเป‰เบกเบนเบ™เบญเบญเบ™เป„เบฅเบ™เปŒเป„เบ”เป‰เบ–เบทเบเบชเป‰เบฒเบ‡เบ‚เบถเป‰เบ™เป‚เบ”เบเบญเบตเบ‡เปƒเบชเปˆ Amazon Kinesis. เบ—เบฒเบ‡เป€เบฅเบทเบญเบเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เบ•เบปเบงเปเบ—เบ™ Kinesis เบชเบปเบกเบ—เบปเบšเบเบฑเบš Kinesis Data Stream เปเบฅเบฐเบเบฒเบ™เบงเบดเป€เบ„เบฒเบฐเป€เบงเบฅเบฒเบ—เบตเปˆเปเบ—เป‰เบˆเบดเบ‡ Kinesis Analytics เป‚เบ”เบเปƒเบŠเป‰เบ„เปเบฒเบชเบฑเปˆเบ‡ SQL, เป€เบŠเบฑเปˆเบ™เบ”เบฝเบงเบเบฑเบ™เบเบฑเบšเบเบฒเบ™เป‚เบ•เป‰เบ•เบญเบšเบ‚เบญเบ‡ Amazon Kinesis เบเบฑเบšเบšเปเบฅเบดเบเบฒเบ™ AWS เบญเบทเปˆเบ™เป†เป„เบ”เป‰เบ–เบทเบเบžเบดเบˆเบฒเบฅเบฐเบ™เบฒ.

เบžเบงเบโ€‹เป€เบฎเบปเบฒโ€‹เป„เบ”เป‰โ€‹เบ™เปเบฒโ€‹เปƒเบŠเป‰โ€‹เบฅเบฐโ€‹เบšเบปเบšโ€‹เบ‚เป‰เบฒเบ‡โ€‹เป€เบ—เบดเบ‡โ€‹เบ™เบตเป‰โ€‹เปƒเบ™โ€‹เบชเบญเบ‡โ€‹เบงเบดโ€‹เบ—เบตโ€‹เบเบฒเบ™โ€‹: เป€เบ›เบฑเบ™โ€‹เบ„เบนเปˆโ€‹เบกเบทโ€‹เบเบฒเบงโ€‹เบซเบผเบฒเบโ€‹เปเบฅเบฐโ€‹เป„เบงโ€‹เบˆเบฒเบโ€‹เบฅเบฐโ€‹เบซเบฑเบ” Terraformโ€‹.

เบฅเบฐเบซเบฑเบ”เปเบซเบผเปˆเบ‡เป‚เบ„เบ‡เบเบฒเบ™เบ—เบฑเบ‡เปเบปเบ”เปเบกเปˆเบ™เบกเบตเบขเบนเปˆ เบขเบนเปˆเปƒเบ™เบšเปˆเบญเบ™เป€เบเบฑเบšเบกเป‰เบฝเบ™ GitHub เบ‚เบญเบ‡เบ‚เป‰เบญเบ, เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเปเบ™เบฐเบ™เปเบฒเปƒเบซเป‰เบ—เปˆเบฒเบ™เบ„เบธเป‰เบ™เป€เบ„เบตเบเบเบฑเบšเบกเบฑเบ™.

เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบเบดเบ™เบ”เบตเบ—เบตเปˆเบˆเบฐเบชเบปเบ™เบ—เบฐเบ™เบฒเบšเบปเบ”เบ„เบงเบฒเบก, เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบซเบงเบฑเบ‡เบงเปˆเบฒเบˆเบฐเป„เบ”เป‰เบ„เปเบฒเป€เบซเบฑเบ™เบ‚เบญเบ‡เบ—เปˆเบฒเบ™. เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบซเบงเบฑเบ‡เบงเปˆเบฒเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบงเบดเบžเบฒเบเบงเบดเบˆเบฒเบ™เบเปเปˆเบชเป‰เบฒเบ‡.

เบ‚เป‰เบฒโ€‹เบžเบฐโ€‹เป€เบˆเบปเป‰เบฒโ€‹เบ‚เปโ€‹เปƒเบซเป‰โ€‹เบ—เปˆเบฒเบ™โ€‹เบชเบปเบšโ€‹เบœเบปเบ™โ€‹เบชเปเบฒโ€‹เป€เบฅเบฑเบ”โ€‹!

เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™: www.habr.com

เป€เบžเบตเปˆเบกเบ„เบงเบฒเบกเบ„เบดเบ”เป€เบซเบฑเบ™