Usa ka pananglitan sa usa ka aplikasyon nga gipadagan sa panghitabo base sa mga webhook sa S3 nga pagtipig sa butang nga Mail.ru Cloud Solutions

Usa ka pananglitan sa usa ka aplikasyon nga gipadagan sa panghitabo base sa mga webhook sa S3 nga pagtipig sa butang nga Mail.ru Cloud Solutions
Rube Goldberg nga makina sa kape

Ang arkitektura nga gipatuyok sa panghitabo nagdugang sa kahusayan sa gasto sa mga kapanguhaan nga gigamit tungod kay kini gigamit lamang sa higayon nga kini gikinahanglan. Adunay daghang mga kapilian kung giunsa kini ipatuman ug dili paghimo dugang nga mga entidad sa panganod ingon mga aplikasyon sa trabahante. Ug karon dili ako maghisgot bahin sa FaaS, apan bahin sa mga webhook. Magpakita ako usa ka pananglitan sa panudlo sa pagdumala sa mga panghitabo gamit ang mga webhook sa pagtipig sa butang.

Pipila ka mga pulong bahin sa pagtipig sa butang ug mga webhook. Ang pagtipig sa butang nagtugot kanimo sa pagtipig sa bisan unsang datos sa panganod sa porma sa mga butang, ma-access pinaagi sa S3 o laing API (depende sa pagpatuman) pinaagi sa HTTP/HTTPS. Ang mga webhook kasagarang custom nga HTTP callbacks. Kasagaran sila ma-trigger sa usa ka panghitabo, sama sa code nga giduso sa usa ka repository o usa ka komento nga gi-post sa usa ka blog. Kung mahitabo ang usa ka panghitabo, ang gigikanan nga site nagpadala usa ka hangyo sa HTTP sa URL nga gitakda alang sa webhook. Ingon usa ka sangputanan, mahimo nimong maghimo mga panghitabo sa usa ka site nga mag-aghat sa mga aksyon sa lain (wiki). Sa kaso diin ang gigikanan nga site usa ka pagtipig sa butang, ang mga panghitabo molihok ingon mga pagbag-o sa mga sulud niini.

Mga pananglitan sa yano nga mga kaso kung ang ingon nga automation mahimong magamit:

  1. Paghimo og mga kopya sa tanang butang sa laing cloud storage. Kinahanglang himoon dayon ang mga kopya sa matag higayon nga idugang o usbon ang mga file.
  2. Awtomatikong paghimo og sunod-sunod nga mga thumbnail sa mga graphic file, pagdugang og watermark sa mga litrato, ug uban pang mga pagbag-o sa imahe.
  3. Ang pagpahibalo bahin sa pag-abot sa bag-ong mga dokumento (pananglitan, ang usa ka giapod-apod nga serbisyo sa accounting nag-upload sa mga taho sa panganod, ug ang pag-monitor sa pinansyal makadawat mga pahibalo bahin sa bag-ong mga taho, gisusi ug gisusi kini).
  4. Ang gamay nga mas komplikado nga mga kaso naglakip, pananglitan, paghimo og usa ka hangyo sa Kubernetes, nga nagmugna og usa ka pod nga adunay gikinahanglan nga mga sudlanan, nagpasa sa mga parameter sa buluhaton niini, ug human sa pagproseso nahugno ang sudlanan.

Ingon usa ka pananglitan, maghimo kami usa ka variant sa buluhaton 1, kung ang mga pagbag-o sa Mail.ru Cloud Solutions (MCS) nga bucket sa pagtipig sa butang gi-synchronize sa pagtipig sa butang sa AWS gamit ang mga webhook. Sa usa ka tinuod nga loaded nga kaso, ang asynchronous nga trabaho kinahanglan nga ihatag pinaagi sa pagrehistro sa mga webhook sa usa ka pila, apan alang sa buluhaton sa pagbansay atong buhaton ang pagpatuman nga wala kini.

Skema sa trabaho

Ang protocol sa interaksiyon gihulagway sa detalye sa Giya sa S3 webhooks sa MCS. Ang laraw sa trabaho naglangkob sa mga musunud nga elemento:

  • Serbisyo sa pagpatik, nga anaa sa S3 storage side ug nagpatik sa HTTP requests sa dihang ang webnhook ma-trigger.
  • Webhook nga nakadawat server, nga maminaw sa mga hangyo gikan sa serbisyo sa pagmantala sa HTTP ug mohimog angay nga mga aksyon. Ang server mahimong isulat sa bisan unsang pinulongan; sa among pananglitan, among isulat ang server sa Go.

Usa ka espesyal nga bahin sa pagpatuman sa mga webhook sa S3 API mao ang pagrehistro sa webhook nga tigdawat nga server sa serbisyo sa pagmantala. Sa partikular, ang webhook receiving server kinahanglang mokumpirma sa suskrisyon sa mga mensahe gikan sa serbisyo sa pagmantala (sa ubang mga pagpatuman sa webhook, ang pagkumpirma sa suskrisyon kasagaran dili gikinahanglan).

Busa, ang webhook receiving server kinahanglang mosuporta sa duha ka nag-unang operasyon:

  • pagtubag sa hangyo sa serbisyo sa pagmantala aron makumpirma ang pagrehistro,
  • proseso sa umaabot nga mga panghitabo.

Pag-instalar og webhook nga tigdawat nga server

Aron makadagan ang webhook receiving server, kinahanglan nimo ang Linux server. Niini nga artikulo, isip pananglitan, migamit kami ug virtual nga instance nga among gi-deploy sa MCS.

Atong i-install ang gikinahanglan nga software ug ilunsad ang webhook receiving server.

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

I-clone ang folder gamit ang webhook nga tigdawat nga server:

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.

Atong sugdan ang server:

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

Mag-subscribe sa serbisyo sa pagmantala

Mahimo nimong irehistro ang imong webhook receiving server pinaagi sa API o web interface. Alang sa kayano, magparehistro kami pinaagi sa web interface:

  1. Adto ta sa seksyon sa balde sa control room.
  2. Adto sa balde diin among i-configure ang mga webhook ug i-klik ang gamit:

Usa ka pananglitan sa usa ka aplikasyon nga gipadagan sa panghitabo base sa mga webhook sa S3 nga pagtipig sa butang nga Mail.ru Cloud Solutions

Adto sa tab sa Webhooks ug i-klik ang Add:

Usa ka pananglitan sa usa ka aplikasyon nga gipadagan sa panghitabo base sa mga webhook sa S3 nga pagtipig sa butang nga Mail.ru Cloud Solutions
Pun-a ang mga uma:

Usa ka pananglitan sa usa ka aplikasyon nga gipadagan sa panghitabo base sa mga webhook sa S3 nga pagtipig sa butang nga Mail.ru Cloud Solutions

ID β€” ang ngalan sa webhook.

Panghitabo - kung unsang mga panghitabo ang ipadala. Gibutang namon ang pagpadala sa tanan nga mga panghitabo nga mahitabo kung nagtrabaho kauban ang mga file (pagdugang ug pagtangtang).

URL β€” webhook nga nakadawat sa adres sa server.

Ang prefix/suffix sa filter usa ka filter nga nagtugot kanimo sa paghimo og mga webhook alang lamang sa mga butang kansang mga ngalan mohaum sa pipila ka mga lagda. Pananglitan, aron ang webhook maka-trigger lang sa mga file nga adunay .png extension, sa Filter suffix kinahanglan nimo isulat ang "png".

Sa pagkakaron, ang mga pantalan 80 ug 443 lamang ang gisuportahan alang sa pag-access sa webhook nga tigdawat nga server.

Atong i-klik Idugang ang kaw-it ug atong makita ang mosunod:

Usa ka pananglitan sa usa ka aplikasyon nga gipadagan sa panghitabo base sa mga webhook sa S3 nga pagtipig sa butang nga Mail.ru Cloud Solutions
Gidugang ni Hook.

Ang webhook receiving server nagpakita sa mga log niini sa pag-uswag sa proseso sa pagrehistro sa 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

Ang pagparehistro nahuman. Sa sunod nga seksyon, atong tan-awon pag-ayo ang algorithm sa operasyon sa server nga nakadawat sa webhook.

Deskripsyon sa server sa pagdawat sa webhook

Sa among pananglitan, ang server gisulat sa Go. Atong tan-awon ang sukaranang mga prinsipyo sa operasyon niini.

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

Tagda ang mga nag-unang gimbuhaton:

  • Ping() - usa ka rota nga motubag pinaagi sa URL/ping, ang pinakasimple nga pagpatuman sa liveness probe.
  • Webhook() - nag-unang ruta, tigdumala sa URL/webhook:
    • nagkumpirma sa pagrehistro sa serbisyo sa pagmantala (adto sa function sa Pagkumpirma sa Subscription),
    • nagproseso sa umaabot nga mga webhook (Gorecords function).
  • Ang mga gimbuhaton nga HmacSha256 ug HmacSha256hex kay mga pagpatuman sa HMAC-SHA256 ug HMAC-SHA256 nga mga algorithm sa pag-encrypt nga adunay output isip usa ka string sa hexadecimal nga mga numero para sa pagkalkula sa pirma.
  • Ang panguna mao ang nag-unang function, nagproseso sa mga parameter sa command line ug nagrehistro sa mga tigdumala sa URL.

Mga parameter sa command line nga gidawat sa server:

  • -port mao ang pantalan diin ang server maminaw.
  • -address - IP address nga paminawon sa server.
  • -script mao ang usa ka eksternal nga programa nga gitawag alang sa matag umaabot nga kaw-it.

Atong tan-awon pag-ayo ang pipila sa mga gimbuhaton:

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

}

Kini nga function nagtino kung ang usa ka hangyo sa pagkumpirma sa pagrehistro o usa ka webhook ang miabot. Ingon sa mosunod gikan sa dokumentasyon, kung kumpirmado ang pagrehistro, ang mosunod nga istruktura sa Json madawat sa hangyo sa Post:

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Β»
}

Kini nga pangutana kinahanglan tubagon:

content-type: application/json

{"signature":Β«ea3fce4bb15c6de4fec365d36bcebbc34ccddf54616d5ca12e1972f82b6d37afΒ»}

Kung diin ang pirma gikalkula ingon:

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

Kung moabut ang usa ka webhook, ang istruktura sa hangyo sa Post ingon niini:

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"
            }
        }
    ]
}

Tungod niini, depende sa hangyo, kinahanglan nimo nga masabtan kung giunsa ang pagproseso sa datos. Gipili nako ang entry isip indicator "Type":"SubscriptionConfirmation", tungod kay anaa kini sa hangyo sa pagkumpirma sa suskrisyon ug wala sa webhook. Pinasukad sa presensya / pagkawala sa kini nga entry sa hangyo sa POST, ang dugang nga pagpatuman sa programa moadto sa function SubscriptionConfirmation, o ngadto sa function GotRecords.

Dili namo tagdon sa detalye ang function sa SubscriptionConfirmation; kini gipatuman sumala sa mga prinsipyo nga gilatid sa dokumentasyon. Mahimo nimong tan-awon ang source code alang niini nga function sa proyekto git repository.

Ang GotRecords function nag-parse sa umaabot nga hangyo ug alang sa matag Record object nagtawag ug external script (kansang ngalan gipasa sa -script parameter) uban sa mga parameter:

  • ngalan sa balde
  • butang nga yawe
  • aksyon:
    • kopya - kung sa orihinal nga hangyo EventName = ObjectCreated | PutObject | PutObjectCopy
    • delete - kung sa orihinal nga hangyo EventName = ObjectRemoved | DeleteObject

Busa, kung ang usa ka kaw-it moabut uban ang usa ka hangyo sa Post, ingon sa gihulagway mas taas nga, ug ang parameter -script=script.sh unya ang script tawgon sama sa mosunod:

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

Kinahanglan nga masabtan nga kini nga webhook nga nakadawat server dili usa ka kompleto nga solusyon sa produksiyon, apan usa ka gipasimple nga pananglitan sa usa ka posible nga pagpatuman.

Pananglitan sa trabaho

Atong i-synchronize ang mga file gikan sa main bucket sa MCS ngadto sa backup nga bucket sa AWS. Ang nag-unang balde gitawag nga myfiles-ash, ang backup gitawag nga myfiles-backup (ang pag-configure sa balde sa AWS lapas sa sakup niini nga artikulo). Tungod niini, kung ang usa ka file ibutang sa punoan nga balde, ang kopya niini kinahanglan nga makita sa backup nga usa, ug kung kini mapapas gikan sa panguna, kinahanglan kini nga tangtangon sa backup.

Magtrabaho kami sa mga balde gamit ang awscli utility, nga nahiuyon sa MCS cloud storage ug AWS cloud storage.

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

Atong i-configure ang access sa 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]:

Atong i-configure ang pag-access sa 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]:

Atong susihon ang mga access:

Sa AWS:

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

Para sa MCS, sa diha nga nagdagan sa sugo kinahanglan nimong idugang β€”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

Gi-access.

Karon magsulat kita og script para sa pagproseso sa umaabot nga kaw-it, tawgon nato kini og 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

Atong sugdan ang server:

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

Atong tan-awon kon sa unsang paagi kini molihok. Pinaagi sa MCS web interface idugang ang test.txt file sa myfiles-ash bucket. Ang console logs nagpakita nga ang usa ka hangyo gihimo sa webhook server:

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

Atong susihon ang sulod sa myfiles-backup nga balde sa AWS:

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

Karon, pinaagi sa web interface, atong papason ang file gikan sa myfiles-ash bucket.

Mga log sa server:

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

Mga sulod sa balde:

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

Ang file gitangtang, ang problema nasulbad.

Panapos ug Buhaton

Ang tanan nga code nga gigamit niini nga artikulo mao ang sa akong repository. Adunay usab mga pananglitan sa mga script ug mga pananglitan sa pag-ihap sa mga pirma alang sa pagparehistro sa mga webhook.

Kini nga kodigo kay usa ka pananglitan kon unsaon nimo paggamit ang S3 webhooks sa imong mga kalihokan. Sama sa akong giingon sa sinugdanan, kung nagplano ka nga mogamit sa ingon nga server sa produksiyon, kinahanglan nimo nga labing menos isulat pag-usab ang server alang sa asynchronous nga trabaho: pagrehistro sa umaabot nga mga webhook sa usa ka pila (RabbitMQ o NATS), ug gikan didto i-parse kini ug iproseso kini. uban sa mga aplikasyon sa trabahante. Kung dili, kung ang mga webhook moabut nga daghan, mahimo nimong masugatan ang kakulang sa mga kapanguhaan sa server aron makompleto ang mga buluhaton. Ang presensya sa mga pila nagtugot kanimo sa pag-apod-apod sa server ug mga trabahante, ingon man usab sa pagsulbad sa mga problema sa balik-balik nga mga buluhaton kung adunay mga kapakyasan. Gisugyot usab nga usbon ang pag-log sa usa ka mas detalyado ug mas estandard.

Good luck!

Dugang nga pagbasa sa hilisgutan:

Source: www.habr.com

Idugang sa usa ka comment