เชเชตเซเชจเซเช-เชเชงเชพเชฐเชฟเชค เชเชฐเซเชเชฟเชเซเชเซเชเชฐ เชตเชชเชฐเชพเชคเชพ เชธเชเชธเชพเชงเชจเซเชจเซ เชเชฟเชเชฎเชค เชเชพเชฐเซเชฏเชเซเชทเชฎเชคเชพ เชตเชงเชพเชฐเซ เชเซ เชเชพเชฐเชฃ เชเซ เชคเซเชจเซ เชเชชเชฏเซเช เชซเชเซเชค เชคเซเชฏเชพเชฐเซ เช เชฅเชพเชฏ เชเซ เชเซเชฏเชพเชฐเซ เชคเซเชจเซ เชเชฐเซเชฐ เชนเซเชฏ. เชเชจเซ เชเซเชตเซ เชฐเซเชคเซ เช
เชฎเชฒเชฎเชพเช เชฎเซเชเชตเซเช เช
เชจเซ เชตเชฐเซเชเชฐ เชเชชเซเชฒเชฟเชเซเชถเชจเซเชธ เชคเชฐเซเชเซ เชตเชงเชพเชฐเชพเชจเซ เชเซเชฒเชพเชเชก เชเชจเซเชเชฟเชเซ เชฌเชจเชพเชตเชตเซ เชจเชนเซเช เชคเซเชจเชพ เชเชฃเชพ เชตเชฟเชเชฒเซเชชเซ เชเซ. เช
เชจเซ เชเชเซ เชนเซเช FaaS เชตเชฟเชถเซ เชจเชนเซเช, เชชเชฐเชเชคเซ เชตเซเชฌเชนเซเชเซเชธ เชตเชฟเชถเซ เชตเชพเชค เชเชฐเซเชถ. เชนเซเช เชเชฌเซเชเซเชเซเช เชธเซเชเซเชฐเซเช เชตเซเชฌเชนเซเชเซเชธเชจเซ เชเชชเชฏเซเช เชเชฐเซเชจเซ เชเชตเซเชจเซเชเซเชธเชจเซ เชนเซเชจเซเชกเชฒ เชเชฐเชตเชพเชจเซเช เชเซเชฏเซเชเซเชฐเชฟเชฏเชฒ เชเชฆเชพเชนเชฐเชฃ เชฌเชคเชพเชตเซเชถ.
เชเชฌเซเชเซเชเซเช เชธเซเชเซเชฐเซเช เช
เชจเซ เชตเซเชฌเชนเซเชเซเชธ เชตเชฟเชถเซ เชฅเซเชกเชพเช เชถเชฌเซเชฆเซ. เชเชฌเซเชเซเชเซเช เชธเซเชเซเชฐเซเช เชคเชฎเชจเซ เชเชฌเซเชเซเชเซเชเชจเชพ เชธเซเชตเชฐเซเชชเชฎเชพเช เชเซเชฒเชพเชเชกเชฎเชพเช เชเซเชเชชเชฃ เชกเซเชเชพ เชธเซเชเซเชฐ เชเชฐเชตเชพเชจเซ เชฎเชเชเซเชฐเซ เชเชชเซ เชเซ, เชเซ S3 เช
เชฅเชตเชพ เช
เชจเซเชฏ API (เช
เชฎเชฒเซเชเชฐเชฃ เชชเชฐ เชเชงเชพเชฐ เชฐเชพเชเซเชจเซ) HTTP/HTTPS เชฆเซเชตเชพเชฐเชพ เชเชเซเชธเซเชธ เชเชฐเซ เชถเชเชพเชฏ เชเซ. เชตเซเชฌเชนเซเชเซเชธ เชธเชพเชฎเชพเชจเซเชฏ เชฐเซเชคเซ เชเชธเซเชเชฎ HTTP เชเซเชฒเชฌเซเชเซเชธ เชเซ. เชคเซเช เชธเชพเชฎเชพเชจเซเชฏ เชฐเซเชคเซ เชเซเช เชเชตเซเชจเซเช เชฆเซเชตเชพเชฐเชพ เชเซเชฐเชฟเชเชฐ เชฅเชพเชฏ เชเซ, เชเซเชฎ เชเซ เชเซเชกเชจเซ เชฐเชฟเชชเซเชเซเชเชฐเซเชฎเชพเช เชงเชเซเชฒเชตเชพเชฎเชพเช เชเชตเซ เชเซ เช
เชฅเชตเชพ เชเซเช เชเชฟเชชเซเชชเชฃเซ เชฌเซเชฒเซเช เชชเชฐ เชชเซเชธเซเช เชเชฐเชตเชพเชฎเชพเช เชเชตเซ เชเซ. เชเซเชฏเชพเชฐเซ เชเซเช เชเชตเซเชจเซเช เชฅเชพเชฏ เชเซ, เชคเซเชฏเชพเชฐเซ เชฎเซเชณ เชธเชพเชเช เชตเซเชฌเชนเซเช เชฎเชพเชเซ เชเชฒเซเชฒเซเชเชฟเชค URL เชชเชฐ HTTP เชตเชฟเชจเชเชคเซ เชฎเซเชเชฒเซ เชเซ. เชชเชฐเชฟเชฃเชพเชฎเซ, เชคเชฎเซ เชเช เชธเชพเชเช เชชเชฐเชจเซ เชเชตเซเชจเซเชเซเชธ เชฌเซเชเซ เชธเชพเชเช เชชเชฐ เชเซเชฐเชฟเชเชฐ เชเซเชฐเชฟเชฏเชพเช เชฌเชจเชพเชตเซ เชถเชเซ เชเซ (
เชเชตเชพ เชเชเซเชฎเซเชถเชจเชจเซ เชเชชเชฏเซเช เชเชฐเซ เชถเชเชพเชฏ เชคเซเชตเชพ เชธเชฐเชณ เชเชฟเชธเซเชธเชพเชเชจเชพเช เชเชฆเชพเชนเชฐเชฃเซ:
- เช เชจเซเชฏ เชเซเชฒเชพเชเชก เชธเซเชเซเชฐเซเชเชฎเชพเช เชคเชฎเชพเชฎ เชเชฌเซเชเซเชเซเชเชจเซ เชจเชเชฒเซ เชฌเชจเชพเชตเชตเซ. เชเซเชฏเชพเชฐเซ เชชเชฃ เชซเชพเชเชฒเซ เชเชฎเซเชฐเชตเชพเชฎเชพเช เชเชตเซ เช เชฅเชตเชพ เชฌเชฆเชฒเชตเชพเชฎเชพเช เชเชตเซ เชคเซเชฏเชพเชฐเซ เชซเซเชฒเชพเชฏ เชชเชฐ เชจเชเชฒเซ เชฌเชจเชพเชตเชตเซ เชเชตเชถเซเชฏเช เชเซ.
- เชเซเชฐเชพเชซเชฟเช เชซเชพเชเชฒเซเชจเซ เชฅเชเชฌเชจเซเชฒเซเชธเชจเซ เชถเซเชฐเซเชฃเซเชจเซเช เชธเซเชตเชเชพเชฒเชฟเชค เชจเชฟเชฐเซเชฎเชพเชฃ, เชซเซเชเซเชเซเชฐเชพเชซเซเชธเชฎเชพเช เชตเซเชเชฐเชฎเชพเชฐเซเช เชเชฎเซเชฐเชตเชพ เช เชจเซ เช เชจเซเชฏ เชเชฎเซเช เชซเซเชฐเชซเชพเชฐเซ.
- เชจเชตเชพ เชฆเชธเซเชคเชพเชตเซเชเซเชจเชพ เชเชเชฎเชจ เชตเชฟเชถเซ เชธเซเชเชจเชพ (เชเชฆเชพเชนเชฐเชฃ เชคเชฐเซเชเซ, เชตเชฟเชคเชฐเชฟเชค เชเชเชพเชเชจเซเชเชฟเชเช เชธเซเชตเชพ เชเซเชฒเชพเชเชก เชชเชฐ เช เชนเซเชตเชพเชฒเซ เช เชชเชฒเซเชก เชเชฐเซ เชเซ, เช เชจเซ เชจเชพเชฃเชพเชเซเชฏ เชฆเซเชเชฐเซเช เชจเชตเชพ เช เชนเซเชตเชพเชฒเซ เชตเชฟเชถเซ เชธเซเชเชจเชพเช เชฎเซเชณเชตเซ เชเซ, เชคเชชเชพเชธ เชเชฐเซ เชเซ เช เชจเซ เชคเซเชจเซเช เชตเชฟเชถเซเชฒเซเชทเชฃ เชเชฐเซ เชเซ).
- เชฅเซเชกเชพ เชตเชงเซ เชเชเชฟเชฒ เชเซเชธเซเชฎเชพเช เชธเชฎเชพเชตเซเชถ เชฅเชพเชฏ เชเซ, เชเชฆเชพเชนเชฐเชฃ เชคเชฐเซเชเซ, เชเซเชฌเชฐเชจเซเชเซเชธเชจเซ เชตเชฟเชจเชเชคเซ เชเชจเชฐเซเช เชเชฐเชตเซ, เชเซ เชเชฐเซเชฐเซ เชเชจเซเชเซเชจเชฐ เชธเชพเชฅเซ เชชเซเชก เชฌเชจเชพเชตเซ เชเซ, เชคเซเชจเซ เชเชพเชฐเซเชฏ เชชเชฐเชฟเชฎเชพเชฃเซ เชชเชธเชพเชฐ เชเชฐเซ เชเซ เช เชจเซ เชชเซเชฐเชเซเชฐเชฟเชฏเชพ เชเชฐเซเชฏเชพ เชชเชเซ เชเชจเซเชเซเชจเชฐ เชคเซเชเซ เชเชพเชฏ เชเซ.
เชเชฆเชพเชนเชฐเชฃ เชคเชฐเซเชเซ, เชเซเชฏเชพเชฐเซ Mail.ru เชเซเชฒเชพเชเชก เชธเซเชฒเซเชฏเซเชถเชจเซเชธ (MCS) เชเชฌเซเชเซเชเซเช เชธเซเชเซเชฐเซเช เชฌเชเซเชเชฎเชพเช เชซเซเชฐเชซเชพเชฐเซ เชตเซเชฌเชนเซเชเชจเซ เชเชชเชฏเซเช เชเชฐเซเชจเซ AWS เชเชฌเซเชเซเชเซเช เชธเซเชเซเชฐเซเชเชฎเชพเช เชธเชฎเชจเซเชตเชฏเชฟเชค เชฅเชพเชฏ เชคเซเชฏเชพเชฐเซ เช เชฎเซ เชเชพเชฐเซเชฏ 1 เชจเซเช เชเช เชชเซเชฐเชเชพเชฐ เชฌเชจเชพเชตเซเชถเซเช. เชตเชพเชธเซเชคเชตเชฟเช เชฒเซเชก เชเซเชธเชฎเชพเช, เช เชธเซเชฎเซเชณ เชเชพเชฐเซเชฏ เชเชคเชพเชฐเชฎเชพเช เชตเซเชฌเชนเซเชเซเชธเชจเซ เชจเซเชเชงเชฃเซ เชเชฐเซเชจเซ เชชเซเชฐเชฆเชพเชจ เชเชฐเชตเซเช เชเซเชเช, เชชเชฐเชเชคเซ เชคเชพเชฒเซเชฎ เชเชพเชฐเซเชฏ เชฎเชพเชเซ เช เชฎเซ เชเชจเชพ เชตเชฟเชจเชพ เช เชฎเชฒเซเชเชฐเชฃ เชเชฐเซเชถเซเช.
เชเชพเชฎ เชเชฐเชตเชพเชจเซ เชฏเซเชเชจเชพ
เช เชเซเชฐเชฟเชฏเชพเชชเซเชฐเชคเชฟเชเซเชฐเชฟเชฏเชพ เชชเซเชฐเซเชเซเชเซเชฒ เชตเชฟเชเชคเชตเชพเชฐ เชตเชฐเซเชฃเชตเซเชฒ เชเซ
- เชชเซเชฐเชเชพเชถเชจ เชธเซเชตเชพ, เชเซ S3 เชธเซเชเซเชฐเซเช เชฌเชพเชเซ เชชเชฐ เชเซ เช เชจเซ เชเซเชฏเชพเชฐเซ webnhook เชเซเชฐเชฟเชเชฐ เชฅเชพเชฏ เชเซ เชคเซเชฏเชพเชฐเซ HTTP เชตเชฟเชจเชเชคเซเช เชชเซเชฐเชเชพเชถเชฟเชค เชเชฐเซ เชเซ.
- เชตเซเชฌเชนเซเช เชชเซเชฐเชพเชชเซเชค เชเชฐเซ เชฐเชนเซเชฏเซเช เชเซ เชธเชฐเซเชตเชฐ, เชเซ HTTP เชชเซเชฐเชเชพเชถเชจ เชธเซเชตเชพเชจเซ เชตเชฟเชจเชเชคเซเช เชธเชพเชเชญเชณเซ เชเซ เช เชจเซ เชฏเซเชเซเชฏ เชเซเชฐเชฟเชฏเชพเช เชเชฐเซ เชเซ. เชธเชฐเซเชตเชฐ เชเซเชเชชเชฃ เชญเชพเชทเชพเชฎเชพเช เชฒเชเซ เชถเชเชพเชฏ เชเซ; เช เชฎเชพเชฐเชพ เชเชฆเชพเชนเชฐเชฃเชฎเชพเช, เช เชฎเซ เชธเชฐเซเชตเชฐเชจเซ Go เชฎเชพเช เชฒเชเซเชถเซเช.
S3 API เชฎเชพเช เชตเซเชฌเชนเซเชเชจเชพ เช เชฎเชฒเซเชเชฐเชฃเชจเซ เชเช เชตเชฟเชถเซเชท เชตเชฟเชถเซเชทเชคเชพ เช เชชเซเชฐเชเชพเชถเชจ เชธเซเชตเชพ เชชเชฐ เชตเซเชฌเชนเซเช เชชเซเชฐเชพเชชเซเชค เชเชฐเชจเชพเชฐ เชธเชฐเซเชตเชฐเชจเซ เชจเซเชเชงเชฃเซ เชเซ. เชเชพเชธ เชเชฐเซเชจเซ, เชตเซเชฌเชนเซเช เชชเซเชฐเชพเชชเซเชค เชเชฐเชจเชพเชฐ เชธเชฐเซเชตเชฐเซ เชชเซเชฐเชเชพเชถเชจ เชธเซเชตเชพเชจเชพ เชธเชเชฆเซเชถเชพเชเชจเชพ เชธเชฌเซเชธเซเชเซเชฐเชฟเชชเซเชถเชจเชจเซ เชชเซเชทเซเชเชฟ เชเชฐเชตเซ เชเชตเชถเซเชฏเช เชเซ (เช เชจเซเชฏ เชตเซเชฌเชนเซเช เช เชฎเชฒเซเชเชฐเชฃเชฎเชพเช, เชธเชฌเซเชธเซเชเซเชฐเชฟเชชเซเชถเชจเชจเซ เชชเซเชทเซเชเชฟ เชธเชพเชฎเชพเชจเซเชฏ เชฐเซเชคเซ เชเชฐเซเชฐเซ เชจเชฅเซ).
เชคเชฆเชจเซเชธเชพเชฐ, เชตเซเชฌเชนเซเช เชชเซเชฐเชพเชชเซเชค เชเชฐเชจเชพเชฐ เชธเชฐเซเชตเชฐเซ เชฌเซ เชฎเซเชเซเชฏ เชเชพเชฎเชเซเชฐเซเชจเซ เชธเชฎเชฐเซเชฅเชจ เชเชชเชตเซเช เชเชตเชถเซเชฏเช เชเซ:
- เชจเซเชเชงเชฃเซเชจเซ เชชเซเชทเซเชเชฟ เชเชฐเชตเชพ เชฎเชพเชเซ เชชเซเชฐเชเชพเชถเชจ เชธเซเชตเชพเชจเซ เชตเชฟเชจเชเชคเซเชจเซ เชเชตเชพเชฌ เชเชชเซ,
- เชเชตเชจเชพเชฐเซ เชเชเชจเชพเช เชชเชฐ เชชเซเชฐเชเซเชฐเชฟเชฏเชพ เชเชฐเซ.
เชตเซเชฌเชนเซเช เชชเซเชฐเชพเชชเซเชค เชเชฐเชจเชพเชฐ เชธเชฐเซเชตเชฐ เชเชจเซเชธเซเชเซเชฒ เชเชฐเซ เชฐเชนเซเชฏเซเช เชเซ
เชตเซเชฌเชนเซเช เชฐเซเชธเซเชตเชฟเชเช เชธเชฐเซเชตเชฐเชจเซ เชเชฒเชพเชตเชตเชพ เชฎเชพเชเซ, เชคเชฎเชพเชฐเซ Linux เชธเชฐเซเชตเชฐเชจเซ เชเชฐเซเชฐ เชเซ. เช เชฒเซเชเชฎเชพเช, เชเชฆเชพเชนเชฐเชฃ เชคเชฐเซเชเซ, เช เชฎเซ เชตเชฐเซเชเซเชฏเซเช เชฒ เชเชจเซเชธเซเชเชจเซเชธเชจเซ เชเชชเชฏเซเช เชเชฐเซเช เชเซเช เชเซเชจเซ เช เชฎเซ MCS เชชเชฐ เชเชฎเชพเชตเซเช เชเซเช.
เชเชพเชฒเซ เชเชฐเซเชฐเซ เชธเซเชซเซเชเชตเซเชฐ เชเชจเซเชธเซเชเซเชฒ เชเชฐเซเช เช เชจเซ เชตเซเชฌเชนเซเช เชฐเซเชธเซเชตเชฟเชเช เชธเชฐเซเชตเชฐ เชฒเซเชเช เชเชฐเซเช.
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:~$ 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.
เชเชพเชฒเซ เชธเชฐเซเชตเชฐ เชถเชฐเซ เชเชฐเซเช:
ubuntu@ubuntu-basic-1-2-10gb:~$ cd s3-webhook/
ubuntu@ubuntu-basic-1-2-10gb:~/s3-webhook$ sudo ./s3-webhook -port 80
เชชเซเชฐเชเชพเชถเชจ เชธเซเชตเชพ เชชเชฐ เชธเชฌเซเชธเซเชเซเชฐเชพเชเชฌ เชเชฐเซ
เชคเชฎเซ API เช เชฅเชตเชพ เชตเซเชฌ เชเชจเซเชเชฐเชซเซเชธ เชฆเซเชตเชพเชฐเชพ เชคเชฎเชพเชฐเชพ เชตเซเชฌเชนเซเช เชชเซเชฐเชพเชชเซเชค เชเชฐเชจเชพเชฐ เชธเชฐเซเชตเชฐเชจเซ เชจเซเชเชงเชฃเซ เชเชฐเชพเชตเซ เชถเชเซ เชเซ. เชธเชฐเชณเชคเชพ เชฎเชพเชเซ, เช เชฎเซ เชตเซเชฌ เชเชจเซเชเชฐเชซเซเชธ เชฆเซเชตเชพเชฐเชพ เชจเซเชเชงเชฃเซ เชเชฐเซเชถเซเช:
เชเชพเชฒเซ เชฌเชเซเช เชตเชฟเชญเชพเช เชชเชฐ เชเชเช เชเชเชเซเชฐเซเชฒ เชฐเซเชฎเชฎเชพเช.- เชฌเชเซเช เชชเชฐ เชเชพเช เชเซเชจเชพ เชฎเชพเชเซ เช เชฎเซ เชตเซเชฌเชนเซเชเซเชธ เชเซเช เชตเซเชถเซเช เช เชจเซ เชเชฟเชฏเชฐ เชชเชฐ เชเซเชฒเชฟเช เชเชฐเซเชถเซเช:
เชตเซเชฌเชนเซเชเซเชธ เชเซเชฌ เชชเชฐ เชเชพเช เช
เชจเซ เชเชฎเซเชฐเซ เชชเชฐ เชเซเชฒเชฟเช เชเชฐเซ:
เชเซเชทเซเชคเซเชฐเซ เชญเชฐเซ:
ID โ เชตเซเชฌเชนเซเชเชจเซเช เชจเชพเชฎ.
เชเชตเซเชจเซเช - เชเช เชเชตเซเชจเซเชเซเชธ เชเซเชฐเชพเชจเซเชธเชฎเชฟเช เชเชฐเชตเซ. เช เชฎเซ เชซเชพเชเชฒเซ เชธเชพเชฅเซ เชเชพเชฎ เชเชฐเชคเซ เชตเชเชคเซ เชฅเชคเซ เชคเชฎเชพเชฎ เชเชตเซเชจเซเชเซเชธเชจเซเช เชเซเชฐเชพเชจเซเชธเชฎเชฟเชถเชจ เชธเซเช เชเชฐเซเชฏเซเช เชเซ (เชเชฎเซเชฐเชตเซเช เช เชจเซ เชเชพเชขเซ เชจเชพเชเชตเซเช).
URL โ เชตเซเชฌเชนเซเช เชธเชฐเซเชตเชฐ เชธเชฐเชจเชพเชฎเซเช เชชเซเชฐเชพเชชเซเชค เชเชฐเซ เชเซ.
เชซเชฟเชฒเซเชเชฐ เชเชชเชธเชฐเซเช/เชชเซเชฐเชคเซเชฏเชฏ เช เชเช เชซเชฟเชฒเซเชเชฐ เชเซ เชเซ เชคเชฎเชจเซ เชซเชเซเชค เชเชตเชพ เชเชฌเซเชเซเชเซเชเซเชธ เชฎเชพเชเซ เช เชตเซเชฌเชนเซเชเซเชธ เชเชจเชฐเซเช เชเชฐเชตเชพเชจเซ เชฎเชเชเซเชฐเซ เชเชชเซ เชเซ เชเซเชจเชพ เชจเชพเชฎ เชเซเชเซเชเชธ เชจเชฟเชฏเชฎเซ เชธเชพเชฅเซ เชฎเซเชณ เชเชพเชฏ เชเซ. เชเชฆเชพเชนเชฐเชฃ เชคเชฐเซเชเซ, เชตเซเชฌเชนเซเช เชฎเชพเชคเซเชฐ .png เชเชเซเชธเซเชเซเชเชถเชจ เชงเชฐเชพเชตเชคเซ เชซเชพเชเชฒเซเชจเซ เชเซเชฐเชฟเชเชฐ เชเชฐเชตเชพ เชฎเชพเชเซ, เชฎเชพเช เชซเชฟเชฒเซเชเชฐ เชชเซเชฐเชคเซเชฏเชฏ เชคเชฎเชพเชฐเซ "png" เชฒเชเชตเชพเชจเซ เชเชฐเซเชฐ เชเซ.
เชนเชพเชฒเชฎเชพเช, เชตเซเชฌเชนเซเช เชฐเซเชธเซเชตเชฟเชเช เชธเชฐเซเชตเชฐเชจเซ เชเชเซเชธเซเชธ เชเชฐเชตเชพ เชฎเชพเชเซ เชฎเชพเชคเซเชฐ เชชเซเชฐเซเช 80 เช เชจเซ 443 เชธเชชเซเชฐเซเชเซเชก เชเซ.
เชเชพเชฒเซ เชเซเชฒเชฟเช เชเชฐเซเช เชนเซเช เชเชฎเซเชฐเซ เช เชจเซ เชเชชเชฃเซ เชจเซเชเซเชจเซ เชฌเชพเชฌเชคเซ เชเซเชเชถเซเช:
เชนเซเช เชเชฎเซเชฐเซเชฏเซเช.
เชตเซเชฌเชนเซเช เชชเซเชฐเชพเชชเซเชค เชเชฐเชจเชพเชฐ เชธเชฐเซเชตเชฐ เชคเซเชจเชพ เชฒเซเชเชฎเชพเช เชนเซเช เชจเซเชเชงเชฃเซ เชชเซเชฐเชเซเชฐเชฟเชฏเชพเชจเซ เชชเซเชฐเชเชคเชฟ เชฆเชฐเซเชถเชพเชตเซ เชเซ:
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
เชจเซเชเชงเชฃเซ เชชเซเชฐเซเชฃ เชฅเช เชเช เชเซ. เชเชเชณเชจเชพ เชตเชฟเชญเชพเชเชฎเชพเช, เช เชฎเซ เชตเซเชฌเชนเซเช เชชเซเชฐเชพเชชเซเชค เชเชฐเชจเชพเชฐ เชธเชฐเซเชตเชฐเชจเชพ เชเชชเชฐเซเชถเชจเชจเชพ เช เชฒเซเชเซเชฐเชฟเชงเชฎเชจเซ เชจเชเซเชเชฅเซ เชเซเชเชถเซเช.
เชตเซเชฌเชนเซเช เชชเซเชฐเชพเชชเซเชค เชเชฐเชจเชพเชฐ เชธเชฐเซเชตเชฐเชจเซเช เชตเชฐเซเชฃเชจ
เช เชฎเชพเชฐเชพ เชเชฆเชพเชนเชฐเชฃเชฎเชพเช, เชธเชฐเซเชตเชฐ Go เชฎเชพเช เชฒเชเชพเชฏเซเชฒเซเช เชเซ. เชเชพเชฒเซ เชคเซเชจเชพ เชเชชเชฐเซเชถเชจเชจเชพ เชฎเซเชณเชญเซเชค เชธเชฟเชฆเซเชงเชพเชเชคเซ เชเซเชเช.
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))
}
เชฎเซเชเซเชฏ เชเชพเชฐเซเชฏเซ เชงเซเชฏเชพเชจเชฎเชพเช เชฒเซ:
- Ping() - เชเช เชฐเซเช เชเซ เชเซ URL/ping เชฆเซเชตเชพเชฐเชพ เชชเซเชฐเชคเชฟเชธเชพเชฆ เชเชชเซ เชเซ, เชเซเชตเชเชคเชคเชพ เชเชเชพเชธเชฃเซเชจเซเช เชธเชฐเชณ เช เชฎเชฒเซเชเชฐเชฃ.
- Webhook() - เชฎเซเชเซเชฏ เชฎเชพเชฐเซเช, URL/webhook เชนเซเชจเซเชกเชฒเชฐ:
- เชชเซเชฐเชเชพเชถเชจ เชธเซเชตเชพ เชชเชฐ เชจเซเชเชงเชฃเซเชจเซ เชชเซเชทเซเชเชฟ เชเชฐเซ เชเซ (เชธเชฌเซเชธเซเชเซเชฐเชฟเชชเซเชถเชจ เชเชจเซเชซเชฐเซเชฎเซเชถเชจ เชซเชเชเซเชถเชจ เชชเชฐ เชเชพเช),
- เชเชจเชเชฎเชฟเชเช เชตเซเชฌเชนเซเชเซเชธเชจเซ เชชเซเชฐเชเซเชฐเชฟเชฏเชพ เชเชฐเซ เชเซ (เชเซเชฐเซเชเซเชฐเซเชกเซเชธ เชเชพเชฐเซเชฏ).
- เชซเชเชเซเชถเชจเซเชธ HmacSha256 เช เชจเซ HmacSha256hex เช HMAC-SHA256 เช เชจเซ HMAC-SHA256 เชเชจเซเชเซเชฐเชฟเชชเซเชถเชจ เชเชฒเซเชเซเชฐเชฟเชงเชฎเซเชธเชจเซเช เช เชฎเชฒเซเชเชฐเชฃ เชเซ เชเซเชฎเชพเช เชนเชธเซเชคเชพเชเซเชทเชฐเชจเซ เชเชฃเชคเชฐเซ เชเชฐเชตเชพ เชฎเชพเชเซ เชนเซเชเซเชธเชพเชกเซเชธเชฟเชฎเชฒ เชจเชเชฌเชฐเซเชจเซ เชธเซเชเซเชฐเชฟเชเช เชคเชฐเซเชเซ เชเชเชเชชเซเช เชเซ.
- main เช เชฎเซเชเซเชฏ เชเชพเชฐเซเชฏ เชเซ, เชเชฎเชพเชจเซเชก เชฒเชพเชเชจ เชชเซเชฐเชพเชฎเซเชเชฐเซเชธเชจเซ เชชเซเชฐเชเซเชฐเชฟเชฏเชพ เชเชฐเซ เชเซ เช เชจเซ URL เชนเซเชจเซเชกเชฒเชฐเซเชธเชจเซ เชจเซเชเชงเชฃเซ เชเชฐเซ เชเซ.
เชธเชฐเซเชตเชฐ เชฆเซเชตเชพเชฐเชพ เชธเซเชตเซเชเซเชค เชเชฆเซเชถ เชตเชพเชเซเชฏ เชชเชฐเชฟเชฎเชพเชฃเซ:
- -เชชเซเชฐเซเช เช เชชเซเชฐเซเช เชเซ เชเซเชจเชพ เชชเชฐ เชธเชฐเซเชตเชฐ เชธเชพเชเชญเชณเชถเซ.
- -เชเชกเซเชฐเซเชธ - IP เชธเชฐเชจเชพเชฎเซเช เชเซ เชธเชฐเซเชตเชฐ เชธเชพเชเชญเชณเชถเซ.
- -เชธเซเชเซเชฐเชฟเชชเซเช เช เชเช เชฌเชพเชนเซเชฏ เชชเซเชฐเซเชเซเชฐเชพเชฎ เชเซ เชเซ เชฆเชฐเซเช เชเชจเชเชฎเชฟเชเช เชนเซเช เชฎเชพเชเซ เชเชนเซเชตเชพเชฎเชพเช เชเชตเซ เชเซ.
เชเชพเชฒเซ เชเซเชเชฒเชพเช เชเชพเชฐเซเชฏเซ เชชเชฐ เชจเชเซเชเชฅเซ เชจเชเชฐ เชเชฐเซเช:
//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)
}
}
เช เชซเชเชเซเชถเชจ เชจเชเซเชเซ เชเชฐเซ เชเซ เชเซ เชจเซเชเชงเชฃเซเชจเซ เชชเซเชทเซเชเชฟ เชเชฐเชตเชพเชจเซ เชตเชฟเชจเชเชคเซ เช
เชฅเชตเชพ เชตเซเชฌเชนเซเช เชเชตเซ เชเซ. เชฅเซ เชจเซเชเซ เชฎเซเชเชฌ เชเซ
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ยป
}
เช เชชเซเชฐเชถเซเชจเชจเซ เชเชตเชพเชฌ เชเชชเชตเซ เชเชฐเซเชฐเซ เชเซ:
content-type: application/json
{"signature":ยซea3fce4bb15c6de4fec365d36bcebbc34ccddf54616d5ca12e1972f82b6d37afยป}
เชเซเชฏเชพเช เชธเชนเซเชจเซ เชเชฃเชคเชฐเซ เช เชฐเซเชคเซ เชเชฐเชตเชพเชฎเชพเช เชเชตเซ เชเซ:
signature = hmac_sha256(url, hmac_sha256(TopicArn,
hmac_sha256(Timestamp, Token)))
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"
}
}
]
}
เชคเชฆเชจเซเชธเชพเชฐ, เชตเชฟเชจเชเชคเซเชจเชพ เชเชงเชพเชฐเซ, เชคเชฎเชพเชฐเซ เชกเซเชเชพเชจเซ เชชเซเชฐเชเซเชฐเชฟเชฏเชพ เชเซเชตเซ เชฐเซเชคเซ เชเชฐเชตเซ เชคเซ เชธเชฎเชเชตเชพเชจเซ เชเชฐเซเชฐ เชเซ. เชฎเซเช เชธเซเชเช เชคเชฐเซเชเซ เชชเซเชฐเชตเซเชถ เชชเชธเชเชฆ เชเชฐเซเชฏเซ "Type":"SubscriptionConfirmation"
, เชเชพเชฐเชฃ เชเซ เชคเซ เชธเชฌเซเชธเซเชเซเชฐเชฟเชชเซเชถเชจ เชชเซเชทเซเชเชฟเชเชฐเชฃ เชตเชฟเชจเชเชคเซเชฎเชพเช เชนเชพเชเชฐ เชเซ เช
เชจเซ เชตเซเชฌเชนเซเชเชฎเชพเช เชนเชพเชเชฐ เชจเชฅเซ. POST เชตเชฟเชจเชเชคเซเชฎเชพเช เช เชเชจเซเชเซเชฐเซเชจเซ เชนเชพเชเชฐเซ/เชเซเชฐเชนเชพเชเชฐเซเชจเชพ เชเชงเชพเชฐเซ, เชชเซเชฐเซเชเซเชฐเชพเชฎเชจเซ เชตเชงเซ เช
เชฎเชฒ เชเชพเช เชคเซ เชซเชเชเซเชถเชจเชฎเชพเช เชเชพเชฏ เชเซ. SubscriptionConfirmation
, เช
เชฅเชตเชพ เชเชพเชฐเซเชฏเชฎเชพเช GotRecords
.
เช
เชฎเซ เชธเชฌเซเชธเซเชเซเชฐเชฟเชชเซเชถเชจ เชเชจเซเชซเชฐเซเชฎเซเชถเชจ เชซเชเชเซเชถเชจเชจเซ เชตเชฟเชเชคเชตเชพเชฐ เชงเซเชฏเชพเชจเชฎเชพเช เชฒเชเชถเซเช เชจเชนเซเช; เชคเซ เชเชฎเชพเช เชจเชฟเชฐเซเชงเชพเชฐเชฟเชค เชธเชฟเชฆเซเชงเชพเชเชคเซ เช
เชจเซเชธเชพเชฐ เชฒเชพเชเซ เชเชฐเชตเชพเชฎเชพเช เชเชตเซ เชเซ
GotRecords เชซเชเชเซเชถเชจ เชเชจเชเชฎเชฟเชเช เชตเชฟเชจเชเชคเชฟเชจเซเช เชตเชฟเชถเซเชฒเซเชทเชฃ เชเชฐเซ เชเซ เช เชจเซ เชฆเชฐเซเช เชฐเซเชเซเชฐเซเชก เชเชฌเซเชเซเชเซเช เชฎเชพเชเซ เชชเชฐเชฟเชฎเชพเชฃเซ เชธเชพเชฅเซ เชฌเชพเชนเซเชฏ เชธเซเชเซเชฐเชฟเชชเซเช (เชเซเชจเซเช เชจเชพเชฎ -script เชชเซเชฐเชพเชฎเซเชเชฐเชฎเชพเช เชชเชธเชพเชฐ เชเชฐเชตเชพเชฎเชพเช เชเชตเซเชฏเซเช เชนเชคเซเช) เชเซเชฒ เชเชฐเซ เชเซ:
- เชกเซเชฒเชจเซเช เชจเชพเชฎ
- เชเชฌเซเชเซเชเซเช เชเซ
- เชเซเชฐเชฟเชฏเชพ:
- เชจเชเชฒ - เชเซ เชฎเซเชณ เชตเชฟเชจเชเชคเซเชฎเชพเช เชนเซเชฏ EventName = ObjectCreated | เชชเซเชเชเชฌเซเชเซเชเซเช | เชชเซเชเชเชฌเซเชเซเชเซเช เชเซเชชเซ
- เชเชพเชขเซ เชจเชพเชเซ - เชเซ เชฎเซเชณ เชตเชฟเชจเชเชคเซเชฎเชพเช เชนเซเชฏ EventName = ObjectRemoved | เชเชฌเซเชเซเชเซเช เชเชพเชขเซ เชจเชพเชเซ
เชเชฎ, เชเซ เชนเซเช เชชเซเชธเซเช เชตเชฟเชจเชเชคเซ เชธเชพเชฅเซ เชเชตเซ เชเซ, เชคเซ เชตเชฐเซเชฃเชตเซเชฏเชพ เชชเซเชฐเชฎเชพเชฃเซ
script.sh bucketA some-file-to-bucket copy
เชคเซ เชธเชฎเชเชตเซเช เชเซเชเช เชเซ เช เชตเซเชฌเชนเซเช เชชเซเชฐเชพเชชเซเชค เชเชฐเชจเชพเชฐ เชธเชฐเซเชตเชฐ เชธเชเชชเซเชฐเซเชฃ เชเชคเซเชชเชพเชฆเชจ เชเชเซเชฒ เชจเชฅเซ, เชชเชฐเชเชคเซ เชธเชเชญเชตเชฟเชค เช เชฎเชฒเซเชเชฐเชฃเชจเซเช เชเช เชธเชฐเชณ เชเชฆเชพเชนเชฐเชฃ เชเซ.
เชเชพเชฎเชจเซเช เชเชฆเชพเชนเชฐเชฃ
เชเชพเชฒเซ MCS เชฎเชพเช เชฎเซเชเซเชฏ เชฌเชเซเชเชฎเชพเชเชฅเซ AWS เชฎเชพเช เชฌเซเชเช เชช เชฌเชเซเชเชฎเชพเช เชซเชพเชเชฒเซเชจเซ เชธเชฟเชเชเซเชฐเชจเชพเชเช เชเชฐเซเช. เชฎเซเชเซเชฏ เชฌเชเซเชเชจเซ myfiles-ash เชเชนเซเชตเชพเชฏ เชเซ, เชฌเซเชเช เชชเชจเซ myfiles-backup เชเชนเซเชตเชพเชฎเชพเช เชเชตเซ เชเซ (AWS เชฎเชพเช เชฌเชเซเช เชเซเช เชตเชฃเซ เช เชฒเซเชเชจเชพ เช เชตเชเชพเชถเชจเซ เชฌเชนเชพเชฐ เชเซ). เชคเชฆเชจเซเชธเชพเชฐ, เชเซเชฏเชพเชฐเซ เชซเชพเชเชฒ เชฎเซเชเซเชฏ เชฌเชเซเชเชฎเชพเช เชฎเซเชเชตเชพเชฎเชพเช เชเชตเซ เชเซ, เชคเซเชฏเชพเชฐเซ เชคเซเชจเซ เชจเชเชฒ เชฌเซเชเช เชช เชเชเชฎเชพเช เชฆเซเชเชพเชตเซ เชเซเชเช, เช เชจเซ เชเซเชฏเชพเชฐเซ เชคเซ เชฎเซเชเซเชฏเชฎเชพเชเชฅเซ เชเชพเชขเซ เชจเชพเชเชตเชพเชฎเชพเช เชเชตเซ เชเซ, เชคเซเชฏเชพเชฐเซ เชคเซเชจเซ เชฌเซเชเช เชชเชฎเชพเช เชเชพเชขเซ เชจเชพเชเชตเซ เชเซเชเช.
เช เชฎเซ awscli เชเชชเชฏเซเชเชฟเชคเชพเชจเซ เชเชชเชฏเซเช เชเชฐเซเชจเซ เชฌเชเซเชเซเชธ เชธเชพเชฅเซ เชเชพเชฎ เชเชฐเซเชถเซเช, เชเซ MCS เชเซเชฒเชพเชเชก เชธเซเชเซเชฐเซเช เช เชจเซ 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) ...
เชเชพเชฒเซ 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]:
เชเชพเชฒเซ 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]:
เชเชพเชฒเซ เชเชเซเชธเซเชธ เชคเชชเชพเชธเซเช:
AWS เชจเซ:
ubuntu@ubuntu-basic-1-2-10gb:~$ aws s3 ls --profile aws
2020-07-06 08:44:11 myfiles-backup
MCS เชฎเชพเชเซ, เชเชฆเซเชถ เชเชฒเชพเชตเชคเซ เชตเชเชคเซ เชคเชฎเชพเชฐเซ โendpoint-url เชเชฎเซเชฐเชตเชพเชจเซ เชเชฐเซเชฐ เชเซ:
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
เชเชเซเชธเซเชธ เชเชฐเซเชฏเซเช.
เชนเชตเซ เชเชตเชจเชพเชฐเชพ เชนเซเช เชชเชฐ เชชเซเชฐเชเซเชฐเชฟเชฏเชพ เชเชฐเชตเชพ เชฎเชพเชเซ เชเช เชธเซเชเซเชฐเชฟเชชเซเช เชฒเชเซเช, เชเชพเชฒเซ เชคเซเชจเซ 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
เชเชพเชฒเซ เชธเชฐเซเชตเชฐ เชถเชฐเซ เชเชฐเซเช:
ubuntu@ubuntu-basic-1-2-10gb:~/s3-webhook$ sudo ./s3-webhook -port 80 -
script scripts/s3_backup_mcs_aws.sh
เชเชพเชฒเซ เชเซเชเช เชเซ เชคเซ เชเซเชตเซ เชฐเซเชคเซ เชเชพเชฐเซเชฏ เชเชฐเซ เชเซ. เชฆเซเชตเชพเชฐเชพ
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
เชเชพเชฒเซ 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
เชนเชตเซ, เชตเซเชฌ เชเชจเซเชเชฐเชซเซเชธ เชฆเซเชตเชพเชฐเชพ, เช เชฎเซ myfiles-ash bucket เชฎเชพเชเชฅเซ เชซเชพเชเชฒ เชเชพเชขเซ เชจเชพเชเซเชถเซเช.
เชธเชฐเซเชตเชฐ เชฒเซเชเซเชธ:
2020/07/06 09:44:46 [POST] incoming HTTP request from
95.163.216.92:58224
delete: s3://myfiles-backup/test.txt
เชฌเชเซเช เชธเชพเชฎเชเซเชฐเซ:
ubuntu@ubuntu-basic-1-2-10gb:~/s3-webhook$ aws s3 --profile aws ls
myfiles-backup
ubuntu@ubuntu-basic-1-2-10gb:~$
เชซเชพเชเชฒ เชเชพเชขเซ เชจเชพเชเชตเชพเชฎเชพเช เชเชตเซ เชเซ, เชธเชฎเชธเซเชฏเชพ เชนเชฒ เชฅเชพเชฏ เชเซ.
เชจเชฟเชทเซเชเชฐเซเชท เช เชจเซ ToDo
เช เชฒเซเชเชฎเชพเช เชตเชชเชฐเชพเชฏเซเชฒ เชคเชฎเชพเชฎ เชเซเชก เชเซ
เช เชเซเชก เชคเชฎเซ เชคเชฎเชพเชฐเซ เชชเซเชฐเชตเซเชคเซเชคเชฟเชเชฎเชพเช S3 เชตเซเชฌเชนเซเชเซเชธเชจเซ เชเชชเชฏเซเช เชเซเชตเซ เชฐเซเชคเซ เชเชฐเซ เชถเชเซ เชเซ เชคเซเชจเชพ เชเชฆเชพเชนเชฐเชฃ เชธเชฟเชตเชพเชฏ เชฌเซเชเซเช เชเชเช เชจเชฅเซ. เชฎเซเช เชถเชฐเซเชเชคเชฎเชพเช เชเชนเซเชฏเซเช เชคเซเชฎ, เชเซ เชคเชฎเซ เชเชคเซเชชเชพเชฆเชจเชฎเชพเช เชเชตเชพ เชธเชฐเซเชตเชฐเชจเซ เชเชชเชฏเซเช เชเชฐเชตเชพเชจเซ เชฏเซเชเชจเชพ เชเชกเซ เชฐเชนเซเชฏเชพ เชนเซ, เชคเซ เชคเชฎเชพเชฐเซ เชเชเชพเชฎเชพเช เชเชเชพ เช เชธเซเชฎเซเชณ เชเชพเชฐเซเชฏ เชฎเชพเชเซ เชธเชฐเซเชตเชฐเชจเซ เชซเชฐเซเชฅเซ เชฒเชเชตเชพเชจเซ เชเชฐเซเชฐ เชเซ: เชเชจเชเชฎเชฟเชเช เชตเซเชฌเชนเซเชเซเชธเชจเซ เชเชคเชพเชฐเชฎเชพเช เชฐเชเซเชธเซเชเชฐ เชเชฐเซ (เชฐเซเชฌเชฟเชเชเชฎเชเซเชฏเซ เช เชฅเชตเชพ เชเชจเชเชเซเชเชธ), เช เชจเซ เชคเซเชฏเชพเชเชฅเซ เชคเซเชจเซเช เชตเชฟเชถเซเชฒเซเชทเชฃ เชเชฐเซ เช เชจเซ เชชเซเชฐเชเซเชฐเชฟเชฏเชพ เชเชฐเซ. เชเชพเชฎเชฆเชพเชฐ เช เชฐเชเซเช เชธเชพเชฅเซ. เชจเชนเชฟเชเชคเชฐ, เชเซเชฏเชพเชฐเซ เชตเซเชฌเชนเซเชเซเชธ เชฎเซเชเชพ เชชเชพเชฏเซ เชเชตเซ เชเซ, เชคเซเชฏเชพเชฐเซ เชคเชฎเชจเซ เชเชพเชฐเซเชฏเซ เชชเซเชฐเซเชฃ เชเชฐเชตเชพ เชฎเชพเชเซ เชธเชฐเซเชตเชฐ เชธเชเชธเชพเชงเชจเซเชจเซ เช เชเชคเชจเซ เชธเชพเชฎเชจเซ เชเชฐเชตเซ เชชเชกเซ เชถเชเซ เชเซ. เชเชคเชพเชฐเซเชจเซ เชนเชพเชเชฐเซ เชคเชฎเชจเซ เชธเชฐเซเชตเชฐ เช เชจเซ เชเชพเชฎเชฆเชพเชฐเซเชจเซ เชตเชฟเชคเชฐเชฟเชค เชเชฐเชตเชพเชจเซ เชฎเชเชเซเชฐเซ เชเชชเซ เชเซ, เชคเซเชฎเช เชจเชฟเชทเซเชซเชณเชคเชพเชจเชพ เชเชฟเชธเซเชธเชพเชฎเชพเช เชชเซเชจเชฐเชพเชตเชฐเซเชคเชฟเชค เชเชพเชฐเซเชฏเซ เชธเชพเชฅเซ เชธเชฎเชธเซเชฏเชพเช เชนเชฒ เชเชฐเซ เชเซ. เชฒเซเชเซเชเชเชจเซ เชตเชงเซ เชตเชฟเชเชคเชตเชพเชฐ เช เชจเซ เชตเชงเซ เชชเซเชฐเชฎเชพเชฃเชฟเชคเชฎเชพเช เชฌเชฆเชฒเชตเชพเชจเซ เชชเชฃ เชธเชฒเชพเชน เชเชชเชตเชพเชฎเชพเช เชเชตเซ เชเซ.
เชธเชซเชณเชคเชพ!
เชตเชฟเชทเชฏ เชชเชฐ เชตเชงเซ เชตเชพเชเชเชจ:
เชซเชพเชเชฒ เชธเชฟเชธเซเชเชฎ เชคเชฐเซเชเซ Mail.ru Cloud Solutions S3 เชเชฌเซเชเซเชเซเช เชธเซเชเซเชฐเซเช เชธเชพเชฅเซ เชเชพเชฎ เชเชฐเชตเซเช. เชธเซเชชเชฐเซเชงเชพเชจเซ เชนเชฐเชพเชตเชตเชพ เชฎเชพเชเซ เชเชฌเซเชเซเชเซเช เชธเซเชเซเชฐเซเชเชจเซ เชเชชเชฏเซเช เชเซเชตเซ เชฐเซเชคเซ เชฅเชพเชฏ เชเซ.
เชธเซเชฐเซเชธ: www.habr.com