á°áá áááá, áá°áá˝!
* áá
ááŁáĽá á REBRAIN & Yandex.Cloud áááľ á áá° áĽááľ áá á¨á°áá°á¨á° ááᣠáŞá˛áŽáá˝á á¨á áá áá¨áľ á¨ááá á áá
ááá ááŤáááľ áá˝áá -
á á
áἠáá ᨠYandex.Cloud ááĽáł áľáááľ á¨áá°ááľ áĽáľá áá á¨á. áá¨á
á áá áĽá á áĽáĽá
áĽáá˛á°áá áľááááá ᣠááá á¨áááľáá¨áľ áĽáá á¨á°áá áá á¨áľ áá á¨áááá ááłáĄá áá˛áŤáá áľá°áá - á áŁá á á°ááş ááᢠá¨á°áá°á ááááľ á ááᣠá áĽááá°á áá áááł ááľá°áśá˝á áááá á áĽá ááá°áá°á á¨á áááááą á¨áááľ á ááá´áá¸á áá á°ááłáłá á¨áá ááá ááá°ááŤáľ áá°ááá˘
á áĽááááš á¨ááľáá áá (áĽá áĽáť áłááá) áááśá˝ áľáá°á ááááťá¸á áĽá áľáááśáťá¸á á á ááľ ááá á áá ááááľ áĽá áá¨á áĽáá°áá°á áľáĄ áá á áá áĽááá á ááᢠá˘áŤááľ áá
á¨á°áá°á ááłááá˝á áááľá¨á á áľááá áá - áááłá á¨ááľáá áá á¨ááłá á¨ááŤáľá°áłáľáŠ á¨áá - á°á áááá˝ á á¨áľáá á°á¨á á°áŁáĽáá á áťááááľáá áĽáá°ááŤáľáááą áľáłá˛áľá˛ááľ áá¨áľ áá˝ááᢠááá ááá á°á áááá˝ ááá ááá áłááá áŁá˘áŤáá áĽáá°ááá (á áá, Yandex.Metrica).
áľááá ᣠá¨á áłáŞáᥠáĽáá´áľ á áááá á áááŹá˝á áĽáá°áááᣠkafka vs rabbitmq vs yqs áá¨ááᣠá¨ááἠáĽá¨áľ áá° Clickhouse áááľá°á á˝áá áĽá yandex datalens á á áá áá ááľáá áá¨áá áĽáá°áááᢠá á°ááĽáŽ ᣠáá áá á áśáá°á ᣠá´áŤááá ᣠááľáἠᲠáĽá á áĽááἠááŽáá˛á¨áľ ááá á áá á¨á° áááľ á°áľáłáá˝ á¨á°ááá áá áᢠáĽáááľ!
áááá ááá á á ááľ ááá፠áááááľ áĽáá°ááá˝á áá˛áŤáá áŚáł ááľáŤá áĽááááá - ááá á á á°á¨áłáłá ááľáĽ áĽá ááŁáĽáá˝ áŤáľáááááᢠáľá á áááአáľáá˝áĄ-
ááá 1 (áĽáŤáá áĄáľ áá)ᢠá¨áááłá¨áŞáŤ á°ááŚášá áĽá á¨áááľááá á ááá´áá¸á áĽáááááá, áĽáá˛áá áááá¨áť á golang ááľáĽ áĽáá˝ááá.
2 ááá. á áááŹá˝áá áá° áááľ áĽáá°á
áááᣠáá°á á¨áá˝á áĽá áááąá áĽáááľáťááá˘
3 ááá. áááĽááśá˝á á ááá áłááá á áá áŁá á፠ááľáĽ áá¨áá¸áľ ááá áĽáá°ááŤáľáááá áááá
áĽááááᣠáĽáá˛áá á¨áŤáᣠrabbitmq áĽá yandex queue á áááááľá áĽááľ á áĽááľ áĽáááłáľáá˘
4 ááá. á¨ááááááľ áááľá°áá áĽáá°ááŤáááᣠáá¨áá áĽá፠áŤáá ááľ áááľá°ááá áĽá¨áľ áĽáá˝ááá áĽá á áłáłáááľ ááľáĽ ááľááááľá áĽááááááá˘
5 ááá. áááá áá á¨á° áááľ áá° áľááááá á
áá˝ áĽááᣠ- gitlab ci á á áá áá ci/cd áĽááá
áᣠááŽáá´á¨áľá áĽá áááľáá á áá áá á¨ááľáľá áĽá á¨á áááááľ áááľá áĽááááá˘
á˛áŹ
á ááááŞáŤ ᣠá¨ááŁááť ááá˝á áĽááá á - á áá¤áą áá á áľááá áá ááááľ áĽááááááá˘
- áĽáá° ááľá°áśá˝.kis.im (kis.im á ááá ááŁáĽáá˝ á¨ááá ááá á¨áá¨áŤ á፠áá) á¤á˝á˛á˛áá¤áľá á áá áá ááľá°áśá˝á ááá á áŤáá áľ á¨áá¨á¨áť ááĽáĽ áĽáá˛áá¨á áĽááááááá˘
- ááľá°áśá˝ á¨á áš ááá json áá¸áᥠ{"event"ᥠ"view", "os": "linux", "browser": "chrome"}ᢠá áá¨á¨áťá á°á¨á áá áľáá˝ á°á¨á᪠ááľáŽá˝á áĽáá¨ááŤáá, ááá áá áá áľáá áá á ááŤááľá. á¨ááá áá° ááŽáśáĄá ááá¨á áá˝ááá˘
- á áááááą á á°á¨ááľ 10 ááá áśá˝á ááŤááľ ááťá á áá áľá˘
- á áłá˛áľ áááłáá˝á á ááá áá° áááľáá˝á á áá¨áá á ááľá áááá ááťá á áá áľá˘ áĽá áá°áá á áĽáŤááá˝ áááá¨áľá áááááľ á¨ááľ áááľ áááá áá° á°ááŤáŠ á¨ááŚááŤááŤá á áŤáŁá˘áá˝ ááááłááľ á¨áťáá áĽáŠ ááááá˘
- áľá á°áľá ááłááľ. áááľáá á á á áááł á¨á°á¨áá áĽá ááááá áááá˝ á˛ááľá (á áĽááἠáĽáľá¨ á¨á°áá°á áá á) ááá ááťá á áá áľ.
áĽá ááá
á á á ááá, ááá ááááą á°ááŁá, áááŁá ááŹáľá á¨ááá áą ááá˛áŤá á ááá´áá¸á áá¨á á áá á°ááá°á. áľáá á¨áááľááŤá˝áá ááłá áŤáłáŤá.
áłá˛áŤ áá á áááĄ-
1. á á፠á áŠá á¨áĽá ááłáŞáŤáá˝ á áľáááľáá áá á á áťááááľ ááľáĽ á¨á°áŤáážá˝á á°á¨á á ááá ááá á ááľáá áá áá°áĽá ááľáĽ á áá°á á á áłá˝ ááľáĽ áľááá áĽá¨áá አá¨á°ááŤáŠ ááľá°áśá˝á á¨áááĽáŠ ááłáŞáŤááťá˝á ááłáŤá. ááľá°áąáŁ á TOR áá áĽáá°á°ááá¸áᣠáá° áá¨á¨áť ááĽáŁá˝á á¨á°áᨠááá json áá - events.kis.imá˘
2. á¨ááááŞáŤááš áááľ á ááááŽá˝ ááá ááá á°áŞáá˝ áá¸á, áá á°ááŁáŤá¸á á¨áá¨á°ááľ áá¸á.
- áŤáááá¨áĽ ááááľá˘ áá áá áááľá¨á, áááłá, Keepalived áá áá áá˝áá, áá á á á˝ááŽá˝ áá áááŁá á áááá á á áááá˝ ááŤá¨á ááááŤá.
- TLS áŤáááĄá˘ á áᣠá áĽááą áá TLSá áĽááááŁááᢠá ááááŞáŤáŁ á¨áĽá áááľá TORá áĽáá˛áŤá¨áĽáᣠááá°ááᣠá¨á°áá°á ᨠáááááľ á¨áááĽá¨áľá á¸áá á¨ááᣠá ááááŽáťá˝á áááľáááľ ááá˘
- áᢠáĽáŤááá˝á á ááá á¨ááᣠá ááááŽá˝ áá ááá á áľááᢠáĽáá áŤáá ááá áá á°á°áŤá˝ ááᢠá¨áá á áááłáľ ááľ áŁáááľá°áŽá˝ á ááááŽáťá˝áá á á áááŹá˝á áá¨áłá°á áĽá á¨áľáŤáá áá°áľá áá° áŤáá°áłáŤáá¸á ááśá˝ áááŁá á ááá ááťá áĽááłááŁá¸á áá° áá¨áłáľ á°áá°ááá˘
3. á¨á°ááŁáŁá á°ááŁáŁáŞáá˝ á áľá°ááᣠááá ááá áá°áá áŞáŤá á¨ááŤáľáŹáą á¨áá°áá áŞáŤ á ááááŽá˝ á ááᢠá HTTP á áŠá á¨ááᥠáĽáŤááá˝á ááá áᣠá¨á°áá¨áá json áá¨ááἠáĽá áááĄá ááá¨áľ ááťá á áá áľá˘
4. á˛áŤááŤá áŤááŤá áĽáá° ááľ áŤáłáŤáᣠááá áĽááłá á áĽááἠááá˝ á°ááłáłá á áááááśá˝ á áá á°á¨á áĽá á áá ááá áá˝ááᢠá áśáľá°áá ááŁáĽá ááľáĽ Kafka, rabbitmq áĽáyqs áĽáááá áŤáá.
5. á¨á á ááá´áá¸á ááá ááĽáĽ Clickhouse áá - áľáá áá á áŤáá ááἠáĽáá˛áŤá¨ááš áĽá áĽáá˛áŤáŤááą á¨ááŤáľá˝áá á¨á ááľ áłáłá¤á ááᢠá áá á°á¨á, áá¨áá á¨á áŁáá áá°, á áĽáááą, á¨áá¨ááť áľáááąá ááľá°ááá á ááĽá (á áá á á ááá˝ 4 áá á°á¨ááŞ).
áá áĽá áľ áĽáŤááłááąá á˝áá á á°ááĽá á á ááľá áĽááľáá፠áŤáľá˝áááᢠBackend á ááááŽá˝ áááá á áá˝áá - á°á¨á᪠áĽáá¨áá - ááááŤáąá á áá á áᣠáá°áá áŞáŤáá˝ áá¸á, áĽá áľááá , áá á˘áŤááľ á áŤáľ-á°á áá¨ááá áá˝áá. á áŤá፠ááá áŤáá ááľ á ááá°áľá - á°á¨á᪠á ááááŽá˝á áĽáá¨áá áĽá á¨áááłá˝áá áááááŽá˝ áá° áĽáááą áĽááľá°áááᢠá á áł á¤áą ááááá á ááťáá - á ááťáá
á áááŤá˝á áá á¨á´áááŤá á°ááŁáŤá˝áá áĽá ááŹáłá˝áá á á°ááŤáŠ á¨ááŚááŤááŤá á áŤáŁá˘áá˝ ááľáĽ á ááŤá áááá á°ááŁáŤá áááľá¨á á¨ááá ááá ááá ááá á¨áá.
á áĽáŤááłááą á¨ááŚááŤááŤá áŚáł áá, á¨áľáá ፠áĽá á¨áŤá፠áá á¨áááľ áááá áĽáá°ááŤáá. á á á ááá 2 á áááŹá˝á á°áá¨áŽá˝áŁ 3 á¨áŤá ááśá˝ áĽá á¨á°áá ááá áĽáá° Cloudflare áŤá á á áá¸áᢠá áá
ááááľ á á ááŞáŤ á°áá á á¨á°áᨠáá¨á á á ááŞáŤ á ááááŽá˝ áá áá°ááłáᢠáĽá á¨á ááŞáŤ á¨á°ááá áá¨á á ááŞáŤá ááá˘
á¨á፠ááá ááá á áŁá ááá áá - á¨ááľáłááľ ááłáŞáŤáá á¨áŤá፠áľáĽáľáĽ áĽáá áááá áĽá áááá áá¨ááá˝ á¨ááá áŚáłáá˝ áá° áŠá˛áŤ áá°áááá ááá¨áá á¨áá¨á ááĽá¨á áĽáááłáá. ááľáĽáŁ áááĄá áĽáá°áá°á áĽá áááŁá áĽááł áá° Clickhouse áĽáá˝áááá˘
áľááá , á¨ááááá ááľá á áááá - Yandex.Cloud á ááááĽáἠáĽááááŤáá!
áááá¨áť á ááťá áá
á¨á°áá á ááľáŁ á ááá áľáá˝ áłáá˝ ááá áĽá áᢠááľá°áśá˝á áááľáŹáľ ááá á¨áá á áááááľ ááá á ááŚáľá˘ ááááá áĽáá áááá, ááááŤáąá á¨ááľááá á áááŹá˝áá˝á áááťá áĽáá° ááá áĽáŤáąá á ááᣠá á¨ááá§á.
á ááľ á°ááľ áŤáłááá á áá (ááááŁáľ ááááľ á°ááłáľ) ᣠáĽáá°áá
áŤá ááá áĽááááá
áĽáá ááłáá áŤááŁá¸á áá áá ááĽáŚá˝ áááľá áá¸á:
1. áááá¨áťáá á˛ááአáááľ áŁáá˛áŤáá˝á áááá˝ áá˝áá. á ááą ááᢠhttp áĽáŤááá˝ (-addr) á¨ááá°áá áľ áá°áĽ áááááľ á áá áľá˘ ááá°áá ááá áśáťá˝áá á¨ááá˝áá áľ á¨áŤá á áááá á áľáŤáť áá (-kafka)
addr = flag.String("addr", ":8080", "TCP address to listen to")
kafka = flag.String("kafka", "127.0.0.1:9092", "Kafka endpointsâ)
2. á áááŹá˝á á¨áłáŤá á¤á°-áá˝áááľá áá ááá (
config := sarama.NewConfig()
config.Producer.RequiredAcks = sarama.WaitForLocal
config.Producer.Compression = sarama.CompressionSnappy
config.Producer.Return.Successes = true
3. áĽáá˛ááᣠá¨ááŽáá˛á¨áľ á°áá á á áĽá áá°áá áŞáŤ ááľáĽ á°áááĽáˇáᣠáá á á¨á°ááŤáŠ áááŞáŤáá˝á áá°á áľáŁáᣠáááłááĄ-
- ááá°áá áŞáŤá˝á á¨áĽáŤááá˝ áĽááľ;
- áĽáŤááá á ááá˝áá áľ áá á¨áľá á°áľ áĽááľ (á¨ááĄá á˝áá áĽáŤáá áááá ἠá¨áááťá áá, á¨á°á°á ᨠjson, ááŤá ááťá á ááťáá);
- áááááąá áá° áŤá፠á¨áá˝áá áľá áá á¨áᎠá¨á°áá áá á¨á ááľ áĽáŤá áá°áľ ááá˘
4. áááá¨áťá˝á á¨ááŤáľáŹáľáŁá¸á áśáľáľ á¨áá¨á¨áť ááĽáŚá˝áĄ-
- /áááł - áá á ááááľ áááŤá˝áá áááłá¨áľ áĽáş á°áááľá˘ ááá áĽááłá áĽáá° á¨áŤá áááľá°á ááááľ áŤá á ááłááľ áźáŽá˝ áá¨á áá˝ááá˘
- /ááľáŞááľ â áá á áŠá áá¤á á áá ááᣠá¨ááŽáá˛á¨áľ á°áá á á¨á°á á°áŁá¸áá áááŞáŤáá˝ ááááłáá˘
- /ááľáľ - á¨ááľáĽ json áá á¨POST áĽáŤááá˝ á¨áááĄá áľ ááá á¨áá¨á¨áť ááĽáĽá˘ á¨áĽá áá°áá áŞáŤ jsoná áľááááááľ áŤá¨áááŁá áĽá ááá ááá á°á á á¨áá áááĄá ááŤá áááľá°á áá˝ááá˘
áŽáą áášá áĽááłááá áŚáł á áľááááá - áá ááá áá˝áá (áĽá á áá áľ!)ᢠáááłá á áĽáŽ á¨á°á°áŤáá net/http áá áá á ááá áá° ááŁá ááŁáhttp ááá¨á áľá˝ááá ᢠááá ᨠjson áľááááááľ áźáá áá° áá á°á¨á á áááá á¨ááľáŹá ááá áĽá á˛áአááĽáśá˝á áŤá¸áá - ááᥠá¨áá áŁá ááŤá áá° ááá á¤áľ áááľá°á á áá°áááá áľ ááá˘
á¨ááłáŠ á¨áááľ áá á á°á¨á᪠áľááá°ááą áá á¨á° áááľ á á°áĽá áĽá áááá¨áťá˝áá á áśáá°á ááá°ááŤáľ áá°áá. áááá¨áťáá áááááŁáľ á¨áá¨á¨áťá Dockerfile -
á á°áá ááľáĽ á¨ááááŞáŤ á°á¨ááá˝
á ááááŞáŤ ᣠáááááĄ
á¨áááᣠá ááᣠá¨á°áᨠá°áá áĽá ááŁáŞ áá፠ááĽááľá ááá áŤáᣠá áá ááľáĽ á¨á°áá ááĽáśá˝á ááá á áááá áá˝ááᢠá á á ááá á Yandex.Cloud ááľáĽ á¨ááĽáľ áááááľ áá á áááľááá˘
á á ááľ áá፠áĽá á°áá ááá á áá˝ááᢠáĽá á á°ááá ááľáĽ áá°ááŤáŠ á¨áŠáŁááŤá ááŽáááśá˝ á¨á°ááŤáŠ áááŤáá˝á ááľáŠá˘ áľááá
ááłá á á°ááą ááľáĽ á¨á áá ááá ἠáá˝áá-
á°áááá áááľá°áłá°á áááąáá á¨áľá á áááá˝ áĽá á¨áŽááśá áááá፠áá áá áá˝áá - yc. ááŤá á¨áá¨áááá á á ááľ áľááá áá (áááááľ áĽá áá áŚá¤áľ)áĄ-
curl https://storage.yandexcloud.net/yandexcloud-yc/install.sh | bash
á¨ááľáĽ á°á áááľá áľááŞááśá˝á á¨á áááá¨áĄ áľááááľ á¨á°áá°á° á ááááŞáŤ ᣠáľááŞááąá á¨áá°á ááá ἠáá˝áá ᣠáĽá á ááá°á á°á¨á ᣠáŤá áľáá ááĽáśá˝ á˘
ááááśááľ á°áá áá ááŤá á¨ááá áááŞáŤáášá áá áá áá˝áá 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:~ $
á ááá á°á¨á, áá°áą ááá áá - á ááááŞáŤ á°áááá áááľá°áłá°á, á°áááá áĽá á¨áá áááá áá á°á áááá¨áĽ ᨠouth token ááááľ áŤáľáááááłá.
á á°ááłáłáŠ á°áá ááľáĽ áĽá áááŤáá˝ ááá á áááá˝ áŤááᾠᣠá yc config profile áá á áĽá á ááŤá¨áá¸á áááŤá¨áá á áá áá á°á¨á᪠ááááŤáá˝á á á°áᨠááźáľ ááá á áá˝ááá˘
á¨áá á¨á°á ááąáľ áá´áá˝ á á°á¨á᪠ᨠYandex.Cloud áĄáľá á áŁá áĽáŠ á˝áá
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 ááá ááľáĽ á°áááá áá. áááááᣠá áá¨á°áá áááľ á Terraform á áá ááľáĽ private.auto.tfvars ááá ááá áŠáĄ
# 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 á¨áᣠáá¨ááá ááá˝á - á¨á˛ á¤á á¤áľ ááááŚá˝á áááá á áĽá áááášá ááľá°áśá˝.kis.im á፠áá° á ááááŽáťá˝á á°áŞ áááľá¨áᢠCloudflareá áá áá áŤááááᣠá main.tf ááľáĽ áŤááá á¨Cloudflare á á áŤá˘áá á áááá áĽá á áľááááá á¨á˛ á¤á á¤áľ ááááŚá˝á á¨ááá á áááááľ áŤááá ᨠdns.tf ááá áŤáľáááąá˘
á áľáŤá˝á ááľáĽ áśáľáąá áá´áá˝ - á¨áἠá áááὠᣠá¨áŽááśá áááá፠áĽá á´áŤááá áĽááŁááŤááá˘
áááŁá á ááłá¨ áá¨áŚá˝
áĽáááąá ááááá áá
áĽááá áááá áá˝á áá á ááááŤáąá á á˛áľ á°áá á˛ááĽáŠ á áŤáľ-á°á á¨á°áᨠá ááłá¨ áá¨áĽ áĽá 3 áááľ á ááłá¨ áá¨áŚá˝ áááĽáŤá - ááĽáŤááłááą á°á°áŤá˝ ááᢠáá á ááá áááŽáááłá˝á á¨áŤáą á áľáŤáť áŤáá á¨á°áᨠááľááá ááľáŤáľ áĽáááááᢠá Yandex.Cloud ááľáĽ áŤáá á¨á ááłá¨ áá¨áĽ á á ááá áĽá
áľ á¨áá
á áłá˝ áŁáá áľáĽá áá ááłáŤá (á áááááľ á¨
áľááá
, ááĽáśá˝ áĽááľ á ááľ á¨áááŁáĄá áľ á¨á፠á ááłá¨ áá¨áĽ áááĽáŤá. ááĽáŤááłááą á¨á°á°áŤá˝ ááᣠááĄáľ áá¨áĽ á¨áŤáą á áľáŤáť áŤáá áĽá á¨á፠á ááłá¨ áá¨áĽ áá á¨á°ááá ááᢠá áá¤áąá, á ááľáĄ áŤááľ ááá á¨á°áá ááĽáśá˝ áááá áá˝áá, á á°ááŤáŠ á¨ááá áá ááá˝ ááľáĽ áĽááłá ááá áá˝áá. á¨á°ááŤáŠ á¨á°áá á ááłá¨ áá¨áŚá˝ áá á¨á°ááá ááĽááśá˝ áĽááľ á ááľ áá°áŤáŠ á¨áá˝ááľ á ááŤá á áľáŤáťáá˝ áĽáť ááᢠá áááŤá˝á áá áá
á áľááľ á ááľáĄ áĽáá´áľ áĽáá°áá°áŤ,
á¨á ááłá¨ áá¨áĽ ááá á á¨áá¨ááťá ááľáĽ á network.tf ááá ááľáĽ á°áááżá. áĽááŤá á ááľ á¨á፠á¨áá á ááłá¨áá¨áĽ ááľáŁá áĽáááĽáŤáá áĽá áśáľáľ ááĄáľ á ááłá¨ áá¨áŚá˝á á¨áĽáą áá á á°ááŤáŠ á¨á°á°áŤá˝ ááá˝ áĽááááááá - ááľáŁá-a (172.16.1.0/24) ᣠá¨ááľáĽ - á (172.16.2.0/24) ᣠá¨ááľáĽ - á (172.16.3.0/24) ).
á´áŤáááá áŤáľááአáĽá á ááłá¨ áá¨áŚá˝á ááá áŠáĄ
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.
á áŁá áĽáŠ! á ááłá¨ áá¨áŁá˝áá á°áá°áá áĽá á áá á¨ááľáĽ á áááááśáťá˝áá áááá á ááá ááá˘
áááŁá áá˝áá˝á ááá áŠ
á áááŹá˝áá áááá°á˝ áááľ á¨áášáá áá˝áá˝á ááá á áá ááá - á áááŹá˝áá áááľáŤáľ áĽá áááľáŹáľ á¨ááááŞáŤá áŤáľáááááᣠááá°áá - áŤá፠áááľáŹáľáŁ áᢠáááááśá˝á ááá¨áá¸áľ áĽáá ááááᢠáĽá á áááŹá˝áá ááááŁá á ááŽáá˛á¨áľá á¨ááááá á áľ áá áá˝á áĽáááĽáŤááá˘
á¨áášáá áá˝áá˝ áááአá¨áá˝ááľá á áá áá áááŁáľááá á´áŤááá á¨ááŽáĽá á ááľáŁá¨áá¨á¨áťááš á¨á áá˛á˘áľ áľáŞáśá˝ ááľáĽ á ááąá áĽááłáááľ áŤá¨áááĄá˘ áĽá á áľááá áááá˝á á ááťá áááᲠááŤá-
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.cfg áá á ááá ááłá á áᢠááááŁáľ á áá ááá áá˝áá.
áááŁá áá˝áá˝á á¨ááá áá á ááľ á¨ssh-egent áŠáŤ áĽá ssh ááá áá¨ááŠá áŤá¨áááĄáŁáá
áŤááá á´áŤááá á¨á°áá áŠáľ áá˝áá˝ áá áááááľ á áá˝ááᢠáĽááŁá áĽáááĽáŁá OS x ááľáĽ áľá
á°áľ á ááĽááááĄ-
vozerov@mba:~/events/terraform (master) $ export OBJC_DISABLE_INITIALIZE_FORK_SAFETY=YES
á¨á´áŤááá áá áŁáá á áá ááľáĽ á áľááá ááĽáśá˝á áĽáááĽáŤáá-
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 ...
ááá ááá á á°áłáŤ áááł á¨á°á ááá (áĽáá°ááááá) ᣠá¨á፠áśáľáľ áááŁá áá˝áá˝ áááŠáá-
- áááŁáł - áá°áá áŞáŤá áááá°á˝ áĽá áááááŁáľ áá˝á. Docker á áŤáľ-á°á á á˝ááł á°áááá˘
- áá¨áłá°áŤ - á¨ááľáľá áá˝á - ááŽáá˛á¨áľ áĽá ááŤáá á áአáá á°áááᢠá¨ááá˘áŤ / á¨ááá áá áá°á á: á áľá°áłáłáŞ / á áľá°áłáłáŞ
- áŤá፠á áááľ 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 |
+----------------------+------------+---------------+---------+---------------+-------------+
ááĽá¨áśáš á áŚáłá¸á áá áá¸á, áĽá á¨áá
á áá-á áľáŤáťá¸áá áááŁáľ áĽáá˝ááá. á¨áłá˝ á ááá áŚáłáŁ á ssh á áŠá ááááááľ áĽá á áááŹá˝áá áááá¨á ip-addresses áĽá ááááᢠá¨á´áŤááá áá á¨á°ááá á¨Cloudflare áá፠áŤáá
ᣠá á˛áľ á¨á°áá አá¨á˛ á¤á á¤áľ áľáá˝á ááá áá ááááľ áá°áá
á˘
á áááŤá˝á áá á¨áášáá áá˝á á˛ááĽáŠ á¨ááľáĽ á áá áĽá á¨ááľáĽ Რá¤á á¤áľ áľá ááĽáˇá áľááá
á ááľááአááľáĽ áŤá á ááááŽá˝á á áľá ááááľ áá˝áááĄ
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
áá á¨áá¨á¨áťáá ááĽáĽ á¨áŤáá áá áá° áááá¨áťá ááááá˝ áá á áááá˘
áááá¨áťáá á ááľ áá á ááŁáá
á áŁá áĽáŠ ᣠá ááááŽá˝ á á ᣠá ááľ áá°áá áŞáŤ á á - áĽáąá ááá°áĽá°áĽ áĽá ááá°á áĽáť áááŤáᢠááľáĽá°áŁ, á¨á°ááá°á á¨áśá¨á áááŁáł áĽáá áááá, ááá áá áĽáá° ááľá áá¨ááť, ᨠYandex - á¨áĽá ááááá˘áŤ á áááááľ áĽáááľáłáá. áá ááááŞáŤ áááŽá˝ ááááŞáŤá˘
á áááŹá˝áá áá° áááŁáł áá˝á áĽááááĽáŁáá ᣠá 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
áááš áľáŤá á°á¨áááá - á áá á¨áá áá°áá áŞáŤ á áááľ áĽá áá° áŤá á áá áá á ááťá¸áá ááá¨á áĽáá˝ááááĄ-
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 tokenᣠiam token ááá á¨á áááááľ áá፠ááá á áá ááᢠáľáááá
áá´áá˝ á°á¨á᪠ááááŽá˝ á á°ááśáš ááľáĽ áááá.
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
áśá¨áá ááááá.
áá°áá°ááŤ
áĽá á ááá¨á á°áá°áá á áá á á¨á°ááłáĄ-
- á¨áá°ááľ á áááááłá˝áá á ááá´áá¸á ááá ááĽá°ááá˘
- á¨á˘áááľ á ááááŽá á˝áá á°ááŁáŤá á¨ááŤá°áá áá°áá áŞáŤ á áááá áťááá˘
- á°áĽáľá á á áá áŽáá´áááŽá˝ áááἠááľáĽ á ááľá°ááá˘
á áááĽáá ááá áá° áłá˘á ááá áĽáááľ - áááá¨áťá˝áá áá° áááľ áĽáááľáłáá áĽá á áá¨á¨áťá áááąá á áĽáą áá áĽááľááłáá. á áľááá!
áá
ááłááľ á REBRAIN áĽá Yandex.Cloud áááľ áááážá áŞá˛áŽ ááľáĽ á á-á á´áŽááľ 10 áĽáŤááá˝á á Yandex ááááľ áĽááá ááá -
áĽáá°áá
á áááľ ááá
áśá˝á á ááľáá áá áááááľ áĽá á áĽááá°á áá áĽáŤááá˝á ááá á¨á
ááááľ áŤááľáŁ áááá
á Yandex.Cloud áĽáá°áá
á áááľ ááľá°áľ áááŤááľ áĽáľáá áľáá°á á áአááľáá ááá°áĽ áĽáááááá. á¨áĽááą áá á ááá -
áá° á°áá áááľ á¨ááá ááá áľá áá á¨á° áááľá áĽáŤááá˝ áŤáááľáŁ
PS á áá 2 áá áŚá˛áľ á ááᣠááááŁáľ á¨áĽááľá ááŽáááľ á¨áĽááá
ááľáĽ á ááą ááá áá˝ááá˘
ááá: hab.com