Iṣẹlẹ-ìṣó faaji mu ki awọn iye owo ṣiṣe ti awọn oro ti a lo nitori won ti wa ni lilo nikan ni akoko nigba ti won nilo. Awọn aṣayan pupọ lo wa lori bii o ṣe le ṣe eyi ati pe ko ṣẹda awọn ohun elo awọsanma ni afikun bi awọn ohun elo oṣiṣẹ. Ati loni Emi kii yoo sọrọ nipa FaaS, ṣugbọn nipa webhooks. Emi yoo ṣe afihan apẹẹrẹ ikẹkọ ti mimu awọn iṣẹlẹ mu nipa lilo awọn oju opo wẹẹbu ibi ipamọ ohun.
Awọn ọrọ diẹ nipa ibi ipamọ ohun ati awọn kio wẹẹbu. Ibi ipamọ ohun n gba ọ laaye lati tọju eyikeyi data sinu awọsanma ni irisi awọn nkan, wiwọle nipasẹ S3 tabi API miiran (da lori imuse) nipasẹ HTTP/HTTPS. Awọn kio wẹẹbu jẹ awọn atunyin HTTP aṣa ni gbogbogbo. Wọn jẹ okunfa nigbagbogbo nipasẹ iṣẹlẹ kan, gẹgẹbi koodu titari si ibi ipamọ tabi asọye ti a firanṣẹ lori bulọọgi kan. Nigbati iṣẹlẹ kan ba waye, aaye ipilẹṣẹ nfi ibeere HTTP ranṣẹ si URL ti a pato fun kio wẹẹbu naa. Bi abajade, o le ṣe awọn iṣẹlẹ lori aaye kan nfa awọn iṣe lori omiiran (wiki). Ninu ọran nibiti aaye orisun jẹ ibi ipamọ ohun kan, awọn iṣẹlẹ ṣiṣẹ bi awọn ayipada si awọn akoonu rẹ.
Awọn apẹẹrẹ ti awọn ọran ti o rọrun nigbati iru adaṣe le ṣee lo:
Ṣiṣẹda awọn ẹda ti gbogbo awọn nkan ni ibi ipamọ awọsanma miiran. Awọn adakọ gbọdọ wa ni ṣiṣẹda lori fo nigbakugba ti awọn faili ti wa ni afikun tabi yipada.
Ṣiṣẹda adaṣe ti lẹsẹsẹ awọn eekanna atanpako ti awọn faili ayaworan, fifi awọn ami omi kun awọn fọto, ati awọn iyipada aworan miiran.
Ifitonileti nipa dide ti awọn iwe aṣẹ tuntun (fun apẹẹrẹ, iṣẹ ṣiṣe iṣiro pinpin pinpin awọn ijabọ si awọsanma, ati ibojuwo owo n gba awọn iwifunni nipa awọn ijabọ tuntun, ṣayẹwo ati itupalẹ wọn).
Awọn ọran ti o ni idiju diẹ diẹ pẹlu, fun apẹẹrẹ, ti ipilẹṣẹ ibeere kan si Kubernetes, eyiti o ṣẹda podu kan pẹlu awọn apoti to wulo, gbe awọn aye-ṣiṣe iṣẹ-ṣiṣe lọ si rẹ, ati lẹhin sisẹ naa ṣubu eiyan naa.
Gẹgẹbi apẹẹrẹ, a yoo ṣe iyatọ ti iṣẹ-ṣiṣe 1, nigbati awọn iyipada ninu apo ipamọ ohun elo Mail.ru Cloud Solutions (MCS) ti wa ni mimuuṣiṣẹpọ ni ibi ipamọ ohun elo AWS nipa lilo awọn oju-iwe ayelujara. Ninu ọran ti kojọpọ gidi, iṣẹ asynchronous yẹ ki o pese nipasẹ fiforukọṣilẹ awọn oju opo wẹẹbu ni isinyi, ṣugbọn fun iṣẹ ikẹkọ a yoo ṣe imuse laisi eyi.
Iṣẹ atẹjade, eyiti o wa ni ẹgbẹ ibi ipamọ S3 ati titẹjade awọn ibeere HTTP nigbati webnhook ti nfa.
Webhook gbigba olupin, eyiti o tẹtisi awọn ibeere lati iṣẹ titẹjade HTTP ati ṣiṣe awọn iṣe ti o yẹ. Olupin naa le kọ ni eyikeyi ede; ninu apẹẹrẹ wa, a yoo kọ olupin ni Go.
Ẹya pataki ti imuse ti webhooks ni S3 API ni iforukọsilẹ ti olupin gbigba wẹẹbu lori iṣẹ titẹjade. Ni pataki, olupin gbigba wẹẹbu gbọdọ jẹrisi ṣiṣe-alabapin si awọn ifiranṣẹ lati iṣẹ titẹjade (ninu awọn imuṣẹ webhook miiran, ijẹrisi ṣiṣe alabapin ko nilo nigbagbogbo).
dahun si ibeere iṣẹ titẹjade lati jẹrisi iforukọsilẹ,
ilana ti nwọle iṣẹlẹ.
Fifi sori ẹrọ olupin gbigba wẹẹbu kan
Lati ṣiṣẹ olupin gbigba wẹẹbu, o nilo olupin Linux kan. Ninu nkan yii, gẹgẹbi apẹẹrẹ, a lo apẹẹrẹ foju kan ti a gbe sori MCS.
Jẹ ki a fi sọfitiwia pataki sori ẹrọ ki o ṣe ifilọlẹ olupin gbigba 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) ...
Lọ si garawa fun eyiti a yoo tunto webhooks ki o tẹ lori jia:
Lọ si Webhooks taabu ki o tẹ Fikun-un:
Fọwọsi awọn aaye:
ID - orukọ ti webhook.
Iṣẹlẹ - eyi ti awọn iṣẹlẹ lati atagba. A ti ṣeto awọn gbigbe ti gbogbo awọn iṣẹlẹ ti o waye nigba ṣiṣẹ pẹlu awọn faili (fikun ati pipaarẹ).
URL — webhook gbigba adirẹsi olupin.
Àlẹmọ ìpele / suffix jẹ àlẹmọ ti o fun ọ laaye lati ṣe ina awọn kio wẹẹbu nikan fun awọn nkan ti orukọ wọn baamu awọn ofin kan. Fun apẹẹrẹ, ni ibere fun webhook lati ma nfa awọn faili nikan pẹlu itẹsiwaju .png, ni Àlẹmọ suffix o nilo lati kọ "png".
Lọwọlọwọ, awọn ebute oko oju omi 80 ati 443 nikan ni atilẹyin fun iraye si olupin gbigba wẹẹbu.
Jẹ ki a tẹ Fi ìkọ kun ati pe a yoo rii nkan wọnyi:
Kio kun.
Olupin gbigba webhook fihan ninu awọn akọọlẹ rẹ ilọsiwaju ti ilana iforukọsilẹ kio:
Ping () - ipa ọna ti o dahun nipasẹ URL/ping, imuse ti o rọrun julọ ti iwadii igbesi aye.
Webhook() - ipa ọna akọkọ, URL/olutọju wẹẹbu:
jẹrisi iforukọsilẹ lori iṣẹ titẹjade (lọ si iṣẹ Ijẹrisi Alabapin),
lakọkọ ti nwọle webhooks (Gorecords iṣẹ).
Awọn iṣẹ HmacSha256 ati HmacSha256hex jẹ awọn imuse ti HMAC-SHA256 ati HMAC-SHA256 algorithms fifi ẹnọ kọ nkan pẹlu iṣelọpọ bi okun ti awọn nọmba hexadecimal fun ṣiṣe iṣiro ibuwọlu naa.
-akosile jẹ ẹya ita eto ti o ti wa ni a npe ni fun kọọkan ti nwọle kio.
Jẹ ki a ṣe akiyesi diẹ ninu awọn iṣẹ ṣiṣe:
//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)
}
}
Iṣẹ yii pinnu boya ibeere lati jẹrisi iforukọsilẹ tabi kio wẹẹbu kan ti de. Bi atẹle lati iwe, ti iforukọsilẹ ba jẹ idaniloju, ilana Json atẹle ni a gba ninu ibeere Ifiweranṣẹ naa:
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»
}
Nitorinaa, da lori ibeere naa, o nilo lati loye bi o ṣe le ṣe ilana data naa. Mo yan titẹ sii bi itọkasi "Type":"SubscriptionConfirmation", niwọn bi o ti wa ninu ibeere ijẹrisi ṣiṣe alabapin ati pe ko si ninu kio wẹẹbu naa. Da lori wiwa / isansa ti titẹsi yii ninu ibeere POST, ipaniyan siwaju sii ti eto naa lọ boya si iṣẹ naa SubscriptionConfirmation, tabi sinu iṣẹ naa GotRecords.
A kii yoo gbero iṣẹ ṣiṣe Ṣiṣe alabapin ni awọn alaye; o ti ṣe imuse ni ibamu si awọn ipilẹ ti a ṣeto sinu iwe. O le wo koodu orisun fun iṣẹ yii ni ise agbese git ibi ipamọ.
Iṣẹ GotRecords ṣe alaye ibeere ti nwọle ati fun ohun Igbasilẹ kọọkan n pe iwe afọwọkọ ita (ẹniti orukọ rẹ ti kọja ni paramita -script) pẹlu awọn paramita:
garawa orukọ
bọtini ohun
igbese:
daakọ - ti o ba wa ninu atilẹba ìbéèrè EventName = Nkan ti Ṣẹda | PutObject | PutObjectCopy
paarẹ - ti o ba wa ninu atilẹba ibeere EventName = Nkan Yiyọ | Nkan Parẹ
Nitorinaa, ti kio kan ba de pẹlu ibeere Ifiweranṣẹ, bi a ti ṣalaye ti o ga, ati paramita -script=script.sh lẹhinna ao pe akosile naa bi atẹle:
script.sh bucketA some-file-to-bucket copy
O yẹ ki o loye pe olupin gbigba wẹẹbu yii kii ṣe ojutu iṣelọpọ pipe, ṣugbọn apẹẹrẹ irọrun ti imuse ti o ṣeeṣe.
Apẹẹrẹ ti iṣẹ
Jẹ ki a muuṣiṣẹpọ awọn faili lati inu garawa akọkọ ni MCS si garawa afẹyinti ni AWS. Garawa akọkọ ni a pe ni myfiles-ash, afẹyinti ni a pe ni myfiles-afẹyinti (iṣeto garawa ni AWS ti kọja ipari ti nkan yii). Gẹgẹ bẹ, nigba ti a ba gbe faili kan sinu garawa akọkọ, ẹda rẹ yẹ ki o han ninu apo afẹyinti, ati nigbati o ba ti paarẹ lati akọkọ, o yẹ ki o paarẹ ni afẹyinti.
A yoo ṣiṣẹ pẹlu awọn buckets nipa lilo ohun elo awscli, eyiti o ni ibamu pẹlu mejeeji MCS ipamọ awọsanma ati ibi ipamọ awọsanma 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) ...
Jẹ ki a tunto iraye si 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]:
Jẹ ki a tunto iraye si 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]:
Jẹ ki a ṣayẹwo awọn wiwọle:
Si AWS:
ubuntu@ubuntu-basic-1-2-10gb:~$ aws s3 ls --profile aws
2020-07-06 08:44:11 myfiles-backup
Fun MCS, nigbati o ba nṣiṣẹ aṣẹ o nilo lati ṣafikun — endpoint-url:
Jẹ ká wo bi o ti ṣiṣẹ. Nipasẹ MCS ayelujara ni wiwo fi test.txt faili si myfiles-ash garawa. Awọn akọọlẹ console fihan pe a ṣe ibeere kan si olupin 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
Jẹ ki a ṣayẹwo awọn akoonu ti apo-afẹyinti myfiles ni AWS:
Bayi, nipasẹ wiwo wẹẹbu, a yoo paarẹ faili naa lati inu garawa myfiles-ash.
Awọn akọọlẹ olupin:
2020/07/06 09:44:46 [POST] incoming HTTP request from
95.163.216.92:58224
delete: s3://myfiles-backup/test.txt
Awọn akoonu inu garawa:
ubuntu@ubuntu-basic-1-2-10gb:~/s3-webhook$ aws s3 --profile aws ls
myfiles-backup
ubuntu@ubuntu-basic-1-2-10gb:~$
Faili naa ti paarẹ, iṣoro naa ti yanju.
Ipari ati ToDo
Gbogbo koodu ti a lo ninu nkan yii jẹ ninu mi ibi ipamọ. Awọn apẹẹrẹ awọn iwe afọwọkọ tun wa ati awọn apẹẹrẹ ti kika awọn ibuwọlu fun iforukọsilẹ awọn kio wẹẹbu.
Koodu yii kii ṣe diẹ sii ju apẹẹrẹ ti bii o ṣe le lo awọn iwo wẹẹbu S3 ninu awọn iṣẹ rẹ. Gẹgẹbi Mo ti sọ ni ibẹrẹ, ti o ba gbero lati lo iru olupin bẹ ni iṣelọpọ, o nilo lati tun atunkọ olupin naa fun iṣẹ asynchronous: forukọsilẹ awọn oju opo wẹẹbu ti nwọle ni isinyi (RabbitMQ tabi NATS), ati lati ibẹ sọ wọn ki o ṣe ilana wọn. pẹlu Osise ohun elo. Bibẹẹkọ, nigbati awọn kio wẹẹbu ba de lọpọlọpọ, o le ba pade aini awọn orisun olupin lati pari awọn iṣẹ ṣiṣe. Iwaju awọn ila n gba ọ laaye lati kaakiri olupin ati awọn oṣiṣẹ, bi daradara bi yanju awọn iṣoro pẹlu awọn iṣẹ ṣiṣe atunwi ni ọran ti awọn ikuna. O tun ni imọran lati yi gedu pada si alaye diẹ sii ati idiwon diẹ sii.