เจเจตเฉเจเจ-เจธเฉฐเจเจพเจฒเจฟเจค เจเจฐเจเฉเจเฉเจเจเจฐ เจตเจฐเจคเฉ เจเจ เจธเจฐเฉเจคเจพเจ เจฆเฉ เจฒเจพเจเจค เจเฉเจธเจผเจฒเจคเจพ เจจเฉเฉฐ เจตเจงเจพเจเจเจฆเจพ เจนเฉ, เจเจฟเจเจเจเจฟ เจเจน เจเจฆเฉเจ เจนเฉ เจเจฟเจฐเจฟเจเจธเจผเฉเจฒ เจนเฉเฉฐเจฆเฉ เจนเจจ เจเจฆเฉเจ เจเจนเจจเจพเจ เจฆเฉ เจฒเฉเฉ เจนเฉเฉฐเจฆเฉ เจนเฉเฅค เจเจธ เจจเฉเฉฐ เจเจฟเจตเฉเจ เจฒเจพเจเฉ เจเจฐเจจเจพ เจนเฉ เจ
เจคเฉ เจตเจฐเจเจฐ เจเจชเจฒเฉเจเฉเจธเจผเจจเจพเจ เจฆเฉ เจคเฉเจฐ 'เจคเฉ เจตเจพเจงเฉ เจเจฒเจพเจเจก เจเจเจพเจเจเจ เจจเฉเฉฐ เจเจฟเจตเฉเจ เจจเจนเฉเจ เจฌเจฃเจพเจเจฃเจพ เจนเฉ เจเจธ เจฒเจ เจฌเจนเฉเจค เจธเจพเจฐเฉ เจตเจฟเจเจฒเจช เจนเจจเฅค เจ
เจคเฉ เจ
เฉฑเจ เจฎเฉเจ FaaS เจฌเจพเจฐเฉ เจจเจนเฉเจ, เจชเจฐ เจตเฉเจฌเจนเฉเฉฑเจ เจฌเจพเจฐเฉ เจเฉฑเจฒ เจเจฐเจพเจเจเจพเฅค เจฎเฉเจ เจเจฌเจเฉเจเจ เจธเจเฉเจฐเฉเจ เจตเฉเจฌเจนเฉเฉฑเจ เจจเจพเจฒ เจเจตเฉเจเจ เจนเฉเจเจกเจฒเจฟเฉฐเจ เจฆเจพ เจเฉเจธ เจธเจเฉฑเจกเฉ เจฆเจฟเจเจพเจตเจพเจเจเจพเฅค
เจเจฌเจเฉเจเจ เจธเจเฉเจฐเฉเจ เจ
เจคเฉ เจตเฉเจฌเจนเฉเฉฑเจ เจฌเจพเจฐเฉ เจเฉเจ เจธเจผเจฌเจฆเฅค เจเจฌเจเฉเจเจ เจธเจเฉเจฐเฉเจ เจคเฉเจนเจพเจจเฉเฉฐ S3 เจเจพเจ เจเจฟเจธเฉ เจนเฉเจฐ API (เจฒเจพเจเฉ เจเจฐเจจ 'เจคเฉ เจจเจฟเจฐเจญเจฐ) เจฆเฉเจเจฐเจพ HTTP/HTTPS เจฆเฉเจเจฐเจพ เจเจชเจฒเจฌเจง เจตเจธเจคเฉเจเจ เจฆเฉ เจฐเฉเจช เจตเจฟเฉฑเจ เจเจฒเจพเจเจก เจตเจฟเฉฑเจ เจเจฟเจธเฉ เจตเฉ เจกเฉเจเจพ เจจเฉเฉฐ เจธเจเฉเจฐ เจเจฐเจจ เจฆเฉ เจเจเจฟเจ เจฆเจฟเฉฐเจฆเฉ เจนเฉเฅค เจตเฉเจฌเจนเฉเฉฑเจ เจเจฎ เจคเฉเจฐ 'เจคเฉ เจเจธเจเจฎ HTTP เจเจพเจฒเจฌเฉเจ เจนเฉเฉฐเจฆเฉ เจนเจจเฅค เจเจน เจเจฎ เจคเฉเจฐ 'เจคเฉ เจเจฟเจธเฉ เจเจตเฉเจเจ เจฆเฉเจเจฐเจพ เจธเจผเฉเจฐเฉ เจเฉเจคเฉ เจเจพเจเจฆเฉ เจนเจจ, เจเจฟเจตเฉเจ เจเจฟ เจฐเจฟเจชเฉเจเจผเจเจฐเฉ เจฒเจ เจเฉเจก เจชเฉเจธเจผ เจเจพเจ เจฌเจฒเฉเจ 'เจคเฉ เจชเฉเจธเจ เจเฉเจคเฉ เจเจฟเฉฑเจชเจฃเฉเฅค เจเจฆเฉเจ เจเฉเจ เจเจตเฉเจเจ เจตเจพเจชเจฐเจฆเจพ เจนเฉ, เจคเจพเจ เจฎเฉเจฒ เจธเจพเจเจ เจตเฉเจฌเจนเฉเฉฑเจ เจฒเจ เจจเจฟเจฐเจฆเจฟเจธเจผเจ URL เจจเฉเฉฐ เจเฉฑเจ HTTP เจฌเฉเจจเจคเฉ เจญเฉเจเจฆเฉ เจนเฉเฅค เจจเจคเฉเจเฉ เจตเจเฉเจ, เจคเฉเจธเฉเจ เจเฉฑเจ เจธเจพเจเจ 'เจคเฉ เจเจตเฉเจเจ เจฌเจฃเจพ เจธเจเจฆเฉ เจนเฉ, เจฆเฉเจเฉ 'เจคเฉ เจเจพเจฐเจตเจพเจเจเจ เจจเฉเฉฐ เจเจฐเจฟเฉฑเจเจฐ เจเจฐ เจธเจเจฆเฉ เจนเฉ (
เจธเจงเจพเจฐเจจ เจเฉเจธเจพเจ เจฆเฉเจเจ เจเจฆเจพเจนเจฐเจจเจพเจ เจเจฟเฉฑเจฅเฉ เจ เจเจฟเจนเฉ เจเจเฉเจฎเฉเจธเจผเจจ เจฆเฉ เจตเจฐเจคเฉเจ เจเฉเจคเฉ เจเจพ เจธเจเจฆเฉ เจนเฉ:
- เจเจฟเจธเฉ เจนเฉเจฐ เจเจฒเจพเจเจก เจธเจเฉเจฐเฉเจ เจตเจฟเฉฑเจ เจธเจพเจฐเฉเจเจ เจตเจธเจคเฉเจเจ เจฆเฉเจเจ เจเจพเจชเฉเจเจ เจฌเจฃเจพเจเฅค เจซเจพเจเจฒเจพเจ เจฆเฉ เจเจฟเจธเฉ เจตเฉ เจเฉเฉ เจเจพเจ เจคเจฌเจฆเฉเจฒเฉ เจฆเฉ เจจเจพเจฒ เจเจพเจชเฉเจเจ "เจเฉฑเจกเจฆเฉ เจนเฉ" เจฌเจฃเจพเจเจเจ เจเจพเจฃเฉเจเจ เจเจพเจนเฉเจฆเฉเจเจ เจนเจจเฅค
- เจเฉเจฐเจพเจซเจฟเจ เจซเจพเจเจฒเจพเจ เจฆเฉ เจฅเฉฐเจฌเจจเฉเจฒ เจฆเฉ เจเฉฑเจ เจฒเฉเฉ เจฆเฉ เจเจเฉเจฎเฉเจเจฟเจ เจฐเจเจจเจพ, เจซเฉเจเฉเจเจ เจตเจฟเฉฑเจ เจตเจพเจเจฐเจฎเจพเจฐเจ เจเฉเฉเจจเจพ, เจนเฉเจฐ เจเจฟเฉฑเจคเจฐ เจธเฉเจงเจพเจเฅค
- เจจเจตเฉเจ เจฆเจธเจคเจพเจตเฉเจเจผเจพเจ เจฆเฉ เจเจฎเจฆ เจฌเจพเจฐเฉ เจธเฉเจเจจเจพ (เจเจฆเจพเจนเจฐเจจ เจฒเจ, เจเฉฑเจ เจตเฉฐเจกเฉ เจฒเฉเจเจพเจเจพเจฐเฉ เจธเฉเจตเจพ เจเจฒเจพเจเจก 'เจคเฉ เจฐเจฟเจชเฉเจฐเจเจพเจ เจ เฉฑเจชเจฒเฉเจก เจเจฐเจฆเฉ เจนเฉ, เจ เจคเฉ เจตเจฟเฉฑเจคเฉ เจจเจฟเจเจฐเจพเจจเฉ เจจเจตเฉเจเจ เจฐเจฟเจชเฉเจฐเจเจพเจ เจฌเจพเจฐเฉ เจธเฉเจเจจเจพเจตเจพเจ เจชเฉเจฐเจพเจชเจค เจเจฐเจฆเฉ เจนเฉ, เจเจนเจจเจพเจ เจฆเฉ เจเจพเจเจ เจ เจคเฉ เจตเจฟเจธเจผเจฒเฉเจธเจผเจฃ เจเจฐเจฆเฉ เจนเฉ)เฅค
- เจฅเฉเฉเฉเจนเจพ เจนเฉเจฐ เจเฉเฉฐเจเจฒเจฆเจพเจฐ เจเฉเจธเจพเจ เจตเจฟเฉฑเจ เจธเจผเจพเจฎเจฒ เจนเฉเฉฐเจฆเจพ เจนเฉ, เจเจฆเจพเจนเจฐเจจ เจฒเจ, เจเฉเจฌเจฐเจจเฉเจเจธ เจจเฉเฉฐ เจเฉฑเจ เจฌเฉเจจเจคเฉ เจคเจฟเจเจฐ เจเจฐเจจเจพ, เจเฉ เจฒเฉเฉเฉเจเจฆเฉ เจเฉฐเจเฉเจจเจฐเจพเจ เจจเจพเจฒ เจเฉฑเจ เจชเฉเจก เจฌเจฃเจพเจเจเจฆเจพ เจนเฉ, เจเจธ เจตเจฟเฉฑเจ เจเจพเจฐเจ เจชเฉเจฐเจพเจฎเฉเจเจฐเจพเจ เจจเฉเฉฐ เจชเจพเจธ เจเจฐเจฆเจพ เจนเฉ, เจ เจคเฉ เจชเฉเจฐเฉเจธเฉเจธเจฟเฉฐเจ เจคเฉเจ เจฌเจพเจ เจฆ เจเฉฐเจเฉเจจเจฐ เจจเฉเฉฐ เจธเจฎเฉเจเจฆเจพ เจนเฉเฅค
เจเฉฑเจ เจเจฆเจพเจนเจฐเจจ เจฆเฉ เจคเฉเจฐ 'เจคเฉ, เจ เจธเฉเจ เจเจพเจธเจ 1 เจฆเจพ เจเฉฑเจ เจฐเฉเจช เจฌเจฃเจพเจตเจพเจเจเฉ, เจเจฆเฉเจ เจตเฉเจฌเจนเฉเฉฑเจ เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐเจฆเฉ เจนเฉเจ Mail.ru เจเจฒเจพเจเจก เจธเฉเจฒเจฟเจเจธเจผเจจ (MCS) เจเจฌเจเฉเจเจ เจธเจเฉเจฐเฉเจ เจฌเจเฉเจ เจตเจฟเฉฑเจ เจฌเจฆเจฒเจพเจ AWS เจเจฌเจเฉเจเจ เจธเจเฉเจฐเฉเจ เจตเจฟเฉฑเจ เจธเจฎเจเจพเจฒเฉ เจเฉเจคเฉ เจเจพเจเจฆเฉ เจนเจจเฅค เจเฉฑเจ เจ เจธเจฒ เจฒเฉเจก เจเฉเจคเฉ เจเฉเจธ เจตเจฟเฉฑเจ, เจเฉฑเจ เจเจคเจพเจฐ เจตเจฟเฉฑเจ เจตเฉเจฌเจนเฉเฉฑเจเจพเจ เจจเฉเฉฐ เจฐเจเจฟเจธเจเจฐ เจเจฐเจเฉ เจ เจธเจฟเฉฐเจเฉเจฐเฉเจจเจธ เจเฉฐเจฎ เจชเฉเจฐเจฆเจพเจจ เจเฉเจคเจพ เจเจพเจฃเจพ เจเจพเจนเฉเจฆเจพ เจนเฉ, เจชเจฐ เจธเจฟเจเจฒเจพเจ เจเจพเจฐเจ เจฒเจ เจ เจธเฉเจ เจเจธเจฆเฉ เจฌเจฟเจจเจพเจ เจฒเจพเจเฉ เจเจฐเจพเจเจเฉเฅค
เจเฉฐเจฎ เจฆเฉ เจฏเฉเจเจจเจพ
เจเฉฐเจเจฐเจเจเจธเจผเจจ เจชเฉเจฐเฉเจเฉเจเฉเจฒ เจตเจฟเฉฑเจ เจตเจฟเจธเจฅเจพเจฐ เจตเจฟเฉฑเจ เจฆเฉฑเจธเจฟเจ เจเจฟเจ เจนเฉ
- เจชเจฌเจฒเจฟเจธเจผเจฟเฉฐเจ เจธเฉเจตเจพ, เจเฉ เจเจฟ S3 เจธเจเฉเจฐเฉเจ เจฆเฉ เจชเจพเจธเฉ เจนเฉ เจ เจคเฉ เจเจฆเฉเจ เจตเฉเจฌเจจเจนเฉเจ เจซเจพเจเจฐ เจนเฉเฉฐเจฆเจพ เจนเฉ เจคเจพเจ HTTP เจฌเฉเจจเจคเฉเจเจ เจจเฉเฉฐ เจชเฉเจฐเจเจพเจธเจผเจฟเจค เจเจฐเจฆเจพ เจนเฉเฅค
- เจตเฉเจฌเจนเฉเฉฑเจ เจธเจฐเจตเจฐA เจเฉ HTTP เจเฉฑเจคเฉ เจชเฉเจฐเจเจพเจธเจผเจจ เจธเฉเจตเจพ เจคเฉเจ เจฌเฉเจจเจคเฉเจเจ เจจเฉเฉฐ เจธเฉเจฃเจฆเจพ เจนเฉ เจ เจคเฉ เจเจเจฟเจค เจเจพเจฐเจตเจพเจ เจเจฐเจฆเจพ เจนเฉเฅค เจธเจฐเจตเจฐ เจจเฉเฉฐ เจเจฟเจธเฉ เจตเฉ เจญเจพเจธเจผเจพ เจตเจฟเฉฑเจ เจฒเจฟเจเจฟเจ เจเจพ เจธเจเจฆเจพ เจนเฉ, เจธเจพเจกเฉ เจเจฆเจพเจนเจฐเจฃ เจตเจฟเฉฑเจ เจ เจธเฉเจ เจธเจฐเจตเจฐ เจจเฉเฉฐ เจเฉ เจตเจฟเฉฑเจ เจฒเจฟเจเจพเจเจเฉเฅค
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 เจเจพเจ เจตเฉเฉฑเจฌ เจเฉฐเจเจฐเจซเฉเจธ เจฐเจพเจนเฉเจ เจเจชเจฃเฉ เจตเฉเจฌเจนเฉเฉฑเจ เจชเฉเจฐเจพเจชเจค เจเจฐเจจ เจตเจพเจฒเฉ เจธเจฐเจตเจฐ เจจเฉเฉฐ เจฐเจเจฟเจธเจเจฐ เจเจฐ เจธเจเจฆเฉ เจนเฉเฅค เจธเจฐเจฒเจคเจพ เจฒเจ, เจ เจธเฉเจ เจตเฉเฉฑเจฌ เจเฉฐเจเจฐเจซเฉเจธ เจฐเจพเจนเฉเจ เจฐเจเจฟเจธเจเจฐ เจเจฐเจพเจเจเฉ:
เจฌเจพเจฒเจเฉเจเจ เจฆเฉ เจญเจพเจ 'เจคเฉ เจเจพเจ เจเฉฐเจเจฐเฉเจฒ เจฐเฉเจฎ เจตเจฟเฉฑเจ.- เจ เจธเฉเจ เจฌเจพเจฒเจเฉ เจตเจฟเฉฑเจ เจเจพเจเจฆเฉ เจนเจพเจ, เจเจฟเจธ เจฒเจ เจ เจธเฉเจ เจตเฉเจฌเจนเฉเฉฑเจ เจจเฉเฉฐ เจเฉเจเจซเจฟเจเจฐ เจเจฐเจพเจเจเฉ, เจ เจคเฉ เจเฉเจ เจฐ 'เจคเฉ เจเจฒเจฟเฉฑเจ เจเจฐเจพเจเจเฉ:
Webhooks เจเฉเจฌ 'เจคเฉ เจเจพเจ เจ
เจคเฉ เจธเจผเจพเจฎเจฒ เจเจฐเฉ 'เจคเฉ เจเจฒเจฟเฉฑเจ เจเจฐเฉ:
เจเฉเจคเจฐ เจญเจฐเฉ:
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
เจฐเจเจฟเจธเจเฉเจฐเฉเจธเจผเจจ เจเจคเจฎ เจนเฉ เจเจ เจนเฉเฅค เจ เจเจฒเฉ เจญเจพเจ เจตเจฟเฉฑเจ, เจ เจธเฉเจ เจตเฉเจฌเจนเฉเฉฑเจ เจชเฉเจฐเจพเจชเจค เจเจฐเจจ เจตเจพเจฒเฉ เจธเจฐเจตเจฐ เจฆเฉ เจเจฒเจเฉเจฐเจฟเจฆเจฎ เจฌเจพเจฐเฉ เจตเจงเฉเจฐเฉ เจตเจฟเจธเจฅเจพเจฐ เจตเจฟเฉฑเจ เจตเจฟเจเจพเจฐ เจเจฐเจพเจเจเฉเฅค
เจตเฉเจฌเจนเฉเฉฑเจ เจธเจฐเจตเจฐ เจฆเจพ เจตเฉเจฐเจตเจพ
เจธเจพเจกเฉ เจเจฆเจพเจนเจฐเจฃ เจตเจฟเฉฑเจ, เจธเจฐเจตเจฐ เจเฉ เจตเจฟเฉฑเจ เจฒเจฟเจเจฟเจ เจเจฟเจ เจนเฉเฅค เจเจ เจเจธเจฆเฉ เจเฉฐเจฎ เจฆเฉ เจฎเฉเจฒ เจธเจฟเจงเจพเจเจคเจพเจ เจฆเจพ เจตเจฟเจธเจผเจฒเฉเจธเจผเจฃ เจเจฐเฉเจ.
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))
}
เจฎเฉเฉฑเจ เจซเฉฐเจเจธเจผเจจเจพเจ 'เจคเฉ เจเฉเจฐ เจเจฐเฉ:
- เจชเจฟเฉฐเจ () - เจเฉฑเจ เจฐเฉเจ เจเฉ เจเฉฑเจ URL / เจชเจฟเฉฐเจ เจฆเจพ เจเจตเจพเจฌ เจฆเจฟเฉฐเจฆเจพ เจนเฉ, เจเฉฑเจ เจฒเจพเจเจตเจจเฉเฉฑเจธ เจชเฉเจคเจพเจฒ เจฆเจพ เจธเจญ เจคเฉเจ เจธเจฐเจฒ เจฒเจพเจเฉเจเจฐเจจเฅค
- เจตเฉเจฌเจนเฉเฉฑเจ () - เจฎเฉเฉฑเจ เจฐเฉเจ, URL/เจตเฉเจฌเจนเฉเฉฑเจ เจนเฉเจเจกเจฒเจฐ:
- เจชเฉเจฐเจเจพเจธเจผเจจ เจธเฉเจตเจพ 'เจคเฉ เจฐเจเจฟเจธเจเฉเจฐเฉเจธเจผเจจ เจฆเฉ เจชเฉเจธเจผเจเฉ เจเจฐเจฆเจพ เจนเฉ (เจธเจฌเจธเจเฉเจฐเจฟเจชเจธเจผเจจ เจชเฉเจธเจผเจเฉเจเจฐเจฃ เจซเฉฐเจเจธเจผเจจ 'เจคเฉ เจเจพเจฃเจพ),
- เจเจจเจเจฎเจฟเฉฐเจ เจตเฉเจฌเจนเฉเฉฑเจ (เจเฉเจฐเจเจพเจฐเจก เจซเฉฐเจเจธเจผเจจ) เจจเฉเฉฐ เจนเฉเจเจกเจฒ เจเจฐเจฆเจพ เจนเฉเฅค
- 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 เจตเจฟเฉฑเจ myfiles-เจฌเฉเจเจ เฉฑเจช เจฌเจพเจฒเจเฉ เจฆเฉเจเจ เจธเจฎเฉฑเจเจฐเฉเจเจ เจฆเฉ เจเจพเจเจ เจเจฐเฉเจ:
ubuntu@ubuntu-basic-1-2-10gb:~/s3-webhook$ aws s3 --profile aws ls
myfiles-backup
2020-07-06 09:43:10 1104 test.txt
เจนเฉเจฃ, เจตเฉเฉฑเจฌ เจเฉฐเจเจฐเจซเฉเจธ เจฐเจพเจนเฉเจ, เจฎเจพเจเจซเจพเจเจฒ-เจเจธเจผ เจฌเจพเจฒเจเฉ เจคเฉเจ เจซเจพเจเจฒ เจจเฉเฉฐ เจฎเจฟเจเจพเจเฅค
เจธเจฐเจตเจฐ เจฒเฉเจเจธ:
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:~$
เจซเจพเจเจฒ เจฎเจฟเจเจพเจ เจเจ, เจธเจฎเฉฑเจธเจฟเจ เจนเฉฑเจฒ เจนเฉ เจเจเฅค
เจธเจฟเฉฑเจเจพ เจ เจคเฉ เจเจฐเจจ เจฒเจ
เจเจธ เจฒเฉเจ เจตเจฟเฉฑเจ เจตเจฐเจคเจฟเจ เจเจฟเจ เจธเจพเจฐเจพ เจเฉเจก เจนเฉ
เจเจน เจเฉเจก เจเฉฑเจ เจเจฆเจพเจนเจฐเจฃ เจคเฉเจ เจตเฉฑเจง เจเฉเจ เจจเจนเฉเจ เจนเฉ เจเจฟ เจคเฉเจธเฉเจ เจเจชเจฃเฉเจเจ เจเจคเฉเจตเจฟเจงเฉเจเจ เจตเจฟเฉฑเจ S3 เจตเฉเจฌเจนเฉเฉฑเจ เจฆเฉ เจตเจฐเจคเฉเจ เจเจฟเจตเฉเจ เจเจฐ เจธเจเจฆเฉ เจนเฉเฅค เจเจฟเจตเฉเจ เจเจฟ เจฎเฉเจ เจธเจผเฉเจฐเฉ เจตเจฟเฉฑเจ เจเจฟเจนเจพ เจธเฉ, เจเฉเจเจฐ เจคเฉเจธเฉเจ เจเจคเจชเจพเจฆเจจ เจตเจฟเฉฑเจ เจ เจเจฟเจนเฉ เจธเจฐเจตเจฐ เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐเจจ เจฆเฉ เจฏเฉเจเจจเจพ เจฌเจฃเจพเจเจเจฆเฉ เจนเฉ, เจคเจพเจ เจคเฉเจนเจพเจจเฉเฉฐ เจเฉฑเจเฉ-เจเฉฑเจ เจ เจธเจฟเฉฐเจเจฐเฉเจจเจธ เจเฉฐเจฎ เจฒเจ เจธเจฐเจตเจฐ เจจเฉเฉฐ เจฆเฉเจฌเจพเจฐเจพ เจฒเจฟเจเจฃ เจฆเฉ เจฒเฉเฉ เจนเฉ: เจเฉฑเจ เจเจคเจพเจฐ เจตเจฟเฉฑเจ เจเจเจฃ เจตเจพเจฒเฉ เจตเฉเจฌเจนเฉเฉฑเจเจพเจ เจจเฉเฉฐ เจฐเจเจฟเจธเจเจฐ เจเจฐเฉ (RabbitMQ เจเจพเจ NATS), เจ เจคเฉ เจเฉฑเจฅเฉเจ เจเจนเจจเจพเจ เจจเฉเฉฐ เจชเจพเจฐเจธ เจเฉเจคเจพ เจเจพ เจธเจเจฆเจพ เจนเฉ เจ เจคเฉ เจตเจฐเจเจฐเจพเจ เจฆเฉเจเจ เจ เจฐเจเจผเฉเจเจ เจฆเฉเจเจฐเจพ เจเจพเจฐเจตเจพเจ เจเฉเจคเฉ เจเจพเจเจฆเฉ เจนเฉเฅค เจจเจนเฉเจ เจคเจพเจ, เจตเฉเจฌเจนเฉเฉฑเจ เจฆเฉ เจตเฉฑเจกเฉ เจเจฎเจฆ เจฆเฉ เจจเจพเจฒ, เจคเฉเจนเจพเจจเฉเฉฐ เจเจพเจฐเจเจพเจ เจจเฉเฉฐ เจชเฉเจฐเจพ เจเจฐเจจ เจฒเจ เจธเจฐเจตเจฐ เจธเจฐเฉเจคเจพเจ เจฆเฉ เจเจพเจ เจฆเจพ เจธเจพเจนเจฎเจฃเจพ เจเจฐเจจเจพ เจชเฉ เจธเจเจฆเจพ เจนเฉเฅค เจเจคเจพเจฐเจพเจ เจฆเฉ เจฎเฉเจเฉเจฆเจเฉ เจคเฉเจนเจพเจจเฉเฉฐ เจธเจฐเจตเจฐ เจ เจคเฉ เจเจฐเจฎเจเจพเจฐเฉเจเจ เจจเฉเฉฐ เจซเฉเจฒเจพเจเจฃ เจฆเฉ เจจเจพเจฒ-เจจเจพเจฒ เจ เจธเจซเจฒเจคเจพเจตเจพเจ เจฆเฉ เจธเจฅเจฟเจคเฉ เจตเจฟเฉฑเจ เจฆเฉเจนเจฐเจพเจเจฃ เจตเจพเจฒเฉ เจเฉฐเจฎเจพเจ เจฆเฉ เจจเจพเจฒ เจฎเฉเฉฑเจฆเจฟเจเจ เจจเฉเฉฐ เจนเฉฑเจฒ เจเจฐเจจ เจฆเฉ เจเจเจฟเจ เจฆเจฟเฉฐเจฆเฉ เจนเฉ. เจฒเฉเจเจฟเฉฐเจ เจจเฉเฉฐ เจตเจงเฉเจฐเฉ เจตเจฟเจธเจคเฉเจฐเจฟเจค เจ เจคเฉ เจตเจงเฉเจฐเฉ เจฎเจฟเจเจฐเฉ เจตเจฟเฉฑเจ เจฌเจฆเจฒเจฃเจพ เจตเฉ เจซเจพเจเจฆเฉเจฎเฉฐเจฆ เจนเฉเฅค
เจเจพเจฎเจฏเจพเจฌเฉเจเจ!
เจตเจฟเจธเจผเฉ 'เจคเฉ เจนเฉเจฐ เจชเฉเฉเจนเฉ:
Mail.ru Cloud Solutions S3 เจเจฌเจเฉเจเจ เจธเจเฉเจฐเฉเจ เจฆเฉ เจจเจพเจฒ เจเฉฑเจ เจซเจพเจเจฒ เจธเจฟเจธเจเจฎ เจตเจเฉเจ เจเฉฐเจฎ เจเจฐเจจเจพเฅค เจเจน เจฎเฉเจเจพเจฌเจฒเฉ เจจเฉเฉฐ เจนเจฐเจพเจเจฃ เจฒเจ เจเจฌเจเฉเจเจ เจธเจเฉเจฐเฉเจ เจฆเฉ เจตเจฐเจคเฉเจ เจเจฟเจตเฉเจ เจเจฐเจฆเฉ เจนเจจเฅค
เจธเจฐเฉเจค: www.habr.com