Piemērs uz notikumu balstītai lietojumprogrammai, kuras pamatā ir tīmekļa aizķeres S3 objektu krātuvē Mail.ru Cloud Solutions

Piemērs uz notikumu balstītai lietojumprogrammai, kuras pamatā ir tīmekļa aizķeres S3 objektu krātuvē Mail.ru Cloud Solutions
Rube Goldberg kafijas automāts

Notikumu vadÄ«ta arhitektÅ«ra palielina izmantoto resursu izmaksu efektivitāti, jo tie tiek izmantoti tikai tad, kad tie ir nepiecieÅ”ami. Ir daudz iespēju, kā to ieviest un neveidot papildu mākoņa entÄ«tijas kā darbinieku lietojumprogrammas. Un Å”odien es runāŔu nevis par FaaS, bet par webhookiem. Es parādÄ«Å”u apmācÄ«bu piemēru notikumu apstrādei, izmantojot objektu krātuves tÄ«mekļa aizÄ·eres.

Daži vārdi par objektu glabāŔanu un tÄ«mekļa aizÄ·erēm. Objektu krātuve ļauj saglabāt jebkādus datus mākonÄ« objektu veidā, kuriem var piekļūt, izmantojot S3 vai citu API (atkarÄ«bā no ievieÅ”anas), izmantojot HTTP/HTTPS. TÄ«mekļa aizÄ·eres parasti ir pielāgoti HTTP atzvani. Parasti tos aktivizē notikums, piemēram, koda nosÅ«tÄ«Å”ana uz krātuvi vai komentārs, kas tiek publicēts emuārā. Kad notiek notikums, sākotnējā vietne nosÅ«ta HTTP pieprasÄ«jumu uz tÄ«mekļa aizÄ·erei norādÄ«to URL. Rezultātā varat likt notikumiem vienā vietnē aktivizēt darbÄ«bas citā (Wiki). GadÄ«jumā, ja avota vietne ir objekta krātuve, notikumi darbojas kā izmaiņas tās saturā.

VienkārÅ”u gadÄ«jumu piemēri, kad var izmantot Ŕādu automatizāciju:

  1. Visu objektu kopiju izveide citā mākoņkrātuvē. Ikreiz, kad tiek pievienoti vai mainīti faili, ir jāizveido kopijas.
  2. Automātiska grafisko failu sÄ«ktēlu sērijas izveide, Å«denszÄ«mju pievienoÅ”ana fotogrāfijām un citas attēlu modifikācijas.
  3. Paziņojums par jaunu dokumentu ieraÅ”anos (piemēram, izplatÄ«ts grāmatvedÄ«bas pakalpojums augÅ”upielādē pārskatus mākonÄ«, un finanÅ”u monitorings saņem paziņojumus par jauniem pārskatiem, pārbauda un analizē tos).
  4. Nedaudz sarežģītāki gadÄ«jumi ietver, piemēram, pieprasÄ«juma Ä£enerÄ“Å”anu Kubernetes, kas izveido podiņu ar nepiecieÅ”amajiem konteineriem, nodod tam uzdevuma parametrus un pēc apstrādes sakļauj konteineru.

Kā piemēru mēs izveidosim 1. uzdevuma variantu, kad izmaiņas Mail.ru Cloud Solutions (MCS) objektu krātuves segmentā tiek sinhronizētas AWS objektu krātuvē, izmantojot tÄ«mekļa aizÄ·eres. Reālā ielādētā gadÄ«jumā asinhronais darbs bÅ«tu jānodroÅ”ina, reÄ£istrējot webhookus rindā, bet apmācÄ«bas uzdevumam izpildi veiksim bez tā.

Darba shēma

MijiedarbÄ«bas protokols ir detalizēti aprakstÄ«ts Rokasgrāmata S3 tÄ«mekļa aizÄ·erēm MCS. Darba shēma satur Ŕādus elementus:

  • IzdevniecÄ«bas pakalpojums, kas atrodas S3 krātuves pusē un publicē HTTP pieprasÄ«jumus, kad tiek aktivizēta tÄ«mekļa aizÄ·ere.
  • Web aizÄ·eres saņemÅ”anas serveris, kas noklausās HTTP publicÄ“Å”anas servisa pieprasÄ«jumus un veic atbilstoÅ”as ā€‹ā€‹darbÄ«bas. Serveri var rakstÄ«t jebkurā valodā; mÅ«su piemērā mēs rakstÄ«sim serveri Go.

ÄŖpaÅ”a tÄ«mekļa aizÄ·eru ievieÅ”anas iezÄ«me S3 API ir tÄ«mekļa aizÄ·eres saņemÅ”anas servera reÄ£istrācija publicÄ“Å”anas pakalpojumā. Konkrēti, tÄ«mekļa aizÄ·eres saņemÅ”anas serverim ir jāapstiprina abonÄ“Å”ana uz ziņojumiem no publicÄ“Å”anas pakalpojuma (citās tÄ«mekļa aizÄ·eres implementācijās abonÄ“Å”anas apstiprinājums parasti nav nepiecieÅ”ams).

AttiecÄ«gi tÄ«mekļa aizÄ·eres saņemÅ”anas serverim ir jāatbalsta divas galvenās darbÄ«bas:

  • atbildēt uz izdevējdarbÄ«bas dienesta pieprasÄ«jumu apstiprināt reÄ£istrāciju,
  • apstrādāt ienākoÅ”os notikumus.

TÄ«mekļa aizÄ·eres saņemÅ”anas servera instalÄ“Å”ana

Lai palaistu tÄ«mekļa aizÄ·eres saņemÅ”anas serveri, ir nepiecieÅ”ams Linux serveris. Å ajā rakstā kā piemēru mēs izmantojam virtuālu gadÄ«jumu, ko izvietojam MCS.

Instalēsim nepiecieÅ”amo programmatÅ«ru un palaidÄ«sim webhook saņemÅ”anas serveri.

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

Klonējiet mapi ar tÄ«mekļa aizÄ·eres saņemÅ”anas serveri:

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.

Sāksim serveri:

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

Abonējiet izdevējdarbības pakalpojumu

Varat reÄ£istrēt savu tÄ«mekļa aizÄ·eres saņemÅ”anas serveri, izmantojot API vai tÄ«mekļa saskarni. VienkārŔības labad mēs reÄ£istrēsimies, izmantojot tÄ«mekļa saskarni:

  1. Dosimies uz spaiņu sadaļu vadības telpā.
  2. Dodieties uz spaini, kuram mēs konfigurēsim tÄ«mekļa aizÄ·eres, un noklikŔķiniet uz zobrata:

Piemērs uz notikumu balstītai lietojumprogrammai, kuras pamatā ir tīmekļa aizķeres S3 objektu krātuvē Mail.ru Cloud Solutions

Dodieties uz cilni Webhooks un noklikŔķiniet uz Pievienot:

Piemērs uz notikumu balstītai lietojumprogrammai, kuras pamatā ir tīmekļa aizķeres S3 objektu krātuvē Mail.ru Cloud Solutions
Aizpildiet laukus:

Piemērs uz notikumu balstītai lietojumprogrammai, kuras pamatā ir tīmekļa aizķeres S3 objektu krātuvē Mail.ru Cloud Solutions

ID ā€” tÄ«mekļa aizÄ·eres nosaukums.

Notikums ā€” kādus notikumus pārraidÄ«t. Mēs esam iestatÄ«juÅ”i visu notikumu pārraidi, kas rodas, strādājot ar failiem (pievienojot un dzÄ“Å”ot).

URL ā€” tÄ«mekļa aizÄ·eres saņemÅ”anas servera adrese.

Filtra prefikss/sufikss ir filtrs, kas ļauj Ä£enerēt tÄ«mekļa aizÄ·eres tikai objektiem, kuru nosaukumi atbilst noteiktiem noteikumiem. Piemēram, lai tÄ«mekļa aizÄ·ere aktivizētu tikai failus ar paplaÅ”inājumu .png, in Filtra sufikss jums jāraksta "png".

PaÅ”laik, lai piekļūtu tÄ«mekļa aizÄ·eres saņemÅ”anas serverim, tiek atbalstÄ«ti tikai porti 80 un 443.

NoklikŔķināsim Pievienojiet āķi un mēs redzēsim sekojoÅ”o:

Piemērs uz notikumu balstītai lietojumprogrammai, kuras pamatā ir tīmekļa aizķeres S3 objektu krātuvē Mail.ru Cloud Solutions
Āķis piebilda.

TÄ«mekļa aizÄ·eres saņemÅ”anas serveris savos žurnālos parāda āķa reÄ£istrācijas procesa norisi:

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

ReÄ£istrācija ir pabeigta. Nākamajā sadaļā mēs tuvāk aplÅ«kosim tÄ«mekļa aizÄ·eres uztverÅ”anas servera darbÄ«bas algoritmu.

TÄ«mekļa aizÄ·eres saņemÅ”anas servera apraksts

Mūsu piemērā serveris ir rakstīts Go. Apskatīsim tā darbības pamatprincipus.

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

Apsveriet galvenās funkcijas:

  • Ping() - marÅ”ruts, kas atbild, izmantojot URL/ping, vienkārŔākā dzÄ«vÄ«guma zondes ievieÅ”ana.
  • Webhook() ā€” galvenais marÅ”ruts, URL/tÄ«mekļa aizÄ·eres apstrādātājs:
    • apstiprina reÄ£istrāciju izdevniecÄ«bas pakalpojumā (dodieties uz abonÄ“Å”anas apstiprinājuma funkciju),
    • apstrādā ienākoÅ”os tÄ«mekļa aizÄ·eres (funkcija Gorecords).
  • Funkcijas HmacSha256 un HmacSha256hex ir HMAC-SHA256 un HMAC-SHA256 Å”ifrÄ“Å”anas algoritmu realizācijas ar izvadi kā heksadecimālo skaitļu virkni paraksta aprēķināŔanai.
  • galvenais ir galvenā funkcija, apstrādā komandrindas parametrus un reÄ£istrē URL apstrādātājus.

Komandrindas parametri, ko pieņem serveris:

  • -ports ir ports, kurā serveris klausās.
  • -adrese - IP adrese, kuru serveris klausās.
  • -script ir ārēja programma, kas tiek izsaukta katram ienākoÅ”ajam āķim.

Sīkāk apskatīsim dažas funkcijas:

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

}

Å Ä« funkcija nosaka, vai ir saņemts pieprasÄ«jums apstiprināt reÄ£istrāciju vai tÄ«mekļa aizÄ·ere. Kā izriet no dokumentācija, ja reÄ£istrācija tiek apstiprināta, pasta pieprasÄ«jumā tiek saņemta Ŕāda Json struktÅ«ra:

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

Uz Ŕo jautājumu ir jāatbild:

content-type: application/json

{"signature":Ā«ea3fce4bb15c6de4fec365d36bcebbc34ccddf54616d5ca12e1972f82b6d37afĀ»}

Ja parakstu aprēķina Ŕādi:

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

Ja tiek saņemts tÄ«mekļa aizÄ·ere, ziņojuma pieprasÄ«juma struktÅ«ra izskatās Ŕādi:

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

AttiecÄ«gi, atkarÄ«bā no pieprasÄ«juma, jums ir jāsaprot, kā apstrādāt datus. Ierakstu izvēlējos kā rādÄ«tāju "Type":"SubscriptionConfirmation", jo tas ir iekļauts abonementa apstiprinājuma pieprasÄ«jumā un nav pieejams tÄ«mekļa aizÄ·erē. Pamatojoties uz Ŕī ieraksta esamÄ«bu/neesamÄ«bu POST pieprasÄ«jumā, turpmākā programmas izpilde notiek vai nu uz funkciju SubscriptionConfirmation, vai funkcijā GotRecords.

Mēs detalizēti neapskatīsim abonementa apstiprinājuma funkciju, tā tiek īstenota saskaņā ar principiem, kas izklāstīti punktā dokumentācija. Šīs funkcijas avota kodu varat apskatīt vietnē projektu git krātuves.

Funkcija GotRecords parsē ienākoÅ”o pieprasÄ«jumu un katram ieraksta objektam izsauc ārēju skriptu (kura nosaukums tika nodots parametrā -script) ar parametriem:

  • kausa nosaukums
  • objekta atslēga
  • darbÄ«ba:
    • kopēt ā€” ja sākotnējā pieprasÄ«jumā EventName = ObjectCreated | PutObject | PutObjectCopy
    • dzēst ā€” ja sākotnējā pieprasÄ«jumā EventName = ObjectRemoved | DeleteObject

Tādējādi, ja āķis pienāk ar pasta pieprasÄ«jumu, kā aprakstÄ«ts iepriekÅ”, un parametru -script=script.sh, tad skripts tiks izsaukts Ŕādi:

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

Jāsaprot, ka Å”is webhook uztverÅ”anas serveris nav pilnÄ«gs ražoÅ”anas risinājums, bet gan vienkārÅ”ots iespējamās ievieÅ”anas piemērs.

Darba piemērs

Sinhronizēsim failus no galvenā MCS kopas ar AWS rezerves kopu. Galvenā kopa tiek saukta par myfiles-ash, rezerves kopiju sauc par myfiles-backup (kopas konfigurācija AWS ir ārpus Ŕī raksta darbÄ«bas jomas). AttiecÄ«gi, ievietojot failu galvenajā kausā, tā kopijai jāparādās rezerves kopijā, un, dzÄ“Å”ot no galvenā, tā ir jāizdzÄ“Å” rezerves kopijā.

Mēs strādāsim ar spaiņiem, izmantojot awscli utilītu, kas ir saderīga gan ar MCS mākoņkrātuvi, gan AWS mākoņkrātuvi.

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

Konfigurēsim piekļuvi 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]:

Konfigurēsim piekļuvi 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]:

Pārbaudīsim pieejas:

Uz AWS:

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

MCS, palaižot komandu, jāpievieno ā€”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

Piekļuve.

Tagad rakstīsim skriptu ienākoŔā āķa apstrādei, sauksim to par 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

Sāksim serveri:

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

Apskatīsim, kā tas darbojas. Caur MCS tīmekļa saskarne pievienojiet failu test.txt mapei myfiles-ash. Konsoles žurnāli parāda, ka tīmekļa aizķeres serverim tika veikts pieprasījums:

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

Pārbaudīsim AWS manufailu dublējuma kausa saturu:

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

Tagad, izmantojot tīmekļa saskarni, mēs izdzēsīsim failu no myfiles-ash kausa.

Servera žurnāli:

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

Kausa saturs:

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

Fails tiek izdzēsts, problēma ir atrisināta.

Secinājums un uzdevumi

Viss Å”ajā rakstā izmantotais kods ir manā repozitorijā. Ir arÄ« skriptu piemēri un parakstu skaitÄ«Å”anas piemēri tÄ«mekļa aizÄ·eru reÄ£istrÄ“Å”anai.

Å is kods ir nekas vairāk kā piemērs tam, kā savās darbÄ«bās varat izmantot S3 tÄ«mekļa aizÄ·eres. Kā jau teicu sākumā, ja plānojat izmantot Ŕādu serveri ražoÅ”anā, jums ir vismaz jāpārraksta serveris asinhronam darbam: jāreÄ£istrē ienākoÅ”ie tÄ«mekļa aizÄ·eri rindā (RabbitMQ vai NATS), un no turienes tie parsēti un apstrādāti. ar darbinieku pieteikumiem. Pretējā gadÄ«jumā, kad tÄ«mekļa aizÄ·eres nonāk masveidā, var rasties servera resursu trÅ«kums uzdevumu veikÅ”anai. Rindu klātbÅ«tne ļauj izplatÄ«t serveri un darbiniekus, kā arÄ« atrisināt problēmas ar uzdevumu atkārtoÅ”anu kļūmju gadÄ«jumā. Ieteicams arÄ« mainÄ«t reÄ£istrÄ“Å”anu uz detalizētāku un standartizētāku.

Veiksmi!

Vairāk lasÄ«Å”anas par tēmu:

Avots: www.habr.com

Pievieno komentāru