S3 آبجیکٹ اسٽوريج Mail.ru Cloud Solutions ۾ ويب هوڪس جي بنياد تي واقعن تي هلندڙ ايپليڪيشن جو هڪ مثال

S3 آبجیکٹ اسٽوريج Mail.ru Cloud Solutions ۾ ويب هوڪس جي بنياد تي واقعن تي هلندڙ ايپليڪيشن جو هڪ مثال
روب گولڊبرگ ڪافي مشين

واقعن تي مبني فن تعمير استعمال ٿيل وسيلن جي قيمت جي ڪارڪردگي کي وڌائي ٿو ڇاڪاڻ ته اهي صرف ان وقت استعمال ڪيا ويندا آهن جڏهن انهن جي ضرورت هجي. هتي ڪيترائي آپشن آهن ته ڪيئن هن کي لاڳو ڪجي ۽ ڪم ڪندڙ ايپليڪيشنن جي طور تي اضافي بادل ادارن کي نه ٺاهيو وڃي. ۽ اڄ مان FaaS بابت نه، پر ويب هڪس بابت ڳالهائيندس. مان ڏيکاريندس هڪ سبق آموز مثال ايونٽس کي سنڀالڻ جو استعمال ڪندي آبجیکٹ اسٽوريج ويب هوڪس.

اعتراض جي اسٽوريج ۽ ويب هڪس بابت ڪجھ لفظ. آبجیکٹ اسٽوريج توهان کي ڪلائوڊ ۾ ڪنهن به ڊيٽا کي ذخيرو ڪرڻ جي اجازت ڏئي ٿو شيون جي صورت ۾، رسائي جي ذريعي S3 يا ٻي API (انحصار تي عملدرآمد) ذريعي HTTP/HTTPS ذريعي. Webhooks عام طور تي ڪسٽم HTTP ڪال بيڪس آهن. اهي عام طور تي هڪ واقعي جي ذريعي شروع ڪيا ويا آهن، جهڙوڪ ڪوڊ هڪ مخزن ڏانهن ڌڪيو پيو وڃي يا هڪ تبصرو بلاگ تي پوسٽ ڪيو پيو وڃي. جڏهن ڪو واقعو ٿئي ٿو، اصل سائيٽ ويب هِڪ لاءِ مخصوص ڪيل URL ڏانهن HTTP درخواست موڪلي ٿي. نتيجي طور، توهان هڪ سائيٽ تي واقعا ٺاهي سگهو ٿا ٻئي تي ڪارناما شروع ڪري ٿو (رڪن). ان صورت ۾ جتي ماخذ سائيٽ هڪ اعتراض اسٽوريج آهي، واقعا ان جي مواد ۾ تبديلين جي طور تي ڪم ڪن ٿا.

سادي ڪيسن جا مثال جڏهن اهڙي خودڪار طريقي سان استعمال ڪري سگهجي ٿي:

  1. ٻئي ڪلائوڊ اسٽوريج ۾ سڀني شين جون ڪاپيون ٺاهڻ. جڏهن به فائلون شامل ڪيون وڃن يا تبديل ڪيون وڃن ته ڪاپيون اڏام تي پيدا ٿيڻ گهرجن.
  2. گرافڪ فائلن جي تمبنيلز جي هڪ سيريز جي خودڪار تخليق، فوٽوز ۾ واٽر مارڪ شامل ڪرڻ، ۽ ٻيون تصويري تبديليون.
  3. نون دستاويزن جي آمد بابت نوٽيفڪيشن (مثال طور، ورهايل اڪائونٽنگ سروس ڪلائوڊ تي رپورٽون اپلوڊ ڪري ٿي، ۽ مالي نگراني نون رپورٽن بابت نوٽيفڪيشن حاصل ڪري ٿي، انهن کي چيڪ ۽ تجزيو ڪري ٿو).
  4. ٿورڙي وڌيڪ پيچيده ڪيس شامل آهن، مثال طور، Kubernetes ڏانهن هڪ درخواست پيدا ڪرڻ، جيڪو ضروري ڪنٽينرز سان هڪ پوڊ ٺاهي ٿو، ٽاسڪ پيرا ميٽرز کي پاس ڪري ٿو، ۽ پروسيسنگ کان پوء ڪنٽينر کي ختم ڪري ٿو.

مثال طور، اسين ٽاسڪ 1 جو هڪ قسم ٺاهينداسين، جڏهن Mail.ru Cloud Solutions (MCS) آبجیکٹ اسٽوريج بڪيٽ ۾ تبديليون AWS آبجیکٹ اسٽوريج ۾ ويب هِڪ استعمال ڪندي هم وقت ڪيون وينديون آهن. حقيقي لوڊ ٿيل صورت ۾، هڪ قطار ۾ ويب هڪس کي رجسٽر ڪندي غير مطابقت وارو ڪم مهيا ڪيو وڃي، پر تربيتي ڪم لاءِ اسان ان جي بغير عمل درآمد ڪنداسين.

ڪم جو منصوبو

رابطي جي پروٽوڪول ۾ تفصيل سان بيان ڪيو ويو آهي MCS تي S3 ويب هِڪ لاءِ گائيڊ. ڪم جي منصوبي هيٺ ڏنل عناصر تي مشتمل آهي:

  • اشاعت جي خدمت، جيڪو S3 اسٽوريج پاسي تي آهي ۽ HTTP درخواستن کي شايع ڪري ٿو جڏهن webnhook کي شروع ڪيو ويندو آهي.
  • Webhook وصول ڪندڙ سرور، جيڪو HTTP پبلشنگ سروس کان درخواستون ٻڌي ٿو ۽ مناسب ڪارناما انجام ڏئي ٿو. سرور ڪنهن به ٻولي ۾ لکي سگهجي ٿو؛ اسان جي مثال ۾، اسين سرور کي گو ۾ لکنداسين.

S3 API ۾ ويب هِڪ لاڳو ڪرڻ جي هڪ خاص خصوصيت پبلشنگ سروس تي ويب هِڪ وصول ڪندڙ سرور جي رجسٽريشن آهي. خاص طور تي، ويب هِڪ وصول ڪندڙ سرور کي پبلشنگ سروس مان پيغامن جي سبسڪرپشن جي تصديق ڪرڻ گهرجي (ٻين ويب هِڪ لاڳو ڪرڻ ۾، رڪنيت جي تصديق عام طور تي گهربل ناهي).

انهي جي مطابق، ويب هڪ وصول ڪندڙ سرور کي ٻن مکيه عملن جي حمايت ڪرڻ گهرجي:

  • پبلشنگ سروس جي درخواست جو جواب ڏيو رجسٽريشن جي تصديق ڪرڻ لاءِ،
  • ايندڙ واقعن تي عمل ڪريو.

انسٽال ڪرڻ هڪ ويب هک وصول ڪندڙ سرور

ويب هِڪ وصول ڪندڙ سرور کي هلائڻ لاءِ، توهان کي لينڪس سرور جي ضرورت آهي. هن آرٽيڪل ۾، مثال طور، اسان هڪ مجازي مثال استعمال ڪندا آهيون جيڪو اسان MCS تي ترتيب ڏيون ٿا.

اچو ته انسٽال ڪريون ضروري سافٽ ويئر ۽ لانچ ڪريون ويب هِڪ وصول ڪندڙ سرور.

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) ...

فولڊر کي ڪلون ڪريو ويب هوڪ وصول ڪندڙ سرور سان:

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 يا ويب انٽرفيس ذريعي. سادگي لاءِ، اسان ويب انٽرفيس ذريعي رجسٽر ڪنداسين:

  1. اچو ته بالٽ سيڪشن ڏانهن وڃو ڪنٽرول روم ۾.
  2. ان بالٽ ڏانھن وڃو جنھن لاءِ اسان ويب ھوڪ ترتيب ڏينداسين ۽ گيئر تي ڪلڪ ڪريو:

S3 آبجیکٹ اسٽوريج Mail.ru Cloud Solutions ۾ ويب هوڪس جي بنياد تي واقعن تي هلندڙ ايپليڪيشن جو هڪ مثال

ويب هوڪس ٽيب ڏانھن وڃو ۽ شامل ڪريو تي ڪلڪ ڪريو:

S3 آبجیکٹ اسٽوريج Mail.ru Cloud Solutions ۾ ويب هوڪس جي بنياد تي واقعن تي هلندڙ ايپليڪيشن جو هڪ مثال
فيلڊ ۾ ڀريو:

S3 آبجیکٹ اسٽوريج Mail.ru Cloud Solutions ۾ ويب هوڪس جي بنياد تي واقعن تي هلندڙ ايپليڪيشن جو هڪ مثال

ID - ويب جو نالو.

واقعو - جيڪي واقعا منتقل ڪرڻ لاء. اسان سڀني واقعن جي ٽرانسميشن کي مقرر ڪيو آهي جيڪي واقع ٿين ٿيون جڏهن فائلن سان ڪم ڪندي (شامل ڪرڻ ۽ حذف ڪرڻ).

URL - ويب ھوڪ سرور ايڊريس وصول ڪري ٿو.

Filter prefix/ suffix هڪ فلٽر آهي جيڪو توهان کي صرف انهن شين لاءِ ويب هوڪ ٺاهڻ جي اجازت ڏئي ٿو جن جا نالا ڪجهه ضابطن سان ملن ٿا. مثال طور، ويب هِڪ لاءِ صرف فائلن کي ٽرگر ڪرڻ لاءِ .png ايڪسٽينشن سان، ۾ فلٽر لافڪس توهان کي "png" لکڻ جي ضرورت آهي.

في الحال، صرف بندرگاهن 80 ۽ 443 ويب هک حاصل ڪرڻ واري سرور تائين رسائي حاصل ڪرڻ لاءِ سپورٽ آهن.

اچو ته ڪلڪ ڪريو ڪڪڙ شامل ڪريو ۽ اسان هيٺ ڏنل ڏسنداسين:

S3 آبجیکٹ اسٽوريج Mail.ru Cloud Solutions ۾ ويب هوڪس جي بنياد تي واقعن تي هلندڙ ايپليڪيشن جو هڪ مثال
ٿلهو شامل ڪيو ويو.

ويب هوڪ وصول ڪندڙ سرور پنهنجي لاگن ۾ ٿلهو رجسٽريشن جي عمل جي ترقي ڏيکاري ٿو:

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

رجسٽريشن مڪمل ٿي وئي آهي. ايندڙ حصي ۾، اسان ويب هِڪ وصول ڪندڙ سرور جي آپريشن جي الگورتھم تي ويجھو نظر وجهنداسين.

ويب هِڪ وصول ڪندڙ سرور جي وضاحت

اسان جي مثال ۾، سرور ۾ لکيل آهي 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 handler:
    • پبلشنگ سروس تي رجسٽريشن جي تصديق ڪري ٿي (سبسڪرپشن جي تصديق واري فنڪشن ڏانهن وڃو)،
    • پروسيسنگ انڪمنگ ويب هِڪ (گوريڪرڊس فنڪشن).
  • فنڪشن HmacSha256 ۽ HmacSha256hex آهن HMAC-SHA256 ۽ HMAC-SHA256 انڪرپشن الگورٿمز جا عمل درآمد سان گڏ هيڪساڊيڪل نمبرن جي اسٽرنگ جي طور تي دستخط جي حساب سان.
  • main مکيه فنڪشن آهي، ڪمانڊ لائن پيٽرولر کي پروسيس ڪري ٿو ۽ URL هينڊلر رجسٽر ڪري ٿو.

سرور طرفان قبول ڪيل ڪمانڊ لائن پيٽرولر:

  • -port اهو بندرگاهه آهي جنهن تي سرور ٻڌندو.
  • -address - IP پتو جيڪو سرور ٻڌندو.
  • اسڪرپٽ هڪ خارجي پروگرام آهي جنهن کي هر ايندڙ ٿلهو لاء سڏيو ويندو آهي.

اچو ته ڪجهه ڪمن تي هڪ ويجهي نظر رکون:

//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)
    }

}

هي فنڪشن اهو طئي ڪري ٿو ته ڇا رجسٽريشن جي تصديق ڪرڻ جي درخواست يا ويب هڪ اچي چڪو آهي. جيئن هيٺ ڏنل کان دستاويز، جيڪڏهن رجسٽريشن جي تصديق ڪئي وئي آهي، هيٺ ڏنل 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)))

جيڪڏهن هڪ ويب هوڪ اچي ٿو، پوسٽ جي درخواست جي جوڙجڪ هن طرح نظر اچي ٿي:

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", ڇاڪاڻ ته اهو موجود آهي رڪنيت جي تصديق جي درخواست ۾ ۽ موجود ناهي ويب هِڪ ۾. پوسٽ درخواست ۾ هن داخلا جي موجودگي / غير موجودگي جي بنياد تي، پروگرام جي وڌيڪ عمل يا ته فنڪشن ڏانهن ويندي آهي SubscriptionConfirmation، يا فنڪشن ۾ GotRecords.

اسان تفصيل سان رڪنيت جي تصديق واري فنڪشن تي غور نه ڪنداسين؛ اهو لاڳو ڪيو ويو آهي اصولن جي مطابق مقرر ڪيل اصولن جي مطابق دستاويز. توھان ھن فنڪشن لاء ماخذ ڪوڊ ڏسي سگھو ٿا پروجيڪٽ git repositories.

GotRecords فنڪشن ايندڙ ايندڙ درخواست کي پارس ڪري ٿو ۽ هر رڪارڊ اعتراض لاءِ هڪ خارجي اسڪرپٽ (جنهن جو نالو -اسڪرپٽ پيراميٽر ۾ منظور ڪيو ويو هو) کي پيرا ميٽرن سان سڏي ٿو:

  • ٻلي جو نالو
  • اعتراض جي چاٻي
  • عمل:
    • ڪاپي - جيڪڏهن اصل درخواست ۾ EventName = ObjectCreated | PutObject | PutObjectCopy
    • حذف ڪريو - جيڪڏهن اصل درخواست ۾ EventName = ObjectRemoved | DeleteObject

اهڙيء طرح، جيڪڏهن هڪ ٿلهو پوسٽ جي درخواست سان اچي ٿو، جيئن بيان ڪيو ويو آهي اعلي، ۽ پيراميٽر -script=script.sh پوءِ اسڪرپٽ کي هن ريت سڏيو ويندو:

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

اهو سمجهڻ گهرجي ته هي ويب هوڪ حاصل ڪرڻ وارو سرور هڪ مڪمل پيداوار حل نه آهي، پر هڪ ممڪن عمل جو هڪ آسان مثال آهي.

ڪم جو مثال

اچو ته فائلن کي MCS ۾ مکيه بالٽ کان AWS ۾ بيڪ اپ بالٽ تائين هم وقت سازي ڪريون. مکيه بالٽ کي myfiles-ash سڏيو ويندو آهي، بيڪ اپ هڪ سڏيو ويندو آهي myfiles-backup (AWS ۾ بالٽ جي ترتيب هن مضمون جي دائري کان ٻاهر آهي). ان مطابق، جڏهن ڪا فائل مکيه بالٽ ۾ رکيل آهي، ان جي ڪاپي بيڪ اپ ۾ ظاهر ٿيڻ گهرجي، ۽ جڏهن اهو مکيه مان حذف ڪيو وڃي، ان کي بيڪ اپ ۾ ختم ڪيو وڃي.

اسان awscli يوٽيليٽي استعمال ڪندي بالٽ سان ڪم ڪنداسين، جيڪو MCS ڪلائوڊ اسٽوريج ۽ AWS ڪلائوڊ اسٽوريج ٻنهي سان مطابقت رکي ٿو.

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 لاءِ، جڏهن ڪمانڊ هلائي رهيا آهيو توهان کي شامل ڪرڻ جي ضرورت آهي -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

پهچايل.

ھاڻي اچو ته انڪمنگ ٿڪ جي پروسيسنگ لاءِ اسڪرپٽ لکون، اچو ته ان کي 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 bucket ۾ شامل ڪريو. ڪنسول لاگز ڏيکاري ٿو ته ويب هوڪ سرور ڏانهن درخواست ڪئي وئي هئي:

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 بالٽ جي مواد کي چيڪ ڪريو:

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 bucket.

سرور لاگ:

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:~$

فائل ختم ٿي وئي آهي، مسئلو حل ٿي ويو آهي.

نتيجو ۽ ToDo

هن مضمون ۾ استعمال ٿيل سڀ ڪوڊ آهي منهنجي مخزن ۾. ويب هِڪ رجسٽر ڪرڻ لاءِ لکت جا مثال ۽ ڳڻپ جي دستخط جا مثال پڻ آهن.

هي ڪوڊ هڪ مثال کان وڌيڪ ڪجهه ناهي ته توهان ڪيئن استعمال ڪري سگهو ٿا S3 ويب هوڪس توهان جي سرگرمين ۾. جيئن مون شروع ۾ چيو، جيڪڏهن توهان پيداوار ۾ اهڙي سرور کي استعمال ڪرڻ جو ارادو ڪيو ٿا، توهان کي گهٽ ۾ گهٽ سرور کي ٻيهر لکڻ جي ضرورت آهي غير مطابقت واري ڪم لاءِ: هڪ قطار ۾ ايندڙ ويب هِڪ رجسٽر ڪريو (RabbitMQ يا NATS)، ۽ اتان کان انهن کي پارس ڪريو ۽ پروسيس ڪريو. ڪم ڪندڙ ايپليڪيشنن سان. ٻي صورت ۾، جڏهن ويب هڪس وڏي پيماني تي پهچي ويندا آهن، توهان کي ڪم مڪمل ڪرڻ لاء سرور وسيلن جي کوٽ کي منهن ڏئي سگهي ٿو. قطار جي موجودگي توهان کي سرور ۽ ڪارڪنن کي ورهائڻ جي اجازت ڏئي ٿي، انهي سان گڏ ناڪامي جي صورت ۾ ڪمن کي ورجائڻ سان مسئلا حل ڪرڻ. اهو پڻ مشورو ڏنو ويو آهي ته لاگنگ کي وڌيڪ تفصيلي ۽ وڌيڪ معياري طريقي سان تبديل ڪيو وڃي.

ڪامياب!

موضوع تي وڌيڪ پڙهڻ:

جو ذريعو: www.habr.com

تبصرو شامل ڪريو