Nashqada-dhaqdhaqaaqa ay wadaan waxay kordhiyaan hufnaanta kharashka ee agabka la isticmaalo sababtoo ah waxaa la isticmaalaa oo kaliya wakhtiga loo baahan yahay. Waxaa jira xulashooyin badan oo ku saabsan sida tan loo hirgeliyo oo aan loo abuurin qaybaha daruuriga ah ee codsiyada shaqaalaha. Maantana ka hadli maayo FaaS, laakiin waxaan ka hadli doonaa webhooks. Waxaan tusi doonaa tusaale waxbarsho oo ku saabsan maaraynta dhacdooyinka addoo isticmaalaya sheyga kaydinta shabkada
Dhawr kelmadood oo ku saabsan kaydinta shayga iyo shabkada Kaydinta shayada waxay kuu ogolaanaysaa inaad ku kaydiso xog kasta oo daruur ah qaab walxo, laga heli karo S3 ama API kale (waxay kuxirantahay hirgelinta) HTTP/HTTPS. Webhooks guud ahaan waa dib u soo yeerida HTTP caadada u ah. Caadi ahaan waxaa kiciyay dhacdo, sida kood lagu riixo meel kayd ah ama faallo lagu dhejiyo blog. Marka ay dhacdo dhacdo, goobta asalka ahi waxay u dirtaa codsi HTTP URL-ka loo cayimay hook webka. Natiijo ahaan, waxaad samayn kartaa dhacdooyinka hal goob ku kicinaya ficillo kale (wiki). Xaaladda halka goobta isha ay tahay kayd shay, dhacdooyinku waxay u dhaqmaan sida isbeddelka waxa ku jira.
Tusaalooyinka kiisaska fudud marka otomaatigyada noocaas ah la isticmaali karo:
Abuuritaanka koobiyada dhammaan walxaha ku jira kaydinta daruuraha kale. Nuqullada waa in la abuuraa duullimaad mar kasta oo faylasha lagu daro ama la beddelo.
ka jawaab codsiga adeegga daabacaadda si loo xaqiijiyo diiwaangelinta,
ka baaraandegto dhacdooyinka soo socda.
Rakibaadda server-ka hesha webhook
Si aad u socodsiiso server-ka helaya webhook, waxaad u baahan tahay server Linux ah. Maqaalkan, tusaale ahaan, waxaanu isticmaalnaa tusaale wax ku ool ah oo aan geyno MCS.
Aan rakibno software-ka lagama maarmaanka ah oo aan bilowno server-ka helaya webhook.
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) ...
ubuntu@ubuntu-basic-1-2-10gb:~$ cd s3-webhook/
ubuntu@ubuntu-basic-1-2-10gb:~/s3-webhook$ sudo ./s3-webhook -port 80
Ku biir adeegga daabacaadda
Waxaad iska diiwaan gelin kartaa server-kaaga helitaanka webhook adoo isticmaalaya API ama interface interface. Si ay u fududaato, waxaanu isku diiwaan gelin doonaa interneedka shabakada:
Aynu si qoto dheer u eegno qaar ka mid ah hawlaha:
//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)
}
}
Shaqadani waxay go'aaminaysaa in codsiga xaqiijinta diiwaangelinta ama webhook uu yimid. Sida soo socota dukumentiyo, haddii diiwaangelinta la xaqiijiyo, qaabka soo socda ee Json waxaa lagu helay codsiga Boostada:
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Β»
}
Sidaa darteed, iyadoo ku xiran codsiga, waxaad u baahan tahay inaad fahamto sida loo farsameeyo xogta. Waxaan u doortay gelitaanka tilmaame ahaan "Type":"SubscriptionConfirmation", maadaama ay ku jirto codsiga xaqiijinta isdiiwaangelinta oo aanay ku jirin webhook. Iyada oo ku saleysan joogitaanka/maqnaanshaha galitaankan ee codsiga POST, fulinta dheeraadka ah ee barnaamijku waxa ay tagtaa shaqada SubscriptionConfirmation, ama galay hawl GotRecords.
Ma tixgelin doono si faahfaahsan hawsha Xaqiijinta Diiwaangelinta; waxaa loo fuliyaa si waafaqsan mabaadi'da lagu dejiyay dukumentiyo. Waxaad ka arki kartaa koodhka isha ee hawshan kaydka mashruuca git.
Shaqada GotRecords waxay kala saartaa codsiga soo socda oo shay kasta oo Diiwaangelin ah wuxuu wacaa qoraal dibadeed (magaciisa lagu dhex maray halbeeg-script) oo leh cabbirro:
magaca baaldiga
furaha shayga
ficil:
nuqul - haddii codsiga asalka ah ee EventName = Shayga la sameeyay | PutObject | PutObjectCopy
tirtir - haddii codsiga asalka ah ee EventName = Shayga la saaray | DeleteObject
Haddaba, haddii jillaab la yimaado codsi Boostada, sida lagu sharraxay sare, iyo parameter -script=script.sh markaas qoraalka waxaa loogu yeeri doonaa sidan soo socota:
script.sh bucketA some-file-to-bucket copy
Waa in la fahamsan yahay in webhook-kan helaya server-ka uusan ahayn xal wax-soo-saar dhammaystiran, laakiin tusaale la fududeeyay ee hirgelinta suurtagalka ah.
Tusaalaha shaqada
Aynu isku dhejinno faylasha baaldiga weyn ee MCS ilaa baaldiga kaydka ah ee AWS. Baaldiga ugu weyn waxaa loo yaqaan myfiles-ash, mid ka mid ah kaydinta waxaa loo yaqaan myfiles-backup (qaabaynta baaldi ee AWS waa ka baxsan baaxadda qodobkan). Sidaas awgeed, marka faylka la geliyo baaldiga weyn, nuqulkiisu waa inuu ka soo baxaa kaydka, marka laga tirtiro midka ugu weyn, waa in lagu tirtiraa kaydka.
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) ...
Aynu habeyno gelitaanka 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]:
Aynu habeyno gelitaanka 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]:
Aan hubino gelitaanka:
Ku socota AWS:
ubuntu@ubuntu-basic-1-2-10gb:~$ aws s3 ls --profile aws
2020-07-06 08:44:11 myfiles-backup
Wixii MCS ah, markaad wado amarka waxaad u baahan tahay inaad ku darto -endpoint-url:
Aan aragno sida ay u shaqeyso. Iyadoo loo marayo MCS web interface ku dar faylka test.txt baaldiga myfiles-ash. Diiwaanka console-ka ayaa muujinaya in codsi loo gudbiyay serfarka webhook:
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
Aynu hubino waxa ku jira baaldiga kaydka myfiles ee AWS:
Hadda, iyada oo loo marayo interface-ka shabakadda, waxaanu ka tirtiri doonaa faylka myfiles-ash baaldi.
Diiwaanada serverka:
2020/07/06 09:44:46 [POST] incoming HTTP request from
95.163.216.92:58224
delete: s3://myfiles-backup/test.txt
Waxa ku jira baaldi
ubuntu@ubuntu-basic-1-2-10gb:~/s3-webhook$ aws s3 --profile aws ls
myfiles-backup
ubuntu@ubuntu-basic-1-2-10gb:~$
Faylka waa la tirtiray, dhibaatada waa la xalliyey.
Gabagabo iyo ToDo
Dhammaan koodka lagu isticmaalo maqaalkan waa kaydkayga ku jira. Waxa kale oo jira tusaalayaal qoraallo ah iyo tusaaleyaal tirinta saxeexyada diiwaangelinta webhooks.
Koodhkani ma aha wax ka badan tusaale sida aad u isticmaali karto S3 webhooks hawlahaaga. Sidii aan ku idhi bilowgiiba, haddii aad qorshaynayso inaad adeegsato server-ka noocaas ah ee wax soo saarka, waxaad u baahan tahay inaad ugu yaraan dib u qorto server-ka shaqada asynchronous: ku diwaangeli webhooks soo galaya safka (RabbitMQ ama NATS), halkaasna kala saar oo ka baaraandegi oo leh codsiyada shaqaalaha. Haddii kale, marka webhooks ay si weyn u yimaadaan, waxaa laga yaabaa inaad la kulanto la'aanta ilaha server si aad u dhamaystirto hawlaha. Joogitaanka safafka ayaa kuu oggolaanaya inaad qaybiso server-ka iyo shaqaalaha, iyo sidoo kale inaad xalliso dhibaatooyinka dib-u-celinta hawlaha haddii ay dhacdo guuldarrooyin. Waxa kale oo habboon in loo beddelo jarista mid faahfaahsan oo ka sii habaysan.