ืื ื• ืžืงื‘ืœื™ื 10 ืื™ืจื•ืขื™ื ื‘-Yandex.Cloud. ื—ืœืง 000

ืฉืœื•ื ืœื›ื•ืœื, ื—ื‘ืจื™ื!

* ืžืืžืจ ื–ื” ืžื‘ื•ืกืก ืขืœ ื”ืกื“ื ื” ื”ืคืชื•ื—ื” ืฉืœ REBRAIN & Yandex.Cloud, ืื ืืชื ืžืขื“ื™ืคื™ื ืœืฆืคื•ืช ื‘ืกืจื˜ื•ืŸ, ืชื•ื›ืœื• ืœืžืฆื•ื ืื•ืชื• ื‘ืงื™ืฉื•ืจ ื”ื–ื” - https://youtu.be/cZLezUm0ekE

ืœืื—ืจื•ื ื” ื”ื™ื™ืชื” ืœื ื• ื”ื–ื“ืžื ื•ืช ืœื ืกื•ืช ืืช Yandex.Cloud ื‘ืฉื™ื“ื•ืจ ื—ื™. ืžื›ื™ื•ื•ืŸ ืฉืจืฆื™ื ื• ืœื—ืงื•ืจ ื”ืจื‘ื” ื–ืžืŸ, ื–ื ื—ื ื• ืžื™ื“ ืืช ื”ืจืขื™ื•ืŸ ืœื”ืฉื™ืง ื‘ืœื•ื’ ื•ื•ืจื“ืคืจืก ืคืฉื•ื˜ ืขื ื‘ืกื™ืก ืขื ืŸ - ื–ื” ื”ื™ื” ืžืฉืขืžื ืžื“ื™. ืœืื—ืจ ืžื—ืฉื‘ื”, ื”ื—ืœื˜ื ื• ืœืคืจื•ืก ืžืฉื”ื• ื“ื•ืžื” ืœืืจื›ื™ื˜ืงื˜ื•ืจืช ืฉื™ืจื•ืชื™ ื”ืคืงื” ืขื‘ื•ืจ ืงื‘ืœื” ื•ื ื™ืชื•ื— ืื™ืจื•ืขื™ื ื‘ืžืฆื‘ ื›ืžืขื˜ ื‘ื–ืžืŸ ืืžืช.

ืื ื™ ื‘ื˜ื•ื— ืœื—ืœื•ื˜ื™ืŸ ืฉื”ืจื•ื‘ ื”ืžื›ืจื™ืข ืฉืœ ืขืกืงื™ื ืžืงื•ื•ื ื™ื (ื•ืœื ืจืง) ืื•ืกืคื™ื ืื™ื›ืฉื”ื• ื”ืจ ืฉืœ ืžื™ื“ืข ืขืœ ื”ืžืฉืชืžืฉื™ื ืฉืœื”ื ื•ืคืขื•ืœื•ืชื™ื”ื. ืœื›ืœ ื”ืคื—ื•ืช, ื–ื” ื”ื›ืจื—ื™ ืœืงื‘ืœืช ื”ื—ืœื˜ื•ืช ืžืกื•ื™ืžื•ืช - ืœืžืฉืœ, ืื ืืชื” ืžื ื”ืœ ืžืฉื—ืง ืžืงื•ื•ืŸ, ืืชื” ื™ื›ื•ืœ ืœื”ืกืชื›ืœ ืขืœ ื”ืกื˜ื˜ื™ืกื˜ื™ืงื” ื‘ืื™ื–ื• ืจืžื” ืžืฉืชืžืฉื™ื ืœืจื•ื‘ ื ืชืงืขื™ื ื•ืžื•ื—ืงื™ื ืืช ื”ืฆืขืฆื•ืข ืฉืœืš. ืื• ืžื“ื•ืข ืžืฉืชืžืฉื™ื ืขื•ื–ื‘ื™ื ืืช ื”ืืชืจ ืฉืœืš ืžื‘ืœื™ ืœืจื›ื•ืฉ ื“ื‘ืจ (ืฉืœื•ื, Yandex.Metrica).

ืื–, ื”ืกื™ืคื•ืจ ืฉืœื ื•: ืื™ืš ื›ืชื‘ื ื• ืืคืœื™ืงืฆื™ื” ื‘ื’ื•ืœืื ื’, ื‘ื“ืงื ื• ืงืคืงื ืžื•ืœ rabbitmq ืžื•ืœ yqs, ื›ืชื‘ื ื• ื”ื–ืจืžืช ื ืชื•ื ื™ื ื‘ืืฉื›ื•ืœ ืงืœื™ืงื”ืื•ืก ื•ื“ื™ืžื™ื ื• ืืช ื”ื ืชื•ื ื™ื ื‘ืืžืฆืขื•ืช yandex datatalens. ื‘ืื•ืคืŸ ื˜ื‘ืขื™, ื›ืœ ื–ื” ื”ื™ื” ืžืชื•ื‘ืœ ื‘ืชืขื ื•ื’ื•ืช ืชืฉืชื™ืช ื‘ื“ืžื•ืช docker, terraform, gitlab ci ื•ื›ืžื•ื‘ืŸ, prometheus. ื‘ื•ื ื ืœืš!

ื‘ืจืฆื•ื ื™ ืœื”ืกืชื™ื™ื’ ืžื™ื“ ืฉืœื ื ื•ื›ืœ ืœื”ื’ื“ื™ืจ ื”ื›ืœ ื‘ื™ืฉื™ื‘ื” ืื—ืช - ืœืฉื ื›ืš ื ืฆื˜ืจืš ืžืกืคืจ ืžืืžืจื™ื ื‘ืกื“ืจื”. ืงืฆืช ืขืœ ื”ืžื‘ื ื”:

ื—ืœืง 1 (ืืชื” ืงื•ืจื ืื•ืชื•). ื ื—ืœื™ื˜ ืขืœ ื”ืžืคืจื˜ ื•ื”ืืจื›ื™ื˜ืงื˜ื•ืจื” ืฉืœ ื”ืคืชืจื•ืŸ, ื•ื’ื ื ื›ืชื•ื‘ ืืคืœื™ืงืฆื™ื” ื‘ื’ื•ืœื ื’.
ื—ืœืง 2. ืื ื• ืžืฉื—ืจืจื™ื ืืช ื”ืืคืœื™ืงืฆื™ื” ืฉืœื ื• ืœื™ื™ืฆื•ืจ, ื”ื•ืคื›ื™ื ืื•ืชื” ืœื ื™ืชื ืช ืœื”ืจื—ื‘ื” ื•ื‘ื•ื“ืงื™ื ืืช ื”ืขื•ืžืก.
ื—ืœืง 3. ื‘ื•ืื• ื ื ืกื” ืœื”ื‘ื™ืŸ ืœืžื” ืื ื—ื ื• ืฆืจื™ื›ื™ื ืœืื—ืกืŸ ื”ื•ื“ืขื•ืช ื‘ืžืื’ืจ ื•ืœื ื‘ืงื‘ืฆื™ื, ื•ื’ื ืœื”ืฉื•ื•ืช ืืช ืฉื™ืจื•ืช ื”ืชื•ืจื™ื ืฉืœ kafka, rabbitmq ื•-yandex.
ื—ืœืง 4 ื ืคืจื•ืก ืืฉื›ื•ืœ Clickhouse, ื ื›ืชื•ื‘ ืฉื™ืจื•ืช ืกื˜ืจื™ืžื™ื ื’ ืœื”ืขื‘ืจืช ื ืชื•ื ื™ื ืžื”ืžืื’ืจ ืœืฉื, ื•ื ื’ื“ื™ืจ ื•ื™ื–ื•ืืœื™ื–ืฆื™ื” ื‘-datatalens.
ื—ืœืง 5 ื‘ื•ืื• ื ื‘ื™ื ืืช ื›ืœ ื”ืชืฉืชื™ืช ืœืฆื•ืจื” ื ื›ื•ื ื” - ื”ื’ื“ืจ ci/cd ื‘ืืžืฆืขื•ืช gitlab ci, ื—ื™ื‘ื•ืจ ื ื™ื˜ื•ืจ ื•ื’ื™ืœื•ื™ ืฉื™ืจื•ืช ื‘ืืžืฆืขื•ืช ืคืจื•ืžืชืื•ืก ื•ืงื•ื ืกื•ืœ.

TK

ืจืืฉื™ืช, ื‘ื•ืื• ื ื ืกื— ืืช ืชื ืื™ ื”ื”ืชื™ื™ื—ืกื•ืช - ืžื” ื‘ื“ื™ื•ืง ืื ื—ื ื• ืจื•ืฆื™ื ืœืงื‘ืœ ื›ืชื•ืฆืื” ืžื›ืš.

  1. ืื ื—ื ื• ืจื•ืฆื™ื ืฉืชื”ื™ื” ืœื ื• ื ืงื•ื“ืช ืงืฆื” ื›ืžื• events.kis.im (kis.im ื”ื•ื ื“ื•ืžื™ื™ืŸ ื”ื‘ื“ื™ืงื” ืฉื‘ื• ื ืฉืชืžืฉ ืœืื•ืจืš ื›ืœ ื”ืžืืžืจื™ื), ืฉืืžื•ืจื” ืœืงื‘ืœ ืื™ืจื•ืขื™ื ื‘ืืžืฆืขื•ืช HTTPS.
  2. ืื™ืจื•ืขื™ื ื”ื json ืคืฉื•ื˜ ื›ืžื•: {"event": "view", "os": "linux", "browser": "chrome"}. ื‘ืฉืœื‘ ื”ืกื•ืคื™ ื ื•ืกื™ืฃ ืขื•ื“ ืงืฆืช ืฉื“ื•ืช, ืื‘ืœ ื–ื” ืœื ื™ืฉื—ืง ืชืคืงื™ื“ ื’ื“ื•ืœ. ืื ืชืจืฆื”, ืชื•ื›ืœ ืœืขื‘ื•ืจ ืœ-protobuf.
  3. ื”ืฉื™ืจื•ืช ื—ื™ื™ื‘ ืœื”ื™ื•ืช ืžืกื•ื’ืœ ืœืขื‘ื“ 10 ืื™ืจื•ืขื™ื ื‘ืฉื ื™ื™ื”.
  4. ื–ื” ืืžื•ืจ ืœื”ื™ื•ืช ืืคืฉืจื™ ืœืฉื ื•ืช ืงื ื” ืžื™ื“ื” ืื•ืคืงื™ืช ืขืœ ื™ื“ื™ ื”ื•ืกืคืช ืžื•ืคืขื™ื ื—ื“ืฉื™ื ืœืคืชืจื•ืŸ ืฉืœื ื•. ื•ื–ื” ื™ื”ื™ื” ื ื—ืžื“ ืื ื ื•ื›ืœ ืœื”ืขื‘ื™ืจ ืืช ื”ื—ืœืง ื”ืงื“ืžื™ ืœืžื™ืงื•ืžื™ื ื’ื™ืื•ื’ืจืคื™ื™ื ืฉื•ื ื™ื ื›ื“ื™ ืœื”ืคื—ื™ืช ืืช ื–ืžืŸ ื”ืื—ื–ื•ืจ ืœื‘ืงืฉื•ืช ื”ืœืงื•ื—.
  5. ืกื•ื‘ืœื ื•ืช ืœืชืงืœื•ืช. ื”ืคืชืจื•ืŸ ื—ื™ื™ื‘ ืœื”ื™ื•ืช ื™ืฆื™ื‘ ืžืกืคื™ืง ื•ืœื”ืฆืœื™ื— ืœืฉืจื•ื“ ืืช ื”ื ืคื™ืœื” ืฉืœ ื›ืœ ื—ืœืง (ืขื“ ืžืกืคืจ ืžืกื•ื™ื, ื›ืžื•ื‘ืŸ).

ืื“ืจื™ื›ืœื•ืช

ื‘ืื•ืคืŸ ื›ืœืœื™, ืขื‘ื•ืจ ืกื•ื’ ื–ื” ืฉืœ ืžืฉื™ืžื”, ื›ื‘ืจ ืžื–ืžืŸ ื”ื•ืžืฆืื• ืืจื›ื™ื˜ืงื˜ื•ืจื•ืช ืงืœืืกื™ื•ืช ื”ืžืืคืฉืจื•ืช ืงื ื” ืžื™ื“ื” ื™ืขื™ืœ. ื”ืื™ื•ืจ ืžืฆื™ื’ ื“ื•ื’ืžื” ืœืคืชืจื•ืŸ ืฉืœื ื•.

ืื ื• ืžืงื‘ืœื™ื 10 ืื™ืจื•ืขื™ื ื‘-Yandex.Cloud. ื—ืœืง 000

ืื– ืžื” ื™ืฉ ืœื ื•:

1. ื‘ืฆื“ ืฉืžืืœ ื ืžืฆืื™ื ื”ืžื›ืฉื™ืจื™ื ืฉืœื ื• ืฉืžื™ื™ืฆืจื™ื ืื™ืจื•ืขื™ื ืฉื•ื ื™ื, ื‘ื™ืŸ ืื ืžื“ื•ื‘ืจ ื‘ืฉื—ืงื ื™ื ืฉืžืกื™ื™ืžื™ื ืฉืœื‘ ื‘ืฆืขืฆื•ืข ื‘ืกืžืืจื˜ืคื•ืŸ ืื• ื‘ื™ืฆื™ืจืช ื”ื–ืžื ื” ื‘ื—ื ื•ืช ืžืงื•ื•ื ืช ื“ืจืš ื“ืคื“ืคืŸ ืจื’ื™ืœ. ืื™ืจื•ืข, ื›ืžืคื•ืจื˜ ื‘ืžืคืจื˜, ื”ื•ื json ืคืฉื•ื˜ ืฉื ืฉืœื— ืœื ืงื•ื“ืช ื”ืงืฆื” ืฉืœื ื• - events.kis.im.

2. ืฉื ื™ ื”ืฉืจืชื™ื ื”ืจืืฉื•ื ื™ื ื”ื ืžืื–ื ื™ื ืคืฉื•ื˜ื™ื, ื”ืžืฉื™ืžื•ืช ื”ืขื™ืงืจื™ื•ืช ืฉืœื”ื ื”ืŸ:

  • ืœื”ื™ื•ืช ื–ืžื™ืŸ ื›ืœ ื”ื–ืžืŸ. ืœืฉื ื›ืš, ืชื•ื›ืœื• ืœื”ืฉืชืžืฉ, ืœืžืฉืœ, ื‘-keealived, ืฉื™ืขื‘ื™ืจ ืืช ื”-IP ื”ื•ื™ืจื˜ื•ืืœื™ ื‘ื™ืŸ ืฆืžืชื™ื ื‘ืžืงืจื” ืฉืœ ื‘ืขื™ื•ืช.
  • ืกื™ื•ื TLS. ื›ืŸ, ืื ื—ื ื• ื ืคืกื™ืง ืืช ื”-TLS ืขืœื™ื”ื. ืจืืฉื™ืช, ืขืœ ืžื ืช ืฉื”ืคืชืจื•ืŸ ืฉืœื ื• ื™ืขืžื•ื“ ื‘ืžืคืจื˜ ื”ื˜ื›ื ื™, ื•ืฉื ื™ืช, ืขืœ ืžื ืช ืœื”ืงืœ ื‘ื ื˜ืœ ื™ืฆื™ืจืช ื—ื™ื‘ื•ืจ ืžื•ืฆืคืŸ ืžื”ืฉืจืชื™ื ื”ืื—ื•ืจื™ื™ื ืฉืœื ื•.
  • ืื™ื–ื•ืŸ ื‘ืงืฉื•ืช ื ื›ื ืกื•ืช ืœืฉืจืชื™ ืงืฆื” ื–ืžื™ื ื™ื. ืžื™ืœืช ื”ืžืคืชื— ื›ืืŸ ื”ื™ื ื ื’ื™ืฉื”. ื‘ื”ืชื‘ืกืก ืขืœ ื–ื”, ืื ื• ืžื’ื™ืขื™ื ืœื”ื‘ื ื” ืฉืžืื–ื ื™ ืขื•ืžืกื™ื ื—ื™ื™ื‘ื™ื ืœื”ื™ื•ืช ืžืกื•ื’ืœื™ื ืœื ื˜ืจ ืืช ื”ืฉืจืชื™ื ืฉืœื ื• ืขื ื™ื™ืฉื•ืžื™ื ื•ืœื”ืคืกื™ืง ืœืื–ืŸ ืืช ื”ืชืขื‘ื•ืจื” ืœืฆืžืชื™ื ื›ื•ืฉืœื™ื.

3. ืื—ืจื™ ื”ืื™ื–ื•ื ื™ื, ื™ืฉ ืœื ื• ืฉืจืชื™ ืืคืœื™ืงืฆื™ื•ืช ืฉืžืจื™ืฆื™ื ืืคืœื™ืงืฆื™ื” ืคืฉื•ื˜ื” ืœืžื“ื™. ื–ื” ืืžื•ืจ ืœื”ื™ื•ืช ืžืกื•ื’ืœ ืœืงื‘ืœ ื‘ืงืฉื•ืช ื ื›ื ืกื•ืช ื“ืจืš HTTP, ืœืืžืช ืืช ื”-json ืฉื ืฉืœื— ื•ืœื”ื›ื ื™ืก ืืช ื”ื ืชื•ื ื™ื ืœืžืื’ืจ.

4. ื”ืชืจืฉื™ื ืžืฆื™ื’ ืืช ืงืคืงื ื›ื—ื•ืฆืฅ, ืื ื›ื™, ื›ืžื•ื‘ืŸ, ื ื™ืชืŸ ืœื”ืฉืชืžืฉ ื‘ืฉื™ืจื•ืชื™ื ื“ื•ืžื™ื ืื—ืจื™ื ื‘ืจืžื” ื–ื•. ื ืฉื•ื•ื” ื‘ื™ืŸ ืงืคืงื, rabbitmq ื•-yqs ื‘ืžืืžืจ ื”ืฉืœื™ืฉื™.

5. ื”ื ืงื•ื“ื” ื”ืœืคื ื™ ืื—ืจื•ื ื” ื‘ืืจื›ื™ื˜ืงื˜ื•ืจื” ืฉืœื ื• ื”ื™ื Clickhouse - ืžืกื“ ื ืชื•ื ื™ื ืขืžื•ื“ื™ื ื”ืžืืคืฉืจ ืœืื—ืกืŸ ื•ืœืขื‘ื“ ื›ืžื•ืช ืขืฆื•ืžื” ืฉืœ ื ืชื•ื ื™ื. ื‘ืจืžื” ื–ื•, ืขืœื™ื ื• ืœื”ืขื‘ื™ืจ ื ืชื•ื ื™ื ืžื”ืžืื’ืจ ืœืžืขืจื›ืช ื”ืื—ืกื•ืŸ ืขืฆืžื” (ืขื•ื“ ืขืœ ื›ืš ื‘ืžืืžืจ 4).

ืขื™ืฆื•ื‘ ื–ื” ืžืืคืฉืจ ืœื ื• ืœืฉื ื•ืช ืืช ืงื ื” ื”ืžื™ื“ื” ืฉืœ ื›ืœ ืฉื›ื‘ื” ื‘ืื•ืคืŸ ืื•ืคืงื™ ื‘ืื•ืคืŸ ืขืฆืžืื™. ืฉืจืชื™ ืงืฆื” ืœื ื™ื›ื•ืœื™ื ืœื”ืชืžื•ื“ื“ - ื‘ื•ื ื ื•ืกื™ืฃ ืขื•ื“ ื“ื‘ืจ - ืื—ืจื™ ื”ื›ืœ, ื”ื ื™ื™ืฉื•ืžื™ื ื—ืกืจื™ ืžื“ื™ื ื”, ื•ืœื›ืŸ, ื–ื” ื™ื›ื•ืœ ืœื”ื™ืขืฉื•ืช ืืคื™ืœื• ืื•ื˜ื•ืžื˜ื™ืช. ื”ืžืื’ืจ ื‘ืกื’ื ื•ืŸ ืงืคืงื ืœื ืขื•ื‘ื“ - ื‘ื•ืื• ื ื•ืกื™ืฃ ืฉืจืชื™ื ื ื•ืกืคื™ื ื•ื ืขื‘ื™ืจ ืืœื™ื”ื ื—ืœืง ืžื”ืžื—ื™ืฆื•ืช ืฉืœ ื”ื ื•ืฉื ืฉืœื ื•. ืงืœื™ืงื”ืื•ืก ืœื ื™ื›ื•ืœ ืœื”ืชืžื•ื“ื“ ืขื ื–ื” - ื–ื” ื‘ืœืชื™ ืืคืฉืจื™ :) ืœืžืขืฉื”, ืื ื—ื ื• ื’ื ื ื—ื‘ืจ ืืช ื”ืฉืจืชื™ื ื•ื ืคืฆื— ืืช ื”ื ืชื•ื ื™ื.

ืื’ื‘, ืื ืืชื” ืจื•ืฆื” ืœื™ื™ืฉื ืืช ื”ื—ืœืง ื”ืื•ืคืฆื™ื•ื ืœื™ ืฉืœ ื”ืžืคืจื˜ื™ื ื”ื˜ื›ื ื™ื™ื ืฉืœื ื• ื•ืœื”ืจื—ื™ื‘ ื‘ืžื™ืงื•ืžื™ื ื’ื™ืื•ื’ืจืคื™ื™ื ืฉื•ื ื™ื, ืื– ืื™ืŸ ื“ื‘ืจ ืคืฉื•ื˜ ื™ื•ืชืจ:

ืื ื• ืžืงื‘ืœื™ื 10 ืื™ืจื•ืขื™ื ื‘-Yandex.Cloud. ื—ืœืง 000

ื‘ื›ืœ ืžื™ืงื•ื ื’ื™ืื•ื’ืจืคื™ ืื ื• ืคื•ืจืกื™ื ืžืื–ืŸ ืขื•ืžืกื™ื ืขื ื™ื™ืฉื•ื ื•ืงืคืงื. ื‘ืื•ืคืŸ ื›ืœืœื™, ืžืกืคื™ืงื™ื 2 ืฉืจืชื™ ื™ื™ืฉื•ืžื™ื, 3 ืฆืžืชื™ื ืงืคืงื ื•ืžืื–ืŸ ืขื ืŸ, ืœืžืฉืœ, cloudflare, ืฉื™ื‘ื“ื•ืง ืืช ื–ืžื™ื ื•ืช ืฆืžืชื™ ื”ืืคืœื™ืงืฆื™ื” ื•ื‘ืงืฉื•ืช ืœืื–ืŸ ืœืคื™ ืžื™ืงื•ื ื’ื™ืื•ื’ืจืคื™ ืขืœ ืกืžืš ื›ืชื•ื‘ืช ื”-IP ื”ืžืงื•ืจื™ืช ืฉืœ ื”ืœืงื•ื—. ื›ืš, ื ืชื•ื ื™ื ืฉื ืฉืœื—ื™ื ืขืœ ื™ื“ื™ ืœืงื•ื— ืืžืจื™ืงืื™ ื™ื ื—ืชื• ืขืœ ืฉืจืชื™ื ืืžืจื™ืงืื™ื. ื•ื”ื ืชื•ื ื™ื ืžืืคืจื™ืงื” ื”ื ื‘ืืคืจื™ืงืื™ืช.

ื•ืื– ื”ื›ืœ ื“ื™ ืคืฉื•ื˜ - ืื ื—ื ื• ืžืฉืชืžืฉื™ื ื‘ื›ืœื™ ื”ืžืจืื” ืžื”ืกื˜ ืฉืœ ืงืคืงื ื•ืžืขืชื™ืงื™ื ืืช ื›ืœ ื”ื ืชื•ื ื™ื ืžื›ืœ ื”ืžื™ืงื•ืžื™ื ืœืžืจื›ื– ื”ื ืชื•ื ื™ื ื”ืžืจื›ื–ื™ ืฉืœื ื• ืฉื ืžืฆื ื‘ืจื•ืกื™ื”. ื‘ืื•ืคืŸ ืคื ื™ืžื™, ืื ื• ืžื ืชื—ื™ื ืืช ื”ื ืชื•ื ื™ื ื•ืžืชืขื“ื™ื ืื•ืชื ื‘- Clickhouse ืœื”ื“ืžื™ื” ืœืื—ืจ ืžื›ืŸ.

ืื–, ืกื™ื“ืจื ื• ืืช ื”ืืจื›ื™ื˜ืงื˜ื•ืจื” - ื‘ื•ืื• ื ืชื—ื™ืœ ืœื˜ืœื˜ืœ ืืช Yandex.Cloud!

ื›ืชื™ื‘ืช ื‘ืงืฉื”

ืœืคื ื™ ื”ืขื ืŸ, ืืชื” ืขื“ื™ื™ืŸ ืฆืจื™ืš ืœื”ื™ื•ืช ืงืฆืช ืกื‘ืœื ื™ ื•ืœื›ืชื•ื‘ ืฉื™ืจื•ืช ืคืฉื•ื˜ ืœืžื“ื™ ืœืขื™ื‘ื•ื“ ืื™ืจื•ืขื™ื ื ื›ื ืกื™ื. ื ืฉืชืžืฉ ื‘ื’ื•ืœืื ื’ ืžื›ื™ื•ื•ืŸ ืฉื”ื™ื ื”ื•ื›ื™ื—ื” ืืช ืขืฆืžื” ื”ื™ื˜ื‘ ื›ืฉืคื” ืœื›ืชื™ื‘ืช ื™ื™ืฉื•ืžื™ ืจืฉืช.

ืœืื—ืจ ืฉื‘ื™ืœื™ื ื• ืฉืขื” (ืื•ืœื™ ื›ืžื” ืฉืขื•ืช), ื ืงื‘ืœ ืžืฉื”ื• ื›ื–ื”: https://github.com/RebrainMe/yandex-cloud-events/blob/master/app/main.go.

ืžื”ืŸ ื”ื ืงื•ื“ื•ืช ื”ืขื™ืงืจื™ื•ืช ืฉืื ื™ ืจื•ืฆื” ืœืฆื™ื™ืŸ ื›ืืŸ:

1. ื‘ืขืช ื”ืคืขืœืช ื”ืืคืœื™ืงืฆื™ื”, ื ื™ืชืŸ ืœืฆื™ื™ืŸ ืฉื ื™ ื“ื’ืœื™ื. ื”ืื—ื“ ืื—ืจืื™ ืขืœ ื”ื™ืฆื™ืื” ืฉืขืœื™ื” ื ืงืฉื™ื‘ ืœื‘ืงืฉื•ืช http ื ื›ื ืกื•ืช (-addr). ื”ืฉื ื™ ื”ื•ื ืขื‘ื•ืจ ื›ืชื•ื‘ืช ืฉืจืช ืงืคืงื ืฉื‘ื” ื ืจืฉื•ื ืืช ื”ืื™ืจื•ืขื™ื ืฉืœื ื• (-ืงืคืงื):

addr     = flag.String("addr", ":8080", "TCP address to listen to")
kafka    = flag.String("kafka", "127.0.0.1:9092", "Kafka endpointsโ€)

2. ื”ืืคืœื™ืงืฆื™ื” ืžืฉืชืžืฉืช ื‘ืกืคืจื™ื™ืช sarama ([] github.com/Shopify/sarama) ืœืฉืœื•ื— ื”ื•ื“ืขื•ืช ืœืืฉื›ื•ืœ ืงืคืงื. ื”ื’ื“ืจื ื• ืžื™ื“ ืืช ื”ื”ื’ื“ืจื•ืช ื”ืžื›ื•ื•ื ื•ืช ืœืžื”ื™ืจื•ืช ืขื™ื‘ื•ื“ ืžืงืกื™ืžืœื™ืช:

config := sarama.NewConfig()
config.Producer.RequiredAcks = sarama.WaitForLocal
config.Producer.Compression = sarama.CompressionSnappy
config.Producer.Return.Successes = true

3. ืœืืคืœื™ืงืฆื™ื” ืฉืœื ื• ื™ืฉ ื’ื ืœืงื•ื— ืคืจื•ืžืชืื•ืก ืžื•ื‘ื ื”, ืฉืื•ืกืฃ ืžื“ื“ื™ื ืฉื•ื ื™ื, ื›ื’ื•ืŸ:

  • ืžืกืคืจ ื‘ืงืฉื•ืช ืœื™ื™ืฉื•ื ืฉืœื ื•;
  • ืžืกืคืจ ืฉื’ื™ืื•ืช ื‘ืขืช ื‘ื™ืฆื•ืข ื”ื‘ืงืฉื” (ืื™ ืืคืฉืจ ืœืงืจื•ื ืืช ื‘ืงืฉืช ื”ืคื•ืกื˜, json ืฉื‘ื•ืจ, ื‘ืœืชื™ ืืคืฉืจื™ ืœื›ืชื•ื‘ ืœืงืคืงื);
  • ื–ืžืŸ ื˜ื™ืคื•ืœ ื‘ื‘ืงืฉื” ืื—ืช ืžื”ืœืงื•ื—, ื›ื•ืœืœ ื–ืžืŸ ื›ืชื™ื‘ืช ื”ื•ื“ืขื” ืœืงืคืงื.

4. ืฉืœื•ืฉ ื ืงื•ื“ื•ืช ืงืฆื” ืฉื”ื‘ืงืฉื” ืฉืœื ื• ืžืขื‘ื“ืช:

  • /status - ืคืฉื•ื˜ ื”ื—ื–ืจ ื‘ืกื“ืจ ื›ื“ื™ ืœื”ืจืื•ืช ืฉืื ื—ื ื• ื—ื™ื™ื. ืœืžืจื•ืช ืฉืืชื” ื™ื›ื•ืœ ืœื”ื•ืกื™ืฃ ื›ืžื” ืฆ'ืงื™ื, ื›ื’ื•ืŸ ื–ืžื™ื ื•ืช ืืฉื›ื•ืœ ืงืคืงื.
  • /metrics - ืœืคื™ ื›ืชื•ื‘ืช ื”ืืชืจ ื”ื–ื•, ืœืงื•ื— ื”-prometheus ื™ื—ื–ื™ืจ ืืช ื”ืžื“ื“ื™ื ืฉื”ื•ื ืืกืฃ.
  • /post ื”ื•ื ื ืงื•ื“ืช ื”ืงืฆื” ื”ืขื™ืงืจื™ืช ืฉื‘ื” ื™ื™ืฉืœื—ื• ื‘ืงืฉื•ืช POST ืขื json ื‘ืคื ื™ื. ื”ืืคืœื™ืงืฆื™ื” ืฉืœื ื• ื‘ื•ื“ืงืช ืืช ืชืงืคื•ืช ื”-json ื•ืื ื”ื›ืœ ื‘ืกื“ืจ, ื”ื™ื ื›ื•ืชื‘ืช ืืช ื”ื ืชื•ื ื™ื ืœืืฉื›ื•ืœ ืงืคืงื.

ืืขืฉื” ื”ืกืชื™ื™ื’ื•ืช ืฉื”ืงื•ื“ ืื™ื ื• ืžื•ืฉืœื - ื ื™ืชืŸ (ื•ืฆืจื™ืš!) ืœื”ืฉืœื™ื ืื•ืชื•. ืœื“ื•ื’ืžื”, ืืชื” ื™ื›ื•ืœ ืœื”ืคืกื™ืง ืœื”ืฉืชืžืฉ ื‘-net/http ื”ืžื•ื‘ื ื” ื•ืœืขื‘ื•ืจ ืœ-fasthttp ื”ืžื”ื™ืจ ื™ื•ืชืจ. ืื• ืฉืืชื” ื™ื›ื•ืœ ืœื”ืจื•ื•ื™ื— ื–ืžืŸ ืขื™ื‘ื•ื“ ื•ืžืฉืื‘ื™ ืžืขื‘ื“ ืขืœ ื™ื“ื™ ื”ืขื‘ืจืช ื‘ื“ื™ืงืช ื”ืชื•ืงืฃ ืฉืœ json ืœืฉืœื‘ ืžืื•ื—ืจ ื™ื•ืชืจ - ื›ืืฉืจ ื”ื ืชื•ื ื™ื ืžื•ืขื‘ืจื™ื ืžื”ืžืื’ืจ ืœืืฉื›ื•ืœ ื”ืงืœืงื”.

ื‘ื ื•ืกืฃ ืœืฆื“ ื”ืคื™ืชื•ื— ืฉืœ ื”ื ื•ืฉื, ื—ืฉื‘ื ื• ืžื™ื“ ืขืœ ื”ืชืฉืชื™ืช ื”ืขืชื™ื“ื™ืช ืฉืœื ื• ื•ื”ื—ืœื˜ื ื• ืœืคืจื•ืก ืืช ื”ืืคืœื™ืงืฆื™ื” ืฉืœื ื• ื‘ืืžืฆืขื•ืช docker. ื”-Dockerfile ื”ืกื•ืคื™ ืœื‘ื ื™ื™ืช ื”ืืคืœื™ืงืฆื™ื” ื”ื•ื https://github.com/RebrainMe/yandex-cloud-events/blob/master/app/Dockerfile. ื‘ืื•ืคืŸ ื›ืœืœื™, ื–ื” ื“ื™ ืคืฉื•ื˜, ื”ื ืงื•ื“ื” ื”ื™ื—ื™ื“ื” ืฉืื ื™ ืจื•ืฆื” ืœืฉื™ื ืœื‘ ืืœื™ื” ื”ื™ื ื”ืžื›ืœื•ืœ ื”ืจื‘-ืฉืœื‘ื™, ื”ืžืืคืฉืจ ืœื ื• ืœืฆืžืฆื ืืช ื”ืชืžื•ื ื” ื”ืกื•ืคื™ืช ืฉืœ ื”ืžื™ื›ืœ ืฉืœื ื•.

ืฆืขื“ื™ื ืจืืฉื•ื ื™ื ื‘ืขื ืŸ

ืงื•ื“ื ื›ืœ, ื”ื™ืจืฉื cloud.yandex.ru. ืœืื—ืจ ืžื™ืœื•ื™ ื›ืœ ื”ืฉื“ื•ืช ื”ื“ืจื•ืฉื™ื, ื ื™ืฆื•ืจ ืœื ื• ื—ืฉื‘ื•ืŸ ื•ื ื™ืชืŸ ืœื ื• ืžืขื ืง ืขืœ ืกื›ื•ื ื›ืกืฃ ืžืกื•ื™ื, ืฉื ื™ืชืŸ ืœื”ืฉืชืžืฉ ื‘ื• ืœื‘ื“ื™ืงืช ืฉื™ืจื•ืชื™ ืขื ืŸ. ืื ืืชื” ืจื•ืฆื” ืœื—ื–ื•ืจ ืขืœ ื›ืœ ื”ืฉืœื‘ื™ื ืžื”ืžืืžืจ ืฉืœื ื•, ืžืขื ืง ื–ื” ืืžื•ืจ ืœื”ืกืคื™ืง ืœืš.

ืœืื—ืจ ื”ื”ืจืฉืžื” ื™ื™ื•ื•ืฆืจื• ืขื‘ื•ืจื›ื ืขื ืŸ ื ืคืจื“ ื•ืกืคืจื™ื™ืช ื‘ืจื™ืจืช ืžื—ื“ืœ, ื‘ื” ืชื•ื›ืœื• ืœื”ืชื—ื™ืœ ืœื™ืฆื•ืจ ืžืฉืื‘ื™ ืขื ืŸ. ื‘ืื•ืคืŸ ื›ืœืœื™, ื‘-Yandex.Cloud, ื™ื—ืกื™ ื”ืžืฉืื‘ื™ื ื ืจืื™ื ื›ืš:

ืื ื• ืžืงื‘ืœื™ื 10 ืื™ืจื•ืขื™ื ื‘-Yandex.Cloud. ื—ืœืง 000

ืืชื” ื™ื›ื•ืœ ืœื™ืฆื•ืจ ืžืกืคืจ ืขื ื ื™ื ืขื‘ื•ืจ ื—ืฉื‘ื•ืŸ ืื—ื“. ื•ื‘ืชื•ืš ื”ืขื ืŸ, ืฆื•ืจ ืกืคืจื™ื•ืช ืฉื•ื ื•ืช ืขื‘ื•ืจ ืคืจื•ื™ืงื˜ื™ื ืฉื•ื ื™ื ืฉืœ ื”ื—ื‘ืจื”. ืชื•ื›ืœ ืœืงืจื•ื ืขื•ื“ ืขืœ ื›ืš ื‘ืชื™ืขื•ื“ - https://cloud.yandex.ru/docs/resource-manager/concepts/resources-hierarchy. ืื’ื‘, ืืชื™ื™ื—ืก ืืœื™ื• ื”ืจื‘ื” ื‘ื”ืžืฉืš ื”ื˜ืงืกื˜. ื›ืืฉืจ ื”ืงืžืชื™ ืืช ื›ืœ ื”ืชืฉืชื™ืช ืžืืคืก, ื”ืชื™ืขื•ื“ ืขื–ืจ ืœื™ ื™ื•ืชืจ ืžืคืขื ืื—ืช, ืื– ืื ื™ ืžืžืœื™ืฅ ืœืš ืœืœืžื•ื“ ืื•ืชื•.

ื›ื“ื™ ืœื ื”ืœ ืืช ื”ืขื ืŸ, ืืชื” ื™ื›ื•ืœ ืœื”ืฉืชืžืฉ ื’ื ื‘ืžืžืฉืง ื”ืื™ื ื˜ืจื ื˜ ื•ื’ื ื‘ื›ืœื™ ื”ืฉื™ืจื•ืช ืฉืœ ื”ืžืกื•ืฃ - yc. ื”ื”ืชืงื ื” ืžืชื‘ืฆืขืช ื‘ืคืงื•ื“ื” ืื—ืช (ืขื‘ื•ืจ ืœื™ื ื•ืงืก ื•-Mac OS):

curl https://storage.yandexcloud.net/yandexcloud-yc/install.sh | bash

ืื ืžื•ืžื—ื” ื”ืื‘ื˜ื—ื” ื”ืคื ื™ืžื™ ืฉืœืš ืžืฉืชื•ืœืœ ืขืœ ื”ืคืขืœืช ืกืงืจื™ืคื˜ื™ื ืžื”ืื™ื ื˜ืจื ื˜, ืื–, ืจืืฉื™ืช, ืชื•ื›ืœ ืœืคืชื•ื— ืืช ื”ืกืงืจื™ืคื˜ ื•ืœืงืจื•ื ืื•ืชื•, ื•ืฉื ื™ืช, ืื ื• ืžืจื™ืฆื™ื ืื•ืชื• ืชื—ืช ื”ืžืฉืชืžืฉ ืฉืœื ื• - ืœืœื ื–ื›ื•ื™ื•ืช ืฉื•ืจืฉ.

ืื ืืชื” ืจื•ืฆื” ืœื”ืชืงื™ืŸ ืœืงื•ื— ืขื‘ื•ืจ Windows, ืืชื” ื™ื›ื•ืœ ืœื”ืฉืชืžืฉ ื‘ื”ื•ืจืื•ืช ื›ืืŸ ื•ืœืื—ืจ ืžื›ืŸ ืœื‘ืฆืข yc initื›ื“ื™ ืœื”ืชืื™ื ืื•ืชื• ื‘ืื•ืคืŸ ืžืœื:

vozerov@mba:~ $ yc init
Welcome! This command will take you through the configuration process.
Please go to https://oauth.yandex.ru/authorize?response_type=token&client_id= in order to obtain OAuth token.

Please enter OAuth token:
Please select cloud to use:
 [1] cloud-b1gv67ihgfu3bp (id = b1gv67ihgfu3bpt24o0q)
 [2] fevlake-cloud (id = b1g6bvup3toribomnh30)
Please enter your numeric choice: 2
Your current cloud has been set to 'fevlake-cloud' (id = b1g6bvup3toribomnh30).
Please choose folder to use:
 [1] default (id = b1g5r6h11knotfr8vjp7)
 [2] Create a new folder
Please enter your numeric choice: 1
Your current folder has been set to 'default' (id = b1g5r6h11knotfr8vjp7).
Do you want to configure a default Compute zone? [Y/n]
Which zone do you want to use as a profile default?
 [1] ru-central1-a
 [2] ru-central1-b
 [3] ru-central1-c
 [4] Don't set default zone
Please enter your numeric choice: 1
Your profile default Compute zone has been set to 'ru-central1-a'.
vozerov@mba:~ $

ื‘ืื•ืคืŸ ืขืงืจื•ื ื™, ื”ืชื”ืœื™ืš ืคืฉื•ื˜ โ€“ ืจืืฉื™ืช ืฆืจื™ืš ืœืงื‘ืœ ืืกื™ืžื•ืŸ oauth ืœื ื™ื”ื•ืœ ื”ืขื ืŸ, ื‘ื—ืจื• ืืช ื”ืขื ืŸ ื•ืืช ื”ืชื™ืงื™ื” ื‘ื” ืชืฉืชืžืฉื•.

ืื ื™ืฉ ืœืš ืžืกืคืจ ื—ืฉื‘ื•ื ื•ืช ืื• ืชื™ืงื™ื•ืช ื‘ืชื•ืš ืื•ืชื• ืขื ืŸ, ืชื•ื›ืœ ืœื™ืฆื•ืจ ืคืจื•ืคื™ืœื™ื ื ื•ืกืคื™ื ืขื ื”ื’ื“ืจื•ืช ื ืคืจื“ื•ืช ื‘ืืžืฆืขื•ืช yc config profile create ื•ืœืขื‘ื•ืจ ื‘ื™ื ื™ื”ื.

ื‘ื ื•ืกืฃ ืœืฉื™ื˜ื•ืช ืœืขื™ืœ, ืฆื•ื•ืช Yandex.Cloud ื›ืชื‘ ื˜ื•ื‘ ืžืื•ื“ ืชื•ืกืฃ ืขื‘ื•ืจ terraform ืœื ื™ื”ื•ืœ ืžืฉืื‘ื™ ืขื ืŸ. ื”ื›ื ืชื™ ืžืฆื™ื“ื™ ืžืื’ืจ git, ืฉื‘ื• ืชื™ืืจืชื™ ืืช ื›ืœ ื”ืžืฉืื‘ื™ื ืฉื™ื™ื•ื•ืฆืจื• ื‘ืžืกื’ืจืช ื”ืžืืžืจ - https://github.com/rebrainme/yandex-cloud-events/. ืื ื—ื ื• ืžืขื•ื ื™ื™ื ื™ื ื‘ืกื ื™ืฃ ื”ืžืืกื˜ืจ, ื‘ื•ืื• ื ืฉื›ืคืœ ืื•ืชื• ื‘ืื•ืคืŸ ืžืงื•ืžื™:


vozerov@mba:~ $ git clone https://github.com/rebrainme/yandex-cloud-events/ events
Cloning into 'events'...
remote: Enumerating objects: 100, done.
remote: Counting objects: 100% (100/100), done.
remote: Compressing objects: 100% (68/68), done.
remote: Total 100 (delta 37), reused 89 (delta 26), pack-reused 0
Receiving objects: 100% (100/100), 25.65 KiB | 168.00 KiB/s, done.
Resolving deltas: 100% (37/37), done.
vozerov@mba:~ $ cd events/terraform/

ื›ืœ ื”ืžืฉืชื ื™ื ื”ืขื™ืงืจื™ื™ื ื”ืžืฉืžืฉื™ื ื‘-terraform ื ื›ืชื‘ื™ื ื‘ืงื•ื‘ืฅ main.tf. ื›ื“ื™ ืœื”ืชื—ื™ืœ, ืฆื•ืจ ืงื•ื‘ืฅ private.auto.tfvars ื‘ืชื™ืงื™ื™ืช terraform ืขื ื”ืชื•ื›ืŸ ื”ื‘ื:

# Yandex Cloud Oauth token
yc_token = ""
# Yandex Cloud ID
yc_cloud_id = ""
# Yandex Cloud folder ID
yc_folder_id = ""
# Default Yandex Cloud Region
yc_region = "ru-central1-a"
# Cloudflare email
cf_email = ""
# Cloudflare token
cf_token = ""
# Cloudflare zone id
cf_zone_id = ""

ื ื™ืชืŸ ืœืงื—ืช ืืช ื›ืœ ื”ืžืฉืชื ื™ื ืžืจืฉื™ืžืช ื”ืชืฆื•ืจื” ืฉืœ yc, ืžื›ื™ื•ื•ืŸ ืฉื›ื‘ืจ ื”ื’ื“ืจื ื• ืืช ื›ืœื™ ื”ืฉื™ืจื•ืช ื”ืžืกื•ืฃ. ืื ื™ ืžืžืœื™ืฅ ืœืš ืœื”ื•ืกื™ืฃ ืžื™ื“ ืืช private.auto.tfvars ืœ-.gitignore, ื›ื“ื™ ืœื ืœืคืจืกื ื‘ื˜ืขื•ืช ื ืชื•ื ื™ื ืคืจื˜ื™ื™ื.

ื‘-private.auto.tfvars ืฆื™ื™ื ื• ื’ื ื ืชื•ื ื™ื ืž-Cloudflare - ื›ื“ื™ ืœื™ืฆื•ืจ ืจืฉื•ืžื•ืช DNS ื•ืœืฉืจืช ืืช ื”ื“ื•ืžื™ื™ืŸ ื”ืจืืฉื™ events.kis.im ืœืฉืจืชื™ื ืฉืœื ื•. ืื ืื™ื ืš ืจื•ืฆื” ืœื”ืฉืชืžืฉ ื‘-cloudflare, ื”ืกืจ ืืช ื”ืืชื—ื•ืœ ืฉืœ ืกืคืง ื”-cloudflare ื‘-main.tf ื•ืืช ื”ืงื•ื‘ืฅ dns.tf, ืฉืื—ืจืื™ ืขืœ ื™ืฆื™ืจืช ืจืฉื•ืžื•ืช ื”-dns ื”ื ื—ื•ืฆื•ืช.

ื‘ืขื‘ื•ื“ืชื ื• ื ืฉืœื‘ ืืช ื›ืœ ืฉืœื•ืฉ ื”ืฉื™ื˜ื•ืช - ืžืžืฉืง ื”ืื™ื ื˜ืจื ื˜, ื›ืœื™ ื”ืฉื™ืจื•ืช ืฉืœ ื”ืžืกื•ืฃ ื•-terraform.

ืจืฉืชื•ืช ื•ื™ืจื˜ื•ืืœื™ื•ืช

ืœืžืขืŸ ื”ืืžืช, ืืชื” ื™ื›ื•ืœ ืœื“ืœื’ ืขืœ ืฉืœื‘ ื–ื”, ืžื›ื™ื•ื•ืŸ ืฉื›ืืฉืจ ืืชื” ื™ื•ืฆืจ ืขื ืŸ ื—ื“ืฉ, ืชื”ื™ื” ืœืš ืื•ื˜ื•ืžื˜ื™ืช ืจืฉืช ื ืคืจื“ืช ื•-3 ืจืฉืชื•ืช ืžืฉื ื” - ืื—ืช ืœื›ืœ ืื–ื•ืจ ื–ืžื™ื ื•ืช. ืื‘ืœ ืขื“ื™ื™ืŸ ื ืจืฆื” ืœื™ืฆื•ืจ ืจืฉืช ื ืคืจื“ืช ืœืคืจื•ื™ืงื˜ ืฉืœื ื• ืขื ื›ืชื•ื‘ืช ืžืฉืœื”. ื”ื“ื™ืื’ืจืžื” ื”ื›ืœืœื™ืช ืฉืœ ืื•ืคืŸ ื”ืคืขื•ืœื” ืฉืœ ื”ืจืฉืช ื‘-Yandex.Cloud ืžื•ืฆื’ืช ื‘ืื™ื•ืจ ืฉืœื”ืœืŸ (ื‘ื›ื ื•ืช ื ืœืงื—ื” ืž https://cloud.yandex.ru/docs/vpc/concepts/)

ืื ื• ืžืงื‘ืœื™ื 10 ืื™ืจื•ืขื™ื ื‘-Yandex.Cloud. ื—ืœืง 000

ืื–, ืืชื” ื™ื•ืฆืจ ืจืฉืช ืžืฉื•ืชืคืช ืฉื‘ืชื•ื›ื” ืžืฉืื‘ื™ื ื™ื›ื•ืœื™ื ืœืชืงืฉืจ ื–ื” ืขื ื–ื”. ืขื‘ื•ืจ ื›ืœ ืื–ื•ืจ ื–ืžื™ื ื•ืช, ืชืช-ืจืฉืช ื ื•ืฆืจืช ืขื ื›ืชื•ื‘ืช ืžืฉืœื” ื•ืžื—ื•ื‘ืจืช ืœืจืฉืช ื”ื›ืœืœื™ืช. ื›ืชื•ืฆืื” ืžื›ืš, ื›ืœ ืžืฉืื‘ื™ ื”ืขื ืŸ ื‘ื• ื™ื›ื•ืœื™ื ืœืชืงืฉืจ, ื’ื ืื ื”ื ื ืžืฆืื™ื ื‘ืื–ื•ืจื™ ื–ืžื™ื ื•ืช ืฉื•ื ื™ื. ืžืฉืื‘ื™ื ื”ืžื—ื•ื‘ืจื™ื ืœืจืฉืชื•ืช ืขื ืŸ ืฉื•ื ื•ืช ื™ื›ื•ืœื™ื ืœืจืื•ืช ื–ื” ืืช ื–ื” ืจืง ื“ืจืš ื›ืชื•ื‘ื•ืช ื—ื™ืฆื•ื ื™ื•ืช. ื“ืจืš ืื’ื‘, ืื™ืš ื”ืงืกื ื”ื–ื” ืขื•ื‘ื“ ื‘ืคื ื™ื, ืชื•ืืจ ื”ื™ื˜ื‘ ืขืœ Habrรฉ.

ื™ืฆื™ืจืช ื”ืจืฉืช ืžืชื•ืืจืช ื‘ืงื•ื‘ืฅ network.tf ืžื”ืžืื’ืจ. ืฉื ืื ื• ื™ื•ืฆืจื™ื ืจืฉืช ืคืจื˜ื™ืช ืžืฉื•ืชืคืช ืคื ื™ืžื™ืช ืื—ืช ื•ืžื—ื‘ืจื™ื ืืœื™ื” ืฉืœื•ืฉ ืจืฉืชื•ืช ืžืฉื ื” ื‘ืื–ื•ืจื™ ื–ืžื™ื ื•ืช ืฉื•ื ื™ื - ืคื ื™ืžื™-a (172.16.1.0/24), ืคื ื™ืžื™-ื‘ (172.16.2.0/24), ืคื ื™ืžื™-ื’ (172.16.3.0/24) ).

ืืชื—ื•ืœ terraform ื•ืฆื•ืจ ืจืฉืชื•ืช:

vozerov@mba:~/events/terraform (master) $ terraform init
... skipped ..

vozerov@mba:~/events/terraform (master) $ terraform apply -target yandex_vpc_subnet.internal-a -target yandex_vpc_subnet.internal-b -target yandex_vpc_subnet.internal-c

... skipped ...

Plan: 4 to add, 0 to change, 0 to destroy.

Do you want to perform these actions?
  Terraform will perform the actions described above.
  Only 'yes' will be accepted to approve.

  Enter a value: yes

yandex_vpc_network.internal: Creating...
yandex_vpc_network.internal: Creation complete after 3s [id=enp2g2rhile7gbqlbrkr]
yandex_vpc_subnet.internal-a: Creating...
yandex_vpc_subnet.internal-b: Creating...
yandex_vpc_subnet.internal-c: Creating...
yandex_vpc_subnet.internal-a: Creation complete after 6s [id=e9b1dad6mgoj2v4funog]
yandex_vpc_subnet.internal-b: Creation complete after 7s [id=e2liv5i4amu52p64ac9p]
yandex_vpc_subnet.internal-c: Still creating... [10s elapsed]
yandex_vpc_subnet.internal-c: Creation complete after 10s [id=b0c2qhsj2vranoc9vhcq]

Apply complete! Resources: 4 added, 0 changed, 0 destroyed.

ื’ื“ื•ืœ! ื™ืฆืจื ื• ืืช ื”ืจืฉืช ืฉืœื ื• ื•ืขื›ืฉื™ื• ืื ื—ื ื• ืžื•ื›ื ื™ื ืœื™ืฆื•ืจ ืืช ื”ืฉื™ืจื•ืชื™ื ื”ืคื ื™ืžื™ื™ื ืฉืœื ื•.

ื™ืฆื™ืจืช ืžื›ื•ื ื•ืช ื•ื™ืจื˜ื•ืืœื™ื•ืช

ื›ื“ื™ ืœื‘ื“ื•ืง ืืช ื”ืืคืœื™ืงืฆื™ื”, ื ืฆื˜ืจืš ืœื™ืฆื•ืจ ืจืง ืฉืชื™ ืžื›ื•ื ื•ืช ื•ื™ืจื˜ื•ืืœื™ื•ืช - ื ืฆื˜ืจืš ืืช ื”ืจืืฉื•ื ื” ื›ื“ื™ ืœื‘ื ื•ืช ื•ืœื”ืคืขื™ืœ ืืช ื”ืืคืœื™ืงืฆื™ื”, ื”ืฉื ื™ื™ื” ื›ื“ื™ ืœื”ืคืขื™ืœ ืืช ืงืคืงื, ืฉื‘ื” ื ืฉืชืžืฉ ืœืื—ืกื•ืŸ ื”ื•ื“ืขื•ืช ื ื›ื ืกื•ืช. ื•ื ื™ืฆื•ืจ ืžื›ื•ื ื” ื ื•ืกืคืช ืฉื‘ื” ื ื’ื“ื™ืจ ืืช ืคืจื•ืžืชืื•ืก ืœื ื˜ืจ ืืช ื”ืืคืœื™ืงืฆื™ื”.

ื”ืžื›ื•ื ื•ืช ื”ื•ื™ืจื˜ื•ืืœื™ื•ืช ื™ื•ื’ื“ืจื• ื‘ืืžืฆืขื•ืช ansible, ืื– ืœืคื ื™ ืฉืชืชื—ื™ืœ ืืช terraform, ื•ื“ื ืฉื™ืฉ ืœืš ืืช ืื—ืช ืžื”ื’ืจืกืื•ืช ื”ืื—ืจื•ื ื•ืช ืฉืœ ansible. ื•ื”ืชืงืŸ ืืช ื”ืชืคืงื™ื“ื™ื ื”ื“ืจื•ืฉื™ื ืขื ื’ืœืงืกื™ื” ืืคืฉืจื™ืช:

vozerov@mba:~/events/terraform (master) $ cd ../ansible/
vozerov@mba:~/events/ansible (master) $ ansible-galaxy install -r requirements.yml
- cloudalchemy-prometheus (master) is already installed, skipping.
- cloudalchemy-grafana (master) is already installed, skipping.
- sansible.kafka (master) is already installed, skipping.
- sansible.zookeeper (master) is already installed, skipping.
- geerlingguy.docker (master) is already installed, skipping.
vozerov@mba:~/events/ansible (master) $

ื‘ืชื•ืš ืชื™ืงื™ื™ืช ansible ื™ืฉ ืงื•ื‘ืฅ ืชืฆื•ืจื” ืœื“ื•ื’ืžื” ืฉืœ .ansible.cfg ืฉืื ื™ ืžืฉืชืžืฉ ื‘ื•. ื–ื” ืขืฉื•ื™ ืœื”ื•ืขื™ืœ.

ืœืคื ื™ ื™ืฆื™ืจืช ืžื›ื•ื ื•ืช ื•ื™ืจื˜ื•ืืœื™ื•ืช, ื•ื“ื ืฉื™ืฉ ืœืš ssh-agent ืจืฅ ื•ื ื•ืกืฃ ืžืคืชื— ssh, ืื—ืจืช terraform ืœื ืชื•ื›ืœ ืœื”ืชื—ื‘ืจ ืœืžื›ื•ื ื•ืช ืฉื ื•ืฆืจื•. ืื ื™, ื›ืžื•ื‘ืŸ, ื ืชืงืœืชื™ ื‘ื‘ืื’ ื‘-os x: https://github.com/ansible/ansible/issues/32499#issuecomment-341578864. ื›ื“ื™ ืœืžื ื•ืข ืืช ื–ื” ืœืงืจื•ืช ืฉื•ื‘, ื”ื•ืกืฃ ืžืฉืชื ื” ืงื˜ืŸ ืœ-env ืœืคื ื™ ื”ืคืขืœืช Terraform:

vozerov@mba:~/events/terraform (master) $ export OBJC_DISABLE_INITIALIZE_FORK_SAFETY=YES

ื‘ืชื™ืงื™ื™ื” ืขื terraform ืื ื• ื™ื•ืฆืจื™ื ืืช ื”ืžืฉืื‘ื™ื ื”ื“ืจื•ืฉื™ื:

vozerov@mba:~/events/terraform (master) $ terraform apply -target yandex_compute_instance.build -target yandex_compute_instance.monitoring -target yandex_compute_instance.kafka
yandex_vpc_network.internal: Refreshing state... [id=enp2g2rhile7gbqlbrkr]
data.yandex_compute_image.ubuntu_image: Refreshing state...
yandex_vpc_subnet.internal-a: Refreshing state... [id=e9b1dad6mgoj2v4funog]

An execution plan has been generated and is shown below.
Resource actions are indicated with the following symbols:
  + create

... skipped ...

Plan: 3 to add, 0 to change, 0 to destroy.

... skipped ...

ืื ื”ื›ืœ ื”ืกืชื™ื™ื ื‘ื”ืฆืœื—ื” (ื•ื–ื” ืืžื•ืจ ืœื”ื™ื•ืช), ื™ื”ื™ื• ืœื ื• ืฉืœื•ืฉ ืžื›ื•ื ื•ืช ื•ื™ืจื˜ื•ืืœื™ื•ืช:

  1. build - ืžื›ื•ื ื” ืœื‘ื“ื™ืงื” ื•ื‘ื ื™ื™ืช ืืคืœื™ืงืฆื™ื”. Docker ื”ื•ืชืงืŸ ืื•ื˜ื•ืžื˜ื™ืช ืขืœ ื™ื“ื™ Ansible.
  2. ื ื™ื˜ื•ืจ - ืžื›ื•ื ืช ื ื™ื˜ื•ืจ - ืคืจื•ืžืชืื•ืก ื•ื’ืจืคื ื” ืžื•ืชืงื ืช ืขืœื™ื”. ื›ื ื™ืกื” / ืกื™ืกืžื” ืกื˜ื ื“ืจื˜ื™: ืื“ืžื™ืŸ / ืื“ืžื™ืŸ
  3. ืงืคืงื ื”ื™ื ืžื›ื•ื ื” ืงื˜ื ื” ืขื ืงืคืงื ืžื•ืชืงื ืช, ื ื’ื™ืฉื” ื‘ื™ืฆื™ืื” 9092.

ื‘ื•ืื• ื ื•ื•ื“ื ืฉื›ื•ืœื ื‘ืžืงื•ื:

vozerov@mba:~/events (master) $ yc compute instance list
+----------------------+------------+---------------+---------+---------------+-------------+
|          ID          |    NAME    |    ZONE ID    | STATUS  |  EXTERNAL IP  | INTERNAL IP |
+----------------------+------------+---------------+---------+---------------+-------------+
| fhm081u8bkbqf1pa5kgj | monitoring | ru-central1-a | RUNNING | 84.201.159.71 | 172.16.1.35 |
| fhmf37k03oobgu9jmd7p | kafka      | ru-central1-a | RUNNING | 84.201.173.41 | 172.16.1.31 |
| fhmt9pl1i8sf7ga6flgp | build      | ru-central1-a | RUNNING | 84.201.132.3  | 172.16.1.26 |
+----------------------+------------+---------------+---------+---------------+-------------+

ื”ืžืฉืื‘ื™ื ื‘ืžืงื•ื, ื•ืžื›ืืŸ ื ื•ื›ืœ ืœืงื‘ืœ ืืช ื›ืชื•ื‘ื•ืช ื”-IP ืฉืœื”ื. ื‘ืžื”ืœืš ื”ื“ื‘ืจื™ื ื”ื‘ืื™ื ืืฉืชืžืฉ ื‘ื›ืชื•ื‘ื•ืช IP ื›ื“ื™ ืœื”ืชื—ื‘ืจ ื‘ืืžืฆืขื•ืช ssh ื•ืœื‘ื“ื•ืง ืืช ื”ืืคืœื™ืงืฆื™ื”. ืื ื™ืฉ ืœืš ื—ืฉื‘ื•ืŸ cloudflare ื”ืžื—ื•ื‘ืจ ืœ-terraform, ืืœ ืชื”ืกืก ืœื”ืฉืชืžืฉ ื‘ืฉืžื•ืช DNS ืฉื ื•ืฆืจื• ืœืื—ืจื•ื ื”.
ืื’ื‘, ื‘ืขืช ื™ืฆื™ืจืช ืžื›ื•ื ื” ื•ื™ืจื˜ื•ืืœื™ืช, ื ื™ืชืŸ IP ืคื ื™ืžื™ ื•ืฉื DNS ืคื ื™ืžื™, ื›ืš ืฉืชื•ื›ืœ ืœื’ืฉืช ืœืฉืจืชื™ื ื‘ืชื•ืš ื”ืจืฉืช ืœืคื™ ืฉื:

ubuntu@build:~$ ping kafka.ru-central1.internal
PING kafka.ru-central1.internal (172.16.1.31) 56(84) bytes of data.
64 bytes from kafka.ru-central1.internal (172.16.1.31): icmp_seq=1 ttl=63 time=1.23 ms
64 bytes from kafka.ru-central1.internal (172.16.1.31): icmp_seq=2 ttl=63 time=0.625 ms
^C
--- kafka.ru-central1.internal ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1001ms
rtt min/avg/max/mdev = 0.625/0.931/1.238/0.308 ms

ื–ื” ื™ื”ื™ื” ืฉื™ืžื•ืฉื™ ืขื‘ื•ืจื ื• ื›ื“ื™ ืœืฆื™ื™ืŸ ืœืืคืœื™ืงืฆื™ื” ืืช ื ืงื•ื“ืช ื”ืงืฆื” ืขื kafk.

ื”ืจื›ื‘ืช ื”ืืคืœื™ืงืฆื™ื”

ืžืขื•ืœื”, ื™ืฉ ืฉืจืชื™ื, ื™ืฉ ืืคืœื™ืงืฆื™ื” - ื›ืœ ืžื” ืฉื ืฉืืจ ื–ื” ืœื”ืจื›ื™ื‘ ืื•ืชื” ื•ืœืคืจืกื ืื•ืชื”. ืขื‘ื•ืจ ื”-build ื ืฉืชืžืฉ ื‘-docer build ื”ืจื’ื™ืœ, ืืš ื›ืื—ืกื•ืŸ ืชืžื•ื ื•ืช ื ืฉืชืžืฉ ื‘ืฉื™ืจื•ืช ืž-Yandex - container registry. ืื‘ืœ ื“ื‘ืจ ืจืืฉื•ืŸ.

ืื ื• ืžืขืชื™ืงื™ื ืืช ื”ืืคืœื™ืงืฆื™ื” ืœืžื›ื•ื ืช ื”ื‘ื ื™ื™ื”, ื ื›ื ืกื™ื ื“ืจืš ssh ื•ืžืจื›ื™ื‘ื™ื ืืช ื”ืชืžื•ื ื”:

vozerov@mba:~/events/terraform (master) $ cd ..
vozerov@mba:~/events (master) $ rsync -av app/ [email protected]:app/

... skipped ...

sent 3849 bytes  received 70 bytes  7838.00 bytes/sec
total size is 3644  speedup is 0.93

vozerov@mba:~/events (master) $ ssh 84.201.132.3 -l ubuntu
ubuntu@build:~$ cd app
ubuntu@build:~/app$ sudo docker build -t app .
Sending build context to Docker daemon  6.144kB
Step 1/9 : FROM golang:latest AS build
... skipped ...

Successfully built 9760afd8ef65
Successfully tagged app:latest

ื—ืฆื™ ื”ืงืจื‘ ื”ืกืชื™ื™ื - ื›ืขืช ืื ื• ื™ื›ื•ืœื™ื ืœื‘ื“ื•ืง ืืช ื”ืคื•ื ืงืฆื™ื•ื ืœื™ื•ืช ืฉืœ ื”ืืคืœื™ืงืฆื™ื” ืฉืœื ื• ืขืœ ื™ื“ื™ ื”ืคืขืœืชื• ื•ืฉืœื™ื—ืชื• ืœ-kafka:

ubuntu@build:~/app$ sudo docker run --name app -d -p 8080:8080 app /app/app -kafka=kafka.ru-central1.internal:9092</code>

ะก ะปะพะบะฐะปัŒะฝะพะน ะผะฐัˆะธะฝะบะธ ะผะพะถะฝะพ ะพั‚ะฟั€ะฐะฒะธั‚ัŒ ั‚ะตัั‚ะพะฒั‹ะน event ะธ ะฟะพัะผะพั‚ั€ะตั‚ัŒ ะฝะฐ ะพั‚ะฒะตั‚:

<code>vozerov@mba:~/events (master) $ curl -D - -s -X POST -d '{"key1":"data1"}' http://84.201.132.3:8080/post
HTTP/1.1 200 OK
Content-Type: application/json
Date: Mon, 13 Apr 2020 13:53:54 GMT
Content-Length: 41

{"status":"ok","partition":0,"Offset":0}
vozerov@mba:~/events (master) $

ื”ืืคืœื™ืงืฆื™ื” ื”ื’ื™ื‘ื” ื‘ื”ืฆืœื—ื” ืฉืœ ื”ื”ืงืœื˜ื” ื•ืฆื™ื™ื ื” ืืช ืžื–ื”ื” ื”ืžื—ื™ืฆื” ื•ื”ืงื™ื–ื•ื– ืฉื‘ื” ื ื›ืœืœื” ื”ื”ื•ื“ืขื”. ื›ืœ ืžื” ืฉื ื•ืชืจ ืœืขืฉื•ืช ื”ื•ื ืœื™ืฆื•ืจ ืจื™ืฉื•ื ื‘-Yandex.Cloud ื•ืœื”ืขืœื•ืช ืœืฉื ืืช ื”ืชืžื•ื ื” ืฉืœื ื• (ืื™ืš ืœืขืฉื•ืช ื–ืืช ื‘ืืžืฆืขื•ืช ืฉืœื•ืฉ ืฉื•ืจื•ืช ืžืชื•ืืจ ื‘ืงื•ื‘ืฅ registry.tf). ืฆื•ืจ ืื—ืกื•ืŸ:

vozerov@mba:~/events/terraform (master) $ terraform apply -target yandex_container_registry.events

... skipped ...

Plan: 1 to add, 0 to change, 0 to destroy.

... skipped ...

Apply complete! Resources: 1 added, 0 changed, 0 destroyed.

ื™ืฉื ืŸ ืžืกืคืจ ื“ืจื›ื™ื ืœืื™ืžื•ืช ื‘ืจื™ืฉื•ื ื”ืžื›ื™ืœื™ื - ื‘ืืžืฆืขื•ืช ืืกื™ืžื•ืŸ oauth, ืืกื™ืžื•ืŸ iam ืื• ืžืคืชื— ื—ืฉื‘ื•ืŸ ืฉื™ืจื•ืช. ืคืจื˜ื™ื ื ื•ืกืคื™ื ืขืœ ืฉื™ื˜ื•ืช ืืœื” ื ื™ืชืŸ ืœืžืฆื•ื ื‘ืชื™ืขื•ื“. https://cloud.yandex.ru/docs/container-registry/operations/authentication. ืื ื• ื ืฉืชืžืฉ ื‘ืžืคืชื— ื—ืฉื‘ื•ืŸ ื”ืฉื™ืจื•ืช, ืœื›ืŸ ืื ื• ื™ื•ืฆืจื™ื ื—ืฉื‘ื•ืŸ:

vozerov@mba:~/events/terraform (master) $ terraform apply -target yandex_iam_service_account.docker -target yandex_resourcemanager_folder_iam_binding.puller -target yandex_resourcemanager_folder_iam_binding.pusher

... skipped ...

Apply complete! Resources: 3 added, 0 changed, 0 destroyed.

ื›ืขืช ื›ืœ ืฉื ื•ืชืจ ื”ื•ื ืœื™ืฆื•ืจ ืขื‘ื•ืจื• ืžืคืชื—:

vozerov@mba:~/events/terraform (master) $ yc iam key create --service-account-name docker -o key.json
id: ajej8a06kdfbehbrh91p
service_account_id: ajep6d38k895srp9osij
created_at: "2020-04-13T14:00:30Z"
key_algorithm: RSA_2048

ืื ื• ืžืงื‘ืœื™ื ืžื™ื“ืข ืขืœ ืžื–ื”ื” ื”ืื—ืกื•ืŸ ืฉืœื ื•, ืžืขื‘ื™ืจื™ื ืืช ื”ืžืคืชื— ื•ืžืชื—ื‘ืจื™ื:

vozerov@mba:~/events/terraform (master) $ scp key.json [email protected]:
key.json                                                                                                                    100% 2392   215.1KB/s   00:00

vozerov@mba:~/events/terraform (master) $ ssh 84.201.132.3 -l ubuntu

ubuntu@build:~$ cat key.json | sudo docker login --username json_key --password-stdin cr.yandex
WARNING! Your password will be stored unencrypted in /home/ubuntu/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded
ubuntu@build:~$

ื›ื“ื™ ืœื”ืขืœื•ืช ืืช ื”ืชืžื•ื ื” ืœืจื™ืฉื•ื, ืื ื—ื ื• ืฆืจื™ื›ื™ื ืืช ืžื–ื”ื” ื”ืจื™ืฉื•ื ืฉืœ ืžื™ื›ืœ, ืื ื—ื ื• ืœื•ืงื—ื™ื ืื•ืชื• ืžื›ืœื™ ื”ืฉื™ืจื•ืช yc:

vozerov@mba:~ $ yc container registry get events
id: crpdgj6c9umdhgaqjfmm
folder_id:
name: events
status: ACTIVE
created_at: "2020-04-13T13:56:41.914Z"

ืœืื—ืจ ืžื›ืŸ, ืื ื• ืžืชื™ื™ื’ื™ื ืืช ื”ืชืžื•ื ื” ืฉืœื ื• ื‘ืฉื ื—ื“ืฉ ื•ืžืขืœื™ื:

ubuntu@build:~$ sudo docker tag app cr.yandex/crpdgj6c9umdhgaqjfmm/events:v1
ubuntu@build:~$ sudo docker push cr.yandex/crpdgj6c9umdhgaqjfmm/events:v1
The push refers to repository [cr.yandex/crpdgj6c9umdhgaqjfmm/events]
8c286e154c6e: Pushed
477c318b05cb: Pushed
beee9f30bc1f: Pushed
v1: digest: sha256:1dd5aaa9dbdde2f60d833be0bed1c352724be3ea3158bcac3cdee41d47c5e380 size: 946

ืื ื• ื™ื›ื•ืœื™ื ืœื•ื•ื“ื ืฉื”ืชืžื•ื ื” ื ื˜ืขื ื” ื‘ื”ืฆืœื—ื”:

vozerov@mba:~/events/terraform (master) $ yc container repository list
+----------------------+-----------------------------+
|          ID          |            NAME             |
+----------------------+-----------------------------+
| crpe8mqtrgmuq07accvn | crpdgj6c9umdhgaqjfmm/events |
+----------------------+-----------------------------+

ืื’ื‘, ืื ืืชื” ืžืชืงื™ืŸ ืืช ื›ืœื™ ื”ืฉื™ืจื•ืช yc ื‘ืžื—ืฉื‘ ืœื™ื ื•ืงืก, ืืชื” ื™ื›ื•ืœ ืœื”ืฉืชืžืฉ ื‘ืคืงื•ื“ื”

yc container registry configure-docker

ื›ื“ื™ ืœื”ื’ื“ื™ืจ ืืช docker.

ืžืกืงื ื”

ืขืฉื™ื ื• ื”ืจื‘ื” ืขื‘ื•ื“ื” ืงืฉื” ื•ื›ืชื•ืฆืื” ืžื›ืš:

  1. ื”ืžืฆืื ื• ืืช ื”ืืจื›ื™ื˜ืงื˜ื•ืจื” ืฉืœ ื”ืฉื™ืจื•ืช ื”ืขืชื™ื“ื™ ืฉืœื ื•.
  2. ื›ืชื‘ื ื• ืืคืœื™ืงืฆื™ื” ื‘ื’ื•ืœื ื’ ื”ืžื™ื™ืฉืžืช ืืช ื”ื”ื™ื’ื™ื•ืŸ ื”ืขืกืงื™ ืฉืœื ื•.
  3. ืืกืคื ื• ืื•ืชื• ื•ืฉืคื›ื ื• ืื•ืชื• ืœืจื™ืฉื•ื ืžื›ื•ืœื•ืช ืคืจื˜ื™.

ื‘ื—ืœืง ื”ื‘ื, ื ืขื‘ื•ืจ ืœื“ื‘ืจื™ื ื”ืžืขื ื™ื™ื ื™ื - ื ืฉื—ืจืจ ืืช ื”ืืคืœื™ืงืฆื™ื” ืฉืœื ื• ืœื™ื™ืฆื•ืจ ื•ืœื‘ืกื•ืฃ ื ืฉื™ืง ืืช ื”ืขื•ืžืก ืขืœื™ื”. ืืœ ืชื—ืœื™ืฃ!

ื”ื—ื•ืžืจ ื”ื–ื” ื ืžืฆื ื‘ื”ืงืœื˜ืช ื”ื•ื•ื™ื“ืื• ืฉืœ ื”ืกื“ื ื” ื”ืคืชื•ื—ื” REBRAIN & Yandex.Cloud: ืื ื• ืžืงื‘ืœื™ื 10 ื‘ืงืฉื•ืช ื‘ืฉื ื™ื™ื” ื‘-Yandex Cloud - https://youtu.be/cZLezUm0ekE

ืื ืืชื ืžืขื•ื ื™ื™ื ื™ื ืœื”ืฉืชืชืฃ ื‘ืื™ืจื•ืขื™ื ื›ืืœื” ื‘ืื™ื ื˜ืจื ื˜ ื•ืœืฉืื•ืœ ืฉืืœื•ืช ื‘ื–ืžืŸ ืืžืช, ื”ืชื—ื‘ืจื• ืœ DevOps ืฉืœ ืขืจื•ืฅ REBRAIN.

ื‘ืจืฆื•ื ื ื• ืœื•ืžืจ ืชื•ื“ื” ืžื™ื•ื—ื“ืช ืœ-Yandex.Cloud ืขืœ ื”ื”ื–ื“ืžื ื•ืช ืœืืจื— ืื™ืจื•ืข ื›ื–ื”. ืงื™ืฉื•ืจ ืืœื™ื”ื - https://cloud.yandex.ru/prices

ืื ืืชื” ืฆืจื™ืš ืœืขื‘ื•ืจ ืœืขื ืŸ ืื• ืฉื™ืฉ ืœืš ืฉืืœื•ืช ืœื’ื‘ื™ ื”ืชืฉืชื™ืช ืฉืœืš, ืืชื” ืžื•ื–ืžืŸ ืœื”ื’ื™ืฉ ื‘ืงืฉื”.

ื .ื‘. ื™ืฉ ืœื ื• 2 ื‘ื™ืงื•ืจื•ืช ื‘ื—ื™ื ื ืœื—ื•ื“ืฉ, ืื•ืœื™ ื”ืคืจื•ื™ืงื˜ ืฉืœืš ื™ื”ื™ื” ืื—ื“ ืžื”ื.

ืžืงื•ืจ: www.habr.com

ื”ื•ืกืคืช ืชื’ื•ื‘ื”