Mail.ru Cloud Solutions дахь S3 объектын хадгалалтын вэб дэгээ дээр суурилсан үйл явдалд суурилсан програмын жишээ.

Mail.ru Cloud Solutions дахь S3 объектын хадгалалтын вэб дэгээ дээр суурилсан үйл явдалд суурилсан програмын жишээ.
Rube Goldberg кофены машин

Үйл явдалд суурилсан архитектур нь ашигласан нөөцийн зардлын үр ашгийг нэмэгдүүлдэг, учир нь тэдгээрийг зөвхөн шаардлагатай үед нь ашигладаг. Үүнийг хэрхэн хэрэгжүүлэх талаар олон сонголт байдаг бөгөөд нэмэлт үүлэн нэгжүүдийг ажилчдын програм болгон үүсгэхгүй. Өнөөдөр би FaaS-ийн тухай биш, харин вэб дэгээний тухай ярих болно. Би объект хадгалах вэб дэгээ ашиглан үйл явдлуудыг зохицуулах зааварчилгааны жишээг үзүүлэх болно.

Объект хадгалах болон webhook-ийн талаар хэдэн үг. Объект хадгалалт нь S3 эсвэл өөр API (хэрэгжүүлэхээс хамаарч) HTTP/HTTPS-ээр дамжуулан хандах боломжтой объект хэлбэрээр үүлэн доторх аливаа өгөгдлийг хадгалах боломжийг олгодог. Вэб дэгээ нь ерөнхийдөө тусгай HTTP дуудлагууд юм. Тэдгээр нь ихэвчлэн кодыг хадгалах газар руу шилжүүлэх эсвэл блог дээр нийтэлсэн сэтгэгдэл гэх мэт үйл явдлаас болж өдөөгддөг. Үйл явдал тохиолдоход эх сайт нь HTTP хүсэлтийг webhook-д заасан URL руу илгээдэг. Үүний үр дүнд та нэг сайт дээрх үйл явдлуудыг нөгөө сайтын үйлдлийг өдөөж болно (вики). Эх сайт нь объектын хадгалалт байх тохиолдолд үйл явдал нь түүний агуулгыг өөрчлөх үүрэг гүйцэтгэдэг.

Ийм автоматжуулалтыг ашиглаж болох энгийн тохиолдлуудын жишээ:

  1. Өөр үүл хадгалах сан дахь бүх объектын хуулбарыг үүсгэх. Файл нэмэх эсвэл өөрчлөх бүрд хуулбарыг шууд үүсгэх ёстой.
  2. График файлуудын хэд хэдэн өнгөц зургийг автоматаар үүсгэх, гэрэл зураг дээр усан тэмдэг нэмэх болон бусад дүрсийг өөрчлөх.
  3. Шинэ баримт бичиг ирсэн тухай мэдэгдэл (жишээлбэл, нягтлан бодох бүртгэлийн түгээх үйлчилгээ нь тайланг үүлэн дээр байршуулж, санхүүгийн хяналт нь шинэ тайлангийн талаархи мэдэгдлийг хүлээн авч, шалгаж, дүн шинжилгээ хийдэг).
  4. Бага зэрэг төвөгтэй тохиолдлуудад жишээлбэл, Kubernetes-д хүсэлт гаргах, шаардлагатай контейнер бүхий pod үүсгэж, түүнд даалгаврын параметрүүдийг дамжуулж, боловсруулсны дараа савыг нураадаг.

Жишээ болгон, бид Mail.ru Cloud Solutions (MCS) объект хадгалах хувин дахь өөрчлөлтүүдийг вэб дэгээ ашиглан AWS объектын санд синхрончлох үед бид 1-р даалгаврын хувилбарыг хийх болно. Бодит ачаалалтай тохиолдолд вэб дэгээг дараалалд бүртгүүлэх замаар асинхрон ажлыг хангах ёстой, гэхдээ сургалтын даалгаврын хувьд бид үүнгүйгээр хэрэгжүүлэх болно.

Ажлын схем

Харилцааны протоколыг дэлгэрэнгүй тайлбарласан болно MCS дээрх S3 вэб дэгээний гарын авлага. Ажлын схем нь дараахь элементүүдийг агуулна.

  • Хэвлэлийн үйлчилгээ, энэ нь S3 хадгалах талдаа байдаг бөгөөд webnhook-г идэвхжүүлсэн үед HTTP хүсэлтийг нийтэлдэг.
  • Webhook хүлээн авагч сервер, HTTP нийтлэх үйлчилгээний хүсэлтийг сонсож, зохих үйлдлийг гүйцэтгэдэг. Серверийг ямар ч хэлээр бичиж болно, бидний жишээн дээр бид серверийг Go дээр бичих болно.

S3 API-д вэб дэгээг хэрэгжүүлэх онцгой шинж чанар нь вэб дэгээ хүлээн авагч серверийг хэвлэлийн үйлчилгээнд бүртгэх явдал юм. Ялангуяа вэб дэгээ хүлээн авагч сервер нь нийтлэх үйлчилгээний мессежийн захиалгыг баталгаажуулах ёстой (бусад вэб дэгээний хэрэгжилтэд захиалгын баталгаажуулалт ихэвчлэн шаардлагагүй байдаг).

Үүний дагуу вэб дэгээ хүлээн авагч сервер нь хоёр үндсэн үйлдлийг дэмжих ёстой:

  • бүртгэлийг баталгаажуулах хэвлэлийн үйлчилгээний хүсэлтэд хариу өгөх,
  • ирж буй үйл явдлыг боловсруулах.

Webhook хүлээн авагч серверийг суулгаж байна

Webhook хүлээн авагч серверийг ажиллуулахын тулд танд Линукс сервер хэрэгтэй. Энэ нийтлэлд, жишээ болгон бид 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) ...

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.

Серверээ эхлүүлцгээе:

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. Бид вэб дэгээг тохируулах хувин руу очоод араа дээр дарна уу:

Mail.ru Cloud Solutions дахь S3 объектын хадгалалтын вэб дэгээ дээр суурилсан үйл явдалд суурилсан програмын жишээ.

Webhooks таб руу очоод Нэмэх дээр дарна уу:

Mail.ru Cloud Solutions дахь S3 объектын хадгалалтын вэб дэгээ дээр суурилсан үйл явдалд суурилсан програмын жишээ.
Талбаруудыг бөглөнө үү:

Mail.ru Cloud Solutions дахь S3 объектын хадгалалтын вэб дэгээ дээр суурилсан үйл явдалд суурилсан програмын жишээ.

ID — вэб дэгээний нэр.

Үйл явдал - ямар үйл явдлыг дамжуулах. Бид файлуудтай ажиллахад (нэмэх, устгах) тохиолддог бүх үйл явдлын дамжуулалтыг тохируулсан.

URL — вэб дэгээ хүлээн авах серверийн хаяг.

Шүүлтүүрийн угтвар/дагавар нь зөвхөн нэр нь тодорхой дүрмүүдтэй таарч байгаа объектуудад веб дэгээ үүсгэх боломжийг олгодог шүүлтүүр юм. Жишээлбэл, вэб дэгээ зөвхөн .png өргөтгөлтэй файлуудыг идэвхжүүлэхийн тулд Шүүлтүүрийн дагавар Та "png" гэж бичих хэрэгтэй.

Одоогоор зөвхөн 80 ба 443 портууд вэб дэгээ хүлээн авагч серверт хандах боломжтой.

Дарцгаая Дэгээ нэмнэ үү мөн бид дараахь зүйлийг харах болно.

Mail.ru Cloud Solutions дахь S3 объектын хадгалалтын вэб дэгээ дээр суурилсан үйл явдалд суурилсан програмын жишээ.
Дэгээ нэмсэн.

Webhook хүлээн авагч сервер нь дэгээ бүртгэлийн үйл явцын явцыг бүртгэлдээ харуулдаг.

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

Бүртгэл дууссан. Дараагийн хэсэгт бид вэб дэгээ хүлээн авагч серверийн ажиллах алгоритмыг нарийвчлан авч үзэх болно.

Webhook хүлээн авагч серверийн тодорхойлолт

Бидний жишээн дээр сервер нь 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 зохицуулагч:
    • хэвлэлийн үйлчилгээнд бүртгүүлсэнийг баталгаажуулна (Захиалга баталгаажуулах функц руу очно уу),
    • ирж буй вэб дэгээг боловсруулдаг (Gorecords функц).
  • HmacSha256 ба HmacSha256hex функцууд нь гарын үсгийг тооцоолоход зориулсан 256-тын тоонуудын цуваа хэлбэрээр гаралт бүхий HMAC-SHA256 ба HMAC-SHA16 шифрлэлтийн алгоритмуудын хэрэгжилт юм.
  • main нь үндсэн функц бөгөөд тушаалын мөрийн параметрүүдийг боловсруулж, URL зохицуулагчийг бүртгэдэг.

Серверээс хүлээн зөвшөөрсөн командын мөрийн параметрүүд:

  • -порт нь серверийн сонсох порт юм.
  • -хаяг - серверийн сонсох IP хаяг.
  • -script нь ирж буй дэгээ болгонд дуудагддаг гадаад програм юм.

Зарим функцийг нарийвчлан авч үзье:

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

Хэрэв webhook ирвэл шуудангийн хүсэлтийн бүтэц дараах байдалтай байна.

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", учир нь энэ нь захиалгыг баталгаажуулах хүсэлтэд байгаа бөгөөд вэб дэгээнд байхгүй. POST хүсэлтэд энэ оруулга байгаа/байгааг үндэслэн програмын цаашдын гүйцэтгэл нь аль нэг функц руу шилждэг. SubscriptionConfirmation, эсвэл функц руу оруулна уу GotRecords.

Бид Захиалгыг баталгаажуулах функцийг нарийвчлан авч үзэхгүй бөгөөд энэ нь дараах зарчмуудын дагуу хэрэгждэг. баримт бичиг. Та энэ функцийн эх кодыг эндээс үзэх боломжтой төслийн git репозиторууд.

GotRecords функц нь ирж буй хүсэлтийг задлан шинжилж, Бичлэгийн объект бүрийн хувьд гадаад скриптийг (түүний нэрийг -script параметрт дамжуулсан) параметрүүдээр дууддаг.

  • хувин нэр
  • объектын түлхүүр
  • үйлдэл:
    • хуулбар - хэрэв анхны хүсэлтэд EventName = ObjectCreated | PutObject | PutObjectCopy
    • устгах - хэрэв анхны хүсэлтэд EventName = ObjectRemoved | Объектыг устгах

Тиймээс, хэрэв тайлбарласны дагуу дэгээ шуудангийн хүсэлтээр ирвэл их, мөн -script=script.sh параметрийг сонговол скрипт дараах байдлаар дуудагдана:

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

Энэхүү вэб дэгээ хүлээн авагч сервер нь үйлдвэрлэлийн бүрэн шийдэл биш, харин хэрэгжүүлэх боломжийн хялбаршуулсан жишээ гэдгийг ойлгох хэрэгтэй.

Ажлын жишээ

MCS-ийн үндсэн хувингаас AWS дахь нөөц хувин руу файлуудыг синхрончилцгооё. Үндсэн хувиныг myfiles-ash гэж нэрлэдэг, нөөцлөлтийг myfiles-backup гэж нэрлэдэг (AWS дахь хувингийн тохиргоо нь энэ нийтлэлийн хамрах хүрээнээс гадуур). Үүний дагуу файлыг үндсэн хувин дээр байрлуулах үед түүний хуулбар нь нөөц хэсэгт гарч ирэх бөгөөд үндсэн хувингаас устгагдсан тохиолдолд нөөцлөлтөд устгагдах ёстой.

Бид MCS үүл хадгалах сан болон AWS үүл хадгалах сангийн аль алинд нь тохирох awscli хэрэгслийг ашиглан хувинтай ажиллах болно.

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-нөөц хувингийн агуулгыг шалгацгаая:

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-үнсний хувингаас устгах болно.

Серверийн бүртгэл:

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

Файл устгагдсан, асуудал шийдэгдсэн.

Дүгнэлт ба хийх ажил

Энэ нийтлэлд ашигласан бүх код нь миний хадгалах санд. Мөн вэб дэгээг бүртгэх скрипт, гарын үсгийг тоолох жишээнүүд байдаг.

Энэ код нь S3 вэб дэгээг үйл ажиллагаандаа хэрхэн ашиглаж болох жишээнээс өөр зүйл биш юм. Эхэндээ хэлсэнчлэн, хэрэв та ийм серверийг үйлдвэрлэлд ашиглахаар төлөвлөж байгаа бол ядаж асинхрон ажилд зориулж серверээ дахин бичих хэрэгтэй: орж ирж буй вэб дэгээг дараалалд (RabbitMQ эсвэл NATS) бүртгэж, тэндээс задлан шинжилж боловсруулна. ажилчдын програмуудтай. Эс бөгөөс вэб дэгээнүүд олноор ирэхэд даалгавраа дуусгахад серверийн нөөц дутагдаж болзошгүй. Дараалал байгаа нь сервер болон ажилчдыг хуваарилах, бүтэлгүйтсэн тохиолдолд даалгавруудыг давтах асуудлыг шийдвэрлэх боломжийг олгодог. Мөн мод бэлтгэлийг илүү нарийвчилсан, стандартчилсан болгон өөрчлөх нь зүйтэй.

Амжилт хүсье!

Сэдвийн талаар дэлгэрэнгүй унших:

Эх сурвалж: www.habr.com

сэтгэгдэл нэмэх