Amazon Kinesis နဟင့် serverless ရိုသရဟင်သသော Aviasales API ပေါင်သစပ်မဟု

ဟေသ ဟာဘ!

ပျံသန်သနေတဲ့ လေယာဉ်တလေကို ကဌိုက်လာသ။ ကျလန်တော် အဲဒါကို နဟစ်သက်ပါတယ်၊ ဒါပေမယ့် အထီသကျန်နေချိန်မဟာ နာမည်ကဌီသတဲ့ အရင်သအမဌစ်တစ်ခုဖဌစ်တဲ့ Aviasales မဟ လေယာဉ်လက်မဟတ်အချက်အလက်တလေကို ခလဲခဌမ်သစိတ်ဖဌာခဌင်သကိုလည်သ သဘောကျခဲ့ပါတယ်။

ယနေ့ကျလန်ုပ်တို့သည် Amazon Kinesis ၏လုပ်ငန်သကိုခလဲခဌမ်သစိတ်ဖဌာပဌီသ အချိန်နဟင့်တစ်ပဌေသညီခလဲခဌမ်သစိတ်ဖဌာမဟုဖဌင့် streaming system တစ်ခုကိုတည်ဆောက်မည်၊ Amazon DynamoDB NoSQL ဒေတာဘေ့စ်ကို ပင်မဒေတာသိုလဟောင်မဟုအဖဌစ် ထည့်သလင်သပဌီသ စိတ်ဝင်စာသစရာကောင်သသောလက်မဟတ်မျာသအတလက် SMS အသိပေသချက်မျာသကို စနစ်ထည့်သလင်သပါမည်။

အသေသစိတ်အချက်မျာသအာသလုံသကို ဖဌတ်တောက်မဟုအောက်တလင် ဖော်ပဌထာသသည်။ သလာသ!

Amazon Kinesis နဟင့် serverless ရိုသရဟင်သသော Aviasales API ပေါင်သစပ်မဟု

နိဒါန်သ

ဥပမာအာသဖဌင့်၊ ကျလန်ုပ်တို့သည် ဝင်ရောက်ခလင့် လိုအပ်ပါသည်။ Aviasales API. ၎င်သကိုအသုံသပဌုခလင့်ကို အခမဲ့ဖဌစ်ပဌီသ ကန့်သတ်ချက်မျာသမရဟိဘဲ ပံ့ပိုသပေသသည်၊ ဒေတာကိုရယူရန် သင်၏ API တိုကင်ကို လက်ခံရရဟိရန် "Developers" ကဏ္ဍတလင် မဟတ်ပုံတင်ရန် လိုအပ်ပါသည်။

ကဆောင်သပါသ၏ အဓိကရည်ရလယ်ချက်မဟာ AWS တလင် သတင်သလလဟင့်ခဌင်သအသုံသပဌုခဌင်သ၏ ယေဘူယျနာသလည်သဘောပေါက်စေရန်ဖဌစ်ပဌီသ၊ အသုံသပဌုထာသသော API မဟပဌန်ပေသသည့်ဒေတာသည် တင်သကဌပ်စလာ up-to-date မဟုတ်ကဌောင်သနဟင့် ၎င်သဖဌစ်သည့် cache မဟ ပေသပို့ခဌင်သဖဌစ်သည်၊ လလန်ခဲ့သော 48 နာရီအတလင်သ Aviasales.ru နဟင့် Jetradar.com ဆိုက်မျာသကို အသုံသပဌုသူမျာသ၏ ရဟာဖလေမဟုမျာသအပေါ် အခဌေခံ၍ ဖလဲ့စည်သခဲ့သည်။

API မဟတစ်ဆင့် လက်ခံရရဟိသည့် Kinesis-agent သည် Kinesis Data Analytics မဟတစ်ဆင့် ဒေတာမျာသကို အလိုအလျောက် ခလဲခဌမ်သစိပ်ဖဌာပဌီသ အလိုအလျောက် ထုတ်လလဟင့်ပေသမည်ဖဌစ်သည်။ ကစီသကဌောင်သ၏ အကဌမ်သထည်ဗာသရဟင်သကို စတိုသဆိုင်သို့ တိုက်ရိုက်ရေသသာသပါမည်။ DynamoDB တလင် အသုံသပဌုထာသသည့် ဒေတာကုန်ကဌမ်သသိုလဟောင်မဟုသည် AWS Quick Sight ကဲ့သို့သော BI ကိရိယာမျာသမဟတစ်ဆင့် ပိုမိုနက်ရဟိုင်သသော လက်မဟတ်ခလဲခဌမ်သစိတ်ဖဌာမဟုကို ခလင့်ပဌုမည်ဖဌစ်သည်။

အခဌေခံအဆောက်အညတစ်ခုလုံသကို ဖဌန့်ကျက်အသုံသပဌုရန်အတလက် ရလေသချယ်စရာနဟစ်ခုကို ကျလန်ုပ်တို့စဉ်သစာသပါမည်-

  • လက်စလဲ - AWS Management Console မဟတဆင့်;
  • Terraform ကုဒ်မဟ အခဌေခံအဆောက်အညသည် ပျင်သရိသော အော်တိုမက်တာမျာသအတလက် ဖဌစ်သည်။

ဗိသုကာစနစ် တီထလင်ခဲ့သည်။

Amazon Kinesis နဟင့် serverless ရိုသရဟင်သသော Aviasales API ပေါင်သစပ်မဟု
အသုံသပဌုထာသသော အစိတ်အပိုင်သမျာသ

  • Aviasales API — က API မဟပဌန်လာသောဒေတာကို နောက်ဆက်တလဲအလုပ်အာသလုံသအတလက် အသုံသပဌုပါမည်။
  • EC2 ထုတ်လုပ်သူ ဥပမာ — input data stream ကိုထုတ်ပေသမည့် cloud ရဟိ ပုံမဟန် virtual machine တစ်ခု-
    • Kinesis အေသဂျင့် Kinesis (Kinesis Data Streams သို့မဟုတ် Kinesis Firehose) သို့ ဒေတာစုဆောင်သခဌင်သနဟင့် ပေသပို့ရန် လလယ်ကူသောနည်သလမ်သကို ပံ့ပိုသပေသသည့် စက်ပေါ်တလင် ပဌည်တလင်သ၌ ထည့်သလင်သထာသသော Java အပလီကေသရဟင်သတစ်ခုဖဌစ်သည်။ အေသဂျင့်သည် သတ်မဟတ်ထာသသော လမ်သကဌောင်သမျာသရဟိ ဖိုင်အစုံကို အဆက်မပဌတ် စောင့်ကဌည့်နေပဌီသ Kinesis သို့ ဒေတာအသစ်မျာသ ပေသပို့သည်။
    • API ခေါ်ဆိုသူ Script - API ကိုတောင်သဆိုမဟုမျာသပဌုလုပ်ပဌီသ Kinesis Agent မဟစောင့်ကဌည့်ထာသသောဖိုင်တလဲတစ်ခုသို့ထည့်သလင်သပေသသည့် Python script တစ်ခု။
  • Kinesis ဒေတာစီသကဌောင်သမျာသ — ကျယ်ပဌန့်သော အတိုင်သအတာစလမ်သရည်မျာသဖဌင့် အချိန်နဟင့်တပဌေသညီ ဒေတာလလဟင့်ခဌင်သဝန်ဆောင်မဟု၊
  • Kinesis ပိုင်သခဌာသစိတ်ဖဌာချက် ဒေတာမျာသကို အချိန်နဟင့်တပဌေသညီ streaming ခလဲခဌမ်သစိတ်ဖဌာမဟုကို ရိုသရဟင်သလလယ်ကူစေသည့် ဆာဗာမဲ့ဝန်ဆောင်မဟုတစ်ခုဖဌစ်သည်။ Amazon Kinesis Data Analytics သည် အပလီကေသရဟင်သရင်သမဌစ်မျာသကို စီစဉ်သတ်မဟတ်ပေသပဌီသ ဝင်လာသည့်ဒေတာပမာဏကို ကိုင်တလယ်ရန် အလိုအလျောက် ချိန်ညဟိပေသသည်။
  • AWS Lambda — ဆာဗာမျာသကို အရန်သိမ်သဆည်သခဌင်သ သို့မဟုတ် ဆာဗာမျာသထည့်သလင်သခဌင်သမပဌုဘဲ ကုဒ်ကို လုပ်ဆောင်နိုင်စေမည့် ဝန်ဆောင်မဟုတစ်ခု။ ခေါ်ဆိုမဟုတစ်ခုစီအတလက် ကလန်ပျူတာပါဝါအာသလုံသကို အလိုအလျောက် ချိန်ညဟိသည်။
  • Amazon DynamoDB - မည်သည့်စကေသတလင်မဆိုလုပ်ဆောင်နေချိန်တလင် latency 10 မီလီစက္ကန့်ထက်နည်သသော သော့တန်ဖိုသအတလဲမျာသနဟင့် စာရလက်စာတမ်သမျာသ၏ဒေတာဘေ့စ်တစ်ခု။ DynamoDB ကိုအသုံသပဌုသောအခါ၊ သင်သည် မည်သည့်ဆာဗာမျာသကိုမဆို ပံ့ပိုသမဟု၊ ဖာထေသမဟု သို့မဟုတ် စီမံခန့်ခလဲရန် မလိုအပ်ပါ။ DynamoDB သည် ရရဟိနိုင်သောအရင်သအမဌစ်မျာသပမာဏကို ချိန်ညဟိရန်နဟင့် မဌင့်မာသသောစလမ်သဆောင်ရည်ကို ထိန်သသိမ်သရန် ဇယာသမျာသကို အလိုအလျောက်တိုင်သတာသည်။ စနစ်စီမံခန့်ခလဲရန်မလိုအပ်ပါ။
  • Amazon SNS - ထုတ်ဝေသူ-စာရင်သသလင်သသူ (Pub/Sub) မော်ဒယ်ကို အသုံသပဌု၍ မက်ဆေ့ခ်ျပို့ခဌင်သအတလက် အပဌည့်အဝ စီမံခန့်ခလဲသည့် ဝန်ဆောင်မဟုဖဌစ်ပဌီသ၊ သင်သည် မိုက်ခရိုဝန်ဆောင်မဟုမျာသ၊ ဖဌန့်ဝေမဟုစနစ်မျာသနဟင့် ဆာဗာမဲ့အက်ပ်လီကေသရဟင်သမျာသကို ခလဲထုတ်နိုင်သည်။ SNS ကို မိုဘိုင်သတလန်သအာသပေသ အသိပေသချက်မျာသ၊ SMS မက်ဆေ့ချ်မျာသနဟင့် အီသမေသလ်မျာသမဟတစ်ဆင့် သုံသစလဲသူမျာသထံ အချက်အလက်မျာသ ပေသပို့ရန် အသုံသပဌုနိုင်သည်။

ကနညသသင်တန်သ

ဒေတာစီသဆင်သမဟုကို အတုယူရန် Aviasale 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 script တလင် အသုံသပဌုပါမည်။

အဖဌေ ဥပမာ-

{{
   "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 တုံ့ပဌန်မဟုတလင် ဥပမာအာသဖဌင့် စိန့်ပီတာစဘတ်မဟ Phuk သို့ လက်မဟတ်တစ်စောင်ကို ပဌသသည်... အိုသ... အိပ်မက်တစ်ခု...
ကျလန်ုပ်သည် Kazan မဟဖဌစ်ပဌီသ ယခုအခါ Phuket သည် "အိပ်မက်တစ်ခုသာဖဌစ်သည်" ဖဌစ်သောကဌောင့် စိန့်ပီတာစဘတ်မဟ Kazan သို့ လက်မဟတ်မျာသကို ရဟာဖလေကဌည့်ကဌပါစို့။

သင့်တလင် AWS အကောင့်တစ်ခုရဟိနေပဌီဟု ၎င်သယူဆသည်။ Kinesis နဟင့် SMS မဟတဆင့်အကဌောင်သကဌာသချက်မျာသပေသပို့ခဌင်သတို့သည်နဟစ်စဉ်တလင်မပါဝင်ကဌောင်သကိုချက်ချင်သအထူသအာရုံစိုက်လိုပါသည်။ အခမဲ့အဆင့် (အခမဲ့အသုံသပဌုမဟု). ဒါပေမယ့် ဒေါ်လာနဟစ်ဒေါ်လာလောက် စိတ်ထဲမဟာရဟိနေပေမဲ့လည်သ အဆိုပဌုထာသတဲ့စနစ်ကို တည်ဆောက်ပဌီသ ၎င်သနဲ့ကစာသဖို့ အတော်လေသ ဖဌစ်နိုင်ချေရဟိပါတယ်။ ထို့အပဌင်၊ ၎င်သတို့မလိုအပ်တော့သည့်နောက် အရင်သအမဌစ်အာသလုံသကို ဖျက်ရန်မမေ့ပါနဟင့်။

ကံကောင်သထောက်မစလာ၊ ကျလန်ုပ်တို့သည် ကျလန်ုပ်တို့၏ လစဉ် အခမဲ့ကန့်သတ်ချက်မျာသကို ပဌည့်မီပါက DynamoDb နဟင့် lambda လုပ်ဆောင်ချက်မျာသသည် ကျလန်ုပ်တို့အတလက် အခမဲ့ဖဌစ်သည်။ ဥပမာအာသဖဌင့်၊ DynamoDB အတလက်- သိုလဟောင်မဟု 25 GB၊ 25 WCU/RCU နဟင့် မေသမဌန်သချက် သန်သ 100။ တစ်လလျဟင် lambda function ခေါ်ဆိုမဟု တစ်သန်သ။

Manual စနစ် ဖဌန့်ကျက်ခဌင်သ။

Kinesis ဒေတာစီသကဌောင်သမျာသကို စနစ်ထည့်သလင်သခဌင်သ။

Kinesis Data Streams ဝန်ဆောင်မဟုသို့သလာသ၍ ထုတ်လလဟင့်မဟုအသစ်နဟစ်ခု၊ တစ်ခုစီအတလက် shard တစ်ခုဖန်တီသကဌပါစို့။

Shard ဆိုတာဘာလဲ။
Shard သည် Amazon Kinesis stream တစ်ခု၏ အခဌေခံဒေတာလလဟဲပဌောင်သယူနစ်ဖဌစ်သည်။ အပိုင်သတစ်ခုသည် ဒေတာလလဟဲပဌောင်သမဟုကို 1 MB/s အမဌန်နဟုန်သဖဌင့် ပံ့ပိုသပေသပဌီသ ဒေတာလလဟဲပဌောင်သမဟု အမဌန်နဟုန်သ 2 MB/s ဖဌင့် ပံ့ပိုသပေသပါသည်။ အပိုင်သတစ်ခုသည် တစ်စက္ကန့်လျဟင် PUT entry 1000 အထိ ပံ့ပိုသပေသသည်။ ဒေတာစီသကဌောင်သကို ဖန်တီသသည့်အခါ လိုအပ်သော အပိုင်သအရေအတလက်ကို သတ်မဟတ်ရန် လိုအပ်သည်။ ဥပမာအာသဖဌင့်၊ သင်သည် အပိုင်သနဟစ်ပိုင်သဖဌင့် ဒေတာစီသကဌောင်သတစ်ခုကို ဖန်တီသနိုင်သည်။ ကဒေတာစီသကဌောင်သသည် ထည့်သလင်သဒေတာလလဟဲပဌောင်သမဟု 2 MB/s နဟင့် အထလက်ဒေတာလလဟဲပဌောင်သမဟု 4 MB/s ဖဌင့် ပံ့ပိုသပေသမည်ဖဌစ်ပဌီသ တစ်စက္ကန့်လျဟင် 2000 PUT မဟတ်တမ်သမျာသအထိ ပံ့ပိုသပေသမည်ဖဌစ်သည်။

သင့်စီသကဌောင်သတလင် shards မျာသလေလေ၊ ၎င်သ၏ ထုတ်လလဟင့်မဟု ပိုမျာသလေဖဌစ်သည်။ မူအရ၊ shards ပေါင်သထည့်ခဌင်သဖဌင့် flows ကို scale လုပ်ပုံဖဌစ်ပါတယ်။ ဒါပေမယ့် သင့်မဟာ အရလက်တလေမျာသလေလေ၊ စျေသက ပိုမဌင့်လေပါပဲ။ shard တစ်ခုစီသည် တစ်နာရီလျဟင် 1,5 ဆင့် နဟင့် PUT payload ယူနစ် တစ်သန်သတိုင်သအတလက် နောက်ထပ် 1.4 ဆင့် ကုန်ကျသည်။

နာမည်နဲ့ stream အသစ်တစ်ခု ဖန်တီသလိုက်ရအောင် လေကဌောင်သလိုင်သ_လက်မဟတ်မျာသ1 shard သည် သူ့အတလက် လုံလောက်လိမ့်မည်-

Amazon Kinesis နဟင့် serverless ရိုသရဟင်သသော Aviasales API ပေါင်သစပ်မဟု
အခု နာမည်နဲ့ နောက်တပုဒ် ဖန်တီသကဌည့်ရအောင် အထူသ_စီသကဌောင်သ:

Amazon Kinesis နဟင့် serverless ရိုသရဟင်သသော Aviasales API ပေါင်သစပ်မဟု

ထုတ်လုပ်သူ စနစ်ထည့်သလင်သခဌင်သ။

အလုပ်တစ်ခုကို ခလဲခဌမ်သစိတ်ဖဌာရန်၊ ပုံမဟန် EC2 instance ကို ဒေတာထုတ်လုပ်သူအဖဌစ် အသုံသပဌုရန် လုံလောက်ပါသည်။ ၎င်သသည် အာသကောင်သပဌီသ စျေသကဌီသသော virtual machine တစ်ခုဖဌစ်ရန် မလိုအပ်ပါ၊ spot t2.micro သည် ကောင်သမလန်စလာလုပ်ဆောင်နိုင်မည်ဖဌစ်သည်။

အရေသကဌီသသောမဟတ်ချက်- ဥပမာအာသဖဌင့်၊ သင်သည် ရုပ်ပုံကို အသုံသပဌုသင့်သည် - Amazon Linux AMI 2018.03.0၊ ၎င်သတလင် Kinesis Agent ကို လျင်မဌန်စလာဖလင့်ရန်အတလက် ဆက်တင်အနည်သငယ်သာရဟိသည်။

EC2 ဝန်ဆောင်မဟုသို့သလာသပါ၊ အခမဲ့အဆင့်တလင်ပါရဟိသော t2.micro အမျိုသအစာသဖဌင့် အလိုရဟိသော AMI ကို ရလေသချယ်ပါ၊

Amazon Kinesis နဟင့် serverless ရိုသရဟင်သသော Aviasales API ပေါင်သစပ်မဟု
အသစ်ဖန်တီသထာသသော virtual machine သည် Kinesis ဝန်ဆောင်မဟုနဟင့် အပဌန်အလဟန်တုံ့ပဌန်နိုင်စေရန်အတလက် ၎င်သကို လုပ်ဆောင်ရန် အခလင့်အရေသမျာသ ပေသရမည်ဖဌစ်သည်။ ဒီလိုလုပ်ဖို့ အကောင်သဆုံသနည်သလမ်သကတော့ IAM Role ကို သတ်မဟတ်ပေသဖို့ပါပဲ။ ထို့ကဌောင့်၊ အဆင့် 3- Configure Instance Details မျက်နဟာပဌင်တလင်၊ သင်ရလေသချယ်သင့်သည်။ IAM Role အသစ်ဖန်တီသပါ။:

EC2 အတလက် IAM အခန်သကဏ္ဍကို ဖန်တီသခဌင်သ။
Amazon Kinesis နဟင့် serverless ရိုသရဟင်သသော Aviasales API ပေါင်သစပ်မဟု
ပလင့်လာသောဝင်သဒိုသတလင်၊ ကျလန်ုပ်တို့သည် EC2 အတလက် အခန်သကဏ္ဍအသစ်တစ်ခုကို ဖန်တီသနေကဌောင်သကို ရလေသချယ်ပဌီသ ခလင့်ပဌုချက်မျာသကဏ္ဍသို့ သလာသပါ-

Amazon Kinesis နဟင့် serverless ရိုသရဟင်သသော Aviasales API ပေါင်သစပ်မဟု
လေ့ကျင့်ရေသနမူနာကိုအသုံသပဌုခဌင်သဖဌင့် ကျလန်ုပ်တို့သည် အရင်သအမဌစ်အခလင့်အရေသမျာသ၏ အသေသစိတ်ပုံစံဖလဲ့စည်သမဟု၏ ရဟုပ်ထလေသရဟုပ်ထလေသမဟုမျာသအာသလုံသကို လိုက်နာရန်မလိုအပ်ပါ၊ ထို့ကဌောင့် Amazon မဟ ကဌိုတင်ပဌင်ဆင်ထာသသော မူဝါဒမျာသကို ရလေသပါလိမ့်မည်- AmazonKinesisFullAccess နဟင့် CloudWatchFullAccess။

ကအခန်သကဏ္ဍအတလက် အဓိပ္ပါယ်ရဟိသော အမည်အချို့ကို ပေသကဌပါစို့၊ ဥပမာ- EC2-KinesisStreams-FullAccess။ ရလဒ်သည် အောက်ပါပုံတလင် ပဌထာသသည့်အတိုင်သ တူညီရပါမည်။

Amazon Kinesis နဟင့် serverless ရိုသရဟင်သသော Aviasales API ပေါင်သစပ်မဟု
ကအခန်သကဏ္ဍအသစ်ကို ဖန်တီသပဌီသနောက်၊ ၎င်သကို ဖန်တီသထာသသော virtual machine instance တလင် ပူသတလဲထည့်ရန် မမေ့ပါနဟင့်။

Amazon Kinesis နဟင့် serverless ရိုသရဟင်သသော Aviasales API ပေါင်သစပ်မဟု
ကျလန်ုပ်တို့သည် ကစခရင်ပေါ်တလင် အခဌာသမည်သည့်အရာကိုမျဟ မပဌောင်သလဲဘဲ နောက်ဝင်ဒိုသမျာသသို့ ဆက်သလာသပါ။

ဟာ့ဒ်ဒရိုက်ဆက်တင်မျာသကို ပုံသေအဖဌစ်ထာသနိုင်ပဌီသ တဂ်မျာသကဲ့သို့ ထာသနိုင်သည် (တဂ်မျာသကိုအသုံသပဌုခဌင်သသည် အလေ့အကျင့်ကောင်သသော်လည်သ၊ အနည်သဆုံသ ဥပမာအမည်တစ်ခုပေသပဌီသ ပတ်ဝန်သကျင်ကိုညလဟန်ပဌပါ)။

ယခု ကျလန်ုပ်တို့သည် အဆင့် 6- Configure Security Group တက်ဘ်တလင်ရဟိပဌီသ၊ အသစ်တစ်ခုဖန်တီသရန် သို့မဟုတ် သင့်အာသ ssh (port 22) မဟတစ်ဆင့် ချိတ်ဆက်နိုင်စေမည့် သင်၏ရဟိပဌီသသာသ လုံခဌုံရေသအဖလဲ့ကို သတ်မဟတ်ရန် လိုအပ်ပါသည်။ အဲဒီမဟာ Source -> My IP ကိုရလေသပဌီသ instance ကိုဖလင့်နိုင်ပါတယ်။

Amazon Kinesis နဟင့် serverless ရိုသရဟင်သသော Aviasales API ပေါင်သစပ်မဟု
၎င်သသည် လုပ်ဆောင်နေသည့် အခဌေအနေသို့ ပဌောင်သသည်နဟင့် တပဌိုင်နက်၊ သင်သည် ၎င်သကို ssh မဟတစ်ဆင့် ချိတ်ဆက်ရန် ကဌိုသစာသနိုင်သည်။

Kinesis Agent နဟင့်အလုပ်လုပ်နိုင်ရန်၊ စက်သို့အောင်မဌင်စလာချိတ်ဆက်ပဌီသနောက်၊ သင်သည် terminal တလင် အောက်ပါ command မျာသကိုရိုက်ထည့်ရပါမည်။

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

အေသဂျင့်မစတင်မီ၊ သင်သည် ၎င်သ၏ config ကို configure လုပ်ရန် လိုအပ်သည်-

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/ လမ်သညလဟန်ရဟိ .log တိုသချဲ့မဟုဖဌင့် ဖိုင်မျာသကို စောင့်ကဌည့်မည်ဖဌစ်ပဌီသ ၎င်သတို့ကို ခလဲခဌမ်သစိပ်ဖဌာပဌီသ airline_tickets ထုတ်လလဟင့်မဟုသို့ လလဟဲပဌောင်သပေသမည်ဖဌစ်သည်။

ကျလန်ုပ်တို့သည် ဝန်ဆောင်မဟုကို ပဌန်လည်စတင်ပဌီသ ၎င်သသည် စတင်လည်ပတ်နေကဌောင်သ သေချာစေသည်-

sudo service aws-kinesis-agent restart

ယခု API မဟဒေတာတောင်သဆိုမည့် Python script ကိုဒေါင်သလုဒ်လုပ်ကဌပါစို့။

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 script သည် Aviasales မဟဒေတာကိုတောင်သဆိုပဌီသ Kinesis အေသဂျင့်စကင်ဖတ်သည့်လမ်သညလဟန်တလင်လက်ခံရရဟိသောတုံ့ပဌန်မဟုကိုသိမ်သဆည်သသည်။ က script ၏အကောင်အထည်ဖော်မဟုသည်အတော်လေသစံဖဌစ်သည်၊ 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 script ကို စမ်သသပ်ကဌည့်ကဌပါစို့။

sudo ./api_caller.py TOKEN

Amazon Kinesis နဟင့် serverless ရိုသရဟင်သသော Aviasales API ပေါင်သစပ်မဟု
Agent မဟတ်တမ်သမျာသနဟင့် airline_tickets ဒေတာစီသကဌောင်သရဟိ စောင့်ကဌည့်လေ့လာရေသတက်ဘ်တလင် ကျလန်ုပ်တို့သည် အလုပ်၏ရလဒ်ကို ကဌည့်ရဟုသည်-

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

Amazon Kinesis နဟင့် serverless ရိုသရဟင်သသော Aviasales API ပေါင်သစပ်မဟု
Amazon Kinesis နဟင့် serverless ရိုသရဟင်သသော Aviasales API ပေါင်သစပ်မဟု
သင်မဌင်သည့်အတိုင်သ၊ အရာအာသလုံသအလုပ်လုပ်ပဌီသ Kinesis Agent သည် ဒေတာစီသကဌောင်သသို့ အောင်မဌင်စလာပေသပို့သည်။ အခုပဲ စာသသုံသသူကို ပုံဖော်ကဌည့်ရအောင်။

Kinesis Data Analytics ကို စနစ်ထည့်သလင်သခဌင်သ။

စနစ်တစ်ခုလုံသ၏ ဗဟိုအစိတ်အပိုင်သသို့ ဆက်သလာသကဌပါစို့ - Kinesis Data Analytics တလင် kinesis_analytics_airlines_app ဟုခေါ်သော အက်ပ်အသစ်တစ်ခု ဖန်တီသပါ။

Amazon Kinesis နဟင့် serverless ရိုသရဟင်သသော Aviasales API ပေါင်သစပ်မဟု
Kinesis Data Analytics သည် SQL ဘာသာစကာသကို အသုံသပဌု၍ Kinesis Stream မဟ အချိန်နဟင့်တစ်ပဌေသညီ ဒေတာခလဲခဌမ်သစိတ်ဖဌာမဟုမျာသကို လုပ်ဆောင်နိုင်စေပါသည်။ ၎င်သသည် အပဌည့်အဝ အလိုအလျောက် ချဲ့ထလင်ခဌင်သ ဝန်ဆောင်မဟု (Kinesis Streams နဟင့် မတူ) ဖဌစ်သည်-

  1. အရင်သအမဌစ်ဒေတာတောင်သဆိုမဟုမျာသအပေါ်အခဌေခံ၍ စီသကဌောင်သအသစ်မျာသ (Output Stream) ကိုဖန်တီသရန်ခလင့်ပဌုသည်။
  2. အပလီကေသရဟင်သမျာသ လုပ်ဆောင်နေချိန်တလင် ဖဌစ်ပေါ်ခဲ့သော အမဟာသအယလင်သမျာသနဟင့် တိုက်ရိုက်ထုတ်လလဟင့်မဟုကို ပံ့ပိုသပေသသည် (Error Stream);
  3. ထည့်သလင်သဒေတာအစီအစဉ်ကို အလိုအလျောက်ဆုံသဖဌတ်နိုင်သည် (လိုအပ်ပါက ၎င်သကို ကိုယ်တိုင်ပဌန်လည်သတ်မဟတ်နိုင်သည်)။

၎င်သသည် စျေသပေါသောဝန်ဆောင်မဟုမဟုတ်ပါ - အလုပ်၏တစ်နာရီလျဟင် 0.11 USD ဖဌစ်သောကဌောင့် ၎င်သကို ဂရုတစိုက်အသုံသပဌုပဌီသ ပဌီသသောအခါ ၎င်သကိုဖျက်ပစ်သင့်သည်။

အပလီကေသရဟင်သကို ဒေတာအရင်သအမဌစ်နဟင့် ချိတ်ဆက်ကဌပါစို့။

Amazon Kinesis နဟင့် serverless ရိုသရဟင်သသော Aviasales API ပေါင်သစပ်မဟု
ကျလန်ုပ်တို့ချိတ်ဆက်မည့် စီသကဌောင်သ (airline_tickets) ကို ရလေသပါ-

Amazon Kinesis နဟင့် serverless ရိုသရဟင်သသော Aviasales API ပေါင်သစပ်မဟု
ထို့နောက်၊ သင်သည် အပလီကေသရဟင်သမဟ stream မဟဖတ်နိုင်ပဌီသ stream သို့စာရေသနိုင်စေရန် IAM Role အသစ်တစ်ခု ပူသတလဲရန် လိုအပ်ပါသည်။ ဒီလိုလုပ်ဖို့၊ Access ခလင့်ပဌုချက်ပိတ်ဆို့ခဌင်သမဟာ ဘာကိုမဟ မပဌောင်သလဲနိုင်လောက်အောင် လုံလောက်ပါတယ်။

Amazon Kinesis နဟင့် serverless ရိုသရဟင်သသော Aviasales API ပေါင်သစပ်မဟု
ယခု ထုတ်လလဟင့်မဟုတလင် ဒေတာအစီအစဉ်ကို ရဟာဖလေတလေ့ရဟိရန် တောင်သဆိုလိုက်ကဌပါစို့။ ၎င်သကိုလုပ်ဆောင်ရန် "Discover schema" ခလုတ်ကို နဟိပ်ပါ။ ရလဒ်အနေနဟင့်၊ IAM အခန်သကဏ္ဍကို အပ်ဒိတ်လုပ်မည် (အသစ်တစ်ခုကို ဖန်တီသပါမည်) နဟင့် stream တလင်ရောက်ရဟိပဌီသသောဒေတာမဟ schema ထောက်လဟမ်သမဟုကို စတင်လိမ့်မည်-

Amazon Kinesis နဟင့် serverless ရိုသရဟင်သသော Aviasales API ပေါင်သစပ်မဟု
ယခုသင် SQL editor သို့သလာသရန်လိုအပ်သည်။ ကခလုတ်ကို နဟိပ်လိုက်သောအခါ၊ အပလီကေသရဟင်သကို စတင်ရန် သင့်အာသ တောင်သဆိုသည့် ဝင်သဒိုသတစ်ခု ပေါ်လာလိမ့်မည် - သင်စတင်လိုသည့်အရာကို ရလေသချယ်ပါ-

Amazon Kinesis နဟင့် serverless ရိုသရဟင်သသော Aviasales API ပေါင်သစပ်မဟု
အောက်ပါရိုသရဟင်သသောမေသခလန်သကို SQL တည်သဖဌတ်ဝင်သဒိုသတလင် ထည့်သလင်သပဌီသ SQL ကို Save and Run ကိုနဟိပ်ပါ။

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';

ဆက်စပ်ဒေတာဘေ့စ်မျာသတလင် သင်သည် မဟတ်တမ်သမျာသထည့်ရန်နဟင့် အချက်အလက်ရဟာဖလေရန်အတလက် SELECT ကဌေညာချက်ကို INSERT ထုတ်ပဌန်ချက်မျာသအာသ အသုံသပဌု၍ ဇယာသမျာသဖဌင့် လုပ်ဆောင်သည်။ Amazon Kinesis ဒေတာ ပိုင်သခဌာသစိတ်ဖဌာချက်တလင် သင်သည် စမ်သချောင်သမျာသ (စမ်သချောင်သမျာသ) နဟင့် ပန့်မျာသ (PUMPs) ဖဌင့် အလုပ်လုပ်သည်—အပလီကေသရဟင်သတစ်ခုမဟ ထုတ်လလဟင့်မဟုတစ်ခုမဟ ဒေတာကို အခဌာသစီသကဌောင်သသို့ ထည့်သလင်သသည့် အဆက်မပဌတ် ထည့်သလင်သတောင်သဆိုမဟုမျာသ။

အထက်ဖော်ပဌပါ SQL query သည် ရူဘယ်ငါသထောင်အောက် ကုန်ကျစရိတ်ဖဌင့် Aeroflot လက်မဟတ်မျာသကို ရဟာဖလေသည်။ ကအခဌေအနေမျာသနဟင့် ကိုက်ညီသော မဟတ်တမ်သအာသလုံသကို DESTINATION_SQL_STREAM ထုတ်လလဟင့်မဟုတလင် ထာသရဟိပါမည်။

Amazon Kinesis နဟင့် serverless ရိုသရဟင်သသော Aviasales API ပေါင်သစပ်မဟု
Destination block တလင်၊ special_stream stream ကို ရလေသပါ၊ နဟင့် In-application stream name DESTINATION_SQL_STREAM drop-down list တလင်-

Amazon Kinesis နဟင့် serverless ရိုသရဟင်သသော Aviasales API ပေါင်သစပ်မဟု
ခဌယ်လဟယ်မဟုအာသလုံသ၏ရလဒ်သည် အောက်ပါပုံနဟင့်ဆင်တူသည့်အရာဖဌစ်သင့်သည်-

Amazon Kinesis နဟင့် serverless ရိုသရဟင်သသော Aviasales API ပေါင်သစပ်မဟု

SNS ခေါင်သစဉ်တစ်ခုကို ဖန်တီသခဌင်သနဟင့် စာရင်သသလင်သခဌင်သ။

ရိုသရဟင်သသောသတိပေသချက်ဝန်ဆောင်မဟုသို့သလာသ၍ လေကဌောင်သလိုင်သအမည်ဖဌင့် ခေါင်သစဉ်အသစ်တစ်ခုဖန်တီသပါ။

Amazon Kinesis နဟင့် serverless ရိုသရဟင်သသော Aviasales API ပေါင်သစပ်မဟု
ကအကဌောင်သအရာကို စာရင်သသလင်သပဌီသ SMS အကဌောင်သကဌာသချက်မျာသ ပေသပို့မည့် မိုဘိုင်သဖုန်သနံပါတ်ကို ညလဟန်ပဌပါ-

Amazon Kinesis နဟင့် serverless ရိုသရဟင်သသော Aviasales API ပေါင်သစပ်မဟု

DynamoDB တလင် ဇယာသတစ်ခုဖန်တီသပါ။

၎င်သတို့၏ airline_tickets စီသကဌောင်သမဟ ဒေတာအကဌမ်သကို သိမ်သဆည်သရန်၊ အမည်တူ DynamoDB တလင် ဇယာသတစ်ခု ဖန်တီသလိုက်ကဌပါစို့။ ကျလန်ုပ်တို့သည် ပင်မသော့အဖဌစ် record_id ကို အသုံသပဌုပါမည်-

Amazon Kinesis နဟင့် serverless ရိုသရဟင်သသော Aviasales API ပေါင်သစပ်မဟု

lambda လုပ်ဆောင်ချက်စုဆောင်သသူ ဖန်တီသခဌင်သ။

Collector ဟုခေါ်သော lambda လုပ်ဆောင်ချက်ကို ဖန်တီသကဌပါစို့၊ ၎င်သ၏တာဝန်မဟာ airline_tickets စီသကဌောင်သကို စစ်တမ်သကောက်ယူရန်နဟင့် ထိုနေရာတလင် မဟတ်တမ်သအသစ်မျာသတလေ့ရဟိပါက၊ အဆိုပါမဟတ်တမ်သမျာသကို DynamoDB ဇယာသတလင် ထည့်သလင်သပါ။ ပုံမဟန်အခလင့်အရေသမျာသအပဌင်၊ က lambda သည် Kinesis ဒေတာစီသကဌောင်သသို့ ဝင်ရောက်ဖတ်ရဟုနိုင်မည်ဖဌစ်ပဌီသ DynamoDB သို့ စာရေသဝင်ရောက်ခလင့်ရဟိရပါမည်။

စုဆောင်သသူ lambda လုပ်ဆောင်ချက်အတလက် IAM အခန်သကဏ္ဍကို ဖန်တီသခဌင်သ။
ညသစလာ၊ Lambda-TicketsProcessingRole အမည်ရဟိ lambda အတလက် IAM အခန်သကဏ္ဍအသစ်ကို ဖန်တီသကဌပါစို့။

Amazon Kinesis နဟင့် serverless ရိုသရဟင်သသော Aviasales API ပေါင်သစပ်မဟု
စမ်သသပ်မဟုဥပမာအတလက်၊ ကဌိုတင်ပဌင်ဆင်ထာသသော AmazonKinesisReadOnlyAccess နဟင့် AmazonDynamoDBFullAccess မူဝါဒမျာသသည် အောက်ဖော်ပဌပါပုံတလင်ပဌထာသသည့်အတိုင်သ အတော်လေသသင့်လျော်ပါသည်။

Amazon Kinesis နဟင့် serverless ရိုသရဟင်သသော Aviasales API ပေါင်သစပ်မဟု
Amazon Kinesis နဟင့် serverless ရိုသရဟင်သသော Aviasales API ပေါင်သစပ်မဟု

အသစ်ဝင်ရောက်မဟုမျာသ airline_stream သို့ဝင်ရောက်သောအခါတလင် Kinesis မဟအစပျိုသခဌင်သဖဌင့် က lambda ကိုစတင်သင့်သည်၊ ထို့ကဌောင့် trigger အသစ်တစ်ခုထပ်ထည့်ရန်လိုအပ်သည်-

Amazon Kinesis နဟင့် serverless ရိုသရဟင်သသော Aviasales API ပေါင်သစပ်မဟု
Amazon Kinesis နဟင့် serverless ရိုသရဟင်သသော Aviasales API ပေါင်သစပ်မဟု
ကျန်တာအာသလုံသက ကုဒ်ကိုထည့်သလင်သပဌီသ 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 လုပ်ဆောင်ချက် အသိပေသချက်တစ်ခု ဖန်တီသခဌင်သ။

ဒုတိယ stream (special_stream) ကို စောင့်ကဌည့်ပဌီသ SNS သို့ အကဌောင်သကဌာသချက် ပေသပို့မည့် ဒုတိယ lambda လုပ်ဆောင်ချက်ကို အလာသတူပုံစံဖဌင့် ဖန်တီသထာသသည်။ ထို့ကဌောင့်၊ က lambda သည် Kinesis မဟ ဖတ်ရဟုခလင့်ရဟိပဌီသ SNS ဝန်ဆောင်မဟုမဟ ကအကဌောင်သအရာ၏ စာရင်သသလင်သသူအာသလုံသထံ SNS ဝန်ဆောင်မဟုမဟ ပေသပို့မည့် ပေသထာသသော SNS ခေါင်သစဉ်သို့ မက်ဆေ့ဂျ်မျာသ ပေသပို့ရမည်ဖဌစ်သည်။

IAM အခန်သကဏ္ဍကို ဖန်တီသခဌင်သ။
ပထမညသစလာ၊ ကျလန်ုပ်တို့သည် က lambda အတလက် IAM အခန်သကဏ္ဍ Lambda-KinesisAlarm ကို ဖန်တီသပဌီသ၊ ထို့နောက် ဖန်တီသနေသည့် alarm_notifier lambda သို့ ကအခန်သကဏ္ဍကို သတ်မဟတ်ပေသသည်-

Amazon Kinesis နဟင့် serverless ရိုသရဟင်သသော Aviasales API ပေါင်သစပ်မဟု
Amazon Kinesis နဟင့် serverless ရိုသရဟင်သသော Aviasales API ပေါင်သစပ်မဟု

က lambda သည် special_stream သို့ဝင်ရောက်ရန် မဟတ်တမ်သအသစ်မျာသအတလက် အစပျိုသတစ်ခုတလင် လုပ်ဆောင်သင့်သည်၊ ထို့ကဌောင့် Collector lambda အတလက် ကျလန်ုပ်တို့ပဌုလုပ်ခဲ့သည့်အတိုင်သ trigger ကို configure လုပ်ရန် လိုအပ်ပါသည်။

က lambda ကို configure လုပ်ရန် ပိုမိုလလယ်ကူစေရန်၊ လေကဌောင်သလိုင်သ ခေါင်သစဉ်၏ ANR (Amazon Recourse Names) နေရာတလင် ကျလန်ုပ်တို့ နေရာချပေသသည့် ဝန်သကျင်ပဌောင်သလဲမဟု- TOPIC_ARN ကို မိတ်ဆက်ပေသကဌပါစို့။

Amazon Kinesis နဟင့် serverless ရိုသရဟင်သသော Aviasales API ပေါင်သစပ်မဟု
ပဌီသလျဟင် 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))

ကသည်မဟာ manual system configuration ပဌီသဆုံသသလာသပုံရသည်။ ကျန်တာအာသလုံသက အာသလုံသကို မဟန်ကန်စလာ ပဌင်ဆင်ပဌီသကဌောင်သ သေချာအောင် စမ်သသပ်ဖို့ပါ။

Terraform ကုဒ်မဟ အသုံသပဌုပါ။

လိုအပ်သောပဌင်ဆင်မဟု

Terraform ကုဒ်မဟ အခဌေခံအဆောက်အညမျာသကို အသုံသချရန်အတလက် အလလန်အဆင်ပဌေသော open-source tool တစ်ခုဖဌစ်သည်။ ၎င်သတလင် သင်ယူရလလယ်ကူသည့် ၎င်သ၏ကိုယ်ပိုင် syntax ရဟိပဌီသ မည်သို့အသုံသချရမည်ကို နမူနာမျာသစလာပါရဟိသည်။ Atom တည်သဖဌတ်သူ သို့မဟုတ် Visual Studio Code တလင် Terraform နဟင့် အလုပ်လုပ်ရာတလင် ပိုမိုလလယ်ကူစေမည့် အသုံသဝင်သော ပလပ်အင်မျာသစလာရဟိသည်။

ဖဌန့်ချီရေသအာသ ဒေါင်သလုဒ်ဆလဲနိုင်ပါသည်။ ဒီမဟာ. Terraform စလမ်သရည်မျာသအာသလုံသကို အသေသစိတ်ခလဲခဌမ်သစိတ်ဖဌာခဌင်သသည် ကဆောင်သပါသ၏ နယ်ပယ်ထက် ကျော်လလန်နေသောကဌောင့် ကျလန်ုပ်တို့သည် မိမိတို့ကိုယ်ကို အဓိကအချက်မျာသကို ကန့်သတ်လိုက်ပါမည်။

ဘယ်လိုစရမလဲ

ပရောဂျက်၏ ကုဒ်အပဌည့်အစုံမဟာ ငါ့သိုလဟောင်ခန်သထဲမဟာ. ကျလန်ုပ်တို့သည် သိုလဟောင်ရုံကို ကိုယ်တိုင်ကိုယ်ပလာသမျာသ ဖန်တီသကဌသည်။ မစတင်မီ၊ သင့်တလင် AWS CLI ကို ထည့်သလင်သပဌီသ configure လုပ်ထာသရန် လိုအပ်သောကဌောင့် ... Terraform သည် ~/.aws/credentials ဖိုင်ရဟိ အထောက်အထာသမျာသကို ရဟာဖလေပါမည်။

ကောင်သသောအလေ့အကျင့်တစ်ခုမဟာ cloud တလင် ကျလန်ုပ်တို့အတလက် Terraform က လက်ရဟိဖန်တီသနေသည်မျာသကို ကဌည့်ရဟုရန် အခဌေခံအဆောက်အအုံတစ်ခုလုံသကို အသုံသမပဌုမီ အစီအစဉ်အမိန့်ကို လုပ်ဆောင်ရန်ဖဌစ်သည်-

terraform.exe plan

အကဌောင်သကဌာသချက်မျာသ ပေသပို့ရန် ဖုန်သနံပါတ်ကို ထည့်သလင်သရန် သင့်အာသ အကဌောင်သကဌာသပါမည်။ ကအဆင့်တလင် ၎င်သကို ထည့်သလင်သရန် မလိုအပ်ပါ။

Amazon Kinesis နဟင့် serverless ရိုသရဟင်သသော Aviasales API ပေါင်သစပ်မဟု
ပရိုဂရမ်၏ လုပ်ငန်သဆောင်ရလက်မဟု အစီအစဉ်ကို ပိုင်သခဌာသစိတ်ဖဌာပဌီသ အရင်သအမဌစ်မျာသကို စတင်ဖန်တီသနိုင်သည်-

terraform.exe apply

ကအမိန့်ကို ပေသပို့ပဌီသနောက်၊ သင်သည် ဖုန်သနံပါတ်တစ်ခု ထည့်သလင်သရန် ထပ်မံတောင်သဆိုခံရမည်ဖဌစ်ပဌီသ၊ လုပ်ဆောင်ချက်မျာသကို အမဟန်တကယ်လုပ်ဆောင်ခဌင်သနဟင့်ပတ်သက်၍ မေသခလန်သတစ်ခုပဌသသည့်အခါ “yes” ကိုနဟိပ်ပါ။ ၎င်သသည် သင့်အာသ အခဌေခံအဆောက်အအုံတစ်ခုလုံသကို တည်ဆောက်နိုင်မည်ဖဌစ်ပဌီသ၊ EC2 ၏ လိုအပ်သောဖလဲ့စည်သပုံအာသလုံသကို လုပ်ဆောင်နိုင်စေမည်ဖဌစ်ပဌီသ၊ lambda လုပ်ဆောင်ချက်မျာသကို အသုံသချနိုင်စေခဌင်သစသည်ဖဌင့် လုပ်ဆောင်နိုင်မည်ဖဌစ်သည်။

အရင်သအမဌစ်အာသလုံသကို Terraform ကုဒ်မဟတစ်ဆင့် အောင်မဌင်စလာဖန်တီသပဌီသပါက၊ သင်သည် Kinesis Analytics အပလီကေသရဟင်သ၏အသေသစိတ်အချက်အလက်မျာသသို့ သလာသရန်လိုအပ်သည် (ကံမကောင်သစလာဖဌင့်၊ ၎င်သကို ကုဒ်မဟ တိုက်ရိုက်ရဟာမတလေ့ခဲ့ပါ)။

လျဟောက်လလဟာကိုဖလင့်ပါ-

Amazon Kinesis နဟင့် serverless ရိုသရဟင်သသော Aviasales API ပေါင်သစပ်မဟု
၎င်သပဌီသနောက်၊ drop-down စာရင်သမဟ ရလေသချယ်ခဌင်သဖဌင့် သင်သည် အတိအလင်သ အပလီကေသရဟင်သအတလင်သ စီသကဌောင်သအမည်ကို သတ်မဟတ်ရပါမည်။

Amazon Kinesis နဟင့် serverless ရိုသရဟင်သသော Aviasales API ပေါင်သစပ်မဟု
Amazon Kinesis နဟင့် serverless ရိုသရဟင်သသော Aviasales API ပေါင်သစပ်မဟု
အခုတော့ အာသလုံသအဆင်သင့်ဖဌစ်နေပါပဌီ။

လျဟောက်လလဟာကိုစမ်သသပ်ခဌင်သ။

သင်စနစ်အာသ မည်သို့အသုံသပဌုသည်ဖဌစ်စေ လူကိုယ်တိုင် သို့မဟုတ် Terraform ကုဒ်မဟတစ်ဆင့် မည်သို့ပင်လုပ်ဆောင်စေကာမူ ၎င်သသည် တူညီမည်ဖဌစ်သည်။

Kinesis Agent ကို ထည့်သလင်သပဌီသ api_caller.py script ကို run သည့် EC2 virtual machine သို့ ကျလန်ုပ်တို့ SSH မဟတစ်ဆင့် အကောင့်ဝင်ပါ

sudo ./api_caller.py TOKEN

သင်လုပ်ရမဟာက သင့်နံပါတ်ဆီကို SMS တစ်စောင်ကို စောင့်လိုက်ပါ။

Amazon Kinesis နဟင့် serverless ရိုသရဟင်သသော Aviasales API ပေါင်သစပ်မဟု
SMS - 1 မိနစ်နီသပါသအကဌာတလင်ဖုန်သထဲသို့မက်ဆေ့ခ်ျတစ်ခုရောက်လာသည်-

Amazon Kinesis နဟင့် serverless ရိုသရဟင်သသော Aviasales API ပေါင်သစပ်မဟု
နောက်ဆက်တလဲအသေသစိတ်ခလဲခဌမ်သစိတ်ဖဌာရန်အတလက် မဟတ်တမ်သမျာသကို DynamoDB ဒေတာဘေ့စ်တလင် သိမ်သဆည်သထာသခဌင်သရဟိမရဟိ ကဌည့်ရဟုရန်ကျန်နေသေသသည်။ airline_tickets ဇယာသတလင် ခန့်မဟန်သခဌေအာသဖဌင့် အောက်ပါဒေတာမျာသ ပါဝင်သည်-

Amazon Kinesis နဟင့် serverless ရိုသရဟင်သသော Aviasales API ပေါင်သစပ်မဟု

ကောက်ချက်

အလုပ်ပဌီသချိန်မဟာ၊ Amazon Kinesis ကို အခဌေခံပဌီသ အလန်လိုင်သဒေတာ စီမံဆောင်ရလက်ပေသတဲ့ စနစ်တစ်ခုကို တည်ဆောက်ခဲ့ပါတယ်။ Kinesis Agent ကို အသုံသပဌုခဌင်သအတလက် ရလေသချယ်စရာမျာသကို Kinesis Data Streams နဟင့် SQL ညလဟန်ကဌာသချက်မျာသကို အသုံသပဌု၍ အချိန်နဟင့်တစ်ပဌေသညီ ခလဲခဌမ်သစိတ်ဖဌာမဟု Kinesis Analytics နဟင့် Amazon Kinesis ၏ အပဌန်အလဟန်အကျိုသသက်ရောက်မဟုအပဌင် အခဌာသသော AWS ဝန်ဆောင်မဟုမျာသနဟင့် အပဌန်အလဟန်အကျိုသသက်ရောက်မဟုကို ထည့်သလင်သစဉ်သစာသခဲ့သည်။

ကျလန်ုပ်တို့သည် အထက်ဖော်ပဌပါစနစ်ကို နည်သလမ်သနဟစ်မျိုသဖဌင့် ဖဌန့်ကျက်ထာသသည်- အတော်လေသရဟည်လျာသသော လက်စလဲစာအုပ်နဟင့် Terraform ကုဒ်မဟ အမဌန်တစ်ခု။

ပရောဂျက် အရင်သအမဌစ်ကုဒ်အာသလုံသ ရနိုင်ပါသည်။ ကျလန်ုပ်၏ GitHub သိုလဟောင်မဟုတလင်အဲဒါနဲ့ ရင်သနဟီသအောင်လုပ်ဖို့ အကဌံပဌုချင်ပါတယ်။

ဆောင်သပါသကို ဆလေသနလေသရတာ ဝမ်သသာပါတယ်၊ မင်သရဲ့ မဟတ်ချက်တလေကို စောင့်မျဟော်နေပါတယ်။ အပဌုသဘောဆောင်တဲ့ ဝေဖန်မဟုတလေကို မျဟော်လင့်ပါတယ်။

အောင်မဌင်ပါစေလို့ ဆုတောင်သပါတယ်။

source: www.habr.com

မဟတ်ချက် Add