Eżempju ta 'applikazzjoni mmexxija mill-avvenimenti bbażata fuq webhooks fil-ħażna ta' oġġetti S3 Mail.ru Cloud Solutions

Eżempju ta 'applikazzjoni mmexxija mill-avvenimenti bbażata fuq webhooks fil-ħażna ta' oġġetti S3 Mail.ru Cloud Solutions
Magna tal-kafè Rube Goldberg

L-arkitettura mmexxija mill-avvenimenti żżid l-effiċjenza fl-ispiża tar-riżorsi użati minħabba li jintużaw biss fil-mument meta jkunu meħtieġa. Hemm ħafna għażliet dwar kif timplimenta dan u ma toħloqx entitajiet sħab addizzjonali bħala applikazzjonijiet tal-ħaddiema. U llum se nitkellem mhux dwar FaaS, iżda dwar webhooks. Ser nuri eżempju tutorja tal-immaniġġjar tal-avvenimenti billi tuża webhooks tal-ħażna tal-oġġetti.

Ftit kliem dwar il-ħażna tal-oġġetti u l-webhooks. Il-ħażna ta 'l-oġġetti tippermettilek taħżen kwalunkwe data fil-sħaba fil-forma ta' oġġetti, aċċessibbli permezz ta 'S3 jew API oħra (skont l-implimentazzjoni) permezz ta' HTTP/HTTPS. Webhooks huma ġeneralment callbacks HTTP personalizzati. Tipikament jiġu attivati ​​minn avveniment, bħal kodiċi li jiġi mbuttat għal repożitorju jew kumment li jitpoġġa fuq blog. Meta jseħħ avveniment, is-sit tal-oriġini jibgħat talba HTTP lill-URL speċifikat għall-webhook. Bħala riżultat, tista' tagħmel avvenimenti fuq sit wieħed iqanqal azzjonijiet fuq ieħor (wiki). Fil-każ fejn is-sit sors huwa ħażna ta 'oġġett, l-avvenimenti jaġixxu bħala bidliet fil-kontenut tiegħu.

Eżempji ta' każijiet sempliċi meta awtomazzjoni bħal din tista' tintuża:

  1. Ħolqien ta 'kopji ta' l-oġġetti kollha f'ħażna sħaba oħra. Kopji għandhom jinħolqu fuq il-fly kull meta jiġu miżjuda jew mibdula fajls.
  2. Ħolqien awtomatiku ta 'serje ta' thumbnails ta 'fajls grafiċi, iż-żieda ta' watermarks għar-ritratti, u modifiki oħra tal-immaġni.
  3. Notifika dwar il-wasla ta’ dokumenti ġodda (pereżempju, servizz ta’ kontabilità distribwit itella’ rapporti fil-cloud, u l-monitoraġġ finanzjarju jirċievi notifiki dwar rapporti ġodda, jiċċekkjahom u janalizzahom).
  4. Każijiet kemmxejn aktar kumplessi jinvolvu, pereżempju, il-ġenerazzjoni ta 'talba lil Kubernetes, li toħloq pod bil-kontenituri meħtieġa, tgħaddi l-parametri tal-kompitu lilha, u wara l-ipproċessar tikkollassa l-kontenitur.

Bħala eżempju, se nagħmlu varjant tal-kompitu 1, meta bidliet fil-barmil tal-ħażna tal-oġġetti Mail.ru Cloud Solutions (MCS) jiġu sinkronizzati fil-ħażna tal-oġġetti AWS bl-użu ta 'webhooks. F'każ reali mgħobbi, xogħol asinkronu għandu jiġi pprovdut billi jiġu rreġistrati webhooks fi kju, iżda għall-kompitu ta 'taħriġ aħna se nagħmlu l-implimentazzjoni mingħajr dan.

Skema ta ’xogħol

Il-protokoll ta' interazzjoni huwa deskritt fid-dettall fi Gwida għall-webhooks S3 fuq MCS. L-iskema tax-xogħol fiha l-elementi li ġejjin:

  • Servizz ta' pubblikazzjoni, li tinsab fuq in-naħa tal-ħażna S3 u tippubblika talbiet HTTP meta l-webnhook jiġi attivat.
  • Webhook li jirċievi server, li jisma' talbiet mis-servizz tal-pubblikazzjoni HTTP u jwettaq azzjonijiet xierqa. Is-server jista 'jinkiteb fi kwalunkwe lingwa; fl-eżempju tagħna, aħna se niktbu s-server f'Go.

Karatteristika speċjali tal-implimentazzjoni tal-webhooks fl-API S3 hija r-reġistrazzjoni tas-server li jirċievi webhook fuq is-servizz tal-pubblikazzjoni. B'mod partikolari, is-server li jirċievi l-webhook għandu jikkonferma s-sottoskrizzjoni għal messaġġi mis-servizz tal-pubblikazzjoni (f'implimentazzjonijiet oħra tal-webhook, normalment ma tkunx meħtieġa konferma tal-abbonament).

Għaldaqstant, is-server li jirċievi l-webhook għandu jappoġġja żewġ operazzjonijiet ewlenin:

  • tirrispondi għat-talba tas-servizz tal-pubblikazzjoni biex tikkonferma r-reġistrazzjoni,
  • jipproċessaw avvenimenti li jkunu deħlin.

Installazzjoni ta' server li jirċievi webhook

Biex tħaddem is-server li jirċievi webhook, għandek bżonn server Linux. F'dan l-artikolu, bħala eżempju, nużaw istanza virtwali li niskjeraw fuq MCS.

Ejja ninstallaw is-softwer meħtieġ u nniedu s-server li jirċievi 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) ...

Ikklonja l-folder bis-server li jirċievi l-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.

Ejja nibdew is-server:

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

Abbona għas-servizz tal-pubblikazzjoni

Tista' tirreġistra s-server li jirċievi l-webhook tiegħek permezz tal-API jew l-interface tal-web. Għal sempliċità, se nirreġistraw permezz tal-interface tal-web:

  1. Ejja mmorru fit-taqsima tal-bramel fil-kamra tal-kontroll.
  2. Mur fil-barmil li għalih se nikkonfiguraw il-webhooks u kklikkja fuq l-irkaptu:

Eżempju ta 'applikazzjoni mmexxija mill-avvenimenti bbażata fuq webhooks fil-ħażna ta' oġġetti S3 Mail.ru Cloud Solutions

Mur fit-tab tal-Webhooks u kklikkja Żid:

Eżempju ta 'applikazzjoni mmexxija mill-avvenimenti bbażata fuq webhooks fil-ħażna ta' oġġetti S3 Mail.ru Cloud Solutions
Imla l-oqsma:

Eżempju ta 'applikazzjoni mmexxija mill-avvenimenti bbażata fuq webhooks fil-ħażna ta' oġġetti S3 Mail.ru Cloud Solutions

ID — l-isem tal-webhook.

Avveniment - liema avvenimenti jittrasmettu. Aħna stabbilixxew it-trażmissjoni tal-avvenimenti kollha li jseħħu meta naħdmu ma 'fajls (żieda u tħassir).

URL — webhook li jirċievi l-indirizz tas-server.

Prefiss/suffiss tal-filtru huwa filtru li jippermettilek tiġġenera webhooks biss għal oġġetti li l-ismijiet tagħhom jaqblu ma 'ċerti regoli. Pereżempju, sabiex il-webhook jikkawża biss fajls bl-estensjoni .png, in Filtru suffiss trid tikteb "png".

Bħalissa, il-portijiet 80 u 443 biss huma appoġġjati għall-aċċess għas-server li jirċievi webhook.

Ejja ikklikkja Żid ganċ u se naraw dan li ġej:

Eżempju ta 'applikazzjoni mmexxija mill-avvenimenti bbażata fuq webhooks fil-ħażna ta' oġġetti S3 Mail.ru Cloud Solutions
Ganċ miżjud.

Is-server li jirċievi l-webhook juri fir-reġistru tiegħu l-progress tal-proċess tar-reġistrazzjoni tal-ganċ:

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

Ir-reġistrazzjoni titlesta. Fit-taqsima li jmiss, se nagħtu ħarsa aktar mill-qrib lejn l-algoritmu tal-operat tas-server li jirċievi webhook.

Deskrizzjoni tas-server li jirċievi l-webhook

Fl-eżempju tagħna, is-server huwa miktub f'Go. Ejja nħarsu lejn il-prinċipji bażiċi tat-tħaddim tagħha.

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

Ikkunsidra l-funzjonijiet ewlenin:

  • Ping() - rotta li twieġeb permezz ta 'URL/ping, l-implimentazzjoni l-aktar sempliċi ta' sonda tal-ħajja.
  • Webhook() - rotta prinċipali, URL/webhook handler:
    • tikkonferma r-reġistrazzjoni fuq is-servizz tal-pubblikazzjoni (mur fil-funzjoni SubscriptionConfirmation),
    • jipproċessa webhooks deħlin (funzjoni Gorecords).
  • Il-funzjonijiet HmacSha256 u HmacSha256hex huma implimentazzjonijiet tal-algoritmi ta' encryption HMAC-SHA256 u HMAC-SHA256 bi output bħala sensiela ta' numri eżadeċimali għall-kalkolu tal-firma.
  • main hija l-funzjoni ewlenija, tipproċessa l-parametri tal-linja tal-kmand u tirreġistra l-immaniġġjar tal-URL.

Parametri tal-linja tal-kmand aċċettati mis-server:

  • -port huwa l-port li fuqu se jisma s-server.
  • -address - indirizz IP li s-server se jisma'.
  • -script huwa programm estern li huwa msejjaħ għal kull ganċ deħlin.

Ejja nagħtu ħarsa aktar mill-qrib lejn xi wħud mill-funzjonijiet:

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

}

Din il-funzjoni tiddetermina jekk waslitx talba biex tiġi kkonfermata r-reġistrazzjoni jew webhook. Kif ġej minn dokumentazzjoni, jekk ir-reġistrazzjoni tiġi kkonfermata, l-istruttura Json li ġejja tasal fit-talba 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»
}

Din il-mistoqsija trid tingħata tweġiba:

content-type: application/json

{"signature":«ea3fce4bb15c6de4fec365d36bcebbc34ccddf54616d5ca12e1972f82b6d37af»}

Fejn il-firma tiġi kkalkulata bħala:

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

Jekk jasal webhook, l-istruttura tat-talba Post tidher bħal din:

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

Għaldaqstant, skont it-talba, trid tifhem kif tipproċessa d-dejta. Għażilt id-dħul bħala indikatur "Type":"SubscriptionConfirmation", peress li hija preżenti fit-talba għall-konferma tal-abbonament u mhix preżenti fil-webhook. Ibbażat fuq il-preżenza/assenza ta’ din l-entrata fit-talba POST, eżekuzzjoni ulterjuri tal-programm tmur jew għall-funzjoni SubscriptionConfirmation, jew fil-funzjoni GotRecords.

Aħna mhux se nikkunsidraw il-funzjoni ta' SubscriptionConfirmation fid-dettall; hija implimentata skont il-prinċipji stabbiliti f' dokumentazzjoni. Tista' tara l-kodiċi tas-sors għal din il-funzjoni fuq repożitorji git tal-proġett.

Il-funzjoni GotRecords teżamina talba deħlin u għal kull oġġett Record issejjaħ script estern (li ismu ġie mgħoddi fil-parametru -script) bil-parametri:

  • isem tal-barmil
  • ċavetta tal-oġġett
  • azzjoni:
    • kopja - jekk fit-talba oriġinali EventName = ObjectCreated | PutObject | PutObjectCopy
    • ħassar - jekk fit-talba oriġinali EventName = ObjectRemoved | Ħassar Oġġett

Għalhekk, jekk tasal ganċ b'talba Post, kif deskritt hawn fuq, u l-parametru -script=script.sh allura l-iskript se jissejjaħ kif ġej:

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

Għandu jiġi mifhum li dan is-server li jirċievi webhook mhuwiex soluzzjoni ta 'produzzjoni kompluta, iżda eżempju simplifikat ta' implimentazzjoni possibbli.

Eżempju ta' xogħol

Ejja nissinkronizzaw il-fajls mill-barmil prinċipali fl-MCS mal-barmil tal-backup fl-AWS. Il-barmil prinċipali jissejjaħ myfiles-ash, il-backup wieħed jissejjaħ myfiles-backup (il-konfigurazzjoni tal-barmil fl-AWS hija lil hinn mill-ambitu ta 'dan l-artikolu). Għaldaqstant, meta fajl jitqiegħed fil-barmil prinċipali, il-kopja tiegħu għandha tidher f'dak tal-backup, u meta jitħassar minn dak prinċipali, għandu jitħassar f'dak tal-backup.

Se naħdmu mal-bramel bl-użu tal-utilità awscli, li hija kompatibbli kemm mal-ħażna tas-sħab tal-MCS kif ukoll mal-ħażna tas-sħab tal-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) ...

Ejja kkonfiguraw l-aċċess għall-API S3 MCS:

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]:

Ejja kkonfiguraw l-aċċess għall-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]:

Ejja niċċekkjaw l-aċċessi:

Lil AWS:

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

Għal MCS, meta tħaddem il-kmand trid iżżid —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

Aċċessat.

Issa ejja niktbu skript għall-ipproċessar tal-ganċ li jkun dieħel, ejja nsejħulha 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

Ejja nibdew is-server:

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

Ejja naraw kif taħdem. Permezz Interfaċċja tal-web MCS żid il-fajl test.txt mal-barmil myfiles-ash. Ir-reġistri tal-console juru li saret talba lis-server tal-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

Ejja niċċekkja l-kontenut tal-barmil myfiles-backup f'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

Issa, permezz tal-interface tal-web, aħna se nħassru l-fajl mill-barmil myfiles-irmied.

Reġistri tas-server:

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

Kontenut tal-barmil:

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

Il-fajl jitħassar, il-problema tissolva.

Konklużjoni u ToDo

Il-kodiċi kollu użat f'dan l-artikolu huwa fir-repożitorju tiegħi. Hemm ukoll eżempji ta' skripts u eżempji ta' għadd ta' firem għar-reġistrazzjoni ta' webhooks.

Dan il-kodiċi mhu xejn aktar minn eżempju ta 'kif tista' tuża l-webhooks S3 fl-attivitajiet tiegħek. Kif għedt fil-bidu, jekk qed tippjana li tuża server bħal dan fil-produzzjoni, għandek bżonn tal-inqas tikteb mill-ġdid is-server għal xogħol asinkroniku: irreġistra webhooks li jkunu deħlin fi kju (RabbitMQ jew NATS), u minn hemm analiżi u tipproċessahom bl-applikazzjonijiet tal-ħaddiema. Inkella, meta webhooks jaslu bil-kbir, tista 'tiltaqa' ma 'nuqqas ta' riżorsi tas-server biex tlesti l-kompiti. Il-preżenza ta 'kjuwijiet tippermettilek li tqassam is-server u l-ħaddiema, kif ukoll issolvi problemi b'ħidmiet ripetuti f'każ ta' fallimenti. Huwa wkoll rakkomandabbli li tinbidel il-qtugħ għal wieħed aktar dettaljat u standardizzat.

Awguri!

Aktar qari dwar is-suġġett:

Sors: www.habr.com

Żid kumment