Cov teeb meem nyuaj me ntsis cuam tshuam nrog, piv txwv li, tsim cov lus thov rau Kubernetes, uas tsim cov pods nrog cov ntim tsim nyog, hla cov haujlwm tsis ua haujlwm rau nws, thiab tom qab ua tiav cov thawv ntim.
Ua piv txwv, peb yuav ua qhov txawv ntawm txoj haujlwm 1, thaum hloov pauv hauv Mail.ru Cloud Solutions (MCS) cov khoom ntim khoom ntim tau synchronized hauv AWS khoom cia siv webhooks. Nyob rau hauv cov ntaub ntawv tiag tiag loaded, asynchronous ua hauj lwm yuav tsum tau muab los ntawm kev sau npe webhooks nyob rau hauv ib tug queue, tab sis rau kev cob qhia txoj hauj lwm peb yuav ua qhov kev siv yam tsis muaj qhov no.
Cov phiaj xwm ua haujlwm
Cov txheej txheem kev sib cuam tshuam tau piav qhia meej hauv Qhia rau S3 webhooks ntawm MCS. Cov txheej txheem ua haujlwm muaj cov hauv qab no:
Tshaj tawm kev pabcuam, uas yog nyob rau ntawm S3 cia sab thiab tshaj tawm HTTP thov thaum webnhook tau tshwm sim.
Webhook txais server, uas mloog cov lus thov los ntawm HTTP tshaj tawm kev pabcuam thiab ua haujlwm tsim nyog. Tus neeg rau zaub mov tuaj yeem sau ua hom lus; hauv peb qhov piv txwv, peb yuav sau tus neeg rau zaub mov hauv Go.
Ib qho tshwj xeeb ntawm kev siv webhooks hauv S3 API yog kev tso npe ntawm webhook txais server ntawm qhov kev pabcuam tshaj tawm. Tshwj xeeb, webhook tau txais server yuav tsum lees paub qhov kev tso npe rau cov lus los ntawm kev tshaj tawm kev pabcuam (hauv lwm qhov kev siv webhook, kev lees paub ntawm kev tso npe feem ntau tsis tas yuav tsum tau ua).
Raws li, webhook txais server yuav tsum txhawb nqa ob txoj haujlwm tseem ceeb:
teb rau qhov kev pabcuam tshaj tawm cov lus thov kom paub meej txog kev sau npe,
txheej xwm tuaj.
Txhim kho lub webhook txais server
Txhawm rau khiav lub webhook txais server, koj xav tau Linux server. Hauv tsab xov xwm no, ua piv txwv, peb siv qhov piv txwv virtual uas peb xa mus rau MCS.
Cia peb nruab qhov tsim nyog software thiab tso lub webhook txais server.
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 lub nplaub tshev nrog lub webhook txais server:
Functions HmacSha256 thiab HmacSha256hex yog kev siv ntawm HMAC-SHA256 thiab HMAC-SHA256 encryption algorithms nrog cov zis raws li ib txoj hlua ntawm hexadecimal tooj rau xam tus kos npe.
lub ntsiab yog lub luag haujlwm tseem ceeb, ua cov kab lus hais kom ua kab thiab sau npe URL handlers.
Cov kab hais kom ua kab tsis lees txais los ntawm server:
-port yog qhov chaw nres nkoj uas lub server yuav mloog.
-address - IP chaw nyob uas tus neeg rau zaub mov yuav mloog.
-script yog ib qho kev pab cuam sab nraud uas raug hu rau txhua tus nkag nkag.
Cia peb saib ze dua ntawm qee qhov haujlwm:
//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)
}
}
Qhov haujlwm no txiav txim siab seb qhov kev thov kom paub meej tias kev sau npe lossis lub webhook tau tuaj txog. Raws li nram no los ntawm cov ntaub ntawv, yog tias kev tso npe raug lees paub, cov qauv Json hauv qab no tau txais hauv Post thov:
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Β»
}
Yog li, yog tias tus nuv tuaj txog nrog Post thov, raws li tau piav qhia ntau dua, thiab parameter -script = script.sh ces tsab ntawv yuav raug hu raws li nram no:
script.sh bucketA some-file-to-bucket copy
Nws yuav tsum to taub tias qhov webhook tau txais server tsis yog qhov kev daws teeb meem tiav, tab sis yog ib qho piv txwv yooj yim ntawm kev siv tau.
Piv txwv ntawm kev ua haujlwm
Cia peb synchronize cov ntaub ntawv los ntawm lub thoob loj hauv MCS mus rau lub thoob thaub qab hauv AWS. Lub thoob lub ntsiab yog hu ua myfiles-ash, qhov thaub qab yog hu ua myfiles-backup (lub thoob teeb tsa hauv AWS yog dhau ntawm cov kab lus no). Raws li, thaum ib cov ntaub ntawv muab tso rau hauv lub thoob lub ntsiab, nws daim ntawv yuav tsum tshwm nyob rau hauv lub backup ib, thiab thaum nws yog deleted los ntawm lub ntsiab, nws yuav tsum tau muab deleted nyob rau hauv lub backup ib tug.
Peb yuav ua haujlwm nrog cov thoob siv cov khoom siv awscli, uas yog sib xws nrog ob qho tib si MCS huab cia thiab AWS huab cia.
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) ...
Cia peb teeb tsa kev nkag mus rau 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]:
Wb configure access to 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]:
Cia peb txheeb xyuas cov accesses:
To AWS:
ubuntu@ubuntu-basic-1-2-10gb:~$ aws s3 ls --profile aws
2020-07-06 08:44:11 myfiles-backup
Cia peb saib seb nws ua haujlwm li cas. Los ntawm MCS web interface ntxiv cov ntaub ntawv test.txt rau myfiles-ash thoob. Cov ntaub ntawv console qhia tau hais tias qhov kev thov tau ua rau lub webhook server:
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