Eisimpleir de thagradh air a stiùireadh le tachartas stèidhichte air lìn-lìn ann an stòradh stuth S3 Mail.ru Cloud Solutions

Eisimpleir de thagradh air a stiùireadh le tachartas stèidhichte air lìn-lìn ann an stòradh stuth S3 Mail.ru Cloud Solutions
Inneal cofaidh Rube Goldberg

Bidh ailtireachd air a stiùireadh le tachartas a’ meudachadh èifeachdas cosgais nan goireasan a thathar a’ cleachdadh leis nach eil iad gan cleachdadh ach aig an àm a tha feum orra. Tha mòran roghainnean ann air mar a chuireas tu seo an gnìomh agus gun a bhith a’ cruthachadh aonadan sgòthan a bharrachd mar thagraidhean luchd-obrach. Agus an-diugh cha bhith mi a’ bruidhinn mu dheidhinn FaaS, ach mu dheidhinn greimean-lìn. Seallaidh mi eisimpleir oideachaidh de bhith a’ làimhseachadh thachartasan a’ cleachdadh greimichean-lìn airson stòradh stuthan.

Beagan fhaclan mu stòradh stuthan agus brògan-lìn. Leigidh stòradh nithean leat dàta sam bith a stòradh san sgòth ann an cruth nithean, ruigsinneach tro S3 no API eile (a rèir buileachaidh) tro HTTP/HTTPS. Mar as trice is e fios air ais HTTP àbhaisteach a th’ ann an lìn-lìn. Mar as trice bidh iad air am piobrachadh le tachartas, leithid còd ga phutadh gu stòr no beachd a bhith air a phostadh air blog. Nuair a thachras tachartas, bidh an làrach tùsail a’ cur iarrtas HTTP chun URL a chaidh a shònrachadh airson a’ bhileag-lìn. Mar thoradh air an sin, faodaidh tu tachartasan a chuir air aon làrach gus gnìomhan a bhrosnachadh air làrach eile (wiki). Ma tha an làrach stòr na stòradh stuthan, bidh tachartasan ag atharrachadh na th’ ann.

Eisimpleirean de chùisean sìmplidh nuair a dh'fhaodar fèin-ghluasad mar sin a chleachdadh:

  1. A’ cruthachadh lethbhric de gach nì ann an stòradh neòil eile. Feumar lethbhric a chruthachadh air an itealan nuair a thèid faidhlichean a chur ris no atharrachadh.
  2. Cruthachadh fèin-ghluasadach de shreath de mhion-dhealbhan de fhaidhlichean grafaigeach, a’ cur comharran-uisge ri dealbhan, agus atharrachaidhean ìomhaigh eile.
  3. Fios mu thighinn sgrìobhainnean ùra (mar eisimpleir, bidh seirbheis cunntasachd sgaoilte a’ luchdachadh suas aithisgean chun sgòth, agus bidh sgrùdadh ionmhais a’ faighinn fios mu aithisgean ùra, gan sgrùdadh agus gan sgrùdadh).
  4. Tha cùisean a tha beagan nas iom-fhillte a’ toirt a-steach, mar eisimpleir, a bhith a’ gineadh iarrtas gu Kubernetes, a chruthaicheas pod leis na soithichean riatanach, a bheir seachad crìochan gnìomh dha, agus às deidh giollachd a ’tuiteam às a chèile.

Mar eisimpleir, nì sinn caochladh de ghnìomh 1, nuair a thèid atharrachaidhean ann am bucaid stòraidh stuth Mail.ru Cloud Solutions (MCS) a shioncronachadh ann an stòradh stuth AWS a’ cleachdadh webhooks. Ann an cùis làn luchdaichte, bu chòir obair asyncronach a thoirt seachad le bhith a’ clàradh sreapan-lìn ann an ciudha, ach airson an obair trèanaidh nì sinn am buileachadh às aonais seo.

Sgeama obrach

Tha am protocol eadar-obrachaidh air a mhìneachadh gu mionaideach ann an Leabhar-iùil airson lìn S3 air MCS. Tha na feartan a leanas anns an sgeama obrach:

  • Seirbheis foillseachaidh, a tha air taobh stòraidh S3 agus a 'foillseachadh iarrtasan HTTP nuair a thèid an webnhook a phiobrachadh.
  • Webook a 'faighinn frithealaiche, a bhios ag èisteachd ri iarrtasan bhon t-seirbheis foillseachaidh HTTP agus a 'dèanamh gnìomhan iomchaidh. Faodar am frithealaiche a sgrìobhadh ann an cànan sam bith; san eisimpleir againn, sgrìobhaidh sinn am frithealaiche ann an Go.

Is e feart sònraichte de bhuileachadh webooks ann an API S3 clàradh an fhrithealaiche faighinn lìn air an t-seirbheis foillseachaidh. Gu sònraichte, feumaidh an t-seirbheisiche a tha a’ faighinn greim-lìn dearbhadh an fho-sgrìobhaidh airson teachdaireachdan bhon t-seirbheis foillseachaidh (ann am buileachadh greimean-lìn eile, mar as trice chan eil feum air fo-sgrìobhadh a dhearbhadh).

Mar sin, feumaidh an t-seirbheisiche faighinn taic-lìn taic a thoirt do dhà phrìomh obair:

  • freagairt ri iarrtas na seirbheis foillseachaidh airson clàradh a dhearbhadh,
  • pròiseas tachartasan a tha a’ tighinn a-steach.

A’ stàladh frithealaiche faighinn leabhar-lìn

Gus am frithealaiche faighinn greim-lìn a ruith, feumaidh tu frithealaiche Linux. San artaigil seo, mar eisimpleir, bidh sinn a’ cleachdadh eisimpleir brìgheil a bhios sinn a’ cleachdadh air MCS.

Stàlaich sinn am bathar-bog riatanach agus cuir air bhog am frithealaiche faighinn webook.

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 am pasgan leis an fhrithealaiche faighinn greim-lìn:

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.

Tòisichidh sinn am frithealaiche:

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

Clàraich a-steach don t-seirbheis foillseachaidh

Faodaidh tu an t-seirbheisiche faighinn leabhar-lìn agad a chlàradh tron ​​​​API no eadar-aghaidh lìn. Airson sìmplidh, clàraichidh sinn tron ​​eadar-aghaidh lìn:

  1. Rachamaid gu roinn nam bucaid anns an t-seòmar smachd.
  2. Rach don bhucaid airson am bi sinn a’ rèiteachadh lìn-lìn agus cliog air an gèar:

Eisimpleir de thagradh air a stiùireadh le tachartas stèidhichte air lìn-lìn ann an stòradh stuth S3 Mail.ru Cloud Solutions

Rach gu taba Webhooks agus cliog air Add:

Eisimpleir de thagradh air a stiùireadh le tachartas stèidhichte air lìn-lìn ann an stòradh stuth S3 Mail.ru Cloud Solutions
Lìon a-steach na raointean:

Eisimpleir de thagradh air a stiùireadh le tachartas stèidhichte air lìn-lìn ann an stòradh stuth S3 Mail.ru Cloud Solutions

ID - ainm a 'bhoc-lìn.

Tachartas - dè na tachartasan a thèid a chraoladh. Tha sinn air tar-chur a h-uile tachartas a thachras nuair a bhios sinn ag obair le faidhlichean (cur ris agus cuir às).

URL - clàr-lìn a' faighinn seòladh an fhrithealaiche.

Is e sìoltachan a th’ ann an ro-leasachan / iar-leasachan sìoltachain a leigeas leat greimean-lìn a ghineadh a-mhàin airson nithean aig a bheil ainmean a rèir riaghailtean sònraichte. Mar eisimpleir, gus am bi an lìnig a' piobrachadh dìreach faidhlichean leis an leudachadh .png, cuir a-steach Iar-leasachan sìoltachain feumaidh tu “png” a sgrìobhadh.

An-dràsta, chan eil ach puirt 80 agus 443 a’ faighinn taic airson faighinn chun t-seirbheisiche faighinn greim-lìn.

Cliogaidh sinn Cuir dubhan ris agus chì sinn na leanas:

Eisimpleir de thagradh air a stiùireadh le tachartas stèidhichte air lìn-lìn ann an stòradh stuth S3 Mail.ru Cloud Solutions
Hook air a chur ris.

Tha am frithealaiche a tha a’ faighinn greim-lìn a’ sealltainn anns na logaichean aige adhartas pròiseas clàraidh nan dubhan:

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

Tha clàradh air a chrìochnachadh. Anns an ath earrann, bheir sinn sùil nas mionaidiche air an algairim gnìomhachd an t-seirbheisiche faighinn webook.

Tuairisgeul air an fhrithealaiche a tha a' faighinn greim-lìn

Anns an eisimpleir againn, tha am frithealaiche sgrìobhte ann an Go. Bheir sinn sùil air na prionnsapalan bunaiteach a thaobh obrachadh.

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

Beachdaich air na prìomh ghnìomhan:

  • Ping () - slighe a tha a’ freagairt tro URL / ping, am buileachadh as sìmplidh de probe beòthalachd.
  • Webhook () - prìomh shlighe, URL / inneal-làimhe:
    • a’ dearbhadh clàradh air an t-seirbheis foillseachaidh (rachaibh gu gnìomh Dearbhadh Fo-sgrìobhaidh),
    • pròiseasan lìn a’ tighinn a-steach (gnìomh Gorecords).
  • Tha gnìomhan HmacSha256 agus HmacSha256hex nan cur an gnìomh de na h-algorithms crioptachaidh HMAC-SHA256 agus HMAC-SHA256 le toradh mar shreath de àireamhan hexadecimal airson an ainm-sgrìobhte obrachadh a-mach.
  • Is e prìomh dhleastanas a 'phrìomh obair, a' pròiseasadh crìochan loidhne-àithne agus a 'clàradh luchd-làimhseachaidh URL.

Paramadairean loidhne-àithne ris an do ghabh am frithealaiche:

  • -port am port air an èist am frithealaiche.
  • -address - seòladh IP ris am bi am frithealaiche ag èisteachd.
  • -script na phrògram taobh a-muigh ris an canar airson gach dubhan a thig a-steach.

Bheir sinn sùil nas mionaidiche air cuid de na gnìomhan:

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

}

Bidh an gnìomh seo a’ dearbhadh a bheil iarrtas airson clàradh a dhearbhadh no duilleag-lìn air ruighinn. Mar a leanas bho sgrìobhainnean, ma thèid clàradh a dhearbhadh, gheibhear an structar Json a leanas anns an iarrtas 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»
}

Feumar a’ cheist seo a fhreagairt:

content-type: application/json

{"signature":«ea3fce4bb15c6de4fec365d36bcebbc34ccddf54616d5ca12e1972f82b6d37af»}

Far a bheil an t-ainm-sgrìobhte air a thomhas mar:

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

Ma ruigeas lìn-lìn, tha structar iarrtas a’ Phuist a’ coimhead mar seo:

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

A rèir sin, a rèir an iarrtais, feumaidh tu tuigsinn mar a làimhsicheas tu an dàta. Thagh mi an inntrig mar thaisbeanair "Type":"SubscriptionConfirmation", leis gu bheil e an làthair san iarrtas dearbhaidh ballrachd agus nach eil e an làthair anns a’ bhileag-lìn. Stèidhichte air làthaireachd / neo-làthaireachd an inntrig seo san iarrtas POST, thèid tuilleadh buileachadh a’ phrògraim an dàrna cuid chun ghnìomh SubscriptionConfirmation, no ann an gnìomh GotRecords.

Cha bheachdaich sinn gu mionaideach air gnìomh Dearbhadh Fo-sgrìobhaidh; tha e air a bhuileachadh a rèir nam prionnsapalan a tha air am mìneachadh ann an sgrìobhainnean. Chì thu an còd tùsail airson a’ ghnìomh seo aig tasgaidhean pròiseact git.

Bidh an gnìomh GotRecords a’ parsadh iarrtas a tha a’ tighinn a-steach agus airson gach nì Clàr gairmidh sgriobt taobh a-muigh (leis an deach an t-ainm a thoirt seachad ann am paramadair -script) leis na paramadairean:

  • ainm bucaid
  • iuchair nì
  • gnìomh:
    • copy - ma tha san iarrtas tùsail EventName = ObjectCreated | PutObject | PutObjectCopy
    • delete - ma tha san iarrtas tùsail EventName = ObjectRemove | Sguab às Object

Mar sin, ma ruigeas dubhan le iarrtas Post, mar a chaidh a mhìneachadh àrd-ìre, agus am paramadair -script = script.sh an uairsin canar an sgriobt mar a leanas:

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

Bu chòir a thuigsinn nach e fuasgladh toraidh iomlan a th’ anns an t-seirbheisiche faighinn lìn seo, ach eisimpleir nas sìmplidhe de bhuileachadh a dh’ fhaodadh a bhith ann.

Eisimpleir de dh'obair

Sioncronaich sinn na faidhlichean bhon phrìomh bhucaid ann am MCS chun bhucaid cùl-taic ann an AWS. Canar myfiles-ash ris a’ phrìomh bhucaid, is e myfiles-backup a chanar ris an fhear cùl-taic (tha rèiteachadh bucaid ann an AWS taobh a-muigh farsaingeachd an artaigil seo). Mar sin, nuair a thèid faidhle a chuir anns a’ phrìomh bhucaid, bu chòir an leth-bhreac aige nochdadh sa chùl-taic, agus nuair a thèid a dhubhadh às bhon phrìomh fhear, bu chòir a dhubhadh às anns a’ chùl-taic.

Obraichidh sinn le bucaidean a’ cleachdadh goireas awscli, a tha co-chosmhail ri gach cuid stòradh neòil MCS agus stòradh neòil 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) ...

Feuch an cuir sinn air dòigh cothrom air an 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]:

Feuch an rèitich sinn ruigsinneachd gu 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]:

Feuch an dèan sinn sgrùdadh air na slighean a-steach:

Gu AWS:

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

Airson MCS, nuair a bhios tu a’ ruith an àithne feumaidh tu —endpoint-url a chur ris:

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

Ruigsinneachd.

A-nis leig dhuinn sgriobt a sgrìobhadh airson an dubhan a tha a’ tighinn a-steach a ghiullachd, canaidh sinn e 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

Tòisichidh sinn am frithealaiche:

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

Chì sinn mar a tha e ag obair. Troimhe MCS eadar-aghaidh lìn cuir am faidhle test.txt ris a’ bhucaid myfiles-ash. Tha logaichean a’ chonsail a’ sealltainn gun deach iarrtas a chur chun an fhrithealaiche lìn:

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

Feuch an dèan sinn sgrùdadh air susbaint a’ bhucaid cùl-taic myfiles ann an 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

A-nis, tron ​​​​eadar-aghaidh lìn, sguabaidh sinn às am faidhle bhon bhucaid myfiles-ash.

Logaichean frithealaiche:

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

Susbaint a’ bhucaid:

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

Tha am faidhle air a sguabadh às, tha an duilgheadas air a rèiteachadh.

Co-dhùnadh agus ToDo

Tha a h-uile còd a chleachdar san artaigil seo anns an ionad-tasgaidh agam. Tha eisimpleirean ann cuideachd de sgriobtaichean agus eisimpleirean de chunntadh ainmean-sgrìobhte airson clàradh lìn-bhog.

Chan eil anns a’ chòd seo ach eisimpleir air mar as urrainn dhut greimichean-lìn S3 a chleachdadh nad ghnìomhachd. Mar a thuirt mi aig an toiseach, ma tha thu an dùil a leithid de fhrithealaiche a chleachdadh ann an cinneasachadh, feumaidh tu co-dhiù ath-sgrìobhadh a dhèanamh air an fhrithealaiche airson obair asyncronach: clàraich lìn-lìn a tha a’ tighinn a-steach ann an ciudha (RabbitMQ no NATS), agus às an sin rannsaich iad agus giullachd iad. le iarrtasan luchd-obrach. Rud eile, nuair a ruigeas tu greimean-lìn gu mòr, is dòcha gun tig thu tarsainn air gainnead ghoireasan frithealaiche gus gnìomhan a choileanadh. Tha làthaireachd ciudhaichean a 'toirt cothrom dhut an t-seirbheisiche agus an luchd-obrach a sgaoileadh, a bharrachd air a bhith a' fuasgladh dhuilgheadasan le gnìomhan ath-aithris gun fhios nach obraich iad. Tha e ciallach cuideachd an logadh atharrachadh gu fear nas mionaidiche agus nas àbhaisteach.

Beannachd leat

Tuilleadh leughaidh air a’ chuspair:

Source: www.habr.com

Cuir beachd ann