Aviasales API ื™ื ื˜ืึทื’ืจื™ื™ืฉืึทืŸ ืžื™ื˜ Amazon Kinesis ืื•ืŸ ืคึผืึทืฉื˜ืขืก ืึธืŸ ืกืขืจื•ื•ืขืจืก

ื”ื™ื™ ื”ืื‘ืจ!

ืฆื™ ืื™ืจ ื•ื•ื™ ืคืœื™ืขื ื“ื™ืง ืขืจืคึผืœื™ื™ื ื–? ืื™ืš ื”ืึธื‘ ื“ืึธืก ืœื™ื‘, ืึธื‘ืขืจ ื‘ืขืฉืึทืก ื–ื™ืš-ืืคื’ืขื–ื•ื ื“ืขืจื˜ืงื™ื™ื˜ ืื™ืš ืื•ื™ืš ื’ืขืคืืœืŸ ืื™ืŸ ืœื™ื‘ืข ืžื™ื˜ ืึทื ืึทืœื™ื™ื–ื™ื ื’ ื“ืึทื˜ืŸ ืื•ื™ืฃ ืœื•ืคื˜ ื˜ื™ืงื™ืฅ ืคื•ืŸ ืื™ื™ืŸ ื‘ืึทื•ื•ื•ืกื˜ ืžื™ื˜ืœ - Aviasales.

ื”ื™ื™ึทื ื˜ ืžื™ืจ ื•ื•ืขืœืŸ ืึทื ืึทืœื™ื™ื– ื“ื™ ืึทืจื‘ืขื˜ ืคื•ืŸ Amazon Kinesis, ื‘ื•ื™ืขืŸ ืึท ืกื˜ืจื™ืžื™ื ื’ ืกื™ืกื˜ืขื ืžื™ื˜ ืคืึทืงื˜ื™ืฉ-ืฆื™ื™ื˜ ืึทื ืึทืœื™ื˜ื™ืงืก, ื™ื ืกื˜ืึทืœื™ืจืŸ ื“ื™ Amazon DynamoDB NoSQL ื“ืึทื˜ืึทื‘ื™ื™ืก ื•ื•ื™ ื“ื™ ื”ื•ื™ืคึผื˜ ื“ืึทื˜ืŸ ืกื˜ืึธืจื™ื“ื–ืฉ ืื•ืŸ ืฉื˜ืขืœืŸ SMS ื ืึธื•ื˜ืึทืคืึทืงื™ื™ืฉืึทื ื– ืคึฟืึทืจ ื˜ืฉื™ืงืึทื•ื•ืข ื˜ื™ืงื™ืฅ.

ืึทืœืข ื“ื™ ืคืจื˜ื™ื ื–ืขื ืขืŸ ืื•ื ื˜ืขืจ ื“ื™ ืฉื ื™ื™ึทื“ืŸ! ื’ื™ื™!

Aviasales API ื™ื ื˜ืึทื’ืจื™ื™ืฉืึทืŸ ืžื™ื˜ Amazon Kinesis ืื•ืŸ ืคึผืึทืฉื˜ืขืก ืึธืŸ ืกืขืจื•ื•ืขืจืก

ื”ืงื“ืžื”

ืคึฟืึทืจ ื“ื™ ื‘ื™ื™ึทืฉืคึผื™ืœ, ืžื™ืจ ื“ืึทืจืคึฟืŸ ืฆื•ื˜ืจื™ื˜ ืฆื• Aviasales API. ืึทืงืกืขืก ืฆื• ืขืก ืื™ื– ืฆื•ื’ืขืฉื˜ืขืœื˜ ืคืจื™ื™ ืื•ืŸ ืึธืŸ ืจื™ืกื˜ืจื™ืงืฉืึทื ื–; ืื™ืจ ื ืึธืจ ื“ืึทืจืคึฟืŸ ืฆื• ืคืึทืจืฉืจื™ื™ึทื‘ืŸ ืื™ืŸ ื“ื™ "ื“ืขื•ื•ืขืœืึธืคึผืขืจืก" ืึธืคึผื˜ื™ื™ืœื•ื ื’ ืฆื• ื‘ืึทืงื•ืžืขืŸ ื“ื™ื™ืŸ ืึทืคึผื™ ืกื™ืžืขืŸ ืฆื• ืึทืงืกืขืก ื“ื™ ื“ืึทื˜ืŸ.

ื“ืขืจ ื”ื•ื™ืคึผื˜ ืฆื™ืœ ืคื•ืŸ ื“ืขื ืึทืจื˜ื™ืงืœ ืื™ื– ืฆื• ื’ืขื‘ืŸ ืึท ื’ืขื ืขืจืึทืœ ืคืืจืฉื˜ืื ื“ ืคื•ืŸ ื“ื™ ื ื•ืฆืŸ ืคื•ืŸ ืื™ื ืคึฟืึธืจืžืึทืฆื™ืข ืกื˜ืจื™ืžื™ื ื’ ืื™ืŸ AWS; ืžื™ืจ ื ืขืžืขืŸ ืื™ืŸ ื—ืฉื‘ื•ืŸ ืึทื– ื“ื™ ื“ืึทื˜ืŸ ืื•ืžื’ืขืงืขืจื˜ ื“ื•ืจืš ื“ื™ ืึทืคึผื™ ื’ืขื•ื•ื™ื™ื ื˜ ื–ืขื ืขืŸ ื ื™ืฉื˜ ืฉื˜ืจืขื ื’ ื“ืขืจื”ื™ื™ึทื ื˜ื™ืงื˜ ืื•ืŸ ื–ืขื ืขืŸ ื˜ืจืึทื ืกืžื™ื˜ื˜ืขื“ ืคึฟื•ืŸ ื“ื™ ืงืึทืฉ. ื’ืขื’ืจื™ื ื“ืขื˜ ื‘ืื–ื™ืจื˜ ืื•ื™ืฃ ืึธื ืคึฟืจืขื’ืŸ ื“ื•ืจืš ื ื™ืฆืขืจืก ืคื•ืŸ ื“ื™ Aviasales.ru ืื•ืŸ Jetradar.com ื–ื™ื™ื˜ืœืขืš ืคึฟืึทืจ ืœืขืฆื˜ืข 48 ืฉืขื”.

Kinesis-ืึทื’ืขื ื˜, ืื™ื ืกื˜ืึทืœื™ืจืŸ ืื•ื™ืฃ ื“ื™ ืคึผืจืึทื“ื•ืกื™ื ื’ ืžืึทืฉื™ืŸ, ื‘ืืงื•ืžืขืŸ ื“ื•ืจืš ื“ื™ API ื•ื•ืขื˜ ืื•ื™ื˜ืึธืžืึทื˜ื™ืฉ ืคึผืึทืจืก ืื•ืŸ ื™ื‘ืขืจืฉื™ืงืŸ ื“ืึทื˜ืŸ ืฆื• ื“ื™ ื’ืขื‘ืขื˜ืŸ ื˜ื™ื™ึทืš ื“ื•ืจืš Kinesis Data Analytics. ื“ื™ ืจื•ื™ ื•ื•ืขืจืกื™ืข ืคื•ืŸ โ€‹โ€‹ื“ืขื ื˜ื™ื™ึทืš ื•ื•ืขื˜ ื–ื™ื™ืŸ ื’ืขืฉืจื™ื‘ืŸ ื’ืœื™ื™ืš ืฆื• ื“ื™ ืงืจืึธื. ื“ื™ ืจื•ื™ ื“ืึทื˜ืŸ ืกื˜ืึธืจื™ื“ื–ืฉ ื“ื™ืคึผืœื•ื™ื“ ืื™ืŸ DynamoDB ื•ื•ืขื˜ ืœืึธื–ืŸ ื“ื™ืคึผืขืจ ื‘ื™ืœืขื˜ ืึทื ืึทืœื™ืกื™ืก ื“ื•ืจืš BI ืžื›ืฉื™ืจื™ื, ืึทื–ืึท ื•ื•ื™ AWS ืงื•ื•ื™ืง ืกื™ื™ื˜.

ืžื™ืจ ื•ื•ืขืœืŸ ื‘ืึทื˜ืจืึทื›ื˜ืŸ ืฆื•ื•ื™ื™ ืึธืคึผืฆื™ืขืก ืคึฟืึทืจ ื“ื™ืคึผืœื•ื™ื™ื ื’ ื“ื™ ื’ืื ืฆืข ื™ื ืคืจืึทืกื˜ืจืึทืงื˜ืฉืขืจ:

  • ืžืึทื ื•ืึทืœ - ื“ื•ืจืš AWS ืžืึทื ืึทื’ืขืžืขื ื˜ ืงืึทื ืกืึธื•ืœ;
  • ื™ื ืคืจืึทืกื˜ืจืึทืงื˜ืฉืขืจ ืคึฟื•ืŸ ื˜ืขืจืจืึทืคืึธืจื ืงืึธื“ ืื™ื– ืคึฟืึทืจ ืคื•ื™ืœ ืึธื˜ืึทืžื™ื™ื˜ืขืจื–;

ืึทืจืงืึทื˜ืขืงื˜ืฉืขืจ ืคื•ืŸ ื“ื™ ื“ืขื•ื•ืขืœืึธืคึผืขื“ ืกื™ืกื˜ืขื

Aviasales API ื™ื ื˜ืึทื’ืจื™ื™ืฉืึทืŸ ืžื™ื˜ Amazon Kinesis ืื•ืŸ ืคึผืึทืฉื˜ืขืก ืึธืŸ ืกืขืจื•ื•ืขืจืก
ื‘ืื ื•ืฆื˜ ืงืึทืžืคึผืึธื•ื ืึทื ืฅ:

  • Aviasales API - ื“ื™ ื“ืึทื˜ืŸ ืื•ืžื’ืขืงืขืจื˜ ื“ื•ืจืš ื“ืขื ืึทืคึผื™ ื•ื•ืขื˜ ื–ื™ื™ืŸ ื’ืขื•ื•ื™ื™ื ื˜ ืคึฟืึทืจ ืึทืœืข ืกืึทื‘ืกืึทืงื•ื•ืึทื ื˜ ืึทืจื‘ืขื˜;
  • EC2 ืคึผืจืึธื“ื•ืฆื™ืจืขืจ ื‘ื™ื™ึทืฉืคึผื™ืœ - ืึท ืจืขื’ื•ืœืขืจ ื•ื•ื™ืจื˜ื•ืึทืœ ืžืึทืฉื™ืŸ ืื™ืŸ ื“ื™ ื•ื•ืึธืœืงืŸ ืื•ื™ืฃ ื•ื•ืึธืก ื“ื™ ืึทืจื™ื™ึทื ืฉืจื™ื™ึทื‘ ื“ืึทื˜ืŸ ื˜ื™ื™ึทืš ื•ื•ืขื˜ ื–ื™ื™ืŸ ื“ื–ืฉืขื ืขืจื™ื™ื˜ืึทื“:
    • ืงื™ื ืขืกื™ืก ืึทื’ืขื ื˜ ืื™ื– ืึท Java ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ ืื™ื ืกื˜ืึทืœื™ืจืŸ ืœืึธื•ืงืึทืœื™ ืื•ื™ืฃ ื“ื™ ืžืึทืฉื™ืŸ ื•ื•ืึธืก ื’ื™ื˜ ืึทืŸ ื’ืจื™ื ื’ ื•ื•ืขื’ ืฆื• ื–ืึทืžืœืขืŸ ืื•ืŸ ืฉื™ืงืŸ ื“ืึทื˜ืŸ ืฆื• Kinesis (Kinesis Data Streams ืึธื“ืขืจ Kinesis Firehose). ื“ืขืจ ืึทื’ืขื ื˜ ืงืขืกื™ื™ื“ืขืจ ืžืึธื ื™ื˜ืึธืจืก ืึท ืกื›ื•ื ืคื•ืŸ ื˜ืขืงืขืก ืื™ืŸ ื“ื™ ืกืคึผืขืกื™ืคื™ืขื“ ื“ื™ื™ืจืขืงื˜ืขืจื™ื– ืื•ืŸ ืกืขื ื“ื– ื ื™ื™ึท ื“ืึทื˜ืŸ ืฆื• ืงื™ื ืขืกื™ืก;
    • ืึทืคึผื™ ืงืึทืœืœืขืจ ืกืงืจื™ืคึผื˜ - ื ืคึผื™ื˜ื”ืึธืŸ ืฉืจื™ืคื˜ ื•ื•ืึธืก ืžืื›ื˜ ืจื™ืงื•ื•ืขืก ืฆื• ื“ื™ ืึทืคึผื™ ืื•ืŸ ืœื™ื™ื’ื˜ ื“ื™ ืขื ื˜ืคืขืจ ืื™ืŸ ืึท ื˜ืขืงืข ื•ื•ืึธืก ืื™ื– ืžืึธื ื™ื˜ืึธืจืขื“ ื“ื•ืจืš ื“ื™ ืงื™ื ืขืกื™ืก ืึทื’ืขื ื˜;
  • ืงื™ื ืขืกื™ืก ื“ืึทื˜ืึท ืกื˜ืจื™ืžื– - ืคืึทืงื˜ื™ืฉ-ืฆื™ื™ื˜ ื“ืึทื˜ืŸ ืกื˜ืจื™ืžื™ื ื’ ื“ื™ื ืกื˜ ืžื™ื˜ ื‘ืจื™ื™ื˜ ืกืงื™ื™ืœื™ื ื’ ืงื™ื™ืคึผืึทื‘ื™ืœืึทื˜ื™ื–;
  • ืงื™ื ืขืกื™ืก ืึทื ืึทืœื™ื˜ื™ืงืก ืื™ื– ืึท ืกืขืจื•ื•ืขืจืœืขืกืก ื“ื™ื ืกื˜ ื•ื•ืึธืก ืกื™ืžืคึผืœืึทืคื™ื™ื– ื“ื™ ืึทื ืึทืœื™ืกื™ืก ืคื•ืŸ ืกื˜ืจื™ืžื™ื ื’ ื“ืึทื˜ืŸ ืื™ืŸ ืคืึทืงื˜ื™ืฉ ืฆื™ื™ื˜. Amazon Kinesis Data Analytics ืงืึทื ืคื™ื’ื™ืขืจ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ ืจืขืกื•ืจืกืŸ ืื•ืŸ ืื•ื™ื˜ืึธืžืึทื˜ื™ืฉ ื•ื•ืึธื’ ืฆื• ืฉืขืคึผืŸ ืงื™ื™ืŸ ื‘ืึทื ื“ ืคื•ืŸ ื™ื ืงืึทืžื™ื ื’ ื“ืึทื˜ืŸ;
  • AWS Lambda - ืึท ื“ื™ื ืกื˜ ื•ื•ืึธืก ืึทืœืึทื•ื– ืื™ืจ ืฆื• ืœื•ื™ืคืŸ ืงืึธื“ ืึธืŸ ื‘ืึทืงื™ื ื’ ืึธื“ืขืจ ื‘ืึทืฉื˜ืขื˜ื™ืงืŸ ืกืขืจื•ื•ืขืจืก. ืึทืœืข ืงืึทืžืคึผื™ื•ื˜ื™ื ื’ ืžืึทื›ื˜ ืื™ื– ืื•ื™ื˜ืึธืžืึทื˜ื™ืฉ ืกืงื™ื™ืœื“ ืคึฟืึทืจ ื™ืขื“ืขืจ ืจื•ืคืŸ;
  • ืึทืžืึทื–ืึธืŸ ื“ื™ื ืึทืžืึธื“ื‘ - ื ื“ืึทื˜ืึทื‘ื™ื™ืก ืคื•ืŸ ืฉืœื™ืกืœ-ื•ื•ืขืจื˜ ืคึผืขืจื– ืื•ืŸ ื“ืึธืงื•ืžืขื ื˜ืŸ ื•ื•ืึธืก ื’ื™ื˜ ืœื™ื™ื˜ืึทื ืกื™ ืคื•ืŸ ื•ื•ื™ื™ื ื™ืงืขืจ ื•ื•ื™ 10 ืžื™ืœื™ืกืขืงืึทื ื“ื– ื•ื•ืขืŸ ืคืœื™ืกื ื“ื™ืง ืื™ืŸ ืงื™ื™ืŸ ื•ื•ืึธื’. ื•ื•ืขืŸ ืื™ืจ ื ื•ืฆืŸ DynamoDB, ืื™ืจ ื˜ืึธืŸ ื ื™ื˜ ื“ืึทืจืคึฟืŸ ืฆื• ืฆื•ืฉื˜ืขืœืŸ, ืœืึทื˜ืข ืึธื“ืขืจ ืคื™ืจืŸ ืงื™ื™ืŸ ืกืขืจื•ื•ืขืจืก. DynamoDB ืกืงืึทืœืขืก ืื•ื™ื˜ืึธืžืึทื˜ื™ืฉ ื˜ื™ืฉืŸ ืฆื• ืกื˜ืจื•ื™ืขืจืŸ ื“ื™ ืกื•ืžืข ืคื•ืŸ โ€‹โ€‹ืคืึทืจืึทื ืขืŸ ืจืขืกื•ืจืกืŸ ืื•ืŸ ื”ืึทืœื˜ืŸ ื”ื•ื™ืš ืคืึธืจืฉื˜ืขืœื•ื ื’. ืงื™ื™ืŸ ืกื™ืกื˜ืขื ืึทื“ืžื™ื ื™ืกื˜ืจืึทืฆื™ืข ืื™ื– ืคืืจืœืื ื’ื˜;
  • ืึทืžืึทื–ืึธืŸ ืกื ืก - ืึท ื’ืึธืจ ื’ืขืจืื˜ืŸ ื“ื™ื ืกื˜ ืคึฟืึทืจ ืฉื™ืงื˜ ืึทืจื˜ื™ืงืœืขืŸ ืžื™ื˜ ื“ื™ ืึทืจื•ื™ืกื’ืขื‘ืขืจ-ืึทื‘ืึธื ืขื ื˜ (ืคึผื•ื‘ / ืกื•ื‘) ืžืึธื“ืขืœ, ืžื™ื˜ ื•ื•ืึธืก ืื™ืจ ืงืขื ืขืŸ ื™ื–ืึธืœื™ืจืŸ ืžื™ืงืจืึธ ื‘ืึทื“ื™ื ื•ื ื’ืก, ืคื•ื ืื ื“ืขืจื’ืขื˜ื™ื™ืœื˜ ืกื™ืกื˜ืขืžืขืŸ ืื•ืŸ ืกืขืจื•ื•ืขืจืœืขืกืก ืึทืคึผืœืึทืงื™ื™ืฉืึทื ื–. SNS ืงืขื ืขืŸ ื•ื•ืขืจืŸ ื’ืขื ื•ืฆื˜ ืฆื• ืฉื™ืงืŸ ืื™ื ืคึฟืึธืจืžืึทืฆื™ืข ืฆื• ืกื•ืฃ ื ื™ืฆืขืจืก ื“ื•ืจืš ืจื™ืจืขื•ื•ื“ื™ืง ืฉื˜ื•ืคึผืŸ ื ืึธื•ื˜ืึทืคืึทืงื™ื™ืฉืึทื ื–, 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 ื—ืฉื‘ื•ืŸ. ืื™ืš ื•ื•ืึธืœื˜ ื•ื•ื™ ืฆื• ื’ืœื™ื™ืš ื•ืคืžืขืจืงื–ืึทืžืงื™ื™ื˜ ืฆื• ื“ืขื ืคืึทืงื˜ ืึทื– ืงื™ื ืขืกื™ืก ืื•ืŸ ืฉื™ืงืŸ ื ืึธื•ื˜ืึทืคืึทืงื™ื™ืฉืึทื ื– ื“ื•ืจืš SMS ื–ืขื ืขืŸ ื ื™ืฉื˜ ืึทืจื™ื™ึทื ื’ืขืจืขื›ื ื˜ ืื™ืŸ ื“ื™ ื™ืขืจืœืขืš ืคืจื™ื™ ื˜ื™ื™ืขืจ (ืคืจื™ื™ ื ื•ืฆืŸ). ืื‘ืขืจ ืืคื™ืœื• ื˜ืจืึธืฅ ื“ืขื, ืžื™ื˜ ืึท ืคึผืึธืจ ืคื•ืŸ ื“ืึธืœืœืึทืจืก ืื™ืŸ ื–ื™ื ืขืŸ, ืขืก ืื™ื– ื’ืึทื ืฅ ืžืขื’ืœืขืš ืฆื• ื‘ื•ื™ืขืŸ ื“ื™ ืคืืจื’ืขืœื™ื™ื’ื˜ ืกื™ืกื˜ืขื ืื•ืŸ ืฉืคึผื™ืœืŸ ืžื™ื˜ ืื™ื. ืื•ืŸ, ืคื•ืŸ ืงื•ืจืก, ื˜ืึธืŸ ื ื™ื˜ ืคืึทืจื’ืขืกืŸ ืฆื• ื•ื™ืกืžืขืงืŸ ืึทืœืข ืจืขืกื•ืจืกืŸ ื ืึธืš ื–ื™ื™ ื–ืขื ืขืŸ ื ื™ื˜ ืžืขืจ ื“ืืจืฃ.

ืฆื•ืž ื’ืœื™ืง, DynamoDb ืื•ืŸ lambda ืคืึทื ื’ืงืฉืึทื ื– ื•ื•ืขื˜ ื–ื™ื™ืŸ ืคืจื™ื™ ืคึฟืึทืจ ืื•ื ื“ื– ืื•ื™ื‘ ืžื™ืจ ื˜ืจืขืคืŸ ืื•ื ื“ื–ืขืจ ื›ื•ื™ื“ืขืฉืœืขืš ืคืจื™ื™ ืœื™ืžืึทืฅ. ืœืžืฉืœ, ืคึฟืึทืจ DynamoDB: 25 ื’ื™ื’ืื‘ื™ื™ื˜ ืกื˜ืึธืจื™ื“ื–ืฉ, 25 WCU / RCU ืื•ืŸ 100 ืžื™ืœื™ืึธืŸ ืคึฟืจืื’ืŸ. ืื•ืŸ ืึท ืžื™ืœื™ืึธืŸ ืœืึทืžื‘ื“ืึท ืคื•ื ืงืฆื™ืข ืงืึทืœืœืก ืคึผืขืจ ื—ื•ื“ืฉ.

ืžืึทื ื•ืึทืœ ืกื™ืกื˜ืขื ื“ื™ืคึผืœื•ื™ืžืึทื ื˜

ื‘ืึทืฉื˜ืขื˜ื™ืงืŸ Kinesis Data Streams

ืœืึธืžื™ืจ ื’ื™ื™ืŸ ืฆื• ื“ื™ Kinesis Data Streams ื“ื™ื ืกื˜ ืื•ืŸ ืฉืึทืคึฟืŸ ืฆื•ื•ื™ื™ ื ื™ื™ึทืข ืกื˜ืจื™ืžื–, ืื™ื™ืŸ ืฉืึทืจื“ ืคึฟืึทืจ ื™ืขื“ืขืจ.

ื•ื•ืึธืก ืื™ื– ืึท ืฉืึทืจื‘ืŸ?
ื ืฉืึทืจื“ ืื™ื– ื“ื™ ื™ืงืขืจื“ื™ืง ื“ืึทื˜ืŸ ืึทืจื™ื‘ืขืจืคื™ืจืŸ ืึทืคึผืึทืจืึทื˜ ืคื•ืŸ ืึทืŸ ืึทืžืึทื–ืึธืŸ ืงื™ื ืขืกื™ืก ื˜ื™ื™ึทืš. ืื™ื™ืŸ ืึธืคึผืฉื ื™ื˜ ื’ื™ื˜ ืึทืจื™ื™ึทื ืฉืจื™ื™ึทื‘ ื“ืึทื˜ืŸ ืึทืจื™ื‘ืขืจืคื™ืจืŸ ืžื™ื˜ ืึท ื’ื™ื›ืงื™ื™ึทื˜ ืคื•ืŸ 1 MB / s ืื•ืŸ ืจืขื–ื•ืœื˜ืึทื˜ ื“ืึทื˜ืŸ ืึทืจื™ื‘ืขืจืคื™ืจืŸ ืžื™ื˜ ืึท ื’ื™ื›ืงื™ื™ึทื˜ ืคื•ืŸ 2 MB / s. ืื™ื™ืŸ ืึธืคึผืฉื ื™ื˜ ืฉื˜ื™ืฆื˜ ืึทืจื•ื™ืฃ ืฆื• 1000 PUT ืื™ื™ื ืกืŸ ืคึผืขืจ ืกืขืงื•ื ื“ืข. ื•ื•ืขืŸ ืงืจื™ื™ื™ื˜ื™ื ื’ ืึท ื“ืึทื˜ืŸ ื˜ื™ื™ึทืš, ืื™ืจ ื“ืึทืจืคึฟืŸ ืฆื• ืกืคึผืขืฆื™ืคื™ืฆื™ืจืŸ ื“ื™ ืคืืจืœืื ื’ื˜ ื ื•ืžืขืจ ืคื•ืŸ ืกืขื’ืžืึทื ืฅ. ืคึฟืึทืจ ื‘ื™ื™ึทืฉืคึผื™ืœ, ืื™ืจ ืงืขื ืขืŸ ืžืึทื›ืŸ ืึท ื“ืึทื˜ืŸ ื˜ื™ื™ึทืš ืžื™ื˜ ืฆื•ื•ื™ื™ ืกืขื’ืžืึทื ืฅ. ื“ืขืจ ื“ืึทื˜ืŸ ื˜ื™ื™ึทืš ื•ื•ืขื˜ ืฆื•ืฉื˜ืขืœืŸ ืึทืจื™ื™ึทื ืฉืจื™ื™ึทื‘ ื“ืึทื˜ืŸ ืึทืจื™ื‘ืขืจืคื™ืจืŸ ื‘ื™ื™ 2 MB / s ืื•ืŸ ืจืขื–ื•ืœื˜ืึทื˜ ื“ืึทื˜ืŸ ืึทืจื™ื‘ืขืจืคื™ืจืŸ ืžื™ื˜ 4 MB / s, ื•ื•ืึธืก ืฉื˜ื™ืฆื˜ ืึทืจื•ื™ืฃ ืฆื• 2000 PUT ืจืขืงืึธืจื“ืก ืคึผืขืจ ืกืขืงื•ื ื“ืข.

ื“ื™ ืžืขืจ ืฉืึทืจื“ื– ืื™ืŸ ื“ื™ื™ืŸ ื˜ื™ื™ึทืš, ื“ื™ ื’ืจืขืกืขืจ ื“ื™ ื˜ืจื•ืคึผื•ื˜. ืื™ืŸ ืคึผืจื™ื ืฆื™ืคึผ, ื“ืึธืก ืื™ื– ื•ื•ื™ ืคืœืึธื•ื– ื–ืขื ืขืŸ ืกืงื™ื™ืœื“ - ื“ื•ืจืš ืึทื“ื™ื ื’ ืฉืึทืจื“ื–. ืื‘ืขืจ ื“ื™ ืžืขืจ ืฉืึทืจื“ื– ืื™ืจ ื”ืึธื‘ืŸ, ื“ื™ ื”ืขื›ืขืจ ื“ื™ ืคึผืจื™ื™ึทื–. ื™ืขื“ืขืจ ืฉืขืจื“ ืงืึธืก 1,5 ืกืขื ืก ืคึผืขืจ ืฉืขื” ืื•ืŸ ื ืึธืš 1.4 ืกืขื ืก ืคึฟืึทืจ ื™ืขื“ืขืจ ืžื™ืœื™ืึธืŸ PUT ืคึผื™ื™ืœืึธื•ื“ ื•ื ื™ืฅ.

ืœืึธืžื™ืจ ืžืึทื›ืŸ ืึท ื ื™ื™ึทืข ื˜ื™ื™ึทืš ืžื™ื˜ ื“ืขื ื ืึธืžืขืŸ ืขืจืœื™ื™ืŸ_ื˜ื™ืงื™ืฅ, 1 ืฉื•ื•ืืจืฆืข ื•ื•ืขื˜ ื–ื™ื™ืŸ ื’ืขื ื•ื’ ืคืืจ ืื™ื:

Aviasales API ื™ื ื˜ืึทื’ืจื™ื™ืฉืึทืŸ ืžื™ื˜ Amazon Kinesis ืื•ืŸ ืคึผืึทืฉื˜ืขืก ืึธืŸ ืกืขืจื•ื•ืขืจืก
ื™ืขืฆื˜ ืœืืžื™ืจ ืžืื›ืŸ ื ืืš ื ืืฉื›ื•ืœ ืžื™ื˜ืŸ ื ืืžืขืŸ ืกืคึผืขืฆื™ืขืœืข_ืกื˜ืจื™ื:

Aviasales API ื™ื ื˜ืึทื’ืจื™ื™ืฉืึทืŸ ืžื™ื˜ Amazon Kinesis ืื•ืŸ ืคึผืึทืฉื˜ืขืก ืึธืŸ ืกืขืจื•ื•ืขืจืก

ืคึผืจืึธื“ื•ืฆื™ืจืขืจ ืกืขื˜ืึทืคึผ

ืฆื• ืึทื ืึทืœื™ื™ื– ืึท ืึทืจื‘ืขื˜, ืขืก ืื™ื– ื’ืขื ื•ื’ ืฆื• ื ื•ืฆืŸ ืึท ืจืขื’ื•ืœืขืจ EC2 ื‘ื™ื™ึทืฉืคึผื™ืœ ื•ื•ื™ ืึท ื“ืึทื˜ืŸ ืคึผืจืึธื“ื•ืฆื™ืจืขืจ. ืขืก ื“ืึทืจืฃ ื ื™ื˜ ื–ื™ื™ืŸ ืึท ืฉื˜ืึทืจืง, ื˜ื™ื™ึทืขืจ ื•ื•ื™ืจื˜ื•ืึทืœ ืžืึทืฉื™ืŸ; ืึท ืึธืจื˜ t2.micro ื•ื•ืขื˜ ื–ื™ื™ืŸ ื’ื•ื˜.

ื•ื•ื™ื›ื˜ื™ืง ื˜ืึธืŸ: ืคึฟืึทืจ ื‘ื™ื™ึทืฉืคึผื™ืœ, ืื™ืจ ื–ืึธืœ ื ื•ืฆืŸ ื‘ื™ืœื“ - Amazon Linux AMI 2018.03.0, ืขืก ื”ืื˜ ื•ื•ื™ื™ื ื™ืงืขืจืข ืกืขื˜ื˜ื™ื ื’ืก ืคึฟืึทืจ ื’ืขืฉื•ื•ื™ื ื“ ืงืึทื˜ืขืจ ื“ื™ ืงื™ื ืขืกื™ืก ืึทื’ืขื ื˜.

ื’ื™ื™ืŸ ืฆื• ื“ื™ EC2 ืกืขืจื•ื•ื™ืก, ืฉืึทืคึฟืŸ ืึท ื ื™ื™ึทืข ื•ื•ื™ืจื˜ื•ืึทืœ ืžืึทืฉื™ืŸ, ืกืขืœืขืงื˜ื™ืจืŸ ื“ืขื ื’ืขื•ื•ืืœื˜ ืึทืžื™ ืžื™ื˜ ื˜ื™ืคึผ t2.micro, ื•ื•ืึธืก ืื™ื– ืึทืจื™ื™ึทื ื’ืขืจืขื›ื ื˜ ืื™ืŸ ื“ื™ Free Tier:

Aviasales API ื™ื ื˜ืึทื’ืจื™ื™ืฉืึทืŸ ืžื™ื˜ Amazon Kinesis ืื•ืŸ ืคึผืึทืฉื˜ืขืก ืึธืŸ ืกืขืจื•ื•ืขืจืก
ื›ึผื“ื™ ื“ื™ ื ื™ื™-ื’ืขืฉืึทืคึฟืŸืข ื•ื•ื™ืจื˜ื•ืขืœ ืžืึทืฉื™ืŸ ื–ืึธืœ ืงืขื ืขืŸ ื™ื ื˜ืขืจืึทืงื˜ ืžื™ื˜ ื“ื™ ืงื™ื ืขืกื™ืก ื“ื™ื ืกื˜, ืขืก ืžื•ื–ืŸ ื–ื™ื™ืŸ ื’ืขื’ืขื‘ืŸ ืจืขื›ื˜ ืฆื• ื˜ืึธืŸ ื“ืึธืก. ื“ืขืจ ื‘ืขืกื˜ืขืจ ื•ื•ืขื’ ืฆื• ื˜ืึธืŸ ื“ืึธืก ืื™ื– ืฆื• ื‘ืึทืฉื˜ื™ืžืขืŸ ืึทืŸ IAM ืจืึธืœืข. ื“ืขืจื™ื‘ืขืจ, ืื•ื™ืฃ ื“ื™ ืฉืจื™ื˜ 3: ืงืึทื ืคื™ื’ื™ืขืจ ื™ื ืกื˜ืึทื ืกืข ื“ืขื˜ืึทื™ืœืก ืคืึทืจืฉื˜ืขืœืŸ, ืื™ืจ ื–ืึธืœ ืื•ื™ืกืงืœื™ื™ึทื‘ืŸ ืฉืึทืคึฟืŸ ืึท ื ื™ื™ึทืข IAM ืจืึธืœืข:

ืฉืึทืคึฟืŸ ืึทืŸ IAM ืจืึธืœืข ืคึฟืึทืจ EC2
Aviasales API ื™ื ื˜ืึทื’ืจื™ื™ืฉืึทืŸ ืžื™ื˜ Amazon Kinesis ืื•ืŸ ืคึผืึทืฉื˜ืขืก ืึธืŸ ืกืขืจื•ื•ืขืจืก
ืื™ืŸ ื“ื™ ืคึฟืขื ืฆื˜ืขืจ ื•ื•ืึธืก ืึธืคึผืขื ืก, ืกืขืœืขืงื˜ื™ืจืŸ ืึทื– ืžื™ืจ ืฉืึทืคึฟืŸ ืึท ื ื™ื™ึทืข ืจืึธืœืข ืคึฟืึทืจ EC2 ืื•ืŸ ื’ื™ื™ืŸ ืฆื• ื“ื™ ืคึผืขืจืžื™ืฉืึทื ื– ืึธืคึผื˜ื™ื™ืœื•ื ื’:

Aviasales API ื™ื ื˜ืึทื’ืจื™ื™ืฉืึทืŸ ืžื™ื˜ Amazon Kinesis ืื•ืŸ ืคึผืึทืฉื˜ืขืก ืึธืŸ ืกืขืจื•ื•ืขืจืก
ื ื™ืฆืŸ ื“ื™ ื˜ืจื™ื™ื ื™ื ื’ ื‘ื™ื™ืฉืคึผื™ืœ, ืžื™ืจ ื˜ืึธืŸ ื ื™ื˜ ื”ืึธื‘ืŸ ืฆื• ื’ื™ื™ืŸ ืื™ืŸ ืึทืœืข ื“ื™ ื™ื ื˜ืจืึทืงืึทืกื™ื– ืคื•ืŸ ื’ืจืึทื ื™ืึทืœืขืจ ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ ืคื•ืŸ ืžื™ื˜ืœ ืจืขื›ื˜, ืึทื–ื•ื™ ืžื™ืจ ื•ื•ืขืœืŸ ืื•ื™ืกืงืœื™ื™ึทื‘ืŸ ื“ื™ ืคึผืึทืœืึทืกื™ื– ืคืึทืจ-ืงืึทื ืคื™ื’ื™ืขืจื“ ื“ื•ืจืš ืึทืžืึทื–ืึธืŸ: AmazonKinesisFullAccess ืื•ืŸ CloudWatchFullAccess.

ื–ืืœ ืื•ื ื“ื– ื’ืขื‘ืŸ ืึท ื‘ืึทื˜ื™ื™ึทื˜ื™ืง ื ืึธืžืขืŸ ืคึฟืึทืจ ื“ืขื ืจืึธืœืข, ืœืžืฉืœ: EC2-KinesisStreams-FullAccess. ื“ืขืจ ืจืขื–ื•ืœื˜ืึทื˜ ื–ืึธืœ ื–ื™ื™ืŸ ื“ื™ ื–ืขืœื‘ืข ื•ื•ื™ ื’ืขื•ื•ื™ื–ืŸ ืื™ืŸ ื“ื™ ื‘ื™ืœื“ ืื•ื ื˜ืŸ:

Aviasales API ื™ื ื˜ืึทื’ืจื™ื™ืฉืึทืŸ ืžื™ื˜ Amazon Kinesis ืื•ืŸ ืคึผืึทืฉื˜ืขืก ืึธืŸ ืกืขืจื•ื•ืขืจืก
ื ืึธืš ืงืจื™ื™ื™ื˜ื™ื ื’ ื“ืขื ื ื™ื™ึทืข ืจืึธืœืข, ื˜ืึธืŸ ื ื™ื˜ ืคืึทืจื’ืขืกืŸ ืฆื• ืฆื•ื˜ืฉืขืคึผืขืŸ ืขืก ืฆื• ื“ื™ ื‘ืืฉืืคืŸ ื•ื•ื™ืจื˜ื•ืึทืœ ืžืึทืฉื™ืŸ ื‘ื™ื™ึทืฉืคึผื™ืœ:

Aviasales API ื™ื ื˜ืึทื’ืจื™ื™ืฉืึทืŸ ืžื™ื˜ Amazon Kinesis ืื•ืŸ ืคึผืึทืฉื˜ืขืก ืึธืŸ ืกืขืจื•ื•ืขืจืก
ืžื™ืจ ื˜ืึธืŸ ื ื™ื˜ ื˜ื•ื™ืฉืŸ ืขืคึผืขืก ืึทื ื“ืขืจืฉ ืื•ื™ืฃ ื“ืขื ืขืงืจืึทืŸ ืื•ืŸ ืžืึทืš ืื•ื™ืฃ ืฆื• ื“ื™ ื•ื•ื™ื™ึทื˜ืขืจ ืคึฟืขื ืฆื˜ืขืจ.

ื“ื™ ืฉื•ื•ืขืจ ืคืึธืจ ืกืขื˜ื˜ื™ื ื’ืก ืงืขื ืขืŸ ื–ื™ื™ืŸ ืœื™ื ืงืก ื•ื•ื™ ืคืขืœื™ืงื™ื™ึทื˜, ื•ื•ื™ ื’ืขื–ื•ื ื˜ ื•ื•ื™ ื“ื™ ื˜ืึทื’ืก (ื›ืึธื˜ืฉ ืขืก ืื™ื– ื’ื•ื˜ ืคื™ืจ ืฆื• ื ื•ืฆืŸ ื˜ืึทื’ืก, ืœืคึผื—ื•ืช ื’ืขื‘ืŸ ื“ืขื ื‘ื™ื™ึทืฉืคึผื™ืœ ืึท ื ืึธืžืขืŸ ืื•ืŸ ืึธื ื•ื•ื™ื™ึทื–ืŸ ื“ื™ ืกื•ื•ื™ื•ื•ืข).

ืื™ืฆื˜ ืžื™ืจ ื–ืขื ืขืŸ ืื•ื™ืฃ ื“ื™ ืฉืจื™ื˜ 6: ืงืึทื ืคื™ื’ื™ืขืจ ื–ื™ื›ืขืจื”ื™ื™ื˜ ื’ืจื•ืคืข ืงื•ื•ื™ื˜ืœ, ื•ื•ื• ืื™ืจ ื“ืึทืจืคึฟืŸ ืฆื• ืฉืึทืคึฟืŸ ืึท ื ื™ื™ึทืข ืึธื“ืขืจ ืกืคึผืขืฆื™ืคื™ืฆื™ืจืŸ ื“ื™ื™ืŸ ื™ื’ื–ื™ืกื˜ื™ื ื’ ื–ื™ื›ืขืจื”ื™ื™ื˜ ื’ืจื•ืคึผืข, ื•ื•ืึธืก ืึทืœืึทื•ื– ืื™ืจ ืฆื• ืคืึทืจื‘ื™ื ื“ืŸ ื“ื•ืจืš ssh (ืคึผืึธืจื˜ 22) ืฆื• ื“ืขื ื‘ื™ื™ึทืฉืคึผื™ืœ. ืกืขืœืขืงื˜ื™ืจืŸ ืžืงื•ืจ -> ืžื™ื™ึทืŸ IP ื“ืึธืจื˜ ืื•ืŸ ืื™ืจ ืงืขื ืขืŸ ืงืึทื˜ืขืจ ื“ืขื ื‘ื™ื™ึทืฉืคึผื™ืœ.

Aviasales API ื™ื ื˜ืึทื’ืจื™ื™ืฉืึทืŸ ืžื™ื˜ Amazon Kinesis ืื•ืŸ ืคึผืึทืฉื˜ืขืก ืึธืŸ ืกืขืจื•ื•ืขืจืก
ื•ื•ื™ ื‘ืึทืœื“ ื•ื•ื™ ืขืก ืกื•ื•ื™ื˜ืฉื™ื– ืฆื• ืคืœื™ืกื ื“ื™ืง ืกื˜ืึทื˜ื•ืก, ืื™ืจ ืงืขื ืขืŸ ืคึผืจื•ื‘ื™ืจืŸ ืฆื• ืคืึทืจื‘ื™ื ื“ืŸ ืฆื• ืขืก ื“ื•ืจืš 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"]
         }
      ]
    }
  ]
}

ื•ื•ื™ ืื™ืจ ืงืขื ื˜ ื–ืขืŸ ืคึฟื•ืŸ ื“ื™ ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ ื˜ืขืงืข, ื“ืขืจ ืึทื’ืขื ื˜ ื•ื•ืขื˜ ืžืึธื ื™ื˜ืึธืจ ื˜ืขืงืขืก ืžื™ื˜ ื“ื™ .ืœืึธื’ ื’ืขืฉืคึผืจื™ื™ื˜ ืื™ืŸ ื“ื™ /var/log/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 ืื•ืŸ ืกืึทื•ื•ืขืก ื“ื™ ื‘ืืงื•ืžืขืŸ ืขื ื˜ืคืขืจ ืื™ืŸ ื“ื™ ื•ื•ืขื’ื•ื•ื™ื™ึทื–ืขืจ ื•ื•ืึธืก ื“ื™ ืงื™ื ืขืกื™ืก ืึทื’ืขื ื˜ ืกืงืึทื ื–. ื“ื™ ื™ืžืคึผืœืึทืžืขื ื˜ื™ื™ืฉืึทืŸ ืคื•ืŸ ื“ืขื ืฉืจื™ืคื˜ ืื™ื– ื’ืึทื ืฅ ื ืึธืจืžืึทืœ, ืขืก ืื™ื– ืึท ื˜ื™ืงืงืขืฅืึทืคึผื™ ืงืœืึทืก, ืขืก ืึทืœืึทื•ื– ืื™ืจ ืฆื• ื™ื™ืกื™ื ื’ืงืจืึทื ืึทืกืœื™ ืฆื™ืขืŸ ื“ื™ ืึทืคึผื™. ืžื™ืจ ืคืึธืจืŸ ืึท ื›ืขื“ืขืจ ืžื™ื˜ ืึท ืกื™ืžืขืŸ ืื•ืŸ ื‘ืขื˜ืŸ ืคึผืึทืจืึทืžืขื˜ืขืจืก ืฆื• ื“ืขื ืงืœืึทืก:

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 ืื•ืŸ ืคึผืึทืฉื˜ืขืก ืึธืŸ ืกืขืจื•ื•ืขืจืก
ืื•ืŸ ืžื™ืจ ืงื•ืงืŸ ืื™ืŸ ื“ืขืจ ืจืขื–ื•ืœื˜ืึทื˜ ืคื•ืŸ ื“ื™ ืึทืจื‘ืขื˜ ืื™ืŸ ื“ื™ ืึทื’ืขื ื˜ ืœืึธื’ืก ืื•ืŸ ืื•ื™ืฃ ื“ื™ ืžืึธื ื™ื˜ืึธืจื™ื ื’ ืงื•ื•ื™ื˜ืœ ืื™ืŸ ื“ื™ Airline_tickets ื“ืึทื˜ืŸ ื˜ื™ื™ึทืš:

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

Aviasales API ื™ื ื˜ืึทื’ืจื™ื™ืฉืึทืŸ ืžื™ื˜ Amazon Kinesis ืื•ืŸ ืคึผืึทืฉื˜ืขืก ืึธืŸ ืกืขืจื•ื•ืขืจืก
Aviasales API ื™ื ื˜ืึทื’ืจื™ื™ืฉืึทืŸ ืžื™ื˜ Amazon Kinesis ืื•ืŸ ืคึผืึทืฉื˜ืขืก ืึธืŸ ืกืขืจื•ื•ืขืจืก
ื•ื•ื™ ืื™ืจ ืงืขื ืขืŸ ื–ืขืŸ, ืึทืœืฅ ืึทืจื‘ืขื˜ ืื•ืŸ ื“ื™ ืงื™ื ืขืกื™ืก ืึทื’ืขื ื˜ ืกืขื ื“ื– ื“ืึทื˜ืŸ ืฆื• ื“ื™ ื˜ื™ื™ึทืš ื”ืฆืœื—ื”. ืื™ืฆื˜ ืœืึธื–ืŸ ืก ืงืึทื ืคื™ื’ื™ืขืจ ืงืึทื ืกื•ืžืขืจ.

ื‘ืึทืฉื˜ืขื˜ื™ืงืŸ Kinesis Data Analytics

ืœืึธืžื™ืจ ื’ื™ื™ืŸ ืฆื• ื“ื™ ื”ื•ื™ืคื˜ ืงืึธืžืคึผืึธื ืขื ื˜ ืคื•ืŸ ื“ื™ ื’ืื ืฆืข ืกื™ืกื˜ืขื - ืฉืึทืคึฟืŸ ืึท ื ื™ื™ึทืข ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ ืื™ืŸ Kinesis Data Analytics ืžื™ื˜ืŸ ื ืึธืžืขืŸ kinesis_analytics_airlines_app:

Aviasales API ื™ื ื˜ืึทื’ืจื™ื™ืฉืึทืŸ ืžื™ื˜ Amazon Kinesis ืื•ืŸ ืคึผืึทืฉื˜ืขืก ืึธืŸ ืกืขืจื•ื•ืขืจืก
Kinesis Data Analytics ืึทืœืึทื•ื– ืื™ืจ ืฆื• ื“ื•ืจื›ืคื™ืจืŸ ืคืึทืงื˜ื™ืฉ-ืฆื™ื™ื˜ ื“ืึทื˜ืŸ ืึทื ืึทืœื™ื˜ื™ืงืก ืคึฟื•ืŸ Kinesis ืกื˜ืจืขืึทืžืก ื ื™ืฆืŸ ื“ื™ SQL ืฉืคึผืจืึทืš. ืขืก ืื™ื– ืึท ื’ืึธืจ ืึทื•ื˜ืึธืกืงืึทืœื™ื ื’ ื“ื™ื ืกื˜ (ื ื™ื˜ ืขื ืœืขืš ืงื™ื ืขืกื™ืก ืกื˜ืจืขืึทืžืก) ืึทื–:

  1. ืึทืœืึทื•ื– ืื™ืจ ืฆื• ืฉืึทืคึฟืŸ ื ื™ื™ึทืข ืกื˜ืจื™ืžื– (ืึธื•ื˜ืคึผื•ื˜ ืกื˜ืจื™ื) ื‘ืื–ื™ืจื˜ ืื•ื™ืฃ ืจื™ืงื•ื•ืขืก ืฆื• ืžืงื•ืจ ื“ืึทื˜ืŸ;
  2. ื’ื™ื˜ ืึท ื˜ื™ื™ึทืš ืžื™ื˜ ืขืจืจืึธืจืก ืึทื– ืคืืจื’ืขืงื•ืžืขืŸ ื‘ืฉืขืช ืึทืคึผืœืึทืงื™ื™ืฉืึทื ื– ื–ืขื ืขืŸ ืคืœื™ืกื ื“ื™ืง (ื˜ืขื•ืช ืกื˜ืจื™ื);
  3. ืงืขื ืขืŸ ืื•ื™ื˜ืึธืžืึทื˜ื™ืฉ ื‘ืึทืฉื˜ื™ืžืขืŸ ื“ื™ ืึทืจื™ื™ึทื ืฉืจื™ื™ึทื‘ ื“ืึทื˜ืŸ ืกื›ืขืžืข (ืขืก ืงืขื ืขืŸ ื–ื™ื™ืŸ ืžืึทื ื™ื•ืึทืœื™ ืจื™ื“ื™ืคื™ื™ื ื“ ืื•ื™ื‘ ื ื™ื™ื˜ื™ืง).

ื“ืึธืก ืื™ื– ื ื™ืฉื˜ ืึท ื‘ื™ืœื™ืง ื“ื™ื ืกื˜ - 0.11 ื•ืกื“ ืคึผืขืจ ืฉืขื” ืคื•ืŸ ืึทืจื‘ืขื˜, ืึทื–ื•ื™ ืื™ืจ ื–ืึธืœ ื ื•ืฆืŸ ืขืก ืงืขืจืคืึทืœื™ ืื•ืŸ ื•ื™ืกืžืขืงืŸ ืขืก ื•ื•ืขืŸ ืื™ืจ ื–ืขื ื˜ ืคืึทืจื˜ื™ืง.

ืœืึธืžื™ืจ ืคืึทืจื‘ื™ื ื“ืŸ ื“ื™ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ ืฆื• ื“ื™ ื“ืึทื˜ืŸ ืžืงื•ืจ:

Aviasales API ื™ื ื˜ืึทื’ืจื™ื™ืฉืึทืŸ ืžื™ื˜ Amazon Kinesis ืื•ืŸ ืคึผืึทืฉื˜ืขืก ืึธืŸ ืกืขืจื•ื•ืขืจืก
ืกืขืœืขืงื˜ื™ืจืŸ ื“ืขื ื˜ื™ื™ึทืš ืžื™ื˜ ื•ื•ืึธืก ืžื™ืจ ื•ื•ืขืœืŸ ืคืึทืจื‘ื™ื ื“ืŸ (airline_tickets):

Aviasales API ื™ื ื˜ืึทื’ืจื™ื™ืฉืึทืŸ ืžื™ื˜ Amazon Kinesis ืื•ืŸ ืคึผืึทืฉื˜ืขืก ืึธืŸ ืกืขืจื•ื•ืขืจืก
ื“ืขืจื ืึธืš, ืื™ืจ ื“ืึทืจืคึฟืŸ ืฆื• ืฆื•ื˜ืฉืขืคึผืขืŸ ืึท ื ื™ื™ึทืข IAM ืจืึธืœืข ืึทื–ื•ื™ ืึทื– ื“ื™ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ ืงืขื ืขืŸ ืœื™ื™ืขื ืขืŸ ืคึฟื•ืŸ ื“ืขื ื˜ื™ื™ึทืš ืื•ืŸ ืฉืจื™ื™ึทื‘ืŸ ืฆื• ื“ืขื ื˜ื™ื™ึทืš. ืฆื• ื˜ืึธืŸ ื“ืึธืก, ืขืก ืื™ื– ื’ืขื ื•ื’ ื ื™ืฉื˜ ืฆื• ื˜ื•ื™ืฉืŸ ืขืคึผืขืก ืื™ืŸ ื“ื™ ืึทืงืกืขืก ืคึผืขืจืžื™ืฉืึทื ื– ื‘ืœืึธืง:

Aviasales API ื™ื ื˜ืึทื’ืจื™ื™ืฉืึทืŸ ืžื™ื˜ Amazon Kinesis ืื•ืŸ ืคึผืึทืฉื˜ืขืก ืึธืŸ ืกืขืจื•ื•ืขืจืก
ืื™ืฆื˜ ืœืึธืžื™ืจ ื‘ืขื˜ืŸ ื•ืคื“ืขืงื•ื ื’ ืคื•ืŸ ื“ื™ ื“ืึทื˜ืŸ ืกื˜ืฉืขืžืึท ืื™ืŸ ื“ืขื ื˜ื™ื™ึทืš; ืฆื• ื˜ืึธืŸ ื“ืึธืก, ื“ืจื™ืงื˜ ืื•ื™ืฃ ื“ื™ "ืึทื ื˜ื“ืขืงืŸ ืกื˜ืฉืขืžืึท" ืงื ืขืคึผืœ. ื•ื•ื™ ืึท ืจืขื–ื•ืœื˜ืึทื˜, ื“ื™ IAM ืจืึธืœืข ื•ื•ืขื˜ ื–ื™ื™ืŸ ื“ืขืจื”ื™ื™ึทื ื˜ื™ืงื˜ (ืึท ื ื™ื™ึทืข ื•ื•ืขื˜ ื–ื™ื™ืŸ ื‘ืืฉืืคืŸ) ืื•ืŸ ืกื˜ืฉืขืžืึท ื“ื™ื˜ืขืงืฉืึทืŸ ื•ื•ืขื˜ ื–ื™ื™ืŸ ืœืึธื ื˜ืฉื˜ ืคึฟื•ืŸ ื“ื™ ื“ืึทื˜ืŸ ื•ื•ืึธืก ื–ืขื ืขืŸ ืฉื•ื™ืŸ ืื ื’ืขืงื•ืžืขืŸ ืื™ืŸ ื“ื™ ื˜ื™ื™ึทืš:

Aviasales API ื™ื ื˜ืึทื’ืจื™ื™ืฉืึทืŸ ืžื™ื˜ Amazon Kinesis ืื•ืŸ ืคึผืึทืฉื˜ืขืก ืึธืŸ ืกืขืจื•ื•ืขืจืก
ืื™ืฆื˜ ืื™ืจ ื“ืึทืจืคึฟืŸ ืฆื• ื’ื™ื™ืŸ ืฆื• ื“ื™ SQL ืจืขื“ืึทืงื˜ืึธืจ. ื•ื•ืขืŸ ืื™ืจ ื“ืจื™ืงื˜ ืื•ื™ืฃ ื“ืขื ืงื ืขืคึผืœ, ืึท ืคึฟืขื ืฆื˜ืขืจ ื•ื•ืขื˜ ื–ื™ื™ืŸ ืึทืกืงื™ื ื’ ืื™ืจ ืฆื• ืงืึทื˜ืขืจ ื“ื™ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ - ืกืขืœืขืงื˜ื™ืจืŸ ื•ื•ืึธืก ืื™ืจ ื•ื•ื™ืœืŸ ืฆื• ืงืึทื˜ืขืจ:

Aviasales API ื™ื ื˜ืึทื’ืจื™ื™ืฉืึทืŸ ืžื™ื˜ Amazon Kinesis ืื•ืŸ ืคึผืึทืฉื˜ืขืก ืึธืŸ ืกืขืจื•ื•ืขืจืก
ืึทืจื™ื™ึทื ืœื™ื™ื’ืŸ ื“ื™ ืคืืœื’ืขื ื“ืข ืคึผืฉื•ื˜ ืึธื ืคึฟืจืขื’ ืื™ืŸ ื“ื™ ืกืงืœ ืจืขื“ืึทืงื˜ืึธืจ ืคึฟืขื ืฆื˜ืขืจ ืื•ืŸ ื’ื™ื˜ ื”ื™ื˜ ืื•ืŸ ืจืึทืŸ ืกืงืœ:

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, ืื™ืจ ืึทืจื‘ืขื˜ ืžื™ื˜ ืกื˜ืจื™ืžื– (ืกื˜ืจื™ืžื–) ืื•ืŸ ืคึผืึทืžืคึผืก (ืคึผืึทืžืคึผืก) - ืงืขืกื™ื™ื“ืขืจื“ื™ืง ืึทืจื™ื™ึทื ืœื™ื™ื’ืŸ ืจื™ืงื•ื•ืขืก ื•ื•ืึธืก ืึทืจื™ื™ึทื ืœื™ื™ื’ืŸ ื“ืึทื˜ืŸ ืคื•ืŸ ืื™ื™ืŸ ื˜ื™ื™ึทืš ืื™ืŸ ืึท ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ ืื™ืŸ ืืŸ ืื ื“ืขืจ ื˜ื™ื™ึทืš.

ื“ื™ SQL ืึธื ืคึฟืจืขื’ ื“ืขืจืœืื ื’ื˜ ืื•ื™ื‘ืŸ ืึธื ืคึฟืจืขื’ืŸ ืคึฟืึทืจ ืึทืขืจืึธืคืœืึธื˜ ื˜ื™ืงื™ืฅ ืฆื• ืึท ืคึผืจื™ื™ึทื– ืื•ื ื˜ืขืจ ืคื™ื ืฃ ื˜ื•ื™ื–ื ื˜ ืจื•ื‘ืœ. ืึทืœืข ืจืขืงืึธืจื“ืก ื•ื•ืึธืก ื˜ืจืขืคืŸ ื“ื™ ื‘ืื“ื™ื ื’ื•ื ื’ืขืŸ ื•ื•ืขื˜ ื–ื™ื™ืŸ ื’ืขืฉื˜ืขืœื˜ ืื™ืŸ ื“ื™ DESTINATION_SQL_STREAM ื˜ื™ื™ึทืš.

Aviasales API ื™ื ื˜ืึทื’ืจื™ื™ืฉืึทืŸ ืžื™ื˜ Amazon Kinesis ืื•ืŸ ืคึผืึทืฉื˜ืขืก ืึธืŸ ืกืขืจื•ื•ืขืจืก
ืื™ืŸ ื“ื™ ื“ืขืกื˜ื™ื ื™ื™ืฉืึทืŸ ื‘ืœืึธืง, ืื•ื™ืกืงืœื™ื™ึทื‘ืŸ ื“ื™ ืกืคึผืขืฆื™ืขืœืข_ืกื˜ืจื™ื ื˜ื™ื™ึทืš, ืื•ืŸ ืื™ืŸ ื“ื™ ืื™ืŸ-ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ ื˜ื™ื™ึทืš ื ืึธืžืขืŸ DESTINATION_SQL_STREAM ืคืึทืœ-ืึทืจืึธืคึผ ืจืฉื™ืžื”:

Aviasales API ื™ื ื˜ืึทื’ืจื™ื™ืฉืึทืŸ ืžื™ื˜ Amazon Kinesis ืื•ืŸ ืคึผืึทืฉื˜ืขืก ืึธืŸ ืกืขืจื•ื•ืขืจืก
ื“ืขืจ ืจืขื–ื•ืœื˜ืึทื˜ ืคื•ืŸ ืึทืœืข ืžืึทื ื™ืคึผื™ืึทืœื™ื™ืฉืึทื ื– ื–ืึธืœ ื–ื™ื™ืŸ ืขืคึผืขืก ืขื ืœืขืš ืฆื• ื“ื™ ื‘ื™ืœื“ ืื•ื ื˜ืŸ:

Aviasales API ื™ื ื˜ืึทื’ืจื™ื™ืฉืึทืŸ ืžื™ื˜ Amazon Kinesis ืื•ืŸ ืคึผืึทืฉื˜ืขืก ืึธืŸ ืกืขืจื•ื•ืขืจืก

ืฉืึทืคึฟืŸ ืื•ืŸ ืึทื‘ืึธื ื™ืจืŸ ืฆื• ืึท SNS ื˜ืขืžืข

ื’ื™ื™ืŸ ืฆื• ื“ื™ ืกื™ืžืคึผืœืข ื ืึธื˜ื™ืคื™ืงืึทื˜ื™ืึธืŸ ืกืขืจื•ื•ื™ืก ืื•ืŸ ืฉืึทืคึฟืŸ ืึท ื ื™ื™ึทืข ื˜ืขืžืข ืžื™ื˜ ื“ื™ ื ืึธืžืขืŸ ืึทื™ืจืœื™ื ืขืก:

Aviasales API ื™ื ื˜ืึทื’ืจื™ื™ืฉืึทืŸ ืžื™ื˜ Amazon Kinesis ืื•ืŸ ืคึผืึทืฉื˜ืขืก ืึธืŸ ืกืขืจื•ื•ืขืจืก
ืึทื‘ืึธื ื™ืจืŸ ืฆื• ื“ืขื ื˜ืขืžืข ืื•ืŸ ืึธื ื•ื•ื™ื™ึทื–ืŸ ื“ื™ ืจื™ืจืขื•ื•ื“ื™ืง ื˜ืขืœืขืคืึธืŸ ื ื•ืžืขืจ ืฆื• ื•ื•ืึธืก SMS ื ืึธื•ื˜ืึทืคืึทืงื™ื™ืฉืึทื ื– ื•ื•ืขื˜ ื–ื™ื™ืŸ ื’ืขืฉื™ืงื˜:

Aviasales API ื™ื ื˜ืึทื’ืจื™ื™ืฉืึทืŸ ืžื™ื˜ Amazon Kinesis ืื•ืŸ ืคึผืึทืฉื˜ืขืก ืึธืŸ ืกืขืจื•ื•ืขืจืก

ืฉืึทืคึฟืŸ ืึท ื˜ื™ืฉ ืื™ืŸ DynamoDB

ืฆื• ืงืจืึธื ื“ื™ ืจื•ื™ ื“ืึทื˜ืŸ ืคื•ืŸ ื–ื™ื™ืขืจ ืขืจืœื™ื™ืŸ_ื˜ื™ืงืงืขืฅ ื˜ื™ื™ึทืš, ืœืึธื–ืŸ ืื•ื ื“ื– ืฉืึทืคึฟืŸ ืึท ื˜ื™ืฉ ืื™ืŸ DynamoDB ืžื™ื˜ ื“ื™ ื–ืขืœื‘ืข ื ืึธืžืขืŸ. ืžื™ืจ ื•ื•ืขืœืŸ ื ื•ืฆืŸ ืจืขืงืึธืจื“_ื™ื“ ื•ื•ื™ ื“ื™ ืขืจืฉื˜ื™ืง ืฉืœื™ืกืœ:

Aviasales API ื™ื ื˜ืึทื’ืจื™ื™ืฉืึทืŸ ืžื™ื˜ Amazon Kinesis ืื•ืŸ ืคึผืึทืฉื˜ืขืก ืึธืŸ ืกืขืจื•ื•ืขืจืก

ืงืจื™ื™ื™ื˜ื™ื ื’ ืึท ืœืึทืžื“ืึท ืคึฟื•ื ืงืฆื™ืข ืงืึทืœืขืงื˜ืขืจ

ืœืึธืžื™ืจ ืžืึทื›ืŸ ืึท ืœืึทืžื‘ื“ืึท ืคึฟื•ื ืงืฆื™ืข ื’ืขืจื•ืคึฟืŸ ืงืึทืœืขืงื˜ืขืจ, ื•ื•ืขืžืขื ืก ืึทืจื‘ืขื˜ ื•ื•ืขื˜ ื–ื™ื™ืŸ ืฆื• ื‘ืึทืงื•ืžืขืŸ ื“ื™ ืึทื™ืจืœื™ื ืข_ื˜ื™ืงืึทืฅ ื˜ื™ื™ึทืš ืื•ืŸ, ืื•ื™ื‘ ื ื™ื™ึท ืจืขืงืึธืจื“ืก ื–ืขื ืขืŸ ื’ืขืคึฟื•ื ืขืŸ ื“ืึธืจื˜, ืึทืจื™ื™ึทื ืœื™ื™ื’ืŸ ื“ื™ ืจืขืงืึธืจื“ืก ืื™ืŸ ื“ื™ DynamoDB ื˜ื™ืฉ. ื“ืึธืš, ืื™ืŸ ืึทื“ื™ืฉืึทืŸ ืฆื• ื“ื™ ืคืขืœื™ืงื™ื™ึทื˜ ืจืขื›ื˜, ื“ืขื ืœืึทืžื‘ื“ืึท ืžื•ื–ืŸ ื”ืึธื‘ืŸ ืœื™ื™ืขื ืขืŸ ืึทืงืกืขืก ืฆื• ื“ื™ ืงื™ื ืขืกื™ืก ื“ืึทื˜ืŸ ื˜ื™ื™ึทืš ืื•ืŸ ืฉืจื™ื™ึทื‘ืŸ ืึทืงืกืขืก ืฆื• DynamoDB.

ืฉืึทืคึฟืŸ ืึทืŸ IAM ืจืึธืœืข ืคึฟืึทืจ ื“ื™ ืงืึทืœืขืงื˜ืขืจ ืœืึทืžื‘ื“ืึท ืคื•ื ืงืฆื™ืข
ืขืจืฉื˜ืขืจ, ืœืึธื–ืŸ ืื•ื ื“ื– ืžืึทื›ืŸ ืึท ื ื™ื™ึทืข IAM ืจืึธืœืข ืคึฟืึทืจ ื“ื™ ืœืึทืžื‘ื“ืึท ื’ืขื”ื™ื™ืกืŸ Lambda-TicketsProcessingRole:

Aviasales API ื™ื ื˜ืึทื’ืจื™ื™ืฉืึทืŸ ืžื™ื˜ Amazon Kinesis ืื•ืŸ ืคึผืึทืฉื˜ืขืก ืึธืŸ ืกืขืจื•ื•ืขืจืก
ืคึฟืึทืจ ื“ื™ ืคึผืจืึธื‘ืข ื‘ื™ื™ืฉืคึผื™ืœ, ื“ื™ ืคืึทืจ-ืงืึทื ืคื™ื’ื™ืขืจื“ AmazonKinesisReadOnlyAccess ืื•ืŸ AmazonDynamoDBFullAccess ืคึผืึทืœืึทืกื™ื– ื–ืขื ืขืŸ ื’ืึทื ืฅ ืคึผืึทืกื™ืง, ื•ื•ื™ ื’ืขื•ื•ื™ื–ืŸ ืื™ืŸ ื“ื™ ื‘ื™ืœื“ ืื•ื ื˜ืŸ:

Aviasales API ื™ื ื˜ืึทื’ืจื™ื™ืฉืึทืŸ ืžื™ื˜ Amazon Kinesis ืื•ืŸ ืคึผืึทืฉื˜ืขืก ืึธืŸ ืกืขืจื•ื•ืขืจืก
Aviasales API ื™ื ื˜ืึทื’ืจื™ื™ืฉืึทืŸ ืžื™ื˜ Amazon Kinesis ืื•ืŸ ืคึผืึทืฉื˜ืขืก ืึธืŸ ืกืขืจื•ื•ืขืจืก

ื“ื™ ืœืึทืžื‘ื“ืึท ื–ืึธืœ ื–ื™ื™ืŸ ืœืึธื ื˜ืฉื˜ ื“ื•ืจืš ืึท ืฆื™ื ื’ืœ ืคึฟื•ืŸ Kinesis ื•ื•ืขืŸ ื ื™ื™ึทืข ืื™ื™ื ืกืŸ ืึทืจื™ื™ึทืŸ ื“ื™ ืขืจืœื™ื™ืŸ_ืกื˜ืจื™ื, ืึทื–ื•ื™ ืžื™ืจ ื“ืึทืจืคึฟืŸ ืฆื• ืœื™ื™ื’ืŸ ืึท ื ื™ื™ึทืข ืฆื™ื ื’ืœ:

Aviasales API ื™ื ื˜ืึทื’ืจื™ื™ืฉืึทืŸ ืžื™ื˜ Amazon Kinesis ืื•ืŸ ืคึผืึทืฉื˜ืขืก ืึธืŸ ืกืขืจื•ื•ืขืจืก
Aviasales API ื™ื ื˜ืึทื’ืจื™ื™ืฉืึทืŸ ืžื™ื˜ Amazon 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()

ืงืจื™ื™ื™ื˜ื™ื ื’ ืึท ื ืึธื•ื˜ื™ืคื™ืขืจ ืคื•ืŸ ืœืึทืžื“ืึท ืคื•ื ืงืฆื™ืข

ื“ื™ ืจื’ืข ืœืึทืžื‘ื“ืึท ืคึฟื•ื ืงืฆื™ืข, ื•ื•ืึธืก ื•ื•ืขื˜ ืžืึธื ื™ื˜ืึธืจ ื“ื™ ืจื’ืข ื˜ื™ื™ึทืš (ืกืคึผืขืฆื™ืขืœ_ืกื˜ืจื™ื) ืื•ืŸ ืฉื™ืงืŸ ืึท ืึธื ื–ืึธื’ ืฆื• SNS, ืื™ื– ื‘ืืฉืืคืŸ ืื•ื™ืฃ ืึท ืขื ืœืขืš ื•ื•ืขื’. ื“ืขืจื™ื‘ืขืจ, ื“ื™ ืœืึทืžื‘ื“ืึท ืžื•ื–ืŸ ื”ืึธื‘ืŸ ืฆื•ื˜ืจื™ื˜ ืฆื• ืœื™ื™ืขื ืขืŸ ืคึฟื•ืŸ ืงื™ื ืขืกื™ืก ืื•ืŸ ืฉื™ืงืŸ ืึทืจื˜ื™ืงืœืขืŸ ืฆื• ืึท ื’ืขื’ืขื‘ืŸ SNS ื˜ืขืžืข, ื•ื•ืึธืก ื•ื•ืขื˜ ื–ื™ื™ืŸ ื’ืขืฉื™ืงื˜ ื“ื•ืจืš ื“ื™ SNS ื“ื™ื ืกื˜ ืฆื• ืึทืœืข ืื‘ืื ืขื ื˜ืŸ ืคื•ืŸ ื“ืขื ื˜ืขืžืข (ืขืžืึทื™ืœ, SMS, ืืื–"ื• ื•).

ืฉืึทืคึฟืŸ ืึทืŸ IAM ืจืึธืœืข
ืขืจืฉื˜ืขืจ, ืžื™ืจ ืžืึทื›ืŸ ื“ื™ IAM ืจืึธืœืข Lambda-KinesisAlarm ืคึฟืึทืจ ื“ืขื ืœืึทืžื‘ื“ืึท, ืื•ืŸ ื“ืึทืŸ ื‘ืึทืฉื˜ื™ืžืขืŸ ื“ืขื ืจืึธืœืข ืฆื• ื“ื™ ืึทืœืึทืจืž_ื ืึธื˜ื™ืคื™ืขืจ ืœืึทืžื‘ื“ืึท ื‘ืืฉืืคืŸ:

Aviasales API ื™ื ื˜ืึทื’ืจื™ื™ืฉืึทืŸ ืžื™ื˜ Amazon Kinesis ืื•ืŸ ืคึผืึทืฉื˜ืขืก ืึธืŸ ืกืขืจื•ื•ืขืจืก
Aviasales API ื™ื ื˜ืึทื’ืจื™ื™ืฉืึทืŸ ืžื™ื˜ Amazon Kinesis ืื•ืŸ ืคึผืึทืฉื˜ืขืก ืึธืŸ ืกืขืจื•ื•ืขืจืก

ื“ื™ ืœืึทืžื‘ื“ืึท ื–ืึธืœ ืึทืจื‘ืขื˜ืŸ ืื•ื™ืฃ ืึท ืฆื™ื ื’ืœ ืคึฟืึทืจ ื ื™ื™ึทืข ืจืขืงืึธืจื“ืก ืฆื• ืึทืจื™ื™ึทืŸ ื“ื™ ืกืคึผืขืฆื™ืขืœืข_ืกื˜ืจื™ื, ืึทื–ื•ื™ ืื™ืจ ื“ืึทืจืคึฟืŸ ืฆื• ืงืึทื ืคื™ื’ื™ืขืจ ื“ื™ ืฆื™ื ื’ืœ ืื™ืŸ ื“ื™ ื–ืขืœื‘ืข ื•ื•ืขื’ ื•ื•ื™ ืžื™ืจ ื”ืึธื‘ืŸ ื’ืขื˜ืืŸ ืคึฟืึทืจ ื“ื™ ืงืึทืœืขืงื˜ืขืจ ืœืึทืžื‘ื“ืึท.

ืฆื• ืžืึทื›ืŸ ืขืก ื’ืจื™ื ื’ืขืจ ืฆื• ืงืึทื ืคื™ื’ื™ืขืจ ื“ื™ ืœืึทืžื‘ื“ืึท, ืœืึธื–ืŸ ืื•ื ื“ื– ื‘ืึทืงืขื ืขืŸ ืึท ื ื™ื™ึทืข ื™ื ื•ื•ื™ื™ืจืึทื ืžืขื ืึทืœ ื‘ื™ื™ึทื˜ืขื•ื•ื“ื™ืง - TOPIC_ARN, ื•ื•ื• ืžื™ืจ ืฉื˜ืขืœืŸ ื“ื™ ANR (Amazon Recourse Names) ืคื•ืŸ ื“ื™ ืึทื™ืจืœื™ื ืขืก ื˜ืขืžืข:

Aviasales API ื™ื ื˜ืึทื’ืจื™ื™ืฉืึทืŸ ืžื™ื˜ Amazon Kinesis ืื•ืŸ ืคึผืึทืฉื˜ืขืก ืึธืŸ ืกืขืจื•ื•ืขืจืก
ืื•ืŸ ืึทืจื™ื™ึทื ืœื™ื™ื’ืŸ ื“ื™ ืœืึทืžื‘ื“ืึท ืงืึธื“, ืขืก ืื™ื– ื ื™ืฉื˜ ืงืึธืžืคึผืœื™ืฆื™ืจื˜:

import boto3
import base64
import os

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


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

ืขืก ืžื™ื™ื ื˜ ืึทื– ื“ืึธืก ืื™ื– ื•ื•ื• ื“ื™ ืžืึทื ื•ืึทืœ ืกื™ืกื˜ืขื ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ ืื™ื– ื’ืขืขื ื“ื™ืงื˜. ืึทืœืข ื•ื•ืึธืก ื‘ืœื™ื™ื‘ื˜ ืื™ื– ืฆื• ืคึผืจื•ื‘ื™ืจืŸ ืื•ืŸ ืžืึทื›ืŸ ื–ื™ื›ืขืจ ืึทื– ืžื™ืจ ื”ืึธื‘ืŸ ืงืึทื ืคื™ื’ื™ืขืจื“ ืึทืœืฅ ืจื™ื›ื˜ื™ืง.

ืฆืขื•ื•ื™ืงืœืขืŸ ืคึฟื•ืŸ Terraform ืงืึธื“

ื ื™ื™ื˜ื™ืง ืฆื•ื’ืจื™ื™ื˜ื•ื ื’

Terraform ืื™ื– ืึท ื–ื™ื™ืขืจ ื‘ืึทืงื•ื•ืขื ืึธืคึฟืŸ ืžืงื•ืจ ื’ืขืฆื™ื™ึทื’ ืคึฟืึทืจ ื“ื™ืคึผืœื•ื™ื™ื ื’ ื™ื ืคืจืึทืกื˜ืจืึทืงื˜ืฉืขืจ ืคึฟื•ืŸ ืงืึธื“. ืขืก ื”ืื˜ ื–ื™ื™ืŸ ืื™ื™ื’ืขื ืข ืกื™ื ื˜ืึทืงืก ื•ื•ืึธืก ืื™ื– ื’ืจื™ื ื’ ืฆื• ืœืขืจื ืขืŸ ืื•ืŸ ื”ืื˜ ืคื™ืœืข ื‘ื™ื™ืฉืคื™ืœืŸ ืคื•ืŸ ื•ื•ื™ ืื•ืŸ ื•ื•ืึธืก ืฆื• ืฆืขื•ื•ื™ืงืœืขืŸ. ื“ืขืจ Atom ืจืขื“ืึทืงื˜ืึธืจ ืึธื“ืขืจ ื•ื•ื™ืกื•ืึทืœ ืกื˜ื•ื“ื™ืึธ ืงืึธื•ื“ ื”ืื˜ ืคื™ืœืข ื”ืึทื ื˜ื™ืง ืคึผืœื•ื’ื™ื ืก ื•ื•ืึธืก ืžืึทื›ืŸ ืืจื‘ืขื˜ืŸ ืžื™ื˜ Terraform ื’ืจื™ื ื’ืขืจ.

ืื™ืจ ืงืขื ืขืŸ ืืจืืคืงืืคื™ืข ื“ื™ ืคืึทืจืฉืคึผืจื™ื™ื˜ื•ื ื’ ืคื•ื  ื“ืึทื ืขื˜. ื ื“ื™ื˜ื™ื™ืœื“ ืึทื ืึทืœื™ืกื™ืก ืคื•ืŸ ืึทืœืข Terraform ืงื™ื™ืคึผืึทื‘ื™ืœืึทื˜ื™ื– ืื™ื– ื•ื•ื™ื™ึทื˜ืขืจ ืคื•ืŸ ื“ืขื ืคืึทืจื ืขื ืคื•ืŸ ื“ืขื ืึทืจื˜ื™ืงืœ, ืึทื–ื•ื™ ืžื™ืจ ื•ื•ืขืœืŸ ื‘ืึทื’ืจืขื ืขืฆืŸ ื–ื™ืš ืฆื• ื“ื™ ื”ื•ื™ืคึผื˜ ืคื•ื ืงื˜ืŸ.

ื•ื•ื™ ืฆื• ืึธื ื”ื™ื™ื‘ืŸ

ื“ื™ ืคื•ืœ ืงืึธื“ ืคื•ืŸ ื“ื™ ืคึผืจื•ื™ืขืงื˜ ืื™ื– ืื™ืŸ ืžื™ื™ืŸ ืจื™ืคึผืึทื–ืึทื˜ืึธืจื™. ืžื™ืจ ืงืœืึธื•ืŸ ื“ื™ ืจื™ืคึผืึทื–ืึทื˜ืึธืจื™ ืฆื• ื–ื™ืš. ืื™ื™ื“ืขืจ ืื™ืจ ืึธื ื”ื™ื™ื‘ืŸ, ืื™ืจ ื“ืึทืจืคึฟืŸ ืฆื• ืžืึทื›ืŸ ื–ื™ื›ืขืจ ืึทื– AWS CLI ืื™ื– ืื™ื ืกื˜ืึทืœื™ืจืŸ ืื•ืŸ ืงืึทื ืคื™ื’ื™ืขืจื“ ื•ื•ื™ื™ึทืœ ... ื˜ืขืจืจืึทืคืึธืจื ื•ื•ืขื˜ ืงื•ืงืŸ ืคึฟืึทืจ ืงืจืึทื“ืขื ื˜ืฉืึทืœื– ืื™ืŸ ื“ื™ ~/.aws/credentials ื˜ืขืงืข.

ื ื’ื•ื˜ืข ืคื™ืจ ืื™ื– ืฆื• ืœื•ื™ืคืŸ ื“ื™ ืคึผืœืึทืŸ ื‘ืึทืคึฟืขืœ ืื™ื™ื“ืขืจ ื“ื™ืคึผืœื•ื™ื™ื ื’ ื“ื™ ื’ืื ืฆืข ื™ื ืคืจืึทืกื˜ืจืึทืงื˜ืฉืขืจ ืฆื• ื–ืขืŸ ื•ื•ืึธืก Terraform ืื™ื– ืื™ืฆื˜ ืงืจื™ื™ื™ื˜ื™ื ื’ ืคึฟืึทืจ ืื•ื ื“ื– ืื™ืŸ ื“ื™ ื•ื•ืึธืœืงืŸ:

terraform.exe plan

ืื™ืจ ื•ื•ืขื˜ ื–ื™ื™ืŸ ืคึผืจืึทืžืคึผื˜ื™ื“ ืฆื• ืึทืจื™ื™ึทืŸ ืึท ื˜ืขืœืขืคืึธืŸ ื ื•ืžืขืจ ืฆื• ืฉื™ืงืŸ ื ืึธื•ื˜ืึทืคืึทืงื™ื™ืฉืึทื ื–. ืขืก ืื™ื– ื ื™ื˜ ื ื™ื™ื˜ื™ืง ืฆื• ืึทืจื™ื™ึทืŸ ืขืก ืื™ืŸ ื“ืขื ื‘ื™ื ืข.

Aviasales API ื™ื ื˜ืึทื’ืจื™ื™ืฉืึทืŸ ืžื™ื˜ Amazon Kinesis ืื•ืŸ ืคึผืึทืฉื˜ืขืก ืึธืŸ ืกืขืจื•ื•ืขืจืก
ื ืึธืš ืึทื ืึทืœื™ื™ื–ื“ ื“ื™ ืึธืคึผืขืจืึทืฆื™ืข ืคึผืœืึทืŸ ืคื•ืŸ ื“ื™ ืคึผืจืึธื’ืจืึทื, ืžื™ืจ ืงืขื ืขืŸ ืึธื ื”ื™ื™ื‘ืŸ ืงืจื™ื™ื™ื˜ื™ื ื’ ืจืขืกื•ืจืกืŸ:

terraform.exe apply

ื ืึธืš ืฉื™ืงืŸ ื“ืขื ื‘ืึทืคึฟืขืœ, ืื™ืจ ื•ื•ืขื˜ ื•ื•ื™ื“ืขืจ ื–ื™ื™ืŸ ื’ืขื‘ืขื˜ืŸ ืฆื• ืึทืจื™ื™ึทืŸ ืึท ื˜ืขืœืขืคืึธืŸ ื ื•ืžืขืจ; ืจืขื“ืœ "ื™ืึธ" ื•ื•ืขืŸ ืึท ืงืฉื™ื ื•ื•ืขื’ืŸ ืึทืงื˜ืฉืึทื•ื•ืึทืœื™ ื“ื•ืจื›ืคื™ืจืŸ ื“ื™ ืึทืงืฉืึทื ื– ืื™ื– ื’ืขื•ื•ื™ื–ืŸ. ื“ืึธืก ื•ื•ืขื˜ ืœืึธื–ืŸ ืื™ืจ ืฆื• ืฉื˜ืขืœืŸ ื“ื™ ื’ืื ืฆืข ื™ื ืคืจืึทืกื˜ืจืึทืงื˜ืฉืขืจ, ื“ื•ืจื›ืคื™ืจืŸ ืึทืœืข ื“ื™ ื ื•ื™ื˜ื™ืง ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ ืคื•ืŸ EC2, ืฆืขื•ื•ื™ืงืœืขืŸ ืœืึทืžื‘ื“ืึท ืคืึทื ื’ืงืฉืึทื ื–, ืขื˜ืง.

ื ืึธืš ืึทืœืข ืจืขืกื•ืจืกืŸ ื–ืขื ืขืŸ ื”ืฆืœื—ื” ื‘ืืฉืืคืŸ ื“ื•ืจืš ื“ื™ Terraform ืงืึธื“, ืื™ืจ ื“ืึทืจืคึฟืŸ ืฆื• ื’ื™ื™ืŸ ืื™ืŸ ื“ื™ ื“ืขื˜ืึทื™ืœืก ืคื•ืŸ ื“ื™ ืงื™ื ืขืกื™ืก ืึทื ืึทืœื™ื˜ื™ืงืก ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ (ืฆื•ื ื‘ืึทื“ื•ื™ืขืจืŸ, ืื™ืš ืงืขืŸ ื ื™ืฉื˜ ื’ืขืคึฟื™ื ืขืŸ ื•ื•ื™ ืฆื• ื˜ืึธืŸ ื“ืึธืก ื’ืœื™ื™ืš ืคึฟื•ืŸ ื“ื™ ืงืึธื“).

ืงืึทื˜ืขืจ ื“ื™ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ:

Aviasales API ื™ื ื˜ืึทื’ืจื™ื™ืฉืึทืŸ ืžื™ื˜ Amazon Kinesis ืื•ืŸ ืคึผืึทืฉื˜ืขืก ืึธืŸ ืกืขืจื•ื•ืขืจืก
ื ืึธืš ื“ืขื, ืื™ืจ ืžื•ื–ืŸ ื‘ืคื™ืจื•ืฉ ืฉื˜ืขืœืŸ ื“ื™ ืื™ืŸ-ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ ื˜ื™ื™ึทืš ื ืึธืžืขืŸ ื“ื•ืจืš ืกืึทืœืขืงื˜ื™ื ื’ ืคื•ืŸ ื“ื™ ืคืึทืœ-ืึทืจืึธืคึผ ืจืฉื™ืžื”:

Aviasales API ื™ื ื˜ืึทื’ืจื™ื™ืฉืึทืŸ ืžื™ื˜ Amazon Kinesis ืื•ืŸ ืคึผืึทืฉื˜ืขืก ืึธืŸ ืกืขืจื•ื•ืขืจืก
Aviasales API ื™ื ื˜ืึทื’ืจื™ื™ืฉืึทืŸ ืžื™ื˜ Amazon Kinesis ืื•ืŸ ืคึผืึทืฉื˜ืขืก ืึธืŸ ืกืขืจื•ื•ืขืจืก
ืื™ืฆื˜ ืึทืœืฅ ืื™ื– ื’ืจื™ื™ื˜ ืฆื• ื’ื™ื™ืŸ.

ืคึผืจื•ื‘ื™ืจืŸ ื“ื™ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ

ืจืขื’ืึทืจื“ืœืขืกืก ืคื•ืŸ ื•ื•ื™ ืื™ืจ ื“ื™ืคึผืœื•ื™ื“ ื“ื™ ืกื™ืกื˜ืขื, ืžืึทื ื™ื•ืึทืœื™ ืึธื“ืขืจ ื“ื•ืจืš Terraform ืงืึธื“, ืขืก ื•ื•ืขื˜ ืึทืจื‘ืขื˜ืŸ ื“ื™ ื–ืขืœื‘ืข.

ืžื™ืจ ืงืœืึธืฅ ืื™ืŸ ื“ื•ืจืš SSH ืฆื• ื“ื™ EC2 ื•ื•ื™ืจื˜ื•ืึทืœ ืžืึทืฉื™ืŸ ื•ื•ื• ืงื™ื ืขืกื™ืก ืึทื’ืขื ื˜ ืื™ื– ืื™ื ืกื˜ืึทืœื™ืจืŸ ืื•ืŸ ืœื•ื™ืคืŸ ื“ื™ api_caller.py ืฉืจื™ืคื˜

sudo ./api_caller.py TOKEN

ื›ืœ ืื™ืจ ื”ืึธื‘ืŸ ืฆื• ื˜ืึธืŸ ืื™ื– ืฆื• ื•ื•ืึทืจื˜ืŸ ืคึฟืึทืจ ืึท SMS ืฆื• ื“ื™ื™ืŸ ื ื•ืžืขืจ:

Aviasales API ื™ื ื˜ืึทื’ืจื™ื™ืฉืึทืŸ ืžื™ื˜ Amazon Kinesis ืื•ืŸ ืคึผืึทืฉื˜ืขืก ืึธืŸ ืกืขืจื•ื•ืขืจืก
SMS - ื“ืขืจ ืึธื ื–ืึธื’ ืงื•ืžื˜ ืื•ื™ืฃ ื“ื™ ื˜ืขืœืขืคืึธืŸ ืื™ืŸ ื›ึผืžืขื˜ 1 ืžื™ื ื•ื˜:

Aviasales API ื™ื ื˜ืึทื’ืจื™ื™ืฉืึทืŸ ืžื™ื˜ Amazon Kinesis ืื•ืŸ ืคึผืึทืฉื˜ืขืก ืึธืŸ ืกืขืจื•ื•ืขืจืก
ืขืก ื‘ืœื™ื™ื‘ื˜ ืฆื• ื–ืขืŸ ืฆื™ ื“ื™ ืจืขืงืึธืจื“ืก ื–ืขื ืขืŸ ื’ืขืจืื˜ืขื•ื•ืขื˜ ืื™ืŸ ื“ื™ DynamoDB ื“ืึทื˜ืึทื‘ื™ื™ืก ืคึฟืึทืจ ืกืึทื‘ืกืึทืงื•ื•ืึทื ื˜, ืžืขืจ ื“ื™ื˜ื™ื™ืœื“ ืึทื ืึทืœื™ืกื™ืก. ื“ื™ Airline_tickets ื˜ื™ืฉ ื›ึผื•ืœืœ ื‘ืขืขืจืขืš ื“ื™ ืคืืœื’ืขื ื“ืข ื“ืึทื˜ืŸ:

Aviasales API ื™ื ื˜ืึทื’ืจื™ื™ืฉืึทืŸ ืžื™ื˜ Amazon Kinesis ืื•ืŸ ืคึผืึทืฉื˜ืขืก ืึธืŸ ืกืขืจื•ื•ืขืจืก

ืกืึธืฃ

ืื™ืŸ ื“ื™ ืœื•ื™ืฃ ืคื•ืŸ ื“ื™ ืึทืจื‘ืขื˜, ืึทืŸ ืึธื ืœื™ื™ืŸ ื“ืึทื˜ืŸ ืคึผืจืึทืกืขืกื™ื ื’ ืกื™ืกื˜ืขื ืื™ื– ื’ืขื‘ื•ื™ื˜ ื‘ืื–ื™ืจื˜ ืื•ื™ืฃ Amazon Kinesis. ืึธืคึผืฆื™ืขืก ืคึฟืึทืจ ื ื™ืฆืŸ ื“ื™ Kinesis ืึทื’ืขื ื˜ ืื™ืŸ ืงืึทื ื“ื–ืฉืึทื ื’ืงืฉืึทืŸ ืžื™ื˜ Kinesis Data Streams ืื•ืŸ ืคืึทืงื˜ื™ืฉ-ืฆื™ื™ื˜ ืึทื ืึทืœื™ื˜ื™ืงืก Kinesis Analytics ื ื™ืฆืŸ SQL ืงืึทืžืึทื ื“ื–, ื•ื•ื™ ื’ืขื–ื•ื ื˜ ื•ื•ื™ ื“ื™ ื™ื ื˜ืขืจืึทืงืฉืึทืŸ ืคื•ืŸ Amazon Kinesis ืžื™ื˜ ืื ื“ืขืจืข AWS ื‘ืึทื“ื™ื ื•ื ื’ืก.

ืžื™ืจ ื”ืึธื‘ืŸ ื“ื™ืคึผืœื•ื™ื“ ื“ื™ ืื•ื™ื‘ืŸ ืกื™ืกื˜ืขื ืื™ืŸ ืฆื•ื•ื™ื™ ื•ื•ืขื’ืŸ: ืึท ื’ืึทื ืฅ ืœืึทื ื’ ืžืึทื ื•ืึทืœ ืื™ื™ื ืขืจ ืื•ืŸ ืึท ืฉื ืขืœ ืื™ื™ื ืขืจ ืคึฟื•ืŸ ื“ื™ Terraform ืงืึธื“.

ืึทืœืข ืคึผืจื•ื™ืขืงื˜ ืžืงื•ืจ ืงืึธื“ ืื™ื– ื‘ื ื™ืžืฆื ืื™ืŸ ืžื™ื™ืŸ GitHub ืจื™ืคึผืึทื–ืึทื˜ืึธืจื™, ืื™ืš ืคึฟืึธืจืฉืœืึธื’ืŸ ืื™ืจ ื‘ืืงืขื ืขืŸ ื–ื™ืš ืžื™ื˜ ืื™ื.

ืื™ืš ื‘ื™ืŸ ืฆื•ืคืจื™ื“ืŸ ืฆื• ื“ื™ืกืงื•ื˜ื™ืจืŸ ื“ืขื ืึทืจื˜ื™ืงืœ, ืื™ืš ืงื•ืง ืคืึธืจื•ื™ืก ืฆื• ื“ื™ื™ืŸ ื‘ืึทืžืขืจืงื•ื ื’ืขืŸ. ืื™ืš ื”ืึธืคึฟืŸ ืคึฟืึทืจ ืงืึทื ืกื˜ืจืึทืงื˜ื™ื•ื• ืงืจื™ื˜ื™ืง.

ืื™ืš ื•ื•ื™ื ื˜ืฉืŸ ืื™ืจ ื”ืฆืœื—ื”!

ืžืงื•ืจ: www.habr.com

ืœื™ื™ื’ืŸ ืึท ื‘ืึทืžืขืจืงื•ื ื’