Enghraifft o raglen sy'n cael ei gyrru gan ddigwyddiad yn seiliedig ar webhooks yn storfa gwrthrychau S3 Mail.ru Cloud Solutions

Enghraifft o raglen sy'n cael ei gyrru gan ddigwyddiad yn seiliedig ar webhooks yn storfa gwrthrychau S3 Mail.ru Cloud Solutions
Peiriant coffi Rube Goldberg

Mae pensaernïaeth a yrrir gan ddigwyddiadau yn cynyddu cost-effeithiolrwydd yr adnoddau a ddefnyddir oherwydd eu bod yn cael eu defnyddio dim ond pan fydd eu hangen. Mae yna lawer o opsiynau ar sut i weithredu hyn a pheidio â chreu endidau cwmwl ychwanegol fel cymwysiadau gweithwyr. A heddiw ni soniaf am FaaS, ond am wehooks. Byddaf yn dangos enghraifft diwtorial o drin digwyddiadau gan ddefnyddio bachau gwe storio gwrthrychau.

Ychydig eiriau am storio gwrthrychau a bachau gwe. Mae storio gwrthrychau yn caniatáu ichi storio unrhyw ddata yn y cwmwl ar ffurf gwrthrychau, y gellir eu cyrchu trwy S3 neu API arall (yn dibynnu ar weithredu) trwy HTTP / HTTPS. Yn gyffredinol mae bachau gwe yn alwadau HTTP arferol. Maent fel arfer yn cael eu sbarduno gan ddigwyddiad, megis cod yn cael ei wthio i gadwrfa neu sylw'n cael ei bostio ar flog. Pan fydd digwyddiad yn digwydd, mae'r safle tarddiad yn anfon cais HTTP i'r URL a nodir ar gyfer y bachyn gwe. O ganlyniad, gallwch wneud i ddigwyddiadau ar un safle sbarduno camau gweithredu ar un arall (wiki). Mewn achos lle mae'r safle ffynhonnell yn storfa gwrthrych, mae digwyddiadau'n gweithredu fel newidiadau i'w gynnwys.

Enghreifftiau o achosion syml pan ellir defnyddio awtomeiddio o'r fath:

  1. Creu copïau o'r holl wrthrychau mewn storfa cwmwl arall. Rhaid creu copïau ar y hedfan pryd bynnag y caiff ffeiliau eu hychwanegu neu eu newid.
  2. Creu cyfres o fân-luniau o ffeiliau graffeg yn awtomatig, ychwanegu dyfrnodau at ffotograffau, ac addasiadau delwedd eraill.
  3. Hysbysiad ynghylch dyfodiad dogfennau newydd (er enghraifft, mae gwasanaeth cyfrifo dosranedig yn uwchlwytho adroddiadau i'r cwmwl, ac mae monitro ariannol yn derbyn hysbysiadau am adroddiadau newydd, yn eu gwirio ac yn eu dadansoddi).
  4. Mae achosion ychydig yn fwy cymhleth yn cynnwys, er enghraifft, cynhyrchu cais i Kubernetes, sy'n creu pod gyda'r cynwysyddion angenrheidiol, yn trosglwyddo paramedrau tasg iddo, ac ar ôl prosesu yn cwympo'r cynhwysydd.

Er enghraifft, byddwn yn gwneud amrywiad o dasg 1, pan fydd newidiadau yn y bwced storio gwrthrych Mail.ru Cloud Solutions (MCS) yn cael eu cydamseru yn storfa gwrthrychau AWS gan ddefnyddio webhocks. Mewn achos go iawn wedi'i lwytho, dylid darparu gwaith anghydamserol trwy gofrestru bachau gwe mewn ciw, ond ar gyfer y dasg hyfforddi byddwn yn gweithredu heb hyn.

Y cynllun gwaith

Disgrifir y protocol rhyngweithio yn fanwl yn Canllaw i fachau gwe S3 ar MCS. Mae'r cynllun gwaith yn cynnwys yr elfennau canlynol:

  • Gwasanaeth cyhoeddi, sydd ar ochr storio S3 ac yn cyhoeddi ceisiadau HTTP pan fydd y webnhook yn cael ei sbarduno.
  • Gweinydd derbyn bachyn gwe, sy'n gwrando ar geisiadau gwasanaeth cyhoeddi HTTP ac yn perfformio camau priodol. Gellir ysgrifennu'r gweinydd mewn unrhyw iaith; yn ein hesiampl, byddwn yn ysgrifennu'r gweinydd yn Go.

Nodwedd arbennig o weithredu bachau gwe yn yr API S3 yw cofrestru'r gweinydd derbyn bachau gwe ar y gwasanaeth cyhoeddi. Yn benodol, mae'n rhaid i'r gweinydd derbyn bachau gwe gadarnhau'r tanysgrifiad i negeseuon o'r gwasanaeth cyhoeddi (mewn gweithrediadau bachau gwe eraill, nid oes angen cadarnhad o danysgrifiad fel arfer).

Yn unol â hynny, rhaid i'r gweinydd derbyn bachau gwe gefnogi dwy brif weithred:

  • ymateb i gais y gwasanaeth cyhoeddi i gadarnhau cofrestriad,
  • prosesu digwyddiadau sy'n dod i mewn.

Gosod gweinydd derbyn bachau gwe

I redeg y gweinydd derbyn bachau gwe, mae angen gweinydd Linux arnoch. Yn yr erthygl hon, fel enghraifft, rydym yn defnyddio enghraifft rithwir yr ydym yn ei defnyddio ar MCS.

Gadewch i ni osod y meddalwedd angenrheidiol a lansio'r gweinydd derbyn bachau gwe.

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

Cloniwch y ffolder gyda'r gweinydd derbyn bachau gwe:

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.

Gadewch i ni ddechrau'r gweinydd:

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

Tanysgrifio i wasanaeth cyhoeddi

Gallwch gofrestru eich gweinydd derbyn bachau gwe trwy'r API neu'r rhyngwyneb gwe. Er mwyn symlrwydd, byddwn yn cofrestru trwy'r rhyngwyneb gwe:

  1. Gadewch i ni fynd i'r adran bwcedi yn yr ystafell reoli.
  2. Ewch i'r bwced y byddwn yn ffurfweddu bachau gwe ar ei gyfer a chliciwch ar y gêr:

Enghraifft o raglen sy'n cael ei gyrru gan ddigwyddiad yn seiliedig ar webhooks yn storfa gwrthrychau S3 Mail.ru Cloud Solutions

Ewch i'r tab Webhooks a chliciwch Ychwanegu:

Enghraifft o raglen sy'n cael ei gyrru gan ddigwyddiad yn seiliedig ar webhooks yn storfa gwrthrychau S3 Mail.ru Cloud Solutions
Llenwch y meysydd:

Enghraifft o raglen sy'n cael ei gyrru gan ddigwyddiad yn seiliedig ar webhooks yn storfa gwrthrychau S3 Mail.ru Cloud Solutions

ID — enw'r bachyn gwe.

Digwyddiad - pa ddigwyddiadau i'w trosglwyddo. Rydym wedi gosod trosglwyddiad yr holl ddigwyddiadau sy'n digwydd wrth weithio gyda ffeiliau (ychwanegu a dileu).

URL - bachyn gwe sy'n derbyn cyfeiriad gweinydd.

Hidlydd yw rhagddodiad/ôl-ddodiad hidlo sy'n eich galluogi i gynhyrchu bachau gwe yn unig ar gyfer gwrthrychau y mae eu henwau yn cyd-fynd â rheolau penodol. Er enghraifft, er mwyn i'r bachyn gwe sbarduno ffeiliau yn unig gyda'r estyniad .png, mewn Ôl-ddodiad hidlo mae angen i chi ysgrifennu "png".

Ar hyn o bryd, dim ond porthladdoedd 80 a 443 sy'n cael eu cefnogi ar gyfer cyrchu'r gweinydd derbyn bachau gwe.

Gadewch i ni glicio Ychwanegu bachyn a byddwn yn gweld y canlynol:

Enghraifft o raglen sy'n cael ei gyrru gan ddigwyddiad yn seiliedig ar webhooks yn storfa gwrthrychau S3 Mail.ru Cloud Solutions
Ychwanegodd Hook.

Mae'r gweinydd derbyn bachyn gwe yn dangos yn ei logiau gynnydd y broses gofrestru bachyn:

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

Cwblheir y cofrestriad. Yn yr adran nesaf, byddwn yn edrych yn agosach ar algorithm gweithredu'r gweinydd derbyn gwebhook.

Disgrifiad o'r gweinydd derbyn bachau gwe

Yn ein hesiampl ni, mae'r gweinydd wedi'i ysgrifennu yn Go. Edrychwn ar egwyddorion sylfaenol ei weithrediad.

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

Ystyriwch y prif swyddogaethau:

  • Ping() - llwybr sy'n ymateb trwy URL/ping, y dull symlaf o weithredu chwiliedydd bywiogrwydd.
  • Webhook() - prif lwybr, URL/triniwr bachyn gwe:
    • yn cadarnhau cofrestriad ar y gwasanaeth cyhoeddi (ewch i'r swyddogaeth Tanysgrifiad Cadarnhau),
    • prosesau bachau gwe sy'n dod i mewn (swyddogaeth Gorecords).
  • Mae swyddogaethau HmacSha256 a HmacSha256hex yn weithrediadau o'r algorithmau amgryptio HMAC-SHA256 a HMAC-SHA256 gydag allbwn fel cyfres o rifau hecsadegol ar gyfer cyfrifo'r llofnod.
  • prif yw'r prif swyddogaeth, prosesau paramedrau llinell orchymyn a chofrestru trinwyr URL.

Paramedrau llinell orchymyn a dderbynnir gan y gweinydd:

  • -port yw'r porthladd y bydd y gweinydd yn gwrando arno.
  • -address - Cyfeiriad IP y bydd y gweinydd yn gwrando arno.
  • -script yn rhaglen allanol a elwir ar gyfer pob bachyn sy'n dod i mewn.

Gadewch i ni edrych yn agosach ar rai o'r swyddogaethau:

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

}

Mae'r swyddogaeth hon yn pennu a yw cais i gadarnhau cofrestriad neu we bachyn wedi cyrraedd. Fel y canlyn o dogfennaeth, os cadarnheir cofrestriad, derbynnir y strwythur Json canlynol yn y cais 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»
}

Mae angen ateb yr ymholiad hwn:

content-type: application/json

{"signature":«ea3fce4bb15c6de4fec365d36bcebbc34ccddf54616d5ca12e1972f82b6d37af»}

Lle cyfrifir y llofnod fel:

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

Os bydd bachyn gwe yn cyrraedd, mae strwythur y cais Post yn edrych fel hyn:

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

Yn unol â hynny, yn dibynnu ar y cais, mae angen i chi ddeall sut i brosesu'r data. Dewisais y cofnod fel dangosydd "Type":"SubscriptionConfirmation", gan ei fod yn bresennol yn y cais cadarnhau tanysgrifiad ac nid yw'n bresennol yn y bachyn gwe. Yn seiliedig ar bresenoldeb/absenoldeb y cofnod hwn yn y cais POST, mae cyflawni'r rhaglen ymhellach yn mynd naill ai i'r swyddogaeth SubscriptionConfirmation, neu i mewn i'r swyddogaeth GotRecords.

Ni fyddwn yn ystyried swyddogaeth Cadarnhau Tanysgrifio yn fanwl; caiff ei gweithredu yn unol â’r egwyddorion a nodir yn dogfennaeth. Gallwch weld y cod ffynhonnell ar gyfer y swyddogaeth hon yn storfeydd git prosiect.

Mae swyddogaeth GotRecords yn dosrannu cais sy'n dod i mewn ac ar gyfer pob gwrthrych Cofnod mae'n galw sgript allanol (y pasiwyd ei henw yn y paramedr -script) gyda'r paramedrau:

  • enw bwced
  • allwedd gwrthrych
  • gweithredu:
    • copy - os yn y cais gwreiddiol EventName = ObjectCreated | PutObject | PutObjectCopy
    • delete - os yn y cais gwreiddiol EventName = ObjectRemoved | Dileu Gwrthrych

Felly, os bydd bachyn yn cyrraedd gyda chais Post, fel y disgrifir uchod, a'r paramedr -script=script.sh yna bydd y sgript yn cael ei galw fel a ganlyn:

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

Dylid deall nad yw'r gweinydd derbyn bach hwn yn ateb cynhyrchu cyflawn, ond yn enghraifft symlach o weithrediad posibl.

Enghraifft o waith

Gadewch i ni gydamseru'r ffeiliau o'r prif fwced yn MCS i'r bwced wrth gefn yn AWS. Gelwir y prif fwced yn myfiles-ash, a gelwir yr un wrth gefn yn myfiles-backup (mae ffurfweddiad bwced yn AWS y tu hwnt i gwmpas yr erthygl hon). Yn unol â hynny, pan osodir ffeil yn y prif fwced, dylai ei gopi ymddangos yn yr un wrth gefn, a phan gaiff ei ddileu o'r prif un, dylid ei ddileu yn yr un wrth gefn.

Byddwn yn gweithio gyda bwcedi gan ddefnyddio'r cyfleustodau awscli, sy'n gydnaws â storfa cwmwl MCS a storfa cwmwl 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) ...

Gadewch i ni ffurfweddu mynediad i'r 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]:

Gadewch i ni ffurfweddu mynediad i API AWS S3:

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

Gadewch i ni wirio'r mynediadau:

I AWS:

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

Ar gyfer MCS, wrth redeg y gorchymyn mae angen i chi ychwanegu —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

Cyrchwyd.

Nawr, gadewch i ni ysgrifennu sgript ar gyfer prosesu'r bachyn sy'n dod i mewn, gadewch i ni ei alw 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

Gadewch i ni ddechrau'r gweinydd:

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

Gawn ni weld sut mae'n gweithio. Trwy Rhyngwyneb gwe MCS ychwanegwch y ffeil test.txt i'r bwced myfiles-ash. Mae logiau'r consol yn dangos bod cais wedi'i wneud i'r gweinydd gwebhook:

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

Gadewch i ni wirio cynnwys y bwced wrth gefn myfiles yn 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

Nawr, trwy'r rhyngwyneb gwe, byddwn yn dileu'r ffeil o'r bwced myfiles-ash.

Logiau gweinydd:

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

Cynnwys bwced:

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

Mae'r ffeil yn cael ei ddileu, mae'r broblem yn cael ei datrys.

Casgliad a I'w Wneud

Mae'r holl god a ddefnyddir yn yr erthygl hon yn yn fy ystorfa. Ceir hefyd enghreifftiau o sgriptiau ac enghreifftiau o gyfrif llofnodion ar gyfer cofrestru bachau gwe.

Nid yw'r cod hwn yn ddim mwy nag enghraifft o sut y gallwch ddefnyddio bachau gwe S3 yn eich gweithgareddau. Fel y dywedais ar y dechrau, os ydych chi'n bwriadu defnyddio gweinydd o'r fath wrth gynhyrchu, mae angen i chi o leiaf ailysgrifennu'r gweinydd ar gyfer gwaith anghydamserol: cofrestrwch bachau gwe sy'n dod i mewn mewn ciw (RabbitMQ neu NATS), ac oddi yno eu dosrannu a'u prosesu. gyda cheisiadau gweithwyr. Fel arall, pan fydd bachau gwe yn cyrraedd yn aruthrol, efallai y byddwch yn dod ar draws diffyg adnoddau gweinydd i gwblhau tasgau. Mae presenoldeb ciwiau yn caniatáu ichi ddosbarthu'r gweinydd a'r gweithwyr, yn ogystal â datrys problemau gyda thasgau ailadroddus rhag ofn y bydd methiannau. Fe'ch cynghorir hefyd i newid y logio i un manylach a mwy safonol.

Pob lwc!

Mwy o ddarllen ar y pwnc:

Ffynhonnell: hab.com

Ychwanegu sylw