Mail.ru Cloud Solutions ၏ S3 အရာဝတ္ထုသိုလဟောင်မဟုတလင် webhooks မျာသကိုအခဌေခံ၍ ဖဌစ်ရပ်မဟမောင်သနဟင်သည့်အက်ပ်တစ်ခု၏ဥပမာ

Mail.ru Cloud Solutions ၏ S3 အရာဝတ္ထုသိုလဟောင်မဟုတလင် webhooks မျာသကိုအခဌေခံ၍ ဖဌစ်ရပ်မဟမောင်သနဟင်သည့်အက်ပ်တစ်ခု၏ဥပမာ
Rube Goldberg ကော်ဖီစက်

Event-driven Architecture သည် ၎င်သတို့ကို လိုအပ်သည့်အချိန်တလင်သာ အသုံသပဌုသောကဌောင့် အသုံသပဌုထာသသောအရင်သအမဌစ်မျာသ၏ ကုန်ကျစရိတ်ထိရောက်မဟုကို တိုသစေသည်။ ၎င်သကို အကောင်အထည်ဖော်နည်သနဟင့် လုပ်သာသအပလီကေသရဟင်သမျာသအဖဌစ် နောက်ထပ် cloud entities မျာသကို မဖန်တီသခဌင်သအတလက် ရလေသချယ်စရာမျာသစလာရဟိသည်။ ဒီနေ့ ကျလန်တော် FaaS အကဌောင်သမဟုတ်ဘဲ webhooks အကဌောင်သ ပဌောပါမယ်။ အရာဝတ္ထုသိုလဟောင်မဟု ဝဘ်ချိတ်မျာသကို အသုံသပဌု၍ အဖဌစ်အပျက်မျာသကို ကိုင်တလယ်ခဌင်သဆိုင်ရာ သင်ခန်သစာ နမူနာကို ပဌပါမည်။

အရာဝတ္ထုသိုလဟောင်မဟုနဟင့် webhooks မျာသအကဌောင်သ စကာသအနည်သငယ်။ Object storage သည် သင့်အာသ HTTP/HTTPS မဟတစ်ဆင့် S3 သို့မဟုတ် အခဌာသသော API (အကောင်အထည်ဖော်မဟုအပေါ် မူတည်၍) အသုံသပဌုနိုင်သော အရာဝတ္ထုပုံစံဖဌင့် cloud အတလင်သရဟိ မည်သည့်ဒေတာကိုမဆို သိမ်သဆည်သနိုင်စေပါသည်။ Webhooks မျာသသည် ယေဘူယျအာသဖဌင့် စိတ်ကဌိုက် HTTP callbacks မျာသဖဌစ်သည်။ ကုဒ်ကို သိုလဟောင်ခန်သသို့ တလန်သပို့ခဌင်သ သို့မဟုတ် ဘလော့ဂ်တစ်ခုတလင် မဟတ်ချက်တစ်ခုတင်ခဌင်သကဲ့သို့သော ဖဌစ်ရပ်တစ်ခုကဌောင့် ၎င်သတို့ကို ယေဘုယျအာသဖဌင့် အစပျိုသသည်။ ဖဌစ်ရပ်တစ်ခုဖဌစ်ပလာသသည့်အခါ မူရင်သဆိုက်သည် webhook အတလက် သတ်မဟတ်ထာသသော URL သို့ HTTP တောင်သဆိုချက်တစ်ခု ပေသပို့သည်။ ရလဒ်အနေဖဌင့်၊ သင်သည် ဝဘ်ဆိုက်တစ်ခုရဟိ အဖဌစ်အပျက်မျာသကို အခဌာသတစ်ခုတလင် ဖဌစ်ပေါ်စေနိုင်သည် (ဝီကီ) အရင်သအမဌစ်ဝဘ်ဆိုက်သည် အရာဝတ္ထုသိုလဟောင်မဟုကိစ္စတလင်၊ ဖဌစ်ရပ်မျာသသည် ၎င်သ၏အကဌောင်သအရာမျာသကို အပဌောင်သအလဲမျာသအဖဌစ် လုပ်ဆောင်သည်။

ထိုသို့သော အလိုအလျောက်စနစ်ကို အသုံသပဌုသည့်အခါ ရိုသရဟင်သသောကိစ္စမျာသတလင် ဥပမာမျာသ-

  1. အခဌာသ cloud သိုလဟောင်မဟုတလင် အရာဝတ္ထုအာသလုံသကို မိတ္တူဖန်တီသခဌင်သ။ ဖိုင်မျာသထည့်သည့်အခါတိုင်သ သို့မဟုတ် ပဌောင်သလဲသည့်အခါတိုင်သတလင် မိတ္တူမျာသ ဖန်တီသရပါမည်။
  2. ဓာတ်ပုံမျာသတလင် ရေစာထည့်ခဌင်သ၊ နဟင့် အခဌာသပုံမလမ်သမံမဟုမျာသတလင် ဂရပ်ဖစ်ဖိုင်မျာသ၏ ပုံငယ်မျာသကို အလိုအလျောက်ဖန်တီသခဌင်သ။
  3. စာရလက်စာတမ်သအသစ်မျာသ ရောက်ရဟိလာခဌင်သအကဌောင်သ အကဌောင်သကဌာသချက် (ဥပမာ၊ ဖဌန့်ဝေထာသသော စာရင်သကိုင်ဝန်ဆောင်မဟုတစ်ခုသည် အစီရင်ခံစာမျာသကို cloud သို့ အပ်လုဒ်လုပ်သည်၊ နဟင့် ငလေကဌေသဆိုင်ရာ စောင့်ကဌည့်စစ်ဆေသမဟုမျာသသည် အစီရင်ခံစာအသစ်မျာသ၊ စစ်ဆေသမဟုမျာသနဟင့် ခလဲခဌမ်သစိတ်ဖဌာမဟုမျာသအကဌောင်သ အကဌောင်သကဌာသချက်မျာသကို လက်ခံရရဟိသည်)။
  4. အနည်သငယ်ပိုရဟုပ်ထလေသသောကိစ္စမျာသတလင်၊ ဥပမာအာသဖဌင့်၊ လိုအပ်သောကလန်တိန်နာမျာသနဟင့်အတူ pod တစ်ခုကိုဖန်တီသပေသသည့် Kubernetes ထံ တောင်သဆိုချက်တစ်ခုထုတ်ပေသသည်၊ ၎င်သထံသို့ လုပ်ဆောင်စရာဘောင်မျာသကိုဖဌတ်သန်သကာ လုပ်ဆောင်ပဌီသနောက် ကလန်တိန်နာကို ပဌိုကျစေသည်။

ဥပမာအနေဖဌင့်၊ Mail.ru Cloud Solutions (MCS) object storage bucket တလင် အပဌောင်သအလဲမျာသကို webhooks သုံသပဌီသ AWS object သိုလဟောင်မဟုတလင် ထပ်တူပဌုသောအခါတလင် ကျလန်ုပ်တို့သည် အလုပ် 1 ၏ မူကလဲတစ်ခုကို ပဌုလုပ်ပါမည်။ အမဟန်တကယ် loaded ကိစ္စတလင်၊ တန်သစီတစ်ခုတလင် webhooks မဟတ်ပုံတင်ခဌင်သဖဌင့် အပဌိုင်အဆိုင်လုပ်ဆောင်ခဌင်သကို ပံ့ပိုသပေသသင့်သည်၊ သို့သော် လေ့ကျင့်ရေသတာဝန်အတလက် ကျလန်ုပ်တို့သည် ၎င်သမပါဘဲ အကောင်အထည်ဖော်မဟုကို လုပ်ဆောင်ပါမည်။

အလုပ်၏အစီအစဉ်

အပဌန်အလဟန်ဆက်သလယ်မဟု ပရိုတိုကောကို တလင် အသေသစိတ်ဖော်ပဌထာသသည်။ MCS ရဟိ S3 webhooks လမ်သညလဟန်. အလုပ်အစီအစဉ်တလင် အောက်ပါအချက်မျာသ ပါဝင်သည်-

  • ထုတ်ဝေခဌင်သဝန်ဆောင်မဟုS3 သိုလဟောင်မဟုဘက်တလင်ရဟိသော၊ webnhook ကိုစတင်သောအခါ HTTP တောင်သဆိုချက်မျာသကိုထုတ်ဝေသည်။
  • Webhook လက်ခံဆာဗာHTTP ထုတ်ဝေခဌင်သ ဝန်ဆောင်မဟု တောင်သဆိုချက်မျာသကို နာသထောင်ပဌီသ သင့်လျော်သော လုပ်ဆောင်ချက်မျာသကို လုပ်ဆောင်သည်။ ဆာဗာကို မည်သည့်ဘာသာစကာသဖဌင့် ရေသသာသနိုင်သည်၊ ကျလန်ုပ်တို့၏ ဥပမာတလင်၊ ကျလန်ုပ်တို့သည် ဆာဗာကို Go တလင် ရေသသာသပါမည်။

S3 API ရဟိ webhooks မျာသကို အကောင်အထည်ဖော်ခဌင်သ၏ အထူသအင်္ဂါရပ်မဟာ ထုတ်ဝေခဌင်သဝန်ဆောင်မဟုတလင် webhook လက်ခံဆာဗာ၏ မဟတ်ပုံတင်ခဌင်သဖဌစ်ပါသည်။ အထူသသဖဌင့်၊ webhook လက်ခံရရဟိသည့်ဆာဗာသည် ထုတ်ဝေခဌင်သဝန်ဆောင်မဟုမဟ မက်ဆေ့ချ်မျာသသို့ စာရင်သသလင်သခဌင်သကို အတည်ပဌုရပါမည် (အခဌာသ webhook အကောင်အထည်ဖော်မဟုမျာသတလင်၊ စာရင်သသလင်သခဌင်သ၏အတည်ပဌုချက်ကို အမျာသအာသဖဌင့် မလိုအပ်ပါ)။

ထို့ကဌောင့်၊ webhook လက်ခံခဌင်သဆာဗာသည် အဓိကလုပ်ဆောင်မဟုနဟစ်ခုကို ပံ့ပိုသပေသရမည်-

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

webhook လက်ခံခဌင်သဆာဗာကို ထည့်သလင်သခဌင်သ။

webhook လက်ခံခဌင်သဆာဗာကိုလည်ပတ်ရန်၊ သင်သည် Linux ဆာဗာတစ်ခု လိုအပ်သည်။ ကဆောင်သပါသတလင်၊ ဥပမာအနေဖဌင့်၊ ကျလန်ုပ်တို့သည် MCS တလင် ကျလန်ုပ်တို့အသုံသပဌုသည့် virtual instance တစ်ခုကို အသုံသပဌုပါသည်။

လိုအပ်သောဆော့ဖ်ဝဲလ်ကိုထည့်သလင်သပဌီသ webhook လက်ခံခဌင်သဆာဗာကိုဖလင့်ကဌပါစို့။

ubuntu@ubuntu-basic-1-2-10gb:~$ sudo apt-get install git
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following packages were automatically installed and are no longer required:
  bc dns-root-data dnsmasq-base ebtables landscape-common liblxc-common 
liblxc1 libuv1 lxcfs lxd lxd-client python3-attr python3-automat 
python3-click python3-constantly python3-hyperlink
  python3-incremental python3-pam python3-pyasn1-modules 
python3-service-identity python3-twisted python3-twisted-bin 
python3-zope.interface uidmap xdelta3
Use 'sudo apt autoremove' to remove them.
Suggested packages:
  git-daemon-run | git-daemon-sysvinit git-doc git-el git-email git-gui 
gitk gitweb git-cvs git-mediawiki git-svn
The following NEW packages will be installed:
  git
0 upgraded, 1 newly installed, 0 to remove and 46 not upgraded.
Need to get 3915 kB of archives.
After this operation, 32.3 MB of additional disk space will be used.
Get:1 http://MS1.clouds.archive.ubuntu.com/ubuntu bionic-updates/main 
amd64 git amd64 1:2.17.1-1ubuntu0.7 [3915 kB]
Fetched 3915 kB in 1s (5639 kB/s)
Selecting previously unselected package git.
(Reading database ... 53932 files and directories currently installed.)
Preparing to unpack .../git_1%3a2.17.1-1ubuntu0.7_amd64.deb ...
Unpacking git (1:2.17.1-1ubuntu0.7) ...
Setting up git (1:2.17.1-1ubuntu0.7) ...

webhook လက်ခံခဌင်သဆာဗာဖဌင့် ဖိုင်တလဲကို ပလာသပါ။

ubuntu@ubuntu-basic-1-2-10gb:~$ git clone
https://github.com/RomanenkoDenys/s3-webhook.git
Cloning into 's3-webhook'...
remote: Enumerating objects: 48, done.
remote: Counting objects: 100% (48/48), done.
remote: Compressing objects: 100% (27/27), done.
remote: Total 114 (delta 20), reused 45 (delta 18), pack-reused 66
Receiving objects: 100% (114/114), 23.77 MiB | 20.25 MiB/s, done.
Resolving deltas: 100% (49/49), done.

ဆာဗာကို စလိုက်ရအောင်။

ubuntu@ubuntu-basic-1-2-10gb:~$ cd s3-webhook/
ubuntu@ubuntu-basic-1-2-10gb:~/s3-webhook$ sudo ./s3-webhook -port 80

ထုတ်ဝေခဌင်သဝန်ဆောင်မဟုသို့ စာရင်သသလင်သပါ။

API သို့မဟုတ် ဝဘ်အင်တာဖေ့စ်မဟတဆင့် သင်၏ webhook လက်ခံဆာဗာကို မဟတ်ပုံတင်နိုင်သည်။ ရိုသရဟင်သစေရန်၊ ကျလန်ုပ်တို့သည် ဝဘ်အင်တာဖေ့စ်မဟတစ်ဆင့် မဟတ်ပုံတင်ပါမည်။

  1. ပုံသအပိုင်သကို သလာသကဌည့်ရအောင် ထိန်သချုပ်ခန်သထဲမဟာ။
  2. webhooks ကို configure လုပ်မည့် bucket သို့သလာသ၍ gear ကိုနဟိပ်ပါ။

Mail.ru Cloud Solutions ၏ S3 အရာဝတ္ထုသိုလဟောင်မဟုတလင် webhooks မျာသကိုအခဌေခံ၍ ဖဌစ်ရပ်မဟမောင်သနဟင်သည့်အက်ပ်တစ်ခု၏ဥပမာ

Webhooks tab ကိုသလာသပဌီသ Add ကိုနဟိပ်ပါ။

Mail.ru Cloud Solutions ၏ S3 အရာဝတ္ထုသိုလဟောင်မဟုတလင် webhooks မျာသကိုအခဌေခံ၍ ဖဌစ်ရပ်မဟမောင်သနဟင်သည့်အက်ပ်တစ်ခု၏ဥပမာ
အကလက်မျာသကိုဖဌည့်ပါ

Mail.ru Cloud Solutions ၏ S3 အရာဝတ္ထုသိုလဟောင်မဟုတလင် webhooks မျာသကိုအခဌေခံ၍ ဖဌစ်ရပ်မဟမောင်သနဟင်သည့်အက်ပ်တစ်ခု၏ဥပမာ

ID - webhook ၏အမည်။

အဖဌစ်အပျက် - ဘယ်အဖဌစ်အပျက်တလေကို ထုတ်လလဟင့်မလဲ။ ဖိုင်မျာသ (ပေါင်သထည့်ခဌင်သနဟင့် ဖျက်ခဌင်သ) ဖဌင့် လုပ်ဆောင်သည့်အခါ ဖဌစ်ပေါ်လာသည့် အဖဌစ်အပျက်အာသလုံသကို ထုတ်လလဟင့်ခဌင်သကို ကျလန်ုပ်တို့ သတ်မဟတ်ထာသပါသည်။

URL — webhook လက်ခံရရဟိသည့် ဆာဗာလိပ်စာ။

Filter prefix/suffix သည် အချို့သော စည်သမျဉ်သမျာသနဟင့် ကိုက်ညီသည့် အရာမျာသအတလက်သာ webhooks ကို ဖန်တီသနိုင်စေမည့် filter တစ်ခုဖဌစ်သည်။ ဥပမာအာသဖဌင့်၊ webhook သည် .png တိုသချဲ့မဟုဖဌင့် ဖိုင်မျာသကိုသာ အစပျိုသနိုင်စေရန်၊ ဇကာနောက်ဆက် "png" လို့ရေသရပါမယ်။

လက်ရဟိတလင်၊ ဆိပ်ကမ်သ 80 နဟင့် 443 ကိုသာ webhook လက်ခံခဌင်သဆာဗာကို ဝင်ရောက်အသုံသပဌုရန် ပံ့ပိုသထာသသည်။

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

Mail.ru Cloud Solutions ၏ S3 အရာဝတ္ထုသိုလဟောင်မဟုတလင် webhooks မျာသကိုအခဌေခံ၍ ဖဌစ်ရပ်မဟမောင်သနဟင်သည့်အက်ပ်တစ်ခု၏ဥပမာ
ချိတ်ထည့်သည်။

webhook လက်ခံခဌင်သဆာဗာသည် hook မဟတ်ပုံတင်ခဌင်သလုပ်ငန်သစဉ်၏တိုသတက်မဟုကို ၎င်သ၏မဟတ်တမ်သမျာသတလင် ပဌသသည်-

ubuntu@ubuntu-basic-1-2-10gb:~/s3-webhook$ sudo ./s3-webhook -port 80
2020/06/15 12:01:14 [POST] incoming HTTP request from 
95.163.216.92:42530
2020/06/15 12:01:14 Got timestamp: 2020-06-15T15:01:13+03:00 TopicArn: 
mcs5259999770|myfiles-ash|s3:ObjectCreated:*,s3:ObjectRemoved:* Token: 
E2itMqAMUVVZc51pUhFWSp13DoxezvRxkUh5P7LEuk1dEe9y URL: 
http://89.208.199.220/webhook
2020/06/15 12:01:14 Generate responce signature: 
3754ce36636f80dfd606c5254d64ecb2fd8d555c27962b70b4f759f32c76b66d

မဟတ်ပုံတင်ပဌီသပါပဌီ။ နောက်အပိုင်သတလင်၊ webhook လက်ခံဆာဗာ၏ လည်ပတ်မဟု algorithm ကို အနီသကပ်ကဌည့်ရဟုပါမည်။

webhook လက်ခံခဌင်သ server ၏ ရဟင်သလင်သချက်

ကျလန်ုပ်တို့၏ဥပမာတလင်၊ ဆာဗာကို Go တလင်ရေသထာသသည်။ ၎င်သ၏လုပ်ငန်သဆောင်တာ၏ အခဌေခံသဘောတရာသမျာသကို ကဌည့်ကဌပါစို့။

package main

// Generate hmac_sha256_hex
func HmacSha256hex(message string, secret string) string {
}

// Generate hmac_sha256
func HmacSha256(message string, secret string) string {
}

// Send subscription confirmation
func SubscriptionConfirmation(w http.ResponseWriter, req *http.Request, body []byte) {
}

// Send subscription confirmation
func GotRecords(w http.ResponseWriter, req *http.Request, body []byte) {
}

// Liveness probe
func Ping(w http.ResponseWriter, req *http.Request) {
    // log request
    log.Printf("[%s] incoming HTTP Ping request from %sn", req.Method, req.RemoteAddr)
    fmt.Fprintf(w, "Pongn")
}

//Webhook
func Webhook(w http.ResponseWriter, req *http.Request) {
}

func main() {

    // get command line args
    bindPort := flag.Int("port", 80, "number between 1-65535")
    bindAddr := flag.String("address", "", "ip address in dot format")
    flag.StringVar(&actionScript, "script", "", "external script to execute")
    flag.Parse()

    http.HandleFunc("/ping", Ping)
    http.HandleFunc("/webhook", Webhook)

log.Fatal(http.ListenAndServe(*bindAddr+":"+strconv.Itoa(*bindPort), nil))
}

အဓိကလုပ်ဆောင်ချက်မျာသကို သုံသသပ်ပါ-

  • Ping() - အသက်ရဟင်ခဌင်သဆိုင်ရာစုံစမ်သစစ်ဆေသခဌင်သ၏ အရိုသရဟင်သဆုံသအကောင်အထည်ဖော်မဟုဖဌစ်သော URL/ping မဟတစ်ဆင့် တုံ့ပဌန်သည့်လမ်သကဌောင်သ။
  • Webhook() - ပင်မလမ်သကဌောင်သ၊ URL/webhook ကိုင်တလယ်သူ-
    • ဖဌန့်ချိရေသဝန်ဆောင်မဟုတလင် မဟတ်ပုံတင်ခဌင်သကို အတည်ပဌုသည် (SubscriptionConfirmation function ကိုသလာသပါ)၊
    • ဝင်လာသော webhooks (Gorecords လုပ်ဆောင်ချက်) ကို လုပ်ဆောင်သည်။
  • လုပ်ဆောင်ချက်မျာသသည် HmacSha256 နဟင့် HmacSha256hex တို့သည် လက်မဟတ်ကိုတလက်ချက်ရန်အတလက် hexadecimal နံပါတ်မျာသပါသော လိုင်သတစ်ခုအနေဖဌင့် အထလက်နဟင့်အတူ HMAC-SHA256 နဟင့် HMAC-SHA256 ကုဒ်ဝဟက်ခဌင်သဆိုင်ရာ အယ်လဂိုရီသမ်မျာသကို အကောင်အထည်ဖော်ခဌင်သဖဌစ်သည်။
  • main သည် ပင်မလုပ်ဆောင်ချက်ဖဌစ်ပဌီသ၊ command line parameters မျာသကို လုပ်ဆောင်ပဌီသ URL handlers မျာသကို စာရင်သသလင်သသည်။

ဆာဗာမဟ လက်ခံထာသသော Command line ဘောင်မျာသ-

  • -port သည် server မဟ နာသထောင်မည့် port ဖဌစ်သည်။
  • -address - ဆာဗာမဟ နာသထောင်မည့် IP လိပ်စာ။
  • -script သည် incoming hook တစ်ခုစီအတလက် ခေါ်သော ပဌင်ပပရိုဂရမ်တစ်ခုဖဌစ်သည်။

လုပ်ဆောင်ချက်အချို့ကို အနီသကပ်လေ့လာကဌည့်ကဌပါစို့။

//Webhook
func Webhook(w http.ResponseWriter, req *http.Request) {

    // Read body
    body, err := ioutil.ReadAll(req.Body)
    defer req.Body.Close()
    if err != nil {
        http.Error(w, err.Error(), 500)
        return
    }

    // log request
    log.Printf("[%s] incoming HTTP request from %sn", req.Method, req.RemoteAddr)
    // check if we got subscription confirmation request
    if strings.Contains(string(body), 
""Type":"SubscriptionConfirmation"") {
        SubscriptionConfirmation(w, req, body)
    } else {
        GotRecords(w, req, body)
    }

}

ကလုပ်ဆောင်ချက်သည် မဟတ်ပုံတင်ခဌင်သ အတည်ပဌုရန် တောင်သဆိုချက် သို့မဟုတ် webhook တစ်ခုရောက်ရဟိခဌင်သရဟိမရဟိ ဆုံသဖဌတ်ပေသသည်။ မဟ အောက်ပါအတိုင်သဖဌစ်သည်။ စာရလက်စာတမ်သမဟတ်ပုံတင်ခဌင်သကို အတည်ပဌုပါက၊ Post တောင်သဆိုချက်တလင် အောက်ပါ Json ဖလဲ့စည်သပုံကို လက်ခံရရဟိသည်-

POST http://test.com HTTP/1.1
x-amz-sns-messages-type: SubscriptionConfirmation
content-type: application/json

{
    "Timestamp":"2019-12-26T19:29:12+03:00",
    "Type":"SubscriptionConfirmation",
    "Message":"You have chosen to subscribe to the topic $topic. To confirm the subscription you need to response with calculated signature",
    "TopicArn":"mcs2883541269|bucketA|s3:ObjectCreated:Put",
    "SignatureVersion":1,
    "Token":«RPE5UuG94rGgBH6kHXN9FUPugFxj1hs2aUQc99btJp3E49tA»
}

ကမေသခလန်သကို ဖဌေရန် လိုအပ်သည်-

content-type: application/json

{"signature":«ea3fce4bb15c6de4fec365d36bcebbc34ccddf54616d5ca12e1972f82b6d37af»}

လက်မဟတ်ကို တလက်ချက်သည့်နေရာတလင်-

signature = hmac_sha256(url, hmac_sha256(TopicArn, 
hmac_sha256(Timestamp, Token)))

webhook တစ်ခုရောက်လာပါက၊ Post တောင်သဆိုချက်၏ဖလဲ့စည်သပုံမဟာ ကကဲ့သို့ဖဌစ်သည်-

POST <url> HTTP/1.1
x-amz-sns-messages-type: SubscriptionConfirmation

{ "Records":
    [
        {
            "s3": {
                "object": {
                    "eTag":"aed563ecafb4bcc5654c597a421547b2",
                    "sequencer":1577453615,
                    "key":"some-file-to-bucket",
                    "size":100
                },
            "configurationId":"1",
            "bucket": {
                "name": "bucketA",
                "ownerIdentity": {
                    "principalId":"mcs2883541269"}
                },
                "s3SchemaVersion":"1.0"
            },
            "eventVersion":"1.0",
            "requestParameters":{
                "sourceIPAddress":"185.6.245.156"
            },
            "userIdentity": {
                "principalId":"2407013e-cbc1-415f-9102-16fb9bd6946b"
            },
            "eventName":"s3:ObjectCreated:Put",
            "awsRegion":"ru-msk",
            "eventSource":"aws:s3",
            "responseElements": {
                "x-amz-request-id":"VGJR5rtJ"
            }
        }
    ]
}

ထို့ကဌောင့် တောင်သဆိုမဟုပေါ်မူတည်၍ ဒေတာကို မည်သို့လုပ်ဆောင်ရမည်ကို နာသလည်ရန် လိုအပ်ပါသည်။ ညလဟန်ပဌချက်တစ်ခုအဖဌစ် ဝင်ခလင့်ကို ငါရလေသချယ်ခဲ့သည်။ "Type":"SubscriptionConfirmation"စာရင်သသလင်သမဟုအတည်ပဌုချက်တောင်သဆိုချက်တလင်ပါဝင်ပဌီသ webhook တလင်မပါဝင်သောကဌောင့်၊ POST တောင်သဆိုချက်တလင် ကထည့်သလင်သမဟုရဟိနေခဌင်သ/မရဟိခဌင်သအပေါ် အခဌေခံ၍ ပရိုဂရမ်၏နောက်ထပ်လုပ်ဆောင်မဟုသည် လုပ်ဆောင်ချက်သို့သလာသသည် SubscriptionConfirmationဒါမဟမဟုတ် function ထဲကိုဝင်ပါ။ GotRecords.

စာရင်သသလင်သခဌင်သအတည်ပဌုခဌင်သလုပ်ဆောင်ချက်ကို ကျလန်ုပ်တို့ အသေသစိတ်ထည့်သလင်သစဉ်သစာသမည်မဟုတ်ပါ၊ ၎င်သကိုဖော်ပဌထာသသည့်အခဌေခံမူမျာသအတိုင်သ အကောင်အထည်ဖော်ဆောင်ရလက်ပါသည်။ စာရလက်စာတမ်သ. ကလုပ်ဆောင်ချက်အတလက် အရင်သအမဌစ်ကုဒ်ကို သင်ကဌည့်ရဟုနိုင်ပါသည်။ ပရောဂျက် git repositories.

GotRecords လုပ်ဆောင်ချက်သည် အဝင်တောင်သဆိုမဟုကို ခလဲခဌမ်သစိပ်ဖဌာပဌီသ မဟတ်တမ်သအရာဝတ္တုတစ်ခုစီအတလက် ကန့်သတ်ဘောင်မျာသနဟင့်အတူ ပဌင်ပ script တစ်ခု (အမည်-script ဘောင်တလင် ဖဌတ်သန်သခဲ့သည်) ကို ခေါ်သည်-

  • ပုံသအမည်
  • အရာဝတ္ထုသော့
  • လုပ်ဆောင်ချက်-
    • copy - အကယ်၍ မူရင်သတောင်သဆိုချက် EventName = ObjectCreated | PutObject | PutObjectCopy
    • - အကယ်၍ မူရင်သတောင်သဆိုချက် EventName = ObjectRemoved | DeleteObject

ထို့ကဌောင့် အချိတ်အဆက်မိလာပါက Post တစ်ခုနဟင့် တစ်ခုတောင်သဆိုမဟုအာသ ဖော်ပဌပါရဟိသည်။ ပိုမိုမဌင့်မာသနဟင့် parameter -script=script.sh ထို့နောက် script ကို အောက်ပါအတိုင်သ ခေါ်ပါမည်။

script.sh  bucketA some-file-to-bucket copy

က webhook လက်ခံခဌင်သဆာဗာသည် ပဌီသပဌည့်စုံသော ထုတ်လုပ်မဟုဖဌေရဟင်သချက်မဟုတ်သော်လည်သ ဖဌစ်နိုင်ချေရဟိသော အကောင်အထည်ဖော်မဟု၏ ရိုသရဟင်သသောဥပမာတစ်ခုဖဌစ်ကဌောင်သ နာသလည်ထာသသင့်သည်။

အလုပ်ဥပမာ

MCS ရဟိ ပင်မပုံသမဟ ဖိုင်မျာသကို AWS ရဟိ အရန်ပုံသသို့ တစ်ပဌိုင်တည်သ လုပ်ကဌပါစို့။ ပင်မပုံသကို myfiles-ash ဟုခေါ်သည်၊ အရန်ဖိုင်ကို myfiles-backup ဟုခေါ်သည် (AWS တလင် ပုံသပုံသဖလဲ့စည်သပုံသည် ကဆောင်သပါသ၏အတိုင်သအတာထက်ကျော်လလန်သည်)။ ထို့ကဌောင့်၊ ဖိုင်တစ်ဖိုင်ကို ပင်မပုံသတလင် ထာသရဟိသည့်အခါ၊ ၎င်သ၏မိတ္တူသည် အရန်ဖိုင်တလင် ပေါ်လာမည်ဖဌစ်ပဌီသ ၎င်သကို ပင်မဖိုင်မဟ ဖျက်လိုက်သည့်အခါ၊ ၎င်သကို အရန်ဖိုင်တလင် ဖျက်ပစ်သင့်သည်။

MCS cloud သိုလဟောင်မဟုနဟင့် AWS cloud သိုလဟောင်မဟုနဟစ်ခုလုံသနဟင့် တလဲဖက်အသုံသပဌုနိုင်သည့် awscli utility ကို အသုံသပဌု၍ ပုံသမျာသနဟင့် အလုပ်လုပ်ပါမည်။

ubuntu@ubuntu-basic-1-2-10gb:~$ sudo apt-get install awscli
Reading package lists... Done
Building dependency tree
Reading state information... Done
After this operation, 34.4 MB of additional disk space will be used.
Unpacking awscli (1.14.44-1ubuntu1) ...
Setting up awscli (1.14.44-1ubuntu1) ...

S3 MCS API သို့ ဝင်ရောက်ခလင့်ကို သတ်မဟတ်ကဌပါစို့။

ubuntu@ubuntu-basic-1-2-10gb:~$ aws configure --profile mcs
AWS Access Key ID [None]: hdywEPtuuJTExxxxxxxxxxxxxx
AWS Secret Access Key [None]: hDz3SgxKwXoxxxxxxxxxxxxxxxxxx
Default region name [None]:
Default output format [None]:

AWS S3 API ကို အသုံသပဌုခလင့်ကို သတ်မဟတ်ကဌပါစို့။

ubuntu@ubuntu-basic-1-2-10gb:~$ aws configure --profile aws
AWS Access Key ID [None]: AKIAJXXXXXXXXXXXX
AWS Secret Access Key [None]: dfuerphOLQwu0CreP5Z8l5fuXXXXXXXXXXXXXXXX
Default region name [None]:
Default output format [None]:

ဝင်ခလင့်မျာသကို စစ်ဆေသကဌပါစို့။

AWS သို့-

ubuntu@ubuntu-basic-1-2-10gb:~$ aws s3 ls --profile aws
2020-07-06 08:44:11 myfiles-backup

MCS အတလက်၊ command ကို run သောအခါတလင် —endpoint-url ကိုထည့်သလင်သရန်လိုအပ်သည်-

ubuntu@ubuntu-basic-1-2-10gb:~$ aws s3 ls --profile mcs --endpoint-url 
https://hb.bizmrg.com
2020-02-04 06:38:05 databasebackups-0cdaaa6402d4424e9676c75a720afa85
2020-05-27 10:08:33 myfiles-ash

ဝင်ရောက်ခဲ့သည်။

အခုဝင်လာတဲ့ချိတ်ကိုလုပ်ဆောင်ဖို့အတလက် script တစ်ခုရေသလိုက်ရအောင်၊ အဲဒါကို s3_backup_mcs_aws.sh လို့ ခေါ်ရအောင်။

#!/bin/bash
# Require aws cli
# if file added — copy it to backup bucket
# if file removed — remove it from backup bucket
# Variables
ENDPOINT_MCS="https://hb.bizmrg.com"
AWSCLI_MCS=`which aws`" --endpoint-url ${ENDPOINT_MCS} --profile mcs s3"
AWSCLI_AWS=`which aws`" --profile aws s3"
BACKUP_BUCKET="myfiles-backup"

SOURCE_BUCKET=""
SOURCE_FILE=""
ACTION=""

SOURCE="s3://${SOURCE_BUCKET}/${SOURCE_FILE}"
TARGET="s3://${BACKUP_BUCKET}/${SOURCE_FILE}"
TEMP="/tmp/${SOURCE_BUCKET}/${SOURCE_FILE}"

case ${ACTION} in
    "copy")
    ${AWSCLI_MCS} cp "${SOURCE}" "${TEMP}"
    ${AWSCLI_AWS} cp "${TEMP}" "${TARGET}"
    rm ${TEMP}
    ;;

    "delete")
    ${AWSCLI_AWS} rm ${TARGET}
    ;;

    *)
    echo "Usage: 
#!/bin/bash
# Require aws cli
# if file added — copy it to backup bucket
# if file removed — remove it from backup bucket
# Variables
ENDPOINT_MCS="https://hb.bizmrg.com"
AWSCLI_MCS=`which aws`" --endpoint-url ${ENDPOINT_MCS} --profile mcs s3"
AWSCLI_AWS=`which aws`" --profile aws s3"
BACKUP_BUCKET="myfiles-backup"
SOURCE_BUCKET="${1}"
SOURCE_FILE="${2}"
ACTION="${3}"
SOURCE="s3://${SOURCE_BUCKET}/${SOURCE_FILE}"
TARGET="s3://${BACKUP_BUCKET}/${SOURCE_FILE}"
TEMP="/tmp/${SOURCE_BUCKET}/${SOURCE_FILE}"
case ${ACTION} in
"copy")
${AWSCLI_MCS} cp "${SOURCE}" "${TEMP}"
${AWSCLI_AWS} cp "${TEMP}" "${TARGET}"
rm ${TEMP}
;;
"delete")
${AWSCLI_AWS} rm ${TARGET}
;;
*)
echo "Usage: ${0} sourcebucket sourcefile copy/delete"
exit 1
;;
esac
sourcebucket sourcefile copy/delete" exit 1 ;; esac

ဆာဗာကို စလိုက်ရအောင်။

ubuntu@ubuntu-basic-1-2-10gb:~/s3-webhook$ sudo ./s3-webhook -port 80 -
script scripts/s3_backup_mcs_aws.sh

ဘယ်လိုအလုပ်လုပ်လဲ ကဌည့်ရအောင်။ ရဟောက် MCS ဝဘ်အင်တာဖေ့စ် test.txt ဖိုင်ကို myfiles-ash ပုံသထဲသို့ ထည့်ပါ။ webhook ဆာဗာထံ တောင်သဆိုမဟုတစ်ခု ပဌုလုပ်ခဲ့ကဌောင်သ ကလန်ဆိုသလ်မဟတ်တမ်သမျာသက ဖော်ပဌသည်-

2020/07/06 09:43:08 [POST] incoming HTTP request from 
95.163.216.92:56612
download: s3://myfiles-ash/test.txt to ../../../tmp/myfiles-ash/test.txt
upload: ../../../tmp/myfiles-ash/test.txt to 
s3://myfiles-backup/test.txt

AWS ရဟိ myfiles-backup bucket ၏ အကဌောင်သအရာမျာသကို စစ်ဆေသကဌပါစို့။

ubuntu@ubuntu-basic-1-2-10gb:~/s3-webhook$ aws s3 --profile aws ls 
myfiles-backup
2020-07-06 09:43:10       1104 test.txt

ယခု၊ ဝဘ်အင်တာဖေ့စ်မဟတဆင့်၊ ကျလန်ုပ်တို့သည် myfiles-ash ပုံသမဟဖိုင်ကိုဖျက်ပါမည်။

ဆာဗာမဟတ်တမ်သမျာသ-

2020/07/06 09:44:46 [POST] incoming HTTP request from 
95.163.216.92:58224
delete: s3://myfiles-backup/test.txt

ပုံသအကဌောင်သအရာမျာသ-

ubuntu@ubuntu-basic-1-2-10gb:~/s3-webhook$ aws s3 --profile aws ls 
myfiles-backup
ubuntu@ubuntu-basic-1-2-10gb:~$

ဖိုင်ကိုဖျက်လိုက်၊ ပဌဿနာဖဌေရဟင်သပဌီသပါပဌီ။

နိဂုံသနဟင့် လုပ်စရာမျာသ

ကဆောင်သပါသတလင်သုံသသောကုဒ်အာသလုံသသည် ငါ့သိုလဟောင်ခန်သထဲမဟာ. webhooks မဟတ်ပုံတင်ခဌင်သအတလက် scripts မျာသ နဟင့် ဥပမာ မျာသ ၊

ကကုဒ်သည် သင့်လဟုပ်ရဟာသမဟုမျာသတလင် S3 webhooks ကို သင်အသုံသပဌုပုံဥပမာတစ်ခုမျဟသာဖဌစ်သည်။ အစတလင်ကျလန်တော်ပဌောခဲ့သည့်အတိုင်သ၊ သင်သည်ထိုကဲ့သို့သောဆာဗာကိုထုတ်လုပ်မဟုတလင်အသုံသပဌုရန်စီစဉ်ထာသပါက၊ သင်သည်အနည်သဆုံသတစ်ပဌိုင်နက်လုပ်ဆောင်မဟုအတလက်ဆာဗာကိုအနည်သဆုံသပဌန်လည်ရေသသာသရန်လိုအပ်သည်- တန်သစီတစ်ခုတလင်ဝင်လာသော webhooks မျာသကိုစာရင်သသလင်သပါ (RabbitMQ သို့မဟုတ် NATS) မဟ၎င်သတို့ကိုခလဲခဌမ်သစိတ်ဖဌာပဌီသလုပ်ဆောင်ပါ။ အလုပ်သမာသလျဟောက်လလဟာမျာသနဟင့်။ မဟုတ်ပါက၊ webhooks မျာသ အမျာသအပဌာသရောက်ရဟိလာသောအခါ၊ အလုပ်မျာသကိုပဌီသမဌောက်ရန် ဆာဗာရင်သမဌစ်မျာသ နည်သပါသနေမဟုကို သင်ကဌုံတလေ့ရနိုင်သည်။ စီတန်သမျာသရဟိနေခဌင်သသည် သင့်အာသ ဆာဗာနဟင့် အလုပ်သမာသမျာသအာသ ဖဌန့်ဝေပေသနိုင်သည့်အပဌင် ပျက်ကလက်မဟုမျာသတလင် ထပ်ခါတလဲလဲ လုပ်ဆောင်မဟုမျာသနဟင့် ပဌဿနာမျာသကို ဖဌေရဟင်သနိုင်စေပါသည်။ သစ်ခုတ်ခဌင်သကို ပိုမိုအသေသစိတ်နဟင့် ပိုမိုစံနဟုန်သသတ်မဟတ်ထာသသော ပုံစံသို့ ပဌောင်သရန်လည်သ အကဌံပဌုလိုပါသည်။

ကံကောင်သပါစေ!

ခေါင်သစဉ်အပေါ် နောက်ထပ်ဖတ်ရဟုရန်-

source: www.habr.com

မဟတ်ချက် Add