Ib qho piv txwv ntawm daim ntawv thov kev tshwm sim-tsav raws li webhooks hauv S3 khoom cia Mail.ru Huab Solutions

Ib qho piv txwv ntawm daim ntawv thov kev tshwm sim-tsav raws li webhooks hauv S3 khoom cia Mail.ru Huab Solutions
Rube Goldberg kas fes tshuab

Event-driven architecture ua rau kom tus nqi ntawm cov peev txheej siv vim tias lawv tsuas yog siv rau lub sijhawm thaum lawv xav tau. Muaj ntau txoj kev xaiv yuav ua li cas los siv qhov no thiab tsis tsim cov huab cua ntxiv raws li cov neeg ua haujlwm thov. Thiab hnub no kuv yuav tsis tham txog FaaS, tab sis hais txog webhooks. Kuv mam li qhia qhov piv txwv ntawm kev tuav cov xwm txheej uas siv cov khoom khaws cia webhooks.

Ob peb lo lus hais txog kev cia khoom thiab webhooks. Cov khoom cia tso cai rau koj khaws cov ntaub ntawv hauv huab hauv daim ntawv ntawm cov khoom, nkag tau ntawm S3 lossis lwm qhov API (nyob ntawm kev siv) ntawm HTTP / HTTPS. Webhooks feem ntau yog kev cai HTTP callbacks. Lawv feem ntau tshwm sim los ntawm ib qho kev tshwm sim, xws li cov lej raug thawb mus rau qhov chaw cia lossis cov lus tshaj tawm hauv blog. Thaum muaj xwm txheej tshwm sim, lub hauv paus chaw xa ib daim ntawv thov HTTP rau qhov URL teev rau webhook. Yog li ntawd, koj tuaj yeem ua cov xwm txheej ntawm ib lub vev xaib ua rau lwm tus (wiki). Nyob rau hauv rooj plaub uas qhov chaw qhov chaw yog qhov khoom khaws cia, cov xwm txheej ua raws li kev hloov pauv rau nws cov ntsiab lus.

Piv txwv ntawm cov teeb meem yooj yim thaum xws li automation tuaj yeem siv tau:

  1. Tsim cov ntawv luam ntawm txhua yam khoom hauv lwm huab cia. Cov ntawv luam yuav tsum tau tsim nyob rau ntawm yoov thaum twg cov ntaub ntawv ntxiv lossis hloov pauv.
  2. Tsis siv neeg tsim cov duab thumbnails ntawm cov duab nraaj, ntxiv watermarks rau cov duab, thiab lwm yam kev hloov kho duab.
  3. Kev ceeb toom txog kev tuaj txog ntawm cov ntaub ntawv tshiab (piv txwv li, ib qho kev pabcuam nyiaj txiag xa tawm cov ntaub ntawv xa mus rau huab, thiab kev saib xyuas nyiaj txiag tau txais cov ntawv ceeb toom txog cov ntaub ntawv tshiab, kuaj xyuas thiab tshuaj xyuas lawv).
  4. Cov teeb meem nyuaj me ntsis cuam tshuam nrog, piv txwv li, tsim cov lus thov rau Kubernetes, uas tsim cov pods nrog cov ntim tsim nyog, hla cov haujlwm tsis ua haujlwm rau nws, thiab tom qab ua tiav cov thawv ntim.

Ua piv txwv, peb yuav ua qhov txawv ntawm txoj haujlwm 1, thaum hloov pauv hauv Mail.ru Cloud Solutions (MCS) cov khoom ntim khoom ntim tau synchronized hauv AWS khoom cia siv webhooks. Nyob rau hauv cov ntaub ntawv tiag tiag loaded, asynchronous ua hauj lwm yuav tsum tau muab los ntawm kev sau npe webhooks nyob rau hauv ib tug queue, tab sis rau kev cob qhia txoj hauj lwm peb yuav ua qhov kev siv yam tsis muaj qhov no.

Cov phiaj xwm ua haujlwm

Cov txheej txheem kev sib cuam tshuam tau piav qhia meej hauv Qhia rau S3 webhooks ntawm MCS. Cov txheej txheem ua haujlwm muaj cov hauv qab no:

  • Tshaj tawm kev pabcuam, uas yog nyob rau ntawm S3 cia sab thiab tshaj tawm HTTP thov thaum webnhook tau tshwm sim.
  • Webhook txais server, uas mloog cov lus thov los ntawm HTTP tshaj tawm kev pabcuam thiab ua haujlwm tsim nyog. Tus neeg rau zaub mov tuaj yeem sau ua hom lus; hauv peb qhov piv txwv, peb yuav sau tus neeg rau zaub mov hauv Go.

Ib qho tshwj xeeb ntawm kev siv webhooks hauv S3 API yog kev tso npe ntawm webhook txais server ntawm qhov kev pabcuam tshaj tawm. Tshwj xeeb, webhook tau txais server yuav tsum lees paub qhov kev tso npe rau cov lus los ntawm kev tshaj tawm kev pabcuam (hauv lwm qhov kev siv webhook, kev lees paub ntawm kev tso npe feem ntau tsis tas yuav tsum tau ua).

Raws li, webhook txais server yuav tsum txhawb nqa ob txoj haujlwm tseem ceeb:

  • teb rau qhov kev pabcuam tshaj tawm cov lus thov kom paub meej txog kev sau npe,
  • txheej xwm tuaj.

Txhim kho lub webhook txais server

Txhawm rau khiav lub webhook txais server, koj xav tau Linux server. Hauv tsab xov xwm no, ua piv txwv, peb siv qhov piv txwv virtual uas peb xa mus rau MCS.

Cia peb nruab qhov tsim nyog software thiab tso lub webhook txais 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) ...

Clone lub nplaub tshev nrog lub webhook txais 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.

Cia peb pib lub server:

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

Sau npe mus rau kev tshaj tawm kev pabcuam

Koj tuaj yeem sau npe koj lub webhook txais server ntawm API lossis web interface. Rau kev yooj yim, peb yuav sau npe ntawm lub vev xaib interface:

  1. Wb mus rau ntu thoob thoob hauv chav tswj.
  2. Mus rau lub thoob uas peb yuav teeb tsa webhooks thiab nyem rau ntawm lub iav:

Ib qho piv txwv ntawm daim ntawv thov kev tshwm sim-tsav raws li webhooks hauv S3 khoom cia Mail.ru Huab Solutions

Mus rau Webhooks tab thiab nyem Ntxiv:

Ib qho piv txwv ntawm daim ntawv thov kev tshwm sim-tsav raws li webhooks hauv S3 khoom cia Mail.ru Huab Solutions
Sau rau hauv cov teb:

Ib qho piv txwv ntawm daim ntawv thov kev tshwm sim-tsav raws li webhooks hauv S3 khoom cia Mail.ru Huab Solutions

ID - lub npe ntawm lub webhook.

Kev tshwm sim - uas cov xwm txheej yuav kis tau. Peb tau teeb tsa kev sib kis ntawm txhua qhov xwm txheej tshwm sim thaum ua haujlwm nrog cov ntaub ntawv (ntxiv thiab tshem tawm).

URL - webhook txais chaw nyob server.

Filter prefix/suffix yog lub lim dej uas tso cai rau koj los tsim webhooks nkaus xwb rau cov khoom uas nws cov npe phim qee cov cai. Piv txwv li, txhawm rau kom lub webhook ua rau tsuas yog cov ntaub ntawv nrog .png txuas ntxiv, hauv Lim lus koj yuav tsum sau "png".

Tam sim no, tsuas yog cov chaw nres nkoj 80 thiab 443 tau txais kev txhawb nqa rau kev nkag mus rau webhook tau txais server.

Wb nias Ntxiv nuv thiab peb yuav pom cov hauv qab no:

Ib qho piv txwv ntawm daim ntawv thov kev tshwm sim-tsav raws li webhooks hauv S3 khoom cia Mail.ru Huab Solutions
Hook ntxiv.

Lub webhook txais neeg rau zaub mov qhia nyob rau hauv nws cov cav qhov kev nce qib ntawm kev sib sau npe nkag:

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

Kev sau npe ua tiav. Hauv ntu tom ntej, peb yuav ua tib zoo saib cov algorithm ntawm kev ua haujlwm ntawm webhook txais server.

Kev piav qhia ntawm webhook txais server

Hauv peb qhov piv txwv, tus neeg rau zaub mov tau sau hauv Go. Cia peb saib cov hauv paus ntsiab lus ntawm nws txoj haujlwm.

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

Xav txog cov haujlwm tseem ceeb:

  • Ping() - ib txoj hauv kev uas teb los ntawm URL / ping, qhov yooj yim tshaj plaws ntawm kev sojntsuam muaj sia nyob.
  • Webhook() - txoj hauv kev tseem ceeb, URL / webhook handler:
    • lees paub kev sau npe ntawm qhov kev pabcuam tshaj tawm (mus rau SubscriptionConfirmation muaj nuj nqi),
    • txheej txheem nkag webhooks (Gorecords muaj nuj nqi).
  • Functions HmacSha256 thiab HmacSha256hex yog kev siv ntawm HMAC-SHA256 thiab HMAC-SHA256 encryption algorithms nrog cov zis raws li ib txoj hlua ntawm hexadecimal tooj rau xam tus kos npe.
  • lub ntsiab yog lub luag haujlwm tseem ceeb, ua cov kab lus hais kom ua kab thiab sau npe URL handlers.

Cov kab hais kom ua kab tsis lees txais los ntawm server:

  • -port yog qhov chaw nres nkoj uas lub server yuav mloog.
  • -address - IP chaw nyob uas tus neeg rau zaub mov yuav mloog.
  • -script yog ib qho kev pab cuam sab nraud uas raug hu rau txhua tus nkag nkag.

Cia peb saib ze dua ntawm qee qhov haujlwm:

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

}

Qhov haujlwm no txiav txim siab seb qhov kev thov kom paub meej tias kev sau npe lossis lub webhook tau tuaj txog. Raws li nram no los ntawm cov ntaub ntawv, yog tias kev tso npe raug lees paub, cov qauv Json hauv qab no tau txais hauv Post thov:

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

Cov lus nug no yuav tsum tau teb:

content-type: application/json

{"signature":Β«ea3fce4bb15c6de4fec365d36bcebbc34ccddf54616d5ca12e1972f82b6d37afΒ»}

Qhov twg kos npe raug xam raws li:

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

Yog tias lub webhook tuaj txog, tus qauv ntawm Post thov zoo li no:

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

Raws li, nyob ntawm qhov kev thov, koj yuav tsum nkag siab tias yuav ua li cas cov ntaub ntawv. Kuv xaiv qhov nkag los ua qhov taw qhia "Type":"SubscriptionConfirmation", txij li nws muaj nyob rau hauv daim ntawv thov kev lees paub kev tso npe thiab tsis muaj nyob hauv webhook. Raws li qhov muaj / tsis muaj qhov nkag hauv POST thov, kev ua tiav ntawm qhov program txuas ntxiv mus rau qhov ua haujlwm SubscriptionConfirmation, los yog ua haujlwm GotRecords.

Peb yuav tsis xav txog qhov SubscriptionConfirmation muaj nuj nqi kom ntxaws; nws yog siv raws li cov hauv paus ntsiab lus tau teev tseg hauv cov ntaub ntawv. Koj tuaj yeem saib qhov chaws rau qhov haujlwm no ntawm qhov project git repositories.

Lub GotRecords muaj nuj nqi parses ib qho kev thov tuaj thiab rau txhua cov ntaub ntawv khoom hu ib tsab ntawv sab nraud (nws lub npe tau dhau los ntawm -script parameter) nrog cov tsis muaj:

  • lub npe
  • yam khoom tseem ceeb
  • kev txiav txim:
    • luam - yog nyob rau hauv thawj daim ntawv thov EventName = ObjectCreated | PutObject | PutObjectCopy
    • rho tawm - yog nyob rau hauv thawj thov EventName = ObjectRemoved | DeleteObject

Yog li, yog tias tus nuv tuaj txog nrog Post thov, raws li tau piav qhia ntau dua, thiab parameter -script = script.sh ces tsab ntawv yuav raug hu raws li nram no:

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

Nws yuav tsum to taub tias qhov webhook tau txais server tsis yog qhov kev daws teeb meem tiav, tab sis yog ib qho piv txwv yooj yim ntawm kev siv tau.

Piv txwv ntawm kev ua haujlwm

Cia peb synchronize cov ntaub ntawv los ntawm lub thoob loj hauv MCS mus rau lub thoob thaub qab hauv AWS. Lub thoob lub ntsiab yog hu ua myfiles-ash, qhov thaub qab yog hu ua myfiles-backup (lub thoob teeb tsa hauv AWS yog dhau ntawm cov kab lus no). Raws li, thaum ib cov ntaub ntawv muab tso rau hauv lub thoob lub ntsiab, nws daim ntawv yuav tsum tshwm nyob rau hauv lub backup ib, thiab thaum nws yog deleted los ntawm lub ntsiab, nws yuav tsum tau muab deleted nyob rau hauv lub backup ib tug.

Peb yuav ua haujlwm nrog cov thoob siv cov khoom siv awscli, uas yog sib xws nrog ob qho tib si MCS huab cia thiab AWS huab cia.

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

Cia peb teeb tsa kev nkag mus rau 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]:

Wb configure access to 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]:

Cia peb txheeb xyuas cov accesses:

To AWS:

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

Rau MCS, thaum khiav cov lus txib koj yuav tsum tau ntxiv -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

Nkag mus.

Tam sim no cia peb sau ib tsab ntawv rau kev ua cov nqe lus nkag, cia peb hu nws 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

Cia peb pib lub server:

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

Cia peb saib seb nws ua haujlwm li cas. Los ntawm MCS web interface ntxiv cov ntaub ntawv test.txt rau myfiles-ash thoob. Cov ntaub ntawv console qhia tau hais tias qhov kev thov tau ua rau lub 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

Cia peb tshawb xyuas cov ntsiab lus ntawm myfiles-backup thoob hauv 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

Tam sim no, dhau ntawm lub vev xaib interface, peb yuav rho tawm cov ntaub ntawv los ntawm myfiles-ash thoob.

Server logs:

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

Cov khoom thoob:

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

Cov ntaub ntawv yog deleted, qhov teeb meem yog daws.

Xaus thiab ToDo

Txhua tus lej siv hauv kab lus no yog hauv kuv qhov chaw khaws cia. Kuj tseem muaj cov piv txwv ntawm cov ntawv sau thiab cov piv txwv ntawm suav cov npe kos npe rau kev sau npe webhooks.

Cov cai no tsis muaj dab tsi ntau dua li piv txwv li cas koj tuaj yeem siv S3 webhooks hauv koj cov dej num. Raws li kuv tau hais thaum pib, yog tias koj npaj yuav siv cov neeg rau zaub mov zoo li no hauv kev tsim khoom, koj yuav tsum tsawg kawg rov sau cov neeg rau zaub mov rau kev ua haujlwm asynchronous: sau npe nkag webhooks hauv ib kab (RabbitMQ lossis NATS), thiab los ntawm qhov ntawd cais lawv thiab ua lawv. nrog cov ntawv thov ua haujlwm. Txwv tsis pub, thaum webhooks tuaj txog loj heev, koj tuaj yeem ntsib qhov tsis muaj kev pabcuam server los ua kom tiav cov haujlwm. Lub xub ntiag ntawm cov kab tso cai rau koj faib cov neeg rau zaub mov thiab cov neeg ua haujlwm, nrog rau kev daws teeb meem nrog kev rov ua haujlwm dua thaum ua tsis tiav. Nws kuj tseem pom zoo kom hloov qhov kev txiav tawm mus rau cov ncauj lus kom ntxaws thiab ntau tus qauv.

Hmoov zoo!

Nyeem ntxiv ntawm lub ncauj lus:

Tau qhov twg los: www.hab.com

Ntxiv ib saib