ProHoster > Pūnaewele > Nā Administration > ʻO kahi laʻana o kahi noi i alakaʻi ʻia i ka hanana e pili ana i nā webhooks i ka mālama ʻana i nā mea S3 Mail.ru Cloud Solutions
ʻO kahi laʻana o kahi noi i alakaʻi ʻia i ka hanana e pili ana i nā webhooks i ka mālama ʻana i nā mea S3 Mail.ru Cloud Solutions
Hoʻonui ka hoʻolālā hanana hanana i ka maikaʻi o ke kumukūʻai o nā kumuwaiwai i hoʻohana ʻia no ka mea hoʻohana wale ʻia i ka manawa e pono ai. Nui nā koho e pili ana i ka hoʻokō ʻana i kēia a ʻaʻole e hana i nā hui kapua hou e like me nā noi limahana. A i kēia lā ʻaʻole wau e kamaʻilio e pili ana i ka FaaS, akā e pili ana i nā webhooks. E hōʻike wau i kahi laʻana aʻoaʻo o ka lawelawe ʻana i nā hanana me ka hoʻohana ʻana i nā webhooks mālama mea.
He mau huaʻōlelo e pili ana i ka mālama ʻana i nā mea a me ka hoʻopaʻa pūnaewele. Hiki iā ʻoe ke mālama i nā ʻikepili i ke ao ma ke ʻano o nā mea, hiki ke loaʻa ma o S3 a i ʻole kekahi API (ma muli o ka hoʻokō) ma HTTP/HTTPS. ʻO nā Webhooks ka maʻamau HTTP callbacks. Hoʻomaka pinepine ʻia lākou e kahi hanana, e like me ke kaomi ʻana i ke code i kahi waihona a i ʻole kahi ʻōlelo i kau ʻia ma kahi blog. Ke loaʻa kahi hanana, hoʻouna ka pūnaewele kumu i kahi noi HTTP i ka URL i kuhikuhi ʻia no ka webhook. ʻO ka hopena, hiki iā ʻoe ke hana i nā hanana ma kahi pūnaewele e hoʻoulu i nā hana ma kekahi (wiki). Inā he waihona mea ka waihona kumu, hana nā hanana ma ke ʻano he hoʻololi i kāna ʻike.
ʻO nā hiʻohiʻona o nā hihia maʻalahi ke hoʻohana ʻia ia ʻano automation:
Ke hana nei i kope o nā mea a pau i loko o kahi waihona kapuaʻi ʻē aʻe. Pono e hana ʻia nā kope ma ka lele ke hoʻohui ʻia a hoʻololi ʻia paha nā faila.
Hoʻokumu ʻakomi i nā ʻano liʻiliʻi o nā faila kiʻi, hoʻohui i nā kaha wai i nā kiʻi, a me nā hoʻololi kiʻi ʻē aʻe.
Hoʻolaha e pili ana i ka hōʻea ʻana mai o nā palapala hou (no ka laʻana, hoʻoili ʻia kahi lawelawe helu helu i hāʻawi ʻia i nā hōʻike i ke ao, a loaʻa ka nānā kālā i nā leka e pili ana i nā hōʻike hou, nānā a nānā ʻana iā lākou).
ʻO nā hihia paʻakikī liʻiliʻi e pili ana, no ka laʻana, ka hoʻopuka ʻana i kahi noi iā Kubernetes, ka mea i hana i kahi pod me nā ipu e pono ai, hāʻawi i nā ʻāpana hana iā ia, a ma hope o ka hana ʻana e hāʻule ka ipu.
E like me ka laʻana, e hana mākou i kahi ʻokoʻa o ka hana 1, i ka wā e hoʻololi ʻia ai ka pahu mālama mea Mail.ru Cloud Solutions (MCS) i loko o ka waihona mea AWS me ka hoʻohana ʻana i nā webhooks. Ma kahi hihia i hoʻouka ʻia, pono e hāʻawi ʻia ka hana asynchronous ma ke kau inoa ʻana i nā webhooks i kahi pila, akā no ka hana aʻo e hana mākou i ka hoʻokō me ka ʻole o kēia.
Oihana hoolaha, aia ma ka ʻaoʻao mālama S3 a hoʻopuka i nā noi HTTP ke hoʻomaka ka webnhook.
Ke kikowaena loaʻa pūnaewele, e hoʻolohe ana i nā noi mai ka lawelawe hoʻopuka HTTP a hana i nā hana kūpono. Hiki ke kākau ʻia ke kikowaena ma kekahi ʻōlelo; ma kā mākou hiʻohiʻona, e kākau mākou i ke kikowaena ma Go.
ʻO kahi hiʻohiʻona kūikawā o ka hoʻokō ʻana i nā webhooks ma ka S3 API ʻo ia ke kākau inoa ʻana o ka server loaʻa webhook ma ka lawelawe hoʻolaha. ʻO ka mea nui, pono e hoʻopaʻa inoa ka mea hoʻohana pūnaewele hoʻolaha i ka hoʻopaʻa inoa ʻana i nā memo mai ka lawelawe hoʻopuka (ma nā hoʻokō webhook ʻē aʻe, ʻaʻole koi ʻia ka hōʻoia o ke kau inoa).
No laila, pono e kākoʻo ke kikowaena loaʻa webhook i ʻelua hana nui:
e pane i ka noi a ka lawelawe hoʻopuka e hōʻoia i ke kākau inoa ʻana,
kaʻina hana e hiki mai ana.
Ke kau ʻana i kahi kikowaena loaʻa pūnaewele
No ka holo ʻana i ke kikowaena loaʻa webhook, pono ʻoe i kahi kikowaena Linux. Ma kēia ʻatikala, ma ke ʻano he laʻana, hoʻohana mākou i kahi hiʻohiʻona virtual a mākou e kau ai ma MCS.
E hoʻokomo i ka lako polokalamu pono a hoʻomaka i ke kikowaena loaʻa 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) ...
Hoʻopili i ka waihona me ke kikowaena loaʻa webhook:
ubuntu@ubuntu-basic-1-2-10gb:~$ cd s3-webhook/
ubuntu@ubuntu-basic-1-2-10gb:~/s3-webhook$ sudo ./s3-webhook -port 80
E kau inoa i ka lawelawe hoʻolaha
Hiki iā ʻoe ke hoʻopaʻa inoa i kāu kikowaena loaʻa webhook ma o ka API a i ʻole ke kikowaena pūnaewele. No ka maʻalahi, e kākau inoa mākou ma o ka pūnaewele pūnaewele:
E hele i ka bākeke a mākou e hoʻonohonoho ai i nā webhooks a kaomi i ka mea hana:
E hele i ka ʻaoʻao Webhooks a kaomi iā Add:
E hoʻopiha i nā kahua:
ID - ka inoa o ka webhook.
Ka hanana - nā hanana e hoʻouna. Ua hoʻonohonoho mākou i ka hoʻouna ʻana i nā hanana āpau i ka wā e hana ai me nā faila (hoʻohui a holoi ʻia).
HKH - loaʻa ka helu kikowaena pūnaewele hoʻopaʻa inoa.
ʻO ka kānana prefix/suffix kahi kānana e hiki ai iā ʻoe ke hana i nā webhooks wale nō no nā mea nona nā inoa i kūlike i kekahi mau lula. No ka laʻana, i mea e hoʻomaka ai ka webhook i nā faila wale nō me ka hoʻonui .png, ma kānana suffix pono ʻoe e kākau i ka "png".
I kēia manawa, kākoʻo wale ʻia nā awa 80 a me 443 no ke komo ʻana i ke kikowaena loaʻa webhook.
E kaomi kāua Hoʻohui i ka makau a e ike kakou i keia.
Hoʻohui ʻia ʻo Hook.
Hōʻike ke kikowaena loaʻa pūnaewele i loko o kāna mau lāʻau i ka holomua o ke kaʻina hoʻopaʻa inoa hook:
Ping () - he ala e pane ai ma o URL / ping, ka hoʻokō maʻalahi o kahi ʻimi ola.
Webhook() - ala nui, URL/mea hoʻohana pūnaewele:
hōʻoia i ka hoʻopaʻa inoa ma ka lawelawe hoʻopuka (e hele i ka hana SubscriptionConfirmation),
kaʻina hana i nā webhooks (hana Gorecords).
ʻO nā hana HmacSha256 a me HmacSha256hex nā hoʻokō o ka HMAC-SHA256 a me HMAC-SHA256 algorithms encryption me ka hoʻopuka ma ke ʻano he kaula o nā helu hexadecimal no ka helu ʻana i ka pūlima.
ʻO ka mea nui ka hana nui, kaʻina hana i nā palena laina kauoha a hoʻopaʻa inoa i nā mea lawelawe URL.
ʻAe ʻia nā ʻāpana laina kauoha e ke kikowaena:
-port ke awa kahi e hoʻolohe ai ke kikowaena.
-address - IP address e hoʻolohe ai ke kikowaena.
-script he polokalamu waho ia i kapa ʻia no kēlā me kēia makau e komo mai.
E nānā pono kākou i kekahi o nā hana:
//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)
}
}
Hoʻoholo kēia hana inā ua hiki mai kahi noi e hōʻoia i ke kākau inoa a i ʻole kahi webhook. Penei mai palapala, inā hoʻopaʻa inoa ʻia, loaʻa kēia ʻano Json ma ka noi 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»
}
No laila, ma muli o ka noi, pono ʻoe e hoʻomaopopo i ka hana ʻana i ka ʻikepili. Ua koho au i ke komo ʻana ma ke ʻano he hōʻailona "Type":"SubscriptionConfirmation", no ka mea aia i loko o ka noi hōʻoia inoa a ʻaʻole i loaʻa i ka webhook. Ma muli o ka loaʻa ʻana o kēia komo ʻana i ka noi POST, hele hou ka hoʻokō ʻana o ka papahana i ka hana. SubscriptionConfirmation, a i ʻole i loko o ka hana GotRecords.
ʻAʻole mākou e noʻonoʻo i ka hana SubscriptionConfirmation i nā kikoʻī; ua hoʻokō ʻia e like me nā loina i hoʻonohonoho ʻia palapala. Hiki iā ʻoe ke nānā i ke kumu kumu no kēia hana ma papahana git waihona.
Hoʻopili ka hana GotRecords i kahi noi komo a no kēlā me kēia mea Record e kāhea i kahi palapala waho (nona ka inoa i hāʻawi ʻia ma ka -script parameter) me nā ʻāpana:
inoa bakeke
mea kī
hana:
kope - inā ma ka noi kumu EventName = ObjectCreated | PutObject | PutObjectCopy
holoi - inā ma ka noi kumu EventName = ObjectRemoved | Holoi mea
No laila, inā hiki mai kahi makau me kahi noi Post, e like me ka mea i wehewehe ʻia kiekie, a me ka palena -script=script.sh a laila e kapa ʻia ka palapala penei:
script.sh bucketA some-file-to-bucket copy
Pono e hoʻomaopopo ʻia ʻaʻole kēia kikowaena loaʻa webhook he hopena hana piha, akā he laʻana maʻalahi o kahi hoʻokō hiki.
Laʻana o ka hana
E hoʻonohonoho like i nā faila mai ka bākeke nui ma MCS a i ka bakeke hoʻihoʻi ma AWS. Ua kapa ʻia ka pahu nui ʻo myfiles-ash, ʻo ka mea hoʻihoʻi i kapa ʻia ʻo myfiles-backup (ʻo ka hoʻonohonoho ʻana o ka bakeke ma AWS ma waho o ke kiko o kēia ʻatikala). No laila, ke waiho ʻia kahi faila i loko o ka bākeke nui, pono e ʻike ʻia kāna kope i ka waihona kope, a i ka wā e holoi ʻia ai mai ka mea nui, pono e holoi ʻia ma ka waihona.
E hana mākou me nā bākeke me ka hoʻohana ʻana i ka pono awscli, i kūpono me ka MCS cloud storage a me AWS cloud storage.
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) ...
E hoʻonohonoho i ke komo ʻana i ka 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]:
E hoʻonohonoho i ke komo ʻana i ka 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]:
E nānā kākou i nā mea komo:
I AWS:
ubuntu@ubuntu-basic-1-2-10gb:~$ aws s3 ls --profile aws
2020-07-06 08:44:11 myfiles-backup
No MCS, i ka holo ʻana i ke kauoha pono ʻoe e hoʻohui i —endpoint-url:
E ʻike kākou pehea e hana ai. Ma o MCS punaewele e hoʻohui i ka faila test.txt i ka bakeke myfiles-ash. Hōʻike nā moʻolelo console ua noi ʻia i ke kikowaena 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
E nānā kākou i nā mea o ka waihona myfiles-backup ma AWS:
I kēia manawa, ma o ka pūnaewele pūnaewele, e holoi mākou i ka faila mai ka myfiles-ash bucket.
Nā moʻolelo kikowaena:
2020/07/06 09:44:46 [POST] incoming HTTP request from
95.163.216.92:58224
delete: s3://myfiles-backup/test.txt
Pākeke maʻiʻo:
ubuntu@ubuntu-basic-1-2-10gb:~/s3-webhook$ aws s3 --profile aws ls
myfiles-backup
ubuntu@ubuntu-basic-1-2-10gb:~$
Holoi ʻia ka faila, hoʻopau ʻia ka pilikia.
Ka hopena a me ka hana
ʻO nā code a pau i hoʻohana ʻia ma kēia ʻatikala i loko o koʻu waihona. Aia kekahi mau laʻana o nā palapala a me nā laʻana o ka helu ʻana i nā pūlima no ka hoʻopaʻa inoa ʻana i nā webhooks.
ʻAʻole kēia code ma mua o kahi hiʻohiʻona pehea e hiki ai iā ʻoe ke hoʻohana i nā webhooks S3 i kāu mau hana. E like me kaʻu i ʻōlelo ai i ka hoʻomaka, inā ʻoe e hoʻolālā e hoʻohana i ia kikowaena i ka hana ʻana, pono ʻoe e kākau hou i ka server no ka hana asynchronous: e hoʻopaʻa inoa i nā webhooks e komo mai ana i kahi queue (RabbitMQ a i ʻole NATS), a mai laila e hoʻokaʻawale iā lākou a hana iā lākou. me nā noi hana. A i ʻole, i ka hiki ʻana mai o nā webhooks nui, hiki iā ʻoe ke hālāwai me ka nele o nā kumuwaiwai kikowaena e hoʻopau i nā hana. ʻO ka hele ʻana o nā queues e ʻae iā ʻoe e puʻunaue i ke kikowaena a me nā limahana, a me ka hoʻoponopono ʻana i nā pilikia me ka hana hou ʻana i nā hana i ka wā o nā hemahema. He mea maikaʻi hoʻi e hoʻololi i ka logging i kahi kikoʻī a ʻoi aku ka maʻamau.