แฐแแ แฐแแแ !
แแแแฌแแแ แแแแแแคแ แแแแแแแแก แคแ แแแ? แแ แแแงแแแ แก, แแแแ แแ แแแแแแแแแแชแแแก แแ แแก แแแช แจแแแแงแแแ แแ แแแแแแแแแแแแแก แแแแแชแแแแแแก แแแแแแแ แแ แแ แชแแแแแแ แ แแกแฃแ แกแแแแ - Aviasales.
แแฆแแก แฉแแแ แแแแแแแแแแแแแ Amazon Kinesis-แแก แแฃแจแแแแแก, แแแแจแแแแแ แกแขแ แแแแแ แกแแกแขแแแแก แ แแแแฃแ แแ แแจแ แแแแแแขแแแแ, แแแแแแแกแขแแแแ แแแ Amazon DynamoDB NoSQL แแแแแชแแแแ แแแแแก, แ แแแแ แช แแแแแชแแแแ แซแแ แแแแ แจแแกแแแแฎแแ แแ แแแแแงแแแแแ SMS แจแแขแงแแแแแแแแแก แกแแแแขแแ แแกแ แแแแแแแแแกแแแแก.
แงแแแแ แแแขแแแ แญแ แแก แฅแแแจแแ! แฌแแแ!
แจแแกแแแแแ
แแแแแแแแแ, แฉแแแ แแแญแแ แแแแ แฌแแแแแ
แแ แกแขแแขแแแก แแแแแแ แ แแแแแแแ AWS-แจแ แแแคแแ แแแชแแแก แแแแแแแก แแแแแงแแแแแแก แแแแแแ แแแแแแ; แฉแแแ แแแแแแแแแแกแฌแแแแแ, แ แแ แแแแแงแแแแแฃแแ API-แก แแแแ แแแแ แฃแแแแฃแแ แแแแแชแแแแแ แแ แแ แแก แแแแชแ แแ แแแแแฎแแแแฃแแ แแ แแแแแชแแแฃแแแ แฅแแจแแแแ, แ แแแแแแช แแ แแก แฉแแแแงแแแแแแ Aviasales.ru-แกแ แแ Jetradar.com-แแก แแแแฎแแแ แแแแแแแก แแแแ แแแแ 48 แกแแแแแก แแแแแแแแแแแจแ แซแแแแแก แกแแคแฃแซแแแแแ.
Kinesis-แแแแแขแ, แ แแแแแแช แแแแแกแขแแแแ แแแฃแแแ แแฌแแ แแแแแแ แแแแฅแแแแแ, แแแฆแแแฃแแ API-แแ แแแขแแแแขแฃแ แแ แแแแแแแแแแก แแ แแแแแกแชแแแก แแแแแชแแแแแก แกแแกแฃแ แแแ แแแแแแแ Kinesis Data Analytics-แแก แกแแจแฃแแแแแแ. แแ แแแแแแแก แแแฃแแฃแจแแแแแแแ แแแ แกแแ แแแแฌแแ แแแ แแแ แแแแแ แแแฆแแแแแจแ. DynamoDB-แจแ แแแแแแแแแฃแแ แแแแแแฃแแ แแแแแชแแแแ แจแแแแฎแแ แกแแจแฃแแแแแแก แแแกแชแแแก แแแแแแแแแก แฃแคแ แ แฆแ แแ แแแแแแแก BI แแแกแขแ แฃแแแแขแแแแก แแแจแแแแแแ, แ แแแแ แแชแแ AWS Quick Sight.
แฉแแแ แแแแแแฎแแแแแ แแ แแแ แแแแขแก แแแแแ แแแคแ แแกแขแ แฃแฅแขแฃแ แแก แแแแแแแแแแกแแแแก:
- แกแแฎแแแแซแฆแแแแแแ - AWS Management Console-แแก แแแจแแแแแแ;
- Terraform แแแแแก แแแคแ แแกแขแ แฃแฅแขแฃแ แ แแแแแฃแแแแแแแ แแแ แแแชแ แแแขแแแแขแแแแกแแแแก;
แแแแแแแแ แแแฃแแ แกแแกแขแแแแก แแ แฅแแขแแฅแขแฃแ แ
แแแแแงแแแแแฃแแ แแแแแแแแแขแแแ:
Aviasales API โ แแ API-แก แแแแ แแแแ แฃแแแแฃแแ แแแแแชแแแแแ แแแแแงแแแแแฃแแ แแฅแแแแ แงแแแแ แจแแแแแแแ แกแแแฃแจแแแกแแแแก;EC2 แแ แแแแฃแกแแ แแก แแแแแแแแ โ แฉแแแฃแแแแ แแแ แแแ แขแฃแแแฃแ แ แแแแฅแแแ แฆแ แฃแแแแจแ, แ แแแแแแแแแช แฌแแ แแแแฅแแแแแ แจแแงแแแแแก แแแแแชแแแแ แแแแแแ:Kinesis แแแแแขแ แแ แแก แแแแฅแแแแแ แแแแแแแแ แแแแ แแแแแกแขแแแแ แแแฃแแ Java แแแแแแแชแแ, แ แแแแแแช แฃแแ แฃแแแแแงแแคแก แแแแแชแแแแ แจแแแ แแแแแแกแ แแ แแแแแแแแแก แแแ แขแแ แแแแก Kinesis-แจแ (Kinesis Data Streams แแ Kinesis Firehose). แแแแแขแ แแฃแแแแแแ แแแแแขแ แแแแแก แคแแแแแแแก แแ แแแแแแแแแก แแแแแแแแฃแ แแแ แแฅแขแแ แแแจแ แแ แแแแแแแแก แแฎแแ แแแแแชแแแแแก Kinesis-แจแ;API Caller Script - แแแแแแแก แกแแ แแแขแ, แ แแแแแแช แแแแแ แแแแก API-แก แแแแฎแแแแแแก แแ แแแกแฃแฎแก แแแแแกแแแก แกแแฅแแฆแแแแแจแ, แ แแแแแกแแช แแแแแขแ แแแแแก Kinesis Agent;
Kinesis แแแแแชแแแแ แแแแแแแแ โ แ แแแแฃแ แแ แแจแ แแแแแชแแแแ แแแแแแแก แกแแ แแแกแ แคแแ แแ แแแกแจแขแแแแก แจแแกแแซแแแแแแแแแแ;Kinesis Analytics แแ แแก แฃแกแแ แแแ แ แกแแ แแแกแ, แ แแแแแแช แแแแ แขแแแแแก แกแขแ แแแแแแแก แแแแแชแแแแแแก แแแแแแแก แ แแแแฃแ แแ แแจแ. Amazon Kinesis Data Analytics แแแแแคแแแฃแ แแ แแแก แแแแแแแชแแแก แ แแกแฃแ แกแแแก แแ แแแขแแแแขแฃแ แแ แแแกแจแขแแแแ แแแก แจแแแแแแแแแ แแแแแชแแแแแแก แแแแแกแแแแ แ แแแชแฃแแแแแก แแแกแแแฃแจแแแแแแแ;AWS แแแแแแ โ แกแแ แแแกแ, แ แแแแแแช แกแแจแฃแแแแแแก แแแซแแแแ แแแฃแจแแแ แแแแ แกแแ แแแ แแแแก แกแแ แแแแ แแ แแกแแแก แแ แแแงแแแแแแก แแแ แแจแ. แงแแแแ แแแแแแแแแแ แกแแแซแแแแ แ แแแขแแแแขแฃแ แแ แแแกแจแขแแแแ แแแฃแแแ แแแแแแฃแแ แแแ แแกแแแแก;Amazon DynamoDB - แแแกแแฆแแแ-แแแแจแแแแแแแแก แฌแงแแแแแแแกแ แแ แแแแฃแแแแขแแแแก แแแแแชแแแแ แแแแ, แ แแแแแแช แฃแแ แฃแแแแแงแแคแก 10 แแแแแฌแแแแ แแแแแแ แจแแงแแแแแแแก แแแแแกแแแแ แ แแแกแจแขแแแแก แแแจแแแแแกแแก. DynamoDB-แแก แแแแแงแแแแแแกแแก, แแฅแแแ แแ แแญแแ แแแแแ แ แแแแ แกแแ แแแ แแก แฃแแ แฃแแแแแงแแคแ, แแแงแแแแแ แแ แแแ แแแ. DynamoDB แแแขแแแแขแฃแ แแ แแแแแแแก แชแฎแ แแแแแก, แ แแแ แจแแชแแแแแก แแ แกแแแฃแแ แ แแกแฃแ แกแแแแก แ แแแแแแแแ แแ แจแแแแแ แฉแฃแแแก แแแฆแแแ แจแแกแ แฃแแแแ. แแ แแ แแก แกแแญแแ แ แกแแกแขแแแแก แแแแแแแกแขแ แแ แแแ;Amazon SNS - แกแ แฃแแแ แแแ แแฃแแ แกแแ แแแกแ แจแแขแงแแแแแแแแแแก แแแแแแแแแกแแแแก แแแแแแชแแแแแ-แแแแแแแขแแก (Pub/Sub) แแแแแแแก แแแแแงแแแแแแ, แ แแแแแแแช แจแแแแซแแแแ แแแแ แแกแแ แแแกแแแแก, แแแแแฌแแแแแฃแแ แกแแกแขแแแแแแก แแ แกแแ แแแ แแก แแแ แแจแ แแแแแแแชแแแแแก แแแแแแ แแแ. SNS แจแแแซแแแแ แแแแแงแแแแแฃแ แแฅแแแก แกแแแแแแ แแแแฎแแแ แแแแแแแกแแแแก แแแคแแ แแแชแแแก แแแกแแแแแแแแ แแแแแแฃแ แ Push แจแแขแงแแแแแแแแแแก, SMS แจแแขแงแแแแแแแแแแก แแ แแ.แคแแกแขแแก แกแแจแฃแแแแแแ.
แกแแฌแงแแกแ แขแ แแแแแแ
แแแแแชแแแแ แแแแแแแก แแแฃแแแชแแแกแแแแก แแแแแแฌแงแแแขแ แแแแแแแงแแแแแแแ Aviasales API-แก แแแแ แแแแ แฃแแแแฃแแ แแแแแแแแแแแก แแแคแแ แแแชแแ. IN
แแกแ แ แแ, แแแแแ แแแแ แแแแกแขแ แแ แแแ แแ แแแแแฆแแ แฉแแแแ แแแจแแแ.
แแแแฎแแแแแก แแแแแแแแ แแแชแแแฃแแแ แฅแแแแแ:
http://api.travelpayouts.com/v2/prices/month-matrix?currency=rub&origin=LED&destination=HKT&show_to_affiliates=true&token=TOKEN_API
API-แแแ แแแแแชแแแแแแก แแแฆแแแแก แแแแแแฆแแแจแแฃแแ แแแแแแ แแแแฎแแแแแจแ แขแแแแแแก แแแแแแแแแ แแแฃแจแแแแแก, แแแแ แแ แแแ แฉแแแแแ แฌแแแแแแก แแแขแแแ แแแแแแแขแแแ แกแแแแฃแ แจแ, แแแแขแแ แแ แแแแแแก แแแแแแแงแแแแแ api_caller.py แกแแ แแแขแจแ.
แแแกแฃแฎแแก แแแแแแแแ:
{{
"success":true,
"data":[{
"show_to_affiliates":true,
"trip_class":0,
"origin":"LED",
"destination":"HKT",
"depart_date":"2015-10-01",
"return_date":"",
"number_of_changes":1,
"value":29127,
"found_at":"2015-09-24T00:06:12+04:00",
"distance":8015,
"actual":true
}]
}
แแแแแ แแแงแแแแแแ API แแแกแฃแฎแ แแแแฉแแแแแแก แแแแแแก แกแแแแข-แแแขแแ แแฃแ แแแแแ แคแฃแแแแแ... แแฐ, แ แ แกแแแแแ แแ...
แแแแแแแแ แแ แงแแแแแแแแ แแแ แแ แคแฃแแแขแ แแฎแแ "แแฎแแแแ แแชแแแแแ", แแแแ แแแซแแแ แแแแแแแแ แแแขแแ แแฃแ แแแแแ แงแแแแแจแ.
แแแ แแแ แแฃแแแแก, แ แแ แแฅแแแ แฃแแแ แแแฅแแ AWS แแแแแ แแจแ. แแแแแ แแแฃแงแแแแแแแแ แแแแแแแฎแแแแ แแแแกแแแฃแแ แแแฃแแ แงแฃแ แแแฆแแแ แแ แคแแฅแขแแ, แ แแ Kinesis แแ SMS-แแ แจแแขแงแแแแแแแแแแก แแแแแแแแ แแ แจแแแแก แงแแแแแฌแแแฃแ
แฃแคแแกแ แแแแ (แฃแคแแกแ แแแแแงแแแแแ) . แแแแ แแ แแแแก แแแฃแฎแแแแแแ, แ แแแแแแแแ แแแแแ แแก แแแแแแแแกแฌแแแแแแ, แกแแแกแแแแ แจแแกแแซแแแแแแแ แจแแแแแแแแแแแฃแแ แกแแกแขแแแแก แแจแแแแแ แแ แแแกแแแ แแแแแจแ. แแ, แ แ แแฅแแ แฃแแแ, แแ แแแแแแแฌแงแแแ แฌแแจแแแแ แงแแแแ แ แแกแฃแ แกแ แแแก แจแแแแแ, แ แแช แแกแแแ แแฆแแ แแแแญแแ แแแแแ.
แกแแแแแแแแ แแ, DynamoDb แแ แแแแแแ แคแฃแแฅแชแแแแ แฉแแแแแแแก แฃแคแแกแ แแฅแแแแ, แแฃ แแฅแแแ แแแแแแแงแแคแแแแแ แงแแแแแแแแฃแ แฃแคแแกแ แแแแแขแแแก. แแแแแแแแแ, DynamoDB-แกแแแแก: 25 GB แกแแชแแแ, 25 WCU/RCU แแ 100 แแแแแแแ แแแแฎแแแแ. แแ แแแแแแแ แแแแแแ แคแฃแแฅแชแแแก แแแ แ แแแแจแ.
แกแแกแขแแแแก แฎแแแแ แแแแแแแแแ
Kinesis แแแแแชแแแแ แแแแแแแแแก แแแงแแแแแ
แแแแแ แแแแแแแแแ Kinesis Data Streams แกแแ แแแกแแ แแ แจแแแฅแแแแ แแ แ แแฎแแแ แแแแแแ, แแแแ แคแ แแแแแแขแ แแแแแแฃแแแกแแแแก.
แ แ แแ แแก แแแขแแฎแ?
แแแขแแฎแ แแ แแก Amazon Kinesis แแแแแแแก แแแแแชแแแแ แแแแแชแแแแก แซแแ แแแแแ แแ แแแฃแแ. แแ แแ แกแแแแแแขแ แฃแแ แฃแแแแแงแแคแก แจแแงแแแแแก แแแแแชแแแแ แแแแแชแแแแก 1 แแ/แฌแ แกแแฉแฅแแ แแ แแ แแแแแแแแแแ แแแแแชแแแแแแก แแแแแชแแแแก 2 แแ/แฌแ แกแแฉแฅแแ แแ. แแ แแ แกแแแแแแขแ แแฎแแ แก แฃแญแแ แก 1000-แแแ PUT แฉแแแแฌแแ แก แฌแแแจแ. แแแแแชแแแแ แแแแแแแก แจแแฅแแแแกแแก, แแฅแแแ แฃแแแ แแแฃแแแแแ แกแแแแแแขแแแแก แกแแญแแ แ แ แแแแแแแแ. แแแแแแแแแ, แจแแแแซแแแแ แจแแฅแแแแ แแแแแชแแแแ แแแแแแ แแ แ แกแแแแแแขแแ. แแแแแชแแแแ แแก แแแแแแ แฃแแ แฃแแแแแงแแคแก แจแแงแแแแแก แแแแแชแแแแ แแแแแชแแแแก 2 แแ/แฌแ แกแแฉแฅแแ แแ แแ แแแแแแแแแแ แแแแแชแแแแแแก แแแแแชแแแแก 4 แแ/แฌแ, 2000-แแแ PUT แฉแแแแฌแแ แแก แแฎแแ แแแญแแ แ แฌแแแจแ.
แ แแช แฃแคแ แ แแแขแ แคแ แแแแแแขแแ แแฅแแแแก แแแแแแจแ, แแแ แแแขแแ แแแกแ แแแแขแแ แฃแแแ แแแแแแ. แแ แแแชแแแจแ, แแกแ แฎแแแแ แแแแแแแแแก แแแกแจแขแแแแ แแแ - แแแแกแฎแแ แแแแแแก แแแแแขแแแแ. แแแแ แแ แ แแช แแแขแ แแแขแแฎแ แแแฅแแ, แแแ แฃแคแ แ แแแฆแแแแ แคแแกแ. แแแแแแฃแแ แแแขแแฎแ แฆแแ แก 1,5 แชแแแขแ แกแแแแจแ แแ แแแแแขแแแแแ 1.4 แชแแแขแ แงแแแแแ แแแแแแแ PUT แแแขแแแ แแแแก แแ แแแฃแแแ.
แแแแแ แจแแแฅแแแแ แแฎแแแ แแแแแแ แกแแฎแแแแ แแแแ แแแแแแแแ1 แแแญแแ แ แกแแแแแ แแกแ แแฅแแแแ แแแกแแแแก:
แแฎแแ แแแแแ แจแแแฅแแแแ แกแฎแแ แแแแ แกแแฎแแแแ แกแแแชแแแแฃแ แ_แแแแแแ:
แแ แแแแฃแกแแ แแก แแแงแแแแแ
แแแแแแแแแก แแแกแแแแแแแแแแแแ แกแแแแแ แแกแแ แแแแแแงแแแแ แฉแแแฃแแแแ แแแ EC2 แแแกแขแแแชแแ, แ แแแแ แช แแแแแชแแแแ แแฌแแ แแแแแแแ. แแก แแ แฃแแแ แแงแแก แแซแแแแ แ, แซแแแ แแแฆแแ แแแฃแแ แแแ แขแฃแแแฃแ แ แแแแฅแแแ; spot t2.micro แแแ แแแ แแแฃแจแแแแแก.
แแแแจแแแแแแแแแ แจแแแแจแแแ: แแแแแแแแแ, แแฅแแแ แฃแแแ แแแแแแงแแแแ แกแฃแ แแแ - Amazon Linux AMI 2018.03.0, แแแก แแฅแแก แแแแแแแ แแแ แแแแขแ แ Kinesis Agent-แแก แกแฌแ แแคแแ แแแกแแจแแแแแ.
แแแแแแแ EC2 แกแแ แแแกแแ, แจแแฅแแแแแ แแฎแแแ แแแ แขแฃแแแฃแ แ แแแแฅแแแ, แแแ แฉแแแ แกแแกแฃแ แแแแ AMI แขแแแแก t2.micro, แ แแแแแแช แจแแแแก แฃแคแแกแ แแแ แฃแกแจแ:
แแแแกแแแแแก, แ แแ แแฎแแแ แจแแฅแแแแ แแแ แขแฃแแแฃแ แแแแฅแแแแก แจแแแซแแแก Kinesis แกแแ แแแกแแแ แฃแ แแแแ แแแแ, แแแก แแแแก แฃแคแแแแ แฃแแแ แแแแแแญแแก. แแแแก แกแแฃแแแแแกแ แแแแ IAM แ แแแแก แแแแแญแแแ. แแแแขแแ, แแแแแฏแ 3: แแแกแขแแแชแแแก แแแขแแแแแแก แแแแคแแแฃแ แแชแแแก แแแ แแแแ, แแฅแแแ แฃแแแ แแแ แฉแแแ แจแแฅแแแแแ แแฎแแแ IAM แ แแแ:
IAM แ แแแแก แจแแฅแแแ EC2-แกแแแแก
แคแแแฏแแ แแจแ, แ แแแแแแช แแฎแกแแแแ, แแแ แฉแแแ, แ แแ แฉแแแ แแฅแแแแ แแฎแแ แ แแแก EC2-แกแแแแก แแ แแแแแแแ แแแแแ แแแแแแก แแแแงแแคแแแแแแจแ:
แขแ แแแแแแแก แแแแแแแแแก แแแแแงแแแแแแ, แฉแแแ แแ แแแแแแฌแแแก แ แแกแฃแ แกแแแแก แฃแคแแแแแแแก แแแ แชแแแแแแแ แแแแคแแแฃแ แแชแแแก แงแแแแ แกแแ แแฃแแแจแ แจแแแแกแแแ, แแแแขแแ แฉแแแ แแแ แฉแแแ Amazon-แแก แแแแ แฌแแแแกแฌแแ แแแแคแแแฃแ แแ แแแฃแ แแแแแขแแแแก: AmazonKinesisFullAccess แแ CloudWatchFullAccess.
แแแแแ แแแแชแแ แ แแแแ แแแแจแแแแแแแแแ แกแแฎแแแ แแ แ แแแก, แแแแแแแแแ: EC2-KinesisStreams-FullAccess. แจแแแแแ แฃแแแ แแงแแก แแแแแ, แ แแช แแแฉแแแแแแแ แฅแแแแแ แแแชแแแฃแ แกแฃแ แแแแ:
แแ แแฎแแแ แ แแแแก แจแแฅแแแแก แจแแแแแ, แแ แแแแแแแฌแงแแแ แแแกแ แแแแแแ แแแ แจแแฅแแแแ แแแ แขแฃแแแฃแ แ แแแแฅแแแแก แแแแแแแแแ:
แฉแแแ แกแฎแแแก แแ แแคแแ แก แแชแแแแ แแ แแแ แแแแ แแ แแแแแแแแแแ แ แจแแแแแ แคแแแฏแ แแแแ.
แแงแแ แ แแแกแแแก แแแ แแแแขแ แแแ แจแแแซแแแแ แแแ แฉแแก แแแแฃแแแกแฎแแแแแ, แแกแแแ แ แแแแ แช แขแแแแแ (แแฃแแชแ แแแ แแ แแ แแฅแขแแแแ แขแแแแแแก แแแแแงแแแแแ, แงแแแแ แจแแแแฎแแแแแจแ, แแแแแแแแก แแแแชแแ แกแแฎแแแ แแ แแแฃแแแแแ แแแ แแแ).
แแฎแแ แฉแแแ แแแแงแแคแแแแ แแแแแฏแ 6: แฃแกแแคแ แแฎแแแแแก แฏแแฃแคแแก แแแแคแแแฃแ แแชแแแก แฉแแแแ แแแ, แกแแแแช แแฅแแแ แฃแแแ แจแแฅแแแแ แแฎแแแ แแ แแแฃแแแแแ แแ แกแแแฃแแ แฃแกแแคแ แแฎแแแแแก แฏแแฃแคแ, แ แแแแแแช แกแแจแฃแแแแแแก แแแซแแแแ แแแฃแแแแจแแ แแแ ssh (แแแ แขแ 22) แแแกแขแแแชแแแก. แแแ แฉแแแ แฌแงแแ แ -> แฉแแแ IP แแฅ แแ แจแแแแซแแแแ แแแฃแจแแแ แแแแแแแแแ แ.
แ แแแแ แช แแ แแก แแแแแแแก แแแจแแแแฃแ แกแขแแขแฃแกแแ, แจแแแแซแแแแ แกแชแแแแ แแแกแแแ แแแแแแจแแ แแแ 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
แแแแแ แจแแแฅแแแแ แกแแฅแแฆแแแแ 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
แแฎแแ แแแแแแแฌแแ แแ แแแแแแแก แกแแ แแแขแ, แ แแแแแแช แแแแแฎแแแก แแแแแชแแแแแก API-แแแ:
REPO_PATH=https://raw.githubusercontent.com/igorgorbenko/aviasales_kinesis/master/producer
wget $REPO_PATH/api_caller.py -P /home/ec2-user/
wget $REPO_PATH/requirements.txt -P /home/ec2-user/
sudo chmod a+x /home/ec2-user/api_caller.py
sudo /usr/local/bin/pip3 install -r /home/ec2-user/requirements.txt
api_caller.py แกแแ แแแขแ แแแฎแแแก แแแแแชแแแแแก Aviasales-แแกแแแ แแ แแแแฎแแแก แแแฆแแแฃแ แแแกแฃแฎแก แแแ แแฅแขแแ แแแจแ, แ แแแแแกแแช Kinesis แแแแแขแ แแกแแแแแ แแแก. แแ แกแแ แแแขแแก แแแแฎแแ แชแแแแแแ แกแแแแแแ แกแขแแแแแ แขแฃแแแ, แแ แแก TicketsApi แแแแกแ, แแก แกแแจแฃแแแแแแก แแแซแแแแ แแกแแแฅแ แแแฃแแแ แแแแงแแแแแ API. แฉแแแ แแแแแแชแแแ แกแแแแฃแ แก แแแขแแแแ แแ แแแแฎแแแ แแแ แแแแขแ แแแก แแ แแแแกแจแ:
class TicketsApi:
"""Api caller class."""
def __init__(self, headers):
"""Init method."""
self.base_url = BASE_URL
self.headers = headers
async def get_data(self, data):
"""Get the data from API query."""
response_json = {}
async with ClientSession(headers=self.headers) as session:
try:
response = await session.get(self.base_url, data=data)
response.raise_for_status()
LOGGER.info('Response status %s: %s',
self.base_url, response.status)
response_json = await response.json()
except HTTPError as http_err:
LOGGER.error('Oops! HTTP error occurred: %s', str(http_err))
except Exception as err:
LOGGER.error('Oops! An error ocurred: %s', str(err))
return response_json
def prepare_request(api_token):
"""Return the headers and query fot the API request."""
headers = {'X-Access-Token': api_token,
'Accept-Encoding': 'gzip'}
data = FormData()
data.add_field('currency', CURRENCY)
data.add_field('origin', ORIGIN)
data.add_field('destination', DESTINATION)
data.add_field('show_to_affiliates', SHOW_TO_AFFILIATES)
data.add_field('trip_duration', TRIP_DURATION)
return headers, data
async def main():
"""Get run the code."""
if len(sys.argv) != 2:
print('Usage: api_caller.py <your_api_token>')
sys.exit(1)
return
api_token = sys.argv[1]
headers, data = prepare_request(api_token)
api = TicketsApi(headers)
response = await api.get_data(data)
if response.get('success', None):
LOGGER.info('API has returned %s items', len(response['data']))
try:
count_rows = log_maker(response)
LOGGER.info('%s rows have been saved into %s',
count_rows,
TARGET_FILE)
except Exception as e:
LOGGER.error('Oops! Request result was not saved to file. %s',
str(e))
else:
LOGGER.error('Oops! API request was unsuccessful %s!', response)
แแแแแขแแก แกแฌแแ แ แแแ แแแแขแ แแแแกแ แแ แคแฃแแฅแชแแแแแ แแแแก แจแแกแแแแฌแแแแแแ, แแแแแ แจแแแแแแฌแแแ api_caller.py แกแแ แแแขแ:
sudo ./api_caller.py TOKEN
แแ แฉแแแ แแฃแงแฃแ แแแ แแฃแจแแแแแก แจแแแแแก แแแแแขแแแแก แแฃแ แแแแแแจแ แแ แแแแแขแแ แแแแแก แฉแแแแ แแแ แแแแแฎแแแแแแก_แแแแแแแแแก แแแแแชแแแแ แแแแแแจแ:
tail -f /var/log/aws-kinesis-agent/aws-kinesis-agent.log
แ แแแแ แช แฎแแแแแ, แงแแแแแคแแ แ แแฃแจแแแแก แแ Kinesis Agent แฌแแ แแแขแแแแ แแแแแแแแก แแแแแชแแแแแก แแแแแแจแ. แแฎแแ แแแแแ แแแแแแแแคแแแฃแ แแ แแ แแแแฎแแแ แแแแแ.
Kinesis Data Analytics-แแก แแแงแแแแแ
แแแแแ แแแแแแแแแ แแแแแ แกแแกแขแแแแก แชแแแขแ แแแฃแ แแแแแแแแแขแแ - แจแแฅแแแแแ แแฎแแแ แแแแแแแชแแ Kinesis Data Analytics-แจแ, แกแแฎแแแแ kinesis_analytics_airlines_app:
Kinesis Data Analytics แกแแจแฃแแแแแแก แแแซแแแแ แแแแแฎแแ แชแแแแแ แแแแแชแแแแ แ แแแแฃแ แแ แแจแ แแแแแแขแแแ Kinesis Streams-แแแ SQL แแแแก แแแแแงแแแแแแ. แแก แแ แแก แกแ แฃแแแ แแแขแแกแแแแแ แแแแก แกแแ แแแกแ (แแแแกแฎแแแแแแแ Kinesis Streams-แแกแแแ), แ แแแแแแช:
- แกแแจแฃแแแแแแก แแแซแแแแ แจแแฅแแแแ แแฎแแแ แแแแแแแแ (Output Stream) แฌแงแแ แแก แแแแแชแแแแแแก แแแแฎแแแแแก แกแแคแฃแซแแแแแ;
- แฃแแ แฃแแแแแงแแคแก แแแแแแก แจแแชแแแแแแแ, แ แแแแแแแช แฌแแ แแแแจแแ แแแแแแแชแแแแแก แแฃแจแแแแแก แแ แแก (Error Stream);
- แจแแฃแซแแแ แแแขแแแแขแฃแ แแ แแแแกแแแฆแแ แแก แจแแงแแแแแก แแแแแชแแแแ แกแฅแแแ (แกแแญแแ แแแแแก แจแแแแฎแแแแแจแ แจแแกแแซแแแแแแแ แฎแแแแ แฎแแแแฎแแ แแแแกแแแฆแแ แ).
แแก แแ แแ แแก แแแคแ แกแแ แแแกแ - 0.11 แแจแจ แแแแแ แ แกแแแฃแจแแ แกแแแแจแ, แแกแ แ แแ แแฅแแแ แฃแแแ แแแแแแงแแแแ แแแ แคแ แแฎแแแแ แแ แฌแแจแแแแ, แ แแแแกแแช แแแแกแ แฃแแแแ.
แแแแแ แแแแฃแแแแจแแ แแ แแแแแแแชแแ แแแแแชแแแแ แฌแงแแ แแก:
แแแ แฉแแแ แแแแแแ, แ แแแแแกแแช แแแแแ แแแ แแแแแแจแแ แแแแก (แแแแแแแแแแแแ_แแแแแแแแ):
แจแแแแแแ, แแฅแแแ แฃแแแ แแแฃแ แแแ แแฎแแแ IAM แ แแแ, แ แแแ แแแแแแแชแแแ แจแแซแแแก แฌแแแแแแฎแแก แแแแแแแแแ แแ แฉแแฌแแ แแก แแแแแแจแ. แแแแกแแแแแก แกแแแแแ แแกแแ แแ แแคแแ แ แจแแชแแแแแ แฌแแแแแแก แแแแแ แแแแแแก แแแแแจแ:
แแฎแแ แแแแแแฎแแแแ แแแแแชแแแแ แกแฅแแแแก แแฆแแแฉแแแ แแแแแแจแ; แแแแกแแแแแก แแแแฌแแแแฃแแแ แฆแแแแแแ โDiscover schemaโ. แจแแแแแแ, IAM แ แแแ แแแแแฎแแแแแ (แจแแแฅแแแแแ แแฎแแแ) แแ แกแฅแแแแก แแแแชแแแแ แแแแฌแงแแแ แแแแแแจแ แฃแแแ แจแแแแกแฃแแ แแแแแชแแแแแแแแ:
แแฎแแ แแฅแแแ แฃแแแ แแแแแฎแแแแแ SQL แ แแแแฅแขแแ แจแ. แแ แฆแแแแแแ แแแฌแแแแฃแแแแแกแแก แแแแแฉแแแแแ แคแแแฏแแ แ, แ แแแแแแช แแแฎแแแ แแแแแแแชแแแก แแแจแแแแแก - แแแ แฉแแแ แ แแก แแแจแแแแ แแกแฃแ แ:
แฉแแแแ แจแแแแแแ แแแ แขแแแ แแแแฎแแแแ SQL แ แแแแฅแขแแ แแก แคแแแฏแแ แแจแ แแ แแแแญแแ แแ Save and Run 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-แจแ แแฅแแแ แแฃแจแแแแ แแแแแแแแแแ (STREAM) แแ แขแฃแแแแแแแแ (PUMPs) - แฃแฌแงแแแขแ แฉแแกแแแก แแแแฎแแแแแแ, แ แแแแแแแช แแแแแแแชแแแก แแ แแ แแแแแแแแแ แแแแแชแแแแแก แกแฎแแ แแแแแแจแ แแแแแกแแแแ.
แแแแแ แฌแแ แแแแแแแแแ SQL แแแแฎแแแแ แแซแแแก แแแ แแคแแแขแแก แแแแแแแแก แฎแฃแแ แแแแก แ แฃแแแแ แแแแแแ แฆแแ แแแฃแแแแแ. แงแแแแ แฉแแแแฌแแ แ, แ แแแแแแช แแแแแงแแคแแแแแก แแ แแแ แแแแแก, แแแแแแแกแแแแ DESTINATION_SQL_STREAM แแแแแแจแ.
แแแแแจแแฃแแแแแก แแแแแจแ แแแ แฉแแแ special_stream แแแแแแ, แฎแแแ แแแแแแแชแแแก แแแแแแแก แกแแฎแแแ DESTINATION_SQL_STREAM แฉแแแแกแแจแแแ แกแแแจแ:
แงแแแแ แแแแแแฃแแแชแแแก แจแแแแแ แฃแแแ แแงแแก แแกแแแแกแ แกแฃแ แแแแก แแกแแแแกแ:
SNS แแแแแก แจแแฅแแแ แแ แแแแแฌแแ แ
แแแแแแแ แแแ แขแแแ แจแแขแงแแแแแแแแแแก แกแแ แแแกแจแ แแ แจแแฅแแแแแ แแฎแแแ แแแแ, แกแแฎแแแฌแแแแแแ Airlines:
แแแแแแฌแแ แแ แแก แแแแ แแ แแแฃแแแแแ แแแแแแฃแ แ แขแแแแคแแแแก แแแแแ แ, แ แแแแแแแช แแแแแแแแแแแ SMS แจแแขแงแแแแแแแแแ:
แจแแฅแแแแแ แชแฎแ แแแ DynamoDB-แจแ
แแแแ airline_tickets แแแแแแแแแ แแแแแแฃแแ แแแแแชแแแแแแก แจแแกแแแแฎแแ, แจแแแฅแแแแ แชแฎแ แแแ DynamoDB-แจแ แแแแแ แกแแฎแแแแ. แฉแแแ แแแแแแแงแแแแแ record_id แ แแแแ แช แแแ แแแแแแ แแแกแแฆแแแ:
แแแแแแ แคแฃแแฅแชแแแก แแแแแฅแขแแ แแก แจแแฅแแแ
แแแแแ แจแแแฅแแแแ แแแแแแ แคแฃแแฅแชแแ แกแแฎแแแฌแแแแแแ แแแแแฅแขแแ แ, แ แแแแแก แแแแชแแแ แแฅแแแแ แแแแแแแแแแแแแก_แแแแแแแแแก แแแแแแแก แแแแแแแแฎแแ แแ แแฃ แแฅ แแฎแแแ แฉแแแแฌแแ แแแ แแฆแแแฉแแแแแ, แฉแแกแแแ แแก แฉแแแแฌแแ แแแ DynamoDB แชแฎแ แแแจแ. แชแฎแแแแ, แแแแฃแแแกแฎแแแแ แฃแคแแแแแแแก แแแ แแ, แแ แแแแแแแก แฃแแแ แฐแฅแแแแแก แฌแแแแแฎแแแก แฌแแแแแ Kinesis แแแแแชแแแแ แแแแแแแ แแ แฉแแฌแแ แแก แฌแแแแแ DynamoDB-แแ.
IAM แ แแแแก แจแแฅแแแ แแแแแฅแขแแ แแก แแแแแแ แคแฃแแฅแชแแแกแแแแก
แแแ แแแแ, แแแแแ แจแแแฅแแแแ แแฎแแแ IAM แ แแแ แแแแแแแกแแแแก, แกแแฎแแแแ Lambda-TicketsProcessingRole:
แขแแกแขแแก แแแแแแแแแกแแแแก, แฌแแแแกแฌแแ แแแแคแแแฃแ แแ แแแฃแแ AmazonKinesisReadOnlyAccess แแ AmazonDynamoDBFullAccess แแแแแขแแแ แกแแแแแแ แจแแกแแคแแ แแกแแ, แ แแแแ แช แแก แแแฉแแแแแแแ แฅแแแแแ แแแชแแแฃแ แกแฃแ แแแแ:
แแก แแแแแแ แฃแแแ แแแจแแแแฃแแ แแงแแก Kinesis-แแก แขแ แแแแ แแ, แ แแแแกแแช แแฎแแแ แฉแแแแฌแแ แแแ แจแแแแก airline_stream-แจแ, แแแแขแแ แฉแแแ แฃแแแ แแแแแแแขแแ แแฎแแแ แขแ แแแแ แ:
แ แฉแแแ แแฎแแแแ แแแแแก แฉแแกแแ แแ แแแแแแแก แจแแแแฎแแ.
"""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()
แแแแแแ แคแฃแแฅแชแแแก แจแแขแงแแแแแแแแแแก แจแแฅแแแ
แแแแแแแแฃแ แแ แแฅแแแแแ แแแแ แ แแแแแแ แคแฃแแฅแชแแ, แ แแแแแแช แแแแแขแแ แแแแก แแแฃแฌแแแก แแแแ แ แแแแแแก (special_stream) แแ แแแแแแแแแก แจแแขแงแแแแแแแแก SNS-แจแ. แแแจแแกแแแแแ, แแ แแแแแแแก แฃแแแ แฐแฅแแแแแก แฌแแแแแ Kinesis-แแแ แฌแแกแแแแแฎแแ แแ แแแชแแแฃแ SNS แแแแแจแ แจแแขแงแแแแแแแแแแก แแแกแแแแแแแแ, แ แแแแแแแช แจแแแแแ SNS แกแแ แแแกแแก แแแแ แแแแแแแแแแแ แแ แแแแแก แงแแแแ แแแแแแแขแก (แแแคแแกแขแ, SMS แแ แ.แจ.).
IAM แ แแแแก แจแแฅแแแ
แฏแแ แแฅแแแแ IAM แ แแแก Lambda-KinesisAlarm แแ แแแแแแแกแแแแก แแ แจแแแแแ แแ แ แแแก แแแแแญแแแ alarm_notifier lambda-แก, แ แแแแแแช แแฅแแแแแ:
แแ แแแแแแแ แฃแแแ แแแฃแจแแแก แขแ แแแแ แแ, แ แแ แแฎแแแ แฉแแแแฌแแ แแแ แจแแแแแแก special_stream-แจแ, แแกแ แ แแ แแฅแแแ แฃแแแ แแแแแแแคแแแฃแ แแ แแ แขแ แแแแ แ แแกแแแ, แ แแแแ แช แฉแแแ แแแแแแแแแ แแแแแฅแขแแ แแก แแแแแแแกแแแแก.
แแ แแแแแแแก แแแแคแแแฃแ แแชแแแก แแแกแแแแแแแแแแแ, แแแแแ แจแแแแแแขแแแแ แแแ แแแแก แแฎแแแ แชแแแแแ - TOPIC_ARN, แกแแแแช แแแแแแกแแแ ANR (Amazon Recourse Names) แแแแแฎแแแแแแก แแแแแก:
แแ แฉแแแแ แแแแแแ แแแแ, แแก แกแแแ แแแ แแ แแ แแก แ แแฃแแ:
import boto3
import base64
import os
SNS_CLIENT = boto3.client('sns')
TOPIC_ARN = os.environ['TOPIC_ARN']
def lambda_handler(event, context):
try:
SNS_CLIENT.publish(TopicArn=TOPIC_ARN,
Message='Hi! I have found an interesting stuff!',
Subject='Airline tickets alarm')
print('Alarm message has been successfully delivered')
except Exception as err:
print('Delivery failure', str(err))
แ แแแแ แช แฉแแแก, แกแฌแแ แแ แแฅ แกแ แฃแแแแแ แกแแกแขแแแแก แฎแแแแ แแแแคแแแฃแ แแชแแ. แ แฉแแแ แแฎแแแแ แขแแกแขแแ แแแ แแ แแแแ แฌแแฃแแแแ, แ แแ แงแแแแแคแแ แ แกแฌแแ แแ แแแแฅแแก แแแแคแแแฃแ แแ แแแฃแแ.
แแแแแแแแแ Terraform แแแแแแแ
แกแแญแแ แ แแแแแแแแแ
แจแแแแซแแแแ แฉแแแแขแแแ แแแ แแแกแขแ แแแฃแชแแ
แ แแแแ แแแ แแแแ
แแ แแแฅแขแแก แกแ แฃแแ แแแแแ
แแแ แแ แแ แแฅแขแแแแ แแแแแแก แแ แซแแแแแแก แแแจแแแแ แแแแแ แแแคแ แแกแขแ แฃแฅแขแฃแ แแก แแแแแแแแแแแแ, แ แแแ แแแฎแแ แ แแก แฅแแแแก แแแแแแแ Terraform แฉแแแแแแแก แฆแ แฃแแแแจแ:
terraform.exe plan
แแฅแแแ แแแแแแฎแแแแแแ แจแแแงแแแแแ แขแแแแคแแแแก แแแแแ แ แจแแขแงแแแแแแแแแแก แแแกแแแแแแแแ. แแ แแขแแแแ แแแกแ แจแแงแแแแ แแฃแชแแแแแแแ แแ แแ แแก.
แแ แแแ แแแแก แกแแแแแ แแชแแ แแแแแแก แแแแแแแแแแแแก แจแแแแแ, แจแแแแแซแแแ แแแแแฌแงแแ แ แแกแฃแ แกแแแแก แจแแฅแแแ:
terraform.exe apply
แแ แแ แซแแแแแแก แแแแแแแแแก แจแแแแแ, แแฅแแแ แแแแแ แแแแแแฎแแแแแแ แจแแแงแแแแแ แขแแแแคแแแแก แแแแแ แ; แแแ แแคแแ "แแแแฎ", แ แแแแกแแช แแแแแฉแแแแแ แจแแแแแฎแแ แแแฅแแแแแแแแแก แ แแแแฃแ แแ แจแแกแ แฃแแแแแก แจแแกแแฎแแ. แแก แกแแจแฃแแแแแแก แแแแชแแแ แแแแงแแแแ แแแแแ แแแคแ แแกแขแ แฃแฅแขแฃแ แ, แแแแแฎแแ แชแแแแแ EC2-แแก แงแแแแ แกแแญแแ แ แแแแคแแแฃแ แแชแแ, แแแแแแแแกแแ แแแแแแ แคแฃแแฅแชแแแแ แแ แ.แจ.
แแแก แจแแแแแ, แ แแช แงแแแแ แ แแกแฃแ แกแ แฌแแ แแแขแแแแ แจแแแฅแแแ Terraform แแแแแก แกแแจแฃแแแแแแ, แแฅแแแ แฃแแแ แจแแฎแแแแแ Kinesis Analytics แแแแแแแชแแแก แแแขแแแแแจแ (แกแแแฌแฃแฎแแ แแ, แแ แแแ แแแแแแ แ แแแแ แแแแแแแแ แแก แแแ แแแแแ แแแแแแแ).
แแแฃแจแแแ แแแแแแแชแแ:
แแแแก แจแแแแแ, แแฅแแแ แฃแแแ แแแแงแแแแ แแแแแแแชแแแก แจแแแแแ แแแแแแแก แกแแฎแแแ แฉแแแแกแแจแแแแ แกแแแแแ แแ แฉแแแแ:
แแฎแแ แงแแแแแคแแ แ แแแแ แแ แแก แฌแแกแแกแแแแแแ.
แแแแแแแชแแแก แขแแกแขแแ แแแ
แแแฃแฎแแแแแแ แแแแกแ, แแฃ แ แแแแ แแแแแแแแกแแ แกแแกแขแแแ, แฎแแแแ แแฃ Terraform แแแแแก แกแแจแฃแแแแแแ, แแก แแแแแ แแแฃแจแแแแแก.
แฉแแแ แจแแแแแแแ แ SSH-แแก แกแแจแฃแแแแแแ EC2 แแแ แขแฃแแแฃแ แแแแฅแแแแจแ, แกแแแแช แแแแแกแขแแแแ แแแฃแแแ Kinesis Agent แแ แแแฌแแ แแแแแ api_caller.py แกแแ แแแขแก.
sudo ./api_caller.py TOKEN
แแฅแแแ แแฎแแแแ แฃแแแ แแแแแแแแ SMS แแฅแแแแก แแแแแ แก:
SMS - แจแแขแงแแแแแแแ แขแแแแคแแแแ แแแแแก แแแแฅแแแก 1 แฌแฃแแจแ:
แ แฉแแแ แแฃ แแ แ แฉแแแแฌแแ แแแ แจแแแแฎแฃแแ DynamoDB แแแแแชแแแแ แแแแแจแ แจแแแแแแแ, แฃแคแ แ แแแขแแแฃแ แ แแแแแแแแกแแแแก. แแแแแแแแแแแแแก_แแแแแแแแแก แชแฎแ แแแ แจแแแชแแแก แแแแฎแแแแแแ แจแแแแแ แแแแแชแแแแแก:
แแแกแแแแ
แจแแกแ แฃแแแแฃแแ แกแแแฃแจแแแก แแ แแก แแจแแแแ แแแแแแ แแแแแชแแแแ แแแแฃแจแแแแแแก แกแแกแขแแแ Amazon Kinesis-แแก แกแแคแฃแซแแแแแ. แแแแฎแแแฃแแ แแงแ Kinesis Agent-แแก แแแแแงแแแแแแก แแแ แแแแขแแแ Kinesis Data Streams-แแแ แแ แ แแแแฃแ แแ แแจแ แแแแแแขแแแแกแแแ Kinesis Analytics SQL แแ แซแแแแแแแแก แแแแแงแแแแแแ, แแกแแแ แ แแแแ แช Amazon Kinesis-แแก แฃแ แแแแ แแฅแแแแแแ แกแฎแแ AWS แกแแ แแแกแแแแแ.
แฉแแแ แแแแแแแแแกแแ แแแแแแฆแแแจแแฃแแ แกแแกแขแแแ แแ แ แแแแ: แกแแแแแแ แแ แซแแแ แกแแฎแแแแซแฆแแแแแแ แแ แกแฌแ แแคแ Terraform แแแแแแแ.
แงแแแแ แแ แแแฅแขแแก แฌแงแแ แแก แแแแ แฎแแแแแกแแฌแแแแแแ
แกแแแแแแแแแแ แแแแแแฎแแแแ แกแขแแขแแแก, แแแแ แแฅแแแแก แแแแแแขแแ แแแก. แแแแกแขแ แฃแฅแชแแฃแแ แแ แแขแแแแก แแแแแ แแแฅแแก.
แแแกแฃแ แแแแ แฌแแ แแแขแแแแก!
แฌแงแแ แ: www.habr.com