<?xml version="1.0" encoding="utf-8"?> 
<rss version="2.0"
  xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd"
  xmlns:atom="http://www.w3.org/2005/Atom">

<channel>

<title>Богдан Стефанюк: дописи з тегом cloud</title>
<link>https://www.stefaniuk.website/tags/cloud-2/</link>
<description>Всім привіт! Я — Богдан, фулстек розробник з Києва. Пишу в основному про програмування та штуки які вивчаю. Час від часу публікую підбірки фоток, зроблених на плівку, розказую про подорожі та цікаві речі, що оточують мене.</description>
<author></author>
<language>uk</language>
<generator>Aegea 11.2 (v4116)</generator>

<itunes:subtitle>Всім привіт! Я — Богдан, фулстек розробник з Києва. Пишу в основному про програмування та штуки які вивчаю. Час від часу публікую підбірки фоток, зроблених на плівку, розказую про подорожі та цікаві речі, що оточують мене.</itunes:subtitle>
<itunes:image href="" />
<itunes:explicit></itunes:explicit>

<item>
<title>Где захостить свое приложение?</title>
<guid isPermaLink="false">261</guid>
<link>https://www.stefaniuk.website/all/where-and-how-to-host-apps/</link>
<pubDate>Wed, 15 Dec 2021 04:34:45 -0400</pubDate>
<author></author>
<comments>https://www.stefaniuk.website/all/where-and-how-to-host-apps/</comments>
<description>
&lt;p&gt;Как и многие другие разработчики я часто делаю разные небольшие приложения или пет-проекты. И очень часто возникает вопрос: где захостить приложение и его компоненты и как это сделать максимально дешево?&lt;/p&gt;
&lt;p&gt;Я старался подобрать сервисы, которые позволяют максимально просто и дешёво запускать все необходимые для работы приложения ресурсы. В основном большинство приложений состоит из бекенда (в моем случае .NET), фронтенда и базы данных. Поэтому рассмотрим варианты развертывания каждого компонента.&lt;/p&gt;
&lt;h2&gt;Типы сервисов&lt;/h2&gt;
&lt;p&gt;Для начала стоит кратко пройтись по моделям предоставления сервисов в облаке. Эти модели описывают зоны ответственности пользователя и облачного провайдера. В разрезе данной статьи нас интересуют следующие модели:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;IaaS (Infrastructure as a Service)&lt;/b&gt; — облачный провайдер предоставляет минимально необходимую инфраструктуру в виде виртуальных машин, сети и хранилища, а также отвечает за работоспособность. Дальнейшая настройка, в том числе и ОС, лежит на стороне пользователя. По сути это основные строительные блоки в облаке с помощью которых можно сделать все что захотим.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;PaaS (Platform as a Service)&lt;/b&gt; представляет из себя готовую инфраструктуру для разработки и запуска приложений. При такой модели мы не думаем про настройку и управление серверами, операционными системами и т. д. Примером такого сервиса являются управляемые БД (managed databases). Облачный провайдер сам отвечает за правильную настройку сервера, ОС, сохранность данных, бекапах и бесперебойную работу. В основном пользователь только платит деньги и пользуется сервисом.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Serverless&lt;/b&gt;, самая свежая модель, которая очень похожа на PaaS. Только при такой модели облако само выделяет ресурсы на основании текущей нагрузки. Все настройки и планирование ресурсов скрыто от пользователя. Ему остается только загрузить свой код, а все остальное сделает облако. Также в serverless мире обычно оперируют понятием &lt;i&gt;облачная функция&lt;/i&gt; это код, который умеет обрабатывать только одни конкретный запрос.&lt;/li&gt;
&lt;/ul&gt;
&lt;div style="max-width: 750px"&gt;&lt;div class="e2-text-picture"&gt;
&lt;img src="https://www.stefaniuk.website/pictures/host-apps-cloud-models.png" width="1694" height="1162" alt="" /&gt;
&lt;div class="e2-text-caption"&gt;Наглядный пример зон ответственности в разных моделях предоставления сервисов.&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2&gt;Где захостить .NET бекенд?&lt;/h2&gt;
&lt;p&gt;&lt;b&gt;AWS/Azure/GCP&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Три самых крупных облачных провайдера, очень похожи между собой и предоставляют во многом одни и те же сервисы. Так в каждом из них можно арендовать виртуальные машины, создать управляемую БД или работать с облачными функциями. Мне больше всего нравиться AWS, но для .NET приложения Azure будет более интересным, потому что это родная для дотнета среда.&lt;/p&gt;
&lt;p&gt;Больше всего нас интересую сервисы:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;AWS EC2 (IaaS)&lt;/b&gt; обычные виртуальные машины. Есть маркетплейс на котором можно найти огромное множество готовых AMI образов с предустановленным софтом и нужными настройками. Например можно в один клик развернуть виртуалку с Wordpress и всем необходимым.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Azure App Service (PaaS)&lt;/b&gt; самый простой и нативный способ захостить .NET приложения. App Service сам разворачивает приложение из репозитория, настраивает все необходимое для работы и предоставляет полезные метрики.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;AWS Lightsail (IaaS/PaaS)&lt;/b&gt; упрощенная версия AWS для тех кто с ним не знаком. Можно очень дешево арендовать виртуальную машину, поднять докер контейнер, развернуть БД и хранилище для файлов. Все это делается буквально в пару кликов мышкой. Первые три месяца бесплатные.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;AWS Elastic Beanstalk (PaaS)&lt;/b&gt; умеет поднимать необходимые для работы приложения компоненты в AWS. По сути мы можем все это сделать руками, но Beanstalk автоматизирует всю рутину. Под капотом он представляет из себя набор разных CloudFormation скриптов, которые поднимают необходимые сервисы и настраивают их.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;b&gt;DigitalOcean&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Самый простой в использовании сервис. Раньше в DO можно было арендовать только виртуальные машины, сейчас же можно создавать управляемы БД, балансировщики и т. д. На текущий момент почти все мои проекты крутяться в DigitalOcean.&lt;/p&gt;
&lt;p&gt;Нам интересны следующие сервисы:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Droplets&lt;/b&gt; — виртуальная машина, есть много готовых образов на маркетплейсе под любой рантайм.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;App Platform&lt;/b&gt; — позволяет нативно запускать  приложения написанные на Python, Nodejs, Go, php или любое другое приложение в виде контейнера.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;b&gt;Heroku&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Честно говоря я им ни разу не пользовался, но друзья очень часто советуют. Из коробки не поддерживает .NET приложения, но вроде как есть кастомные билд паки. В основном хероку позволяет развернуть приложения на Nodejs, Go, Python и т. д. Из приятных фишек: достаточно запушить код в репозиторий, все остальное сделает Heroku.&lt;/p&gt;
&lt;p&gt;Есть бесплатный тариф, в нем приложение останавливается после пол часа без активности. Так что первые запросы к приложению могут отрабатывать немного дольше.&lt;/p&gt;
&lt;div style="max-width: 750px"&gt;&lt;div class="e2-text-picture"&gt;
&lt;img src="https://www.stefaniuk.website/pictures/host-apps-backend.png" width="1538" height="512" alt="" /&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2&gt;Где захостить фронтенд?&lt;/h2&gt;
&lt;p&gt;С фронтендом дела обстоят намного проще, есть огромное количество сервисов, которые позволяют бесплатно захостить фронт.&lt;/p&gt;
&lt;p&gt;Мой личный фаворит — Vercel. Бесплатный план включает такие фишки как HTTPS, автоматически деплой с репозитория, собственный домен. Также он умеет разворачивать приложение под каждый PR, что позволяет протестировать изменения до того как влить код в основную ветку.&lt;/p&gt;
&lt;p&gt;Самым же популярным сервисом является Github Pages. В нем очень просто поднять статический сайт прямо из репозитория. Бесплатный и работает сразу из коробки. В основном используется для хостинга документации к коду, блогов или резюме.&lt;/p&gt;
&lt;p&gt;App Platform от Digital Ocean я уже упоминал выше. Можно поднять три статических сайта бесплатно, последующие за 3$ в месяц. Есть автоматический деплой, бесплатный HTTPS, возможность подключения своего домена. Сейчас в нем крутиться мое онлайн резюме. Сервис прикольный тем что в нем можно запустить и бек и фронт.&lt;/p&gt;
&lt;p&gt;Последним хочу отметить AWS S3. По сути это объектное хранилище (хранилище для файлов) в котором есть встроенная поддержка сайтов. Для этого нужно загрузить HTML/CSS/JS файлы и включить соответствующую опцию в настройках бакета. Часто встречает в продакшене связку CloudFront + S3.&lt;/p&gt;
&lt;div style="max-width: 750px"&gt;&lt;div class="e2-text-picture"&gt;
&lt;img src="https://www.stefaniuk.website/pictures/host-apps-frontend.png" width="1524" height="298" alt="" /&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2&gt;Где развернуть базу данных?&lt;/h2&gt;
&lt;p&gt;С базами данных ситуация сложнее, в основном предлагают развернуть БД за большие деньги. Такой вариант не подходит если мы хотим захостить небольшое приложение или просто его потестировать без установки БД локально. Вот несколько из вариантов:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ElephantSQL, можно развернуть PostreSQL базу данных любого размера. Бесплатный план дает базу с 20 Мб и 5 параллельными подключениями.&lt;/li&gt;
&lt;li&gt;Mongo Atlas подойдет если нужно развернуть кластер MongoDB. Есть достаточно жирный бесплатный план.&lt;/li&gt;
&lt;li&gt;В DigitalOcean и AWS Lightsail начиная с 15 долларов в месяц можно развернуть достаточно неплохой сервер БД, который не нужно настраивать и работает из коробки. В Lightsail первые 3 месяца бесплатно.&lt;/li&gt;
&lt;/ul&gt;
&lt;div style="max-width: 750px"&gt;&lt;div class="e2-text-picture"&gt;
&lt;img src="https://www.stefaniuk.website/pictures/host-apps-databases.png" width="1570" height="288" alt="" /&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2&gt;Полезные ссылки&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://oblako.kz/iaas-blog/samye-populjarnye-oblachnye-servisy-v-mire"&gt;Виды облачных ресурсов&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/HostingWebsiteOnS3Setup.html"&gt;Хостинг веб сайта в AWS S3&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.digitalocean.com/community/tutorials/how-to-secure-nginx-with-let-s-encrypt-on-ubuntu-20-04"&gt;Отличный туториал по тому как настроить SSL сертификат на Ubuntu&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
</item>

<item>
<title>Веб аналитика на коленке с помощью AWS</title>
<guid isPermaLink="false">259</guid>
<link>https://www.stefaniuk.website/all/web-analytics-with-aws-lambda/</link>
<pubDate>Wed, 04 Aug 2021 03:58:43 -0400</pubDate>
<author></author>
<comments>https://www.stefaniuk.website/all/web-analytics-with-aws-lambda/</comments>
<description>
&lt;p&gt;Время от времени нам с друзьями приходят идеи различных проектов, которые было бы круто запустить. Но чтобы убедиться в жизнеспособности идеи нужно ее как-то проверить. Обычно для этого создаётся лендинг, на который нагоняется трафик и потом в аналитике смотрим, как ведут себя пользователи.&lt;/p&gt;
&lt;p&gt;В один из таких дней мы решили проверить очередную идею. Но в этот раз пользователь мог сделать много разных действий на сайте и их нужно было как-то отследить и проанализировать.&lt;/p&gt;
&lt;p&gt;Это не какая-то уникальная проблема, обычно для таких задач берут Google Tag Manager. Но никто из нас не умел им пользоваться да и желания изучать особо не было.&lt;/p&gt;
&lt;p&gt;И тут внезапно пришла идея как это сделать. Можно взять AWS Lambda, набросать на коленке пару строк кода, которые будут получать событие и куда-то их складывать  для дальнейшего анализа. Для места хранения метрик выбрал CloudWatch. Он как раз умеет анализировать разные метрики/логи и строить красивые дашборды.&lt;/p&gt;
&lt;p&gt;Также хотелось получать письма на почту с информацией про самые важные события. Для этого взяли SNS.&lt;/p&gt;
&lt;p&gt;В итоге пользователь заходит на сайт, делает какое-то действие, оно летит в лямбду, которая просто кладет информацию в логи и отправляет сообщение в SNS. Дальше идем в CloudWatch и смотрим на дашборды и анализируем полученную информацию.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://www.stefaniuk.website/pictures/New-screenshot.png" width="2268" height="1488" alt="" /&gt;
&lt;div class="e2-text-caption"&gt;Актуальная аналитика&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;В итоге получилась относительно простая и даже гибкая аналитика, которую можно использовать сразу на нескольких проектах. Сейчас она обходиться в 0$, нам хватает одного миллиона бесплатных вызовов лямбды в месяц.&lt;/p&gt;
&lt;p&gt;Но я все же советую изучить и использовать готовые инструменты вместо того чтобы сидеть и делать свои велосипеды. Ведь это очень скользкий путь, в какой-то момент можно забыть для чего это делалось и бесконечно улучшать и допиливать, вместо того чтобы решать задачу.&lt;/p&gt;
</description>
</item>

<item>
<title>Отличное видео про основы Docker</title>
<guid isPermaLink="false">247</guid>
<link>https://www.stefaniuk.website/all/otlichnoe-video-pro-osnovy-docker/</link>
<pubDate>Sat, 09 Jan 2021 17:11:26 -0400</pubDate>
<author></author>
<comments>https://www.stefaniuk.website/all/otlichnoe-video-pro-osnovy-docker/</comments>
<description>
&lt;div class="e2-text-video"&gt;
&lt;iframe src="https://www.youtube.com/embed/QF4ZF857m44?enablejsapi=1" allow="autoplay" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;
&lt;/div&gt;
</description>
</item>

<item>
<title>Настройка новой виртуальной машины</title>
<guid isPermaLink="false">243</guid>
<link>https://www.stefaniuk.website/all/setup-new-ubuntu-vps/</link>
<pubDate>Sat, 26 Dec 2020 14:54:46 -0400</pubDate>
<author></author>
<comments>https://www.stefaniuk.website/all/setup-new-ubuntu-vps/</comments>
<description>
&lt;p&gt;Время от времени поднимаю виртуальные машины на убунту для своих проектов или экспериментов. Первое что я настраиваю — безопасность. Раньше у меня не было единого чек-листа и приходилось каждый раз гуглить. Поэтому решил сделать такой список и оставить у себя в блоге, чтобы обращаться к нему по мере необходимости.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Чеклист&lt;/b&gt;&lt;/p&gt;
&lt;ol start="1"&gt;
&lt;li&gt;Создать нового пользователя вместо root.&lt;/li&gt;
&lt;li&gt;Настроить доступ по ssh ключам.&lt;/li&gt;
&lt;li&gt;Отключить доступ по паролю для ssh.&lt;/li&gt;
&lt;li&gt;Отключить доступ для root через ssh.&lt;/li&gt;
&lt;li&gt;Заблокировать все порты в ufw, кроме 80, 22 и 443.&lt;/li&gt;
&lt;li&gt;(необязательно) Поменять ssh порт с 22 любой другой&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;b&gt;Terminal&lt;/b&gt;&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;# Создаем нового пользователя и добавляем в группу sudo.
adduser bstefaniuk
usermod -aG sudo bstefaniuk

# Копируем свой публичный ключ для нового пользователя.
ssh-copy-id bstefaniuk@vps-ip

# Отключаем доступ по паролю и root для ssh.
nano /etc/ssh/sshd_config
## Установить значения:
PasswordAuthentication no
PermitRootLogin no
## Перезапустить службу
systemctl restart ssh

# Настройка ufw
ufw default deny incoming
ufw default allow outgoing
ufw allow ssh
ufw allow 80
ufw allow 433
ufw enable
## Проверяем что все ОК
ufw status&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;В будущем хочу написать ansible-playbook скрипт, который будет все настраивать сам.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.webservertalk.com/ubuntu-firewall-how-to-configure-ufw"&gt;Хороший мануал по ufw&lt;/a&gt;&lt;br /&gt;
&lt;a href="https://www.digitalocean.com/community/tools/nginx"&gt;Генератор конфигураций nginx&lt;/a&gt;&lt;br /&gt;
&lt;a href="https://maxkuznetsov.ru/all/deployment-users/"&gt;Deployment: настраиваем пользователей&lt;/a&gt;&lt;/p&gt;
</description>
</item>

<item>
<title>GCP: Databases</title>
<guid isPermaLink="false">241</guid>
<link>https://www.stefaniuk.website/all/gcp-databases/</link>
<pubDate>Wed, 14 Oct 2020 16:24:00 -0400</pubDate>
<author></author>
<comments>https://www.stefaniuk.website/all/gcp-databases/</comments>
<description>
&lt;p&gt;Google Cloud Platform предоставляет большой выбор разных способов хранить данные. Некоторые из них построены на базе существующих продуктов, другие — собственная разработка гугла.&lt;/p&gt;
&lt;p&gt;Для начала нужно понять, что такое managed databases. Это услуга по настройке и администрированию баз данных. Облачный провайдер сам отвечает за работу сервера, установку патчей безопасности, доступность сервиса. Для того чтобы достичь такого же результата с помощью self hosted, нужно иметь в штате специалиста, который умеет администрировать сервера, закупить железо и подготовить инфраструктуру. В случае с managed databases платишь только за то количество ресурсов, которое используешь.&lt;/p&gt;
&lt;h2&gt;Cloud SQL&lt;/h2&gt;
&lt;p&gt;Cloud SQL это классический managed database сервис. Он позволяет развернуть 3 самые популярные базы данных. Такие как:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;MySQL (5.6, 5.7 и 8.0)&lt;/li&gt;
&lt;li&gt;PostgreSQL (9.6, 10, 11, 12)&lt;/li&gt;
&lt;li&gt;MS SQL Server 2017&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Также гугл гарантирует доступность базы данных на уровне 99,95%. Дополнительно получаем автоматическую репликацию и бекапы.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Ограничения&lt;/b&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;30 Tb хранилища&lt;/li&gt;
&lt;li&gt;60,000 IOPS&lt;/li&gt;
&lt;li&gt;624 Gb RAM&lt;/li&gt;
&lt;li&gt;Реплики БД только для чтения&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Cloud Spanner&lt;/h2&gt;
&lt;p&gt;Spanner — реляционная база данных, разработка Google. Spanner позиционирует себя как горизонтально масштабируемая база данных, способна хранить петабайты информации, гарантирует строгую согласованность данных. А также доступность 99.999%.&lt;/p&gt;
&lt;p&gt;По своей природе Cloud Spanner это распределённая база данных с автоматическим шардированием и репликацией, которые скрыты под капотом. Чтобы создать БД, нужно выбрать локацию (region или multi-region) и количество нод. Количество нод влияет на размер данных, которые кластер способен хранить и его доступность. Каждая нода может обслуживать до 2 Тб данных.&lt;/p&gt;
&lt;p&gt;Пример кластера, который состоит из 4 нод. Каждая зона содержит полную копию базы данных и 4 процесса, которые обслуживают эти данные.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://www.stefaniuk.website/pictures/gcp-db-regional-instance-config.png" width="734" height="365" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;Гугл советует иметь минимум 3 ноды для прода. Но есть один нюанс — цена. Cloud Spanner очень дорогое решение, созданное для работы с огромным количеством данных. За 1 петабайт данных прийдется отдать ......... 1 645 568 $ ......... в месяц.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://www.stefaniuk.website/pictures/gcp-db-spanner-price.png" width="420" height="327" alt="" /&gt;
&lt;/div&gt;
&lt;h2&gt;Cloud Big Table&lt;/h2&gt;
&lt;p&gt;Столбцовая NoSQL база данных, которая масштабируется до миллиарда строк и тысяч колонок. Способна хранить петабайты информации.&lt;/p&gt;
&lt;p&gt;Основная фича — наличие интерфейса HBase и нативная поддержка Hadoop. Это позволяет перенести данные с собственного кластера в Big Table без каких либо изменений. Big Table идеально подойдёт для очень быстрой записи и чтения, а также хранения данных типа ключ/значения, размер которых не превышает 10 Мб.&lt;/p&gt;
&lt;p&gt;Данные внутри базы данных лежат в огромных таблицах. Грубо говоря, таблица в HBase представлена в виде огромного словаря словарей. Таблица состоит из строк, каждая из которых обычно описывает одну сущность, и столбцов, которые содержат отдельные значения для каждой строки. Каждая строка индексируется одним ключом, а столбцы, которые связаны друг с другом, обычно группируются в семейство столбцов.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://www.stefaniuk.website/pictures/gcp-db-big-table.png" width="658" height="372" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;Для более глубокого ознакомления советую прочитать главу «HBase» из книги «7 баз данных за 7 недель». Также советую ознакомится с &lt;a href="https://cloud.google.com/bigtable/docs/overview"&gt;официальной документацией&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Cloud Firestore&lt;/h2&gt;
&lt;p&gt;Cloud Firestore — это полностью управляемая,документоориентированная serverless база данных, предназначена для разработки serverless приложений. Структура данных сильно напоминает такую в MongoDB.&lt;/p&gt;
&lt;p&gt;Firestore поддерживает офлайн режим и живую синхронизацию. С помощью этих фич удобно строить приложения, которые предназначены для совместного использования, например, Google Docs или другие похожие варианты.&lt;/p&gt;
&lt;p&gt;А также она пришла на замену предыдущего сервиса — Cloud Datastore. В 2021 году гугл обещает автоматически всех мигрировать с Datastore на Firestore. Это возможно благодаря обратной совместировать с Datastore API.&lt;/p&gt;
&lt;p&gt;Firestore имеет два режива работы:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt; Datastore mode&lt;/b&gt;, создан для серверных приложений, совместим с Cloud Datastore. Поддерживает согласованность в конечном счёте.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Native mode&lt;/b&gt;, создан для веб и мобильных платформ. Поддерживает строгую согласованость и все основные фичи Firestore.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Детальнее с режимами можно ознакомится в &lt;a href="https://cloud.google.com/firestore/docs/firestore-or-datastore"&gt;официальной документации&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Cloud Memorystore&lt;/h2&gt;
&lt;p&gt;Управляемый in-memory сервис, построенный на базе Redis и memcached.&lt;/p&gt;
&lt;h2&gt;Сравнение&lt;/h2&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://www.stefaniuk.website/pictures/gcp-db-compare.png" width="961" height="495" alt="" /&gt;
&lt;/div&gt;
</description>
</item>

<item>
<title>GCP: Cloud Storage</title>
<guid isPermaLink="false">240</guid>
<link>https://www.stefaniuk.website/all/gcp-cloud-storage/</link>
<pubDate>Sun, 11 Oct 2020 04:33:42 -0400</pubDate>
<author></author>
<comments>https://www.stefaniuk.website/all/gcp-cloud-storage/</comments>
<description>
&lt;p&gt;Cloud Storage — сервис хранения неструктурированных данных. Внутри можно хранить все что захотим, но в основном используется как файловое хранилище. Каждый файл представлен в виде объекта, сами же объекты лежал в бакетах.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://www.stefaniuk.website/pictures/gcp-storage-overview.jpg" width="450" height="215" alt="" /&gt;
&lt;div class="e2-text-caption"&gt;Бакет avatars содержит аватары пользователей, music — песни.&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;В Cloud Storage нету ограничений на количество и размер файлов. Мы платим только за то что используем.&lt;/p&gt;
&lt;h2&gt;Основные понятия&lt;/h2&gt;
&lt;p&gt;&lt;b&gt;&lt;i&gt;Бакеты&lt;/i&gt;&lt;/b&gt;&lt;br /&gt;
Бакет это коллекция объектов, все файлы должны лежать внутри. Также бакет является центральным местом управления жизненным циклом объектов и доступа к ним. Каждый бакет имеет свое глобально уникальное имя, регион и класс хранения данных. Для работы с бакетом используют конструкцию:&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;gs://название-бакета&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;b&gt;&lt;i&gt;Объекты&lt;/i&gt;&lt;/b&gt;&lt;br /&gt;
Технически Cloud Storage не является файловым хранилищем или файловой системой, это объектное хранилище. Поэтому каждый файл представляет из себя объект, который состоит из двух частей: сам файл и метаданные. Метаданные описывают характеристики объекта в виде ключ-значение.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;i&gt;Иммутабельность&lt;/i&gt;&lt;/b&gt;&lt;br /&gt;
Все объекты иммутабельные, их можно только перезаписать или удалить. При перезаписи предыдущая версия файла будет доступна пока новая успешно не запишется на диск.&lt;/p&gt;
&lt;h2&gt;Классы хранения&lt;/h2&gt;
&lt;p&gt;Классы хранения отвечают за доступность и цену хранения объектов.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://www.stefaniuk.website/pictures/gcp-storage-classes.png" width="705" height="238" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;&lt;b&gt;&lt;i&gt;Standard Storage&lt;/i&gt;&lt;/b&gt;&lt;br /&gt;
Лучший выбор для данных, которые активно используются (горячие данные) и хранятся непродолжительное время.&lt;/p&gt;
&lt;p&gt;В свою очередь standard класс можно поделить еще на 3 подкласса: multi-regional, dual-region, single region. Они влияют на доступность файлов и скорость доступа к ним, особенно если пользователи разбросаны по миру. При использовании multi-regional класса автоматически выберется регион, который ближе к пользователю.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;i&gt;Nearline&lt;/i&gt;&lt;/b&gt;&lt;br /&gt;
Для этого и всех что ниже классов появляется стоимость за извлечение данных. Но хранение файлов дешевле.&lt;/p&gt;
&lt;p&gt;Такое хранилище отлично подходит для данных, которые редко используются, обычно раз в месяц. Например, бэкапы или архивные данные. Если файлы нужны реже, чем один раз в квартал, лучше использовать Coldline или Archive классы.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;i&gt;Coldline&lt;/i&gt;&lt;/b&gt;&lt;br /&gt;
Используется для данных, которые нужны раз в квартал.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;i&gt;Archive&lt;/i&gt;&lt;/b&gt;&lt;br /&gt;
Самый дорогой в плане доступа к данным, но самый дешёвый для хранения. Файлы в нём должны храниться минимум 365 дней. Подходит для бэкапов и для аварийного восстановления. Но этот класс не имеет SLA для доступности.&lt;/p&gt;
&lt;h2&gt;gsutil&lt;/h2&gt;
&lt;p&gt;Для Cloud Storage есть своя консольная утилита. Большенство команд похожи на те что есть в Linux для работы с файловой системой.&lt;/p&gt;
&lt;p&gt;С помощью gsutil можно:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Создать и удалить бакет&lt;/li&gt;
&lt;li&gt;Загружать, скачивать, удалять объекты&lt;/li&gt;
&lt;li&gt;Отображать список объектов&lt;/li&gt;
&lt;li&gt;Перемещать, копировать и переименовывать объекты&lt;/li&gt;
&lt;li&gt;Редактировать ACLs&lt;/li&gt;
&lt;li&gt;Управлять версионированием&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Пример команды, которая отобразит список объектов в бакете.&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;gsutil ls gs://some-bucket&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Копирование файлов&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;gsutil cp -r &amp;lt;source&amp;gt; &amp;lt;target&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2&gt;Безопасность&lt;/h2&gt;
&lt;p&gt;Cloud Storage поддерживает два механизма обеспечения безопасности: IAM и ACL.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;i&gt;IAM&lt;/i&gt;&lt;/b&gt;&lt;br /&gt;
Про IAM я рассказывал в &lt;a href="https://stefaniuk.website/all/gcp-identity-and-access-management/"&gt;предыдущей статье&lt;/a&gt;. По умолчанию есть 3 типа ролей, они распространяются на проект или бакет. Для тонкой настройки лучше использовать ACL.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Примитивные роли (owner/editor/viewer)&lt;/li&gt;
&lt;li&gt;Standard Storage Roles — работают независимо от ACL&lt;/li&gt;
&lt;li&gt;Legacy Roles — эквивалентны ACL разрешениям&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;b&gt;&lt;i&gt;ACLs&lt;/i&gt;&lt;/b&gt;&lt;br /&gt;
ACL приходят на помощь, когда нам нужно организовать атомарный доступ к отдельным объектам. Каждый элемент ACL состоит из разрешения и пользователя, кому эти разрешения выданы.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;i&gt;Что выбрать?&lt;/i&gt;&lt;/b&gt;&lt;br /&gt;
Первое что нужно понимать — IAM и ACL независимы и не влияют друг на друга. Если использовать оба механизма, можно выстрелить себе в колено. Убрав права на уровне IAM не забудь убрать из ACL.&lt;/p&gt;
&lt;p&gt;Гугл советует использовать uniform подход, в котором используется только IAM. При таком подходе мы создаем бакет для конкретной группы пользователей.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://www.stefaniuk.website/pictures/gcp-storage-uniform-vs-fine-access.png" width="530" height="372" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;Также у IAM есть система аудита, которая фиксирует все действия. Их можно проанализировать с помощью Big Query.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;i&gt;Signed URL&lt;/i&gt;&lt;/b&gt;&lt;br /&gt;
Иногда нужно дать доступ к файлу для пользователя, у которого нет гугл аккаунта. Тут на помощь приходит Signed URL. Он работает также как и ссылки в гугл документах. Единственное отличие в том что все ссылки имеют срок жизни, который мы указываем при создании.&lt;/p&gt;
&lt;p&gt;С помощью этого механизма можем дать доступ на чтение, загрузку и удаление. Поэтому следите за тем кому даёте ссылку и с какими правами.&lt;/p&gt;
&lt;h2&gt;Шифрование&lt;/h2&gt;
&lt;p&gt;Google Storage всегда шифрует данные на сервере, перед тем как они будут записаны на диск. По умолчанию гугл использует собственные ключи шифрования. Но можно использовать собственные ключи или сгенерировать их с помощью Cloud Key Management Service.&lt;/p&gt;
&lt;h2&gt;Версионирование&lt;/h2&gt;
&lt;p&gt;Cloud Storage поддерживает версионирование объектов. Каждое изменение или удаление на самом деле не удаляет файл, а архивирует его. По умолчанию версионирование отключено, но его можно включить с помощью gsutil&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;$ gsutil versioning set on gs://bucket-name&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Объекты для которых есть несколько версий имеют одно имя, но разные идентификаторы.&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;$ gsutil ls -a gs://my-files
gs://my-files/sample.txt#1602324272958747
gs://my-files/sample.txt#1602324615090803&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Количество версий не ограничено из-за чего данные могут разрастись и сжигать больше денег. Для решения этой проблемы существует механизм управления жизненным циклом.&lt;/p&gt;
&lt;p&gt;Также нужно помнить что архивные файлы имеют свои ACL, которые могут отличатся от актуальных!&lt;/p&gt;
&lt;h2&gt;Жизненный цикл&lt;/h2&gt;
&lt;p&gt;Жизненный цикл помогает поддерживать порядок в бакетах. С его помощью можно настроить количество версий, которые надо хранить, понижать класс хранения, удалять объекты после какой-то даты.&lt;/p&gt;
&lt;p&gt;Общий вид правил:&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://www.stefaniuk.website/pictures/gcp-storage-licecycle-rules.png" width="730" height="230" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;В качестве условий можно использовать:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Возраст — время жизни в днях (TTL)&lt;/li&gt;
&lt;li&gt;CreatedBefore — объекты созданные до даты (например до 1 апреля 2020)&lt;/li&gt;
&lt;li&gt;IsLive — использовать актуальные или архивные файлы&lt;/li&gt;
&lt;li&gt;MatchesStorageClass — текущий класс хранения&lt;/li&gt;
&lt;li&gt;NumberOfNewerVersions — количество версий&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Действия:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Удаление&lt;/li&gt;
&lt;li&gt;SetStorageClass — поменять класс хранения&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;А вот так правила выглядят в жизни:&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://www.stefaniuk.website/pictures/gcp-storage-lifecycle-management.png" width="522" height="199" alt="" /&gt;
&lt;/div&gt;
</description>
</item>

<item>
<title>GCP: Identity and Access Management</title>
<guid isPermaLink="false">239</guid>
<link>https://www.stefaniuk.website/all/gcp-identity-and-access-management/</link>
<pubDate>Wed, 07 Oct 2020 12:35:52 -0400</pubDate>
<author></author>
<comments>https://www.stefaniuk.website/all/gcp-identity-and-access-management/</comments>
<description>
&lt;p&gt;Я уже кратко описывал работу прав внутри облака в статье “&lt;a href="https://stefaniuk.website/all/google-cloud-platform/"&gt;Google Cloud Platform&lt;/a&gt;”. Сегодня расскажу как устроен IAM.&lt;/p&gt;
&lt;p&gt;Полики IAM содержат роль, пользователя или группу пользователей. Каждая роль содержит в себе список разрешений.&lt;/p&gt;
&lt;p&gt;Модель доступа состоит из трех основных частей:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Участники (members)&lt;/b&gt;. Любые учетные записи Google, сервисные аккаунты, Google Groups, Cloud Identity или GSuit домен.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Роль (role)&lt;/b&gt;. Набор разрешений, определяют какие операции можно выполнять с указанным ресурсом.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Политика (policy)&lt;/b&gt;. Объеденение роли и участников.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://www.stefaniuk.website/pictures/gcp-iam-policy-overivew-2.png" width="800" height="425" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;Также в качестве участника можно установить два специальных значения:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;allUsers — любой пользователь в интернете&lt;/li&gt;
&lt;li&gt;allAuthenticatedUsers — любой пользователь, авторизированный с помощью гугл аккаунта, даже если это личный аккаунт&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Отдельно нужно упомянуть иерархию ресурсов. Она позволяет группировать ресурсы и централизованно управлять доступами используя систему наследования прав. Политики установленные на уровне папки будут распространятся на все проекты и подпапки.&lt;/p&gt;
&lt;h2&gt;Основные концепты&lt;/h2&gt;
&lt;p&gt;&lt;i&gt;&lt;b&gt;Ресурсы&lt;/b&gt;&lt;/i&gt;&lt;br /&gt;
Компоненты, которые выполняют работу. В основном права выдаются на уровне проекта. Но для некоторых ресурсов можно атомарно настроить права. Например выдать права администратора на конкретный экземпляр виртуальной машины.&lt;/p&gt;
&lt;p&gt;&lt;i&gt;&lt;b&gt;Разрешения&lt;/b&gt;&lt;/i&gt;&lt;br /&gt;
Разрешения описывают операции, которые можно выполнять с ресурсами. Имеют следующий вид — service.resource.verb.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://www.stefaniuk.website/pictures/gcp-iam-permissions-example.png" width="400" height="285" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;В большинстве случаев, разрешения соотносятся одним к одному с методами REST API. То есть, каждая служба Google Cloud содержит соответствующий набор разрешений для каждого метода REST API, который она предоставляет.&lt;/p&gt;
&lt;p&gt;&lt;i&gt;&lt;b&gt;Роли&lt;/b&gt;&lt;/i&gt;&lt;br /&gt;
Роли — набор разрешений. Несколько разрешений желательно собирать в отдельную роль, которую назначать группе пользователей, вместо того чтобы раздавать разрешения напрямую пользователям.&lt;/p&gt;
&lt;p&gt;Роли делятся на три типа:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Примитивная роль (Primitive)&lt;/b&gt; — самая простая и общая. Указывает какие действия можно выполнить со всеми ресурсами. Всего есть 4 примитивных роли: owner, editor, viewer и billing administrator.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Предустановленные роли (Predefined)&lt;/b&gt;. Ими можно тонко настроить права. Указывают кто и какое действие разрешено выполнять с определенным ресурсов. Каждый ресурс в GCP содержит готовый набор predefined ролей.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Кастомные роли&lt;/b&gt; позволяют указать любой набор разрешений и предоставить их любому пользователю или группе.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://www.stefaniuk.website/pictures/gcp-iam-role-types-1.jpg" width="1853" height="684" alt="" /&gt;
&lt;/div&gt;
&lt;h2&gt;Сервисные аккаунты&lt;/h2&gt;
&lt;p&gt;Сервисные аккаунты предназначены для взаимодействия ресурсов и сервисов друг с другом. Каждый аккаунт имеет уникальный email. Для того чтобы ресурс смог достучатся к другому, сначала нужно получить токен с помощью Google API и уже с ним идти в другой ресурс. Это происходит автоматически.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://www.stefaniuk.website/pictures/gcp-iam-service-account-works.jpg" width="800" height="426" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;&lt;i&gt;&lt;b&gt;Отличия сервисных аккаунтов от обычных&lt;/b&gt;&lt;/i&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Сервисный аккаунт не имеет пароля. Мы не сможем залогиниться через браузер.&lt;/li&gt;
&lt;li&gt;Сервисный аккаунт содержит публичный и приватный ключ с помощью которого он авторизуется в облаке.&lt;/li&gt;
&lt;li&gt;Разрешение serviceAccountUser позволяет выдавать пользователя за сервисный аккаунт.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;b&gt;&lt;i&gt;Типы сервисных аккаунтов&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Пользовательские, можно создать до 100 аккаунтов, количество можно увеличить, поменяв квоту. Такие аккаунты создаются со следующим электронным адресом: service-account-name@project-id.iam.gserviceaccount.com&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Дефолтные — для каждого проекта автоматически создаются два аккаунта, каждый имеет права Editor. Один используется для взаимодействия с App Engine (project-id@appspot.gserviceaccount.com), а второй для Compute Engine (project-number-compute@developer.gserviceaccount.com).&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Аккаунты Google API — создаются и управляются на стороне Google, обеспечивают взаимодействие с сервисами гугла.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Рекомендации&lt;/h2&gt;
&lt;ol start="1"&gt;
&lt;li&gt;Следовать принципу наименьшей ответственности — выдавать пользователю только те права, которые ему необходимы.&lt;/li&gt;
&lt;li&gt;Выдавать права на группы, а не на отдельных пользователей.&lt;/li&gt;
&lt;li&gt;Внимательно следить за правами serviceAccountUser.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Больше советов можно посмотреть в документации: &lt;a href="https://cloud.google.com/iam/docs/recommender-best-practices"&gt;IAM recommender best practices&lt;/a&gt;.&lt;/p&gt;
</description>
</item>

<item>
<title>GCP: виртуальные машины</title>
<guid isPermaLink="false">238</guid>
<link>https://www.stefaniuk.website/all/gcp-virtualnye-mashiny/</link>
<pubDate>Wed, 23 Sep 2020 12:46:16 -0400</pubDate>
<author></author>
<comments>https://www.stefaniuk.website/all/gcp-virtualnye-mashiny/</comments>
<description>
&lt;div class="note-md" style="padding: 0; background-color: transparent"&gt;&lt;div class="e2-text-picture"&gt;
&lt;img src="https://www.stefaniuk.website/pictures/Compute-Engine.png" width="65" height="65" alt="" /&gt;
&lt;div class="e2-text-caption"&gt;Compute Engine&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;В основе почти всех ресурсов в Google Cloud лежат виртуальные машины, которые принадлежат сервису Compute Engine. Впервые они были представлены в 2012 году и отлично подойдут для любых запросов. По сути это обычные компьютеры с Linux или Windows на борту.&lt;/p&gt;
&lt;p&gt;Создание виртуалок состоит из нескольких шагов:&lt;/p&gt;
&lt;ol start="1"&gt;
&lt;li&gt;Выбрать регион и зону&lt;/li&gt;
&lt;li&gt;Определится с типом машины&lt;/li&gt;
&lt;li&gt;Выбрать образ&lt;/li&gt;
&lt;li&gt;Подключить дополнительные диски&lt;/li&gt;
&lt;li&gt;Настроить сеть&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;Типы VM&lt;/h2&gt;
&lt;p&gt;Перед созданием виртуальной машины нам нужно определиться с ее типом. Гугл уже насоздавал множество готовых конфигураций и объединил их в 6 групп:&lt;/p&gt;
&lt;ol start="1"&gt;
&lt;li&gt;Standard&lt;/li&gt;
&lt;li&gt;High-memory&lt;/li&gt;
&lt;li&gt;High-CPU&lt;/li&gt;
&lt;li&gt;Memory-optimized&lt;/li&gt;
&lt;li&gt;Compute-optimized&lt;/li&gt;
&lt;li&gt;Shared-core&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Если недостаточно представленных ресурсов, можно создать свою конфигурацию, выбрав нужное количество CPU или памяти. В зависимости от типа аппаратной платформы доступно до 96 vCPU, до 768 Гб памяти и диски до 257 терабайт. Каждая конфигурация основывается на соотношении CPU до памяти.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://www.stefaniuk.website/pictures/vm-configurations-groups.png" width="800" height="312" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;Кроме готовых конфигураций есть еще и аппаратная платформа, всего 4 варианта:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;E2 машины имеют оптимизированный расход и содержат до 32 vCPU и максимум 8 Гб памяти на один vCPU. Также у них предопределена платформа процессора, работают на процессорах Intel, либо на AMD EPYC Rome второго поколения.&lt;/li&gt;
&lt;li&gt;N2 расширяются до 80 vCPU и до 8 Гб памяти на один vCPU. Работают на процессорах Intel Cascade Lake.&lt;/li&gt;
&lt;li&gt;N2D самые мощные в плане количества ядер машины, могут иметь до 224 vCPU, 8 Гб памяти на процессор и работают на базе AMD EPYC Rome.&lt;/li&gt;
&lt;li&gt;Машины N1 предлагают до 96 процессоров, 6.5 ГБ памяти на один процессор, и доступны на платформах Intel Sandy Bridge, Ivy Bridge, Haswell, Broadwell и Skylake.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Детальнее в документации: &lt;a href="https://cloud.google.com/compute/docs/machine-types"&gt;&lt;a href="https://cloud.google.com/compute/docs/machine-types"&gt;https://cloud.google.com/compute/docs/machine-types&lt;/a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Образы&lt;/h2&gt;
&lt;p&gt;Образы операционных систем используются для создания загрузочных дисков машин. Мы можем выбрать готовый публичный образ, создать свой с загрузочного диска готовой виртуалки или загрузить с компьютера или другого облака.&lt;/p&gt;
&lt;p&gt;Документация: &lt;a href="https://cloud.google.com/compute/docs/images"&gt;&lt;a href="https://cloud.google.com/compute/docs/images"&gt;https://cloud.google.com/compute/docs/images&lt;/a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Диски&lt;/h2&gt;
&lt;p&gt;После того как определились с типом виртуальной машины и образом, нужно выбрать диск. По умолчанию виртуальная машина идет с одним загрузочным диском. Образ загружается на диск при первом включении и дальше используется для работы виртуалки.&lt;/p&gt;
&lt;p&gt;После удаления вуртуалки вместе с ней удаляется загрузочный диск. Для того чтобы выключить эту опцию нужно отключить опцию “Delete boot disk when instance is deleted”. Кроме того все диски автоматически шифруются ключами, которыми управляет гугл, но у можно использовать собственные ключи.&lt;/p&gt;
&lt;p&gt;Для хранения данных есть постоянные диски. Они живут отдельной жизнью и подключаются к виртуальной машине по сети, что не так быстро как физически подключенные диски. Выбрать можем HDD или SSD. Первый дешевле, но медленнее чем SSD. Чтобы изменить размер диска не надо выключать виртуалку. В качестве бекапа выступают инкрементальные снапшоты.&lt;/p&gt;
&lt;p&gt;&lt;i&gt;Local SSD&lt;/i&gt;&lt;br /&gt;
Отдельный тип дисков, которые физически присоединены к виртуалке. Они производительнее чем постоянные диски и имеют меньшие задержки. Каждый диск расширяется до 375 Гб, что в сумме дает до 3 Тб на одну машину. Local ssd нельзя использовать для длительного хранения данных, так как стираются после выключения виртуальной машины, переживают только перезапуск.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://www.stefaniuk.website/pictures/vm-disk-options.png" width="800" height="566" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;Дока: &lt;a href="https://cloud.google.com/compute/docs/disks"&gt;&lt;a href="https://cloud.google.com/compute/docs/disks"&gt;https://cloud.google.com/compute/docs/disks&lt;/a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Жизненный цикл&lt;/h2&gt;
&lt;p&gt;Каждая виртуальная машины имеет свою жизненный цикл где каждая стадия отвечает за определенный набор действий. Всего есть пять состояний: Provisioning, Staging, Running, Stopping, Terminated.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://www.stefaniuk.website/pictures/vm-lifecycle.png" width="1000" height="468" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;&lt;i&gt;Provisioning&lt;/i&gt;&lt;br /&gt;
Происходит после выбора всех необходимых настроек и нажатия на кнопку «создать VM». На этом этапе выделяется процессор, память и резервируются диски, но сама машина еще не работает.&lt;/p&gt;
&lt;p&gt;&lt;i&gt;Staging&lt;/i&gt;&lt;br /&gt;
На этом этапе происходит выделение внешнего и внутреннего IP адреса, загружается системный образ и стартует ОС.&lt;/p&gt;
&lt;p&gt;&lt;i&gt;Running&lt;/i&gt;&lt;br /&gt;
Сначала выполняются установленные start-up скрипты и включается удаленный доступ через SSH или RDP. Здесь выполняется вся возложенная на машину работа. На этом шаге можно мигрировать нашу виртуалку в другую зону без перезапуска, создавать снапшоты дисков или экспортировать системный образ.&lt;/p&gt;
&lt;p&gt;&lt;i&gt;Stopping и Terminated&lt;/i&gt;&lt;br /&gt;
Некоторые действия требуют остановки виртуальной машины, например добавление CPU или памяти. Когда машина переходит в это состояние выполняются установленные shutdown скрипты и VM переходит в terminated статус.&lt;/p&gt;
&lt;p&gt;После этого мы можем ее удалить, мигрировать, добавлять и удалять IP адреса, теги, менять тип машины, добавлять новые диски.&lt;/p&gt;
&lt;p&gt;Когда машина отключена мы платим только за выделенные IP и за диски. Главное что надо помнить, на выполнения shutdown скриптов есть всего 90 секунд, а если это preemptible машина, то 30 секунд.&lt;/p&gt;
&lt;h2&gt;Доступ к виртуальной машины&lt;/h2&gt;
&lt;p&gt;Linux манишь предоставляю доступ через SSH, а Windows — через RDP. В обоих случаях в брандмауэре должен быть открыт 22 порт для SSH и 3389 для RDP.&lt;/p&gt;
&lt;h2&gt;Специальные опции&lt;/h2&gt;
&lt;p&gt;&lt;i&gt;Preemptible VMs&lt;/i&gt;&lt;br /&gt;
Временные и очень дешевые виртуальные машины. Обычно их используют для непродолжительной обработки больших массивов данных или расчетов. Например обработать больше количество картинок или подсчитать какие-то метрики. В свою очередь такие машины накладывают следующие ограничения:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Они могут быть выключены в любой момент, поэтому приложение должно быть fault-tolerant.&lt;/li&gt;
&lt;li&gt;Google останавливает их после 24 часов работы.&lt;/li&gt;
&lt;li&gt;Не всегда доступны для создания&lt;/li&gt;
&lt;li&gt;Не предоставляют SLA&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;i&gt;Sole-tolerant node&lt;/i&gt;&lt;br /&gt;
Если вы обрабатываете очень чувствительные данные, можно использовать sole-tolerant ноды, которые представляют физические сервера, которые изолированы от других проектов и клиентов.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://www.stefaniuk.website/pictures/vm-sole-tolerant-node.png" width="500" height="333" alt="" /&gt;
&lt;/div&gt;
</description>
</item>

<item>
<title>GCP: Virtual Private Cloud (VPC)</title>
<guid isPermaLink="false">237</guid>
<link>https://www.stefaniuk.website/all/gcp-virtual-private-cloud-vpc/</link>
<pubDate>Mon, 14 Sep 2020 15:46:06 -0400</pubDate>
<author></author>
<comments>https://www.stefaniuk.website/all/gcp-virtual-private-cloud-vpc/</comments>
<description>
&lt;p&gt;Virtual Private Cloud (VPC) сеть — это виртуальная версия физической сети, которая работает внутри облака. С помощью сетей можно организовать общение между ресурсами в облаке или изолировать их друг от друга.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://www.stefaniuk.website/pictures/gvp-vpc-overview.png" width="700" height="670" alt="" /&gt;
&lt;div class="e2-text-caption"&gt;Общий вид проекта с одной сетью и двумя подсетями.&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Составляющие компоненты VPC&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Регионы&lt;/li&gt;
&lt;li&gt;Зоны&lt;/li&gt;
&lt;li&gt;Проекты&lt;/li&gt;
&lt;li&gt;Сети&lt;/li&gt;
&lt;li&gt;Подсети&lt;/li&gt;
&lt;li&gt;IP адреса&lt;/li&gt;
&lt;li&gt;Маршрутизаторы&lt;/li&gt;
&lt;li&gt;Фаерволы&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Региональные и зональные ресурсы&lt;/h2&gt;
&lt;p&gt;Я уже писал в предыдущей статье, что ресурсы в облаке разделяются по географии. К таким ресурсам относятся сети и их компоненты. Так к глобальным ресурсам относятся: VCP сети, firewall, маршрутизаторы. А к региональным статические внешние IP адреса и подсети.&lt;/p&gt;
&lt;h2&gt;Сети и подсети&lt;/h2&gt;
&lt;p&gt;Центральная единица в GCP — проект, объединяет набор ресурсов и сервисов в единую организационную единицу. Каждый проект содержат до 5 сетей, но это количество можно изменить, поменяв соответствующие квоты.&lt;/p&gt;
&lt;p&gt;VPC сеть представляет из себя топологию с набором разных ресурсов, таких как подсети, роутеры, DNS и другие. Сами по себе сети не содержат никаких диапазонов IP адресов.&lt;/p&gt;
&lt;p&gt;Сети разделяются на 3 типа: default, auto mode, custom.&lt;/p&gt;
&lt;p class="note"&gt;Про диапазоны IP адресов можно почитать в &lt;a href="https://ru.wikipedia.org/wiki/Бесклассовая_адресация"&gt;Википедии&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Default сети&lt;/b&gt;&lt;br /&gt;
Они же auto mode сети, создаются автоматически при создании проекта. Каждая сеть содержит по одной подсети на каждый регион и имеет преднастроенный брандмауэр. Эти подсети по умолчанию содержат фиксированное количество адресов (/20) с возможностью расширения до /16.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://www.stefaniuk.website/pictures/gcp-networks-600x379.png" width="600" height="379" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;&lt;b&gt;Custom сети&lt;/b&gt;&lt;br /&gt;
Создаются вручную. По умолчанию не содержат подсетей, их нужно создавать самим, по мере необходимости. При этом у нас появляется полный контроль над IP адресами и диапазонами, главное чтобы они соответствовали RFC 1918 и не превышали размер /16. После создания подсети, количество адресов можно увеличить, но не уменьшить. Такие сети лучше всего подходят для продакшена.&lt;/p&gt;
&lt;p&gt;Несколько VPC сетей могут взаимодействовать друг с другом с помощью внешних адресов или используя &lt;a href="https://cloud.google.com/vpc/docs/vpc-peering"&gt;VPC Network Peering&lt;/a&gt;, который позволяет взаимодействовать с помощью приватных IP адресов, но работает только с custom сетями.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://www.stefaniuk.website/pictures/gcp-vpc-communication-projects.png" width="750" height="440" alt="" /&gt;
&lt;div class="e2-text-caption"&gt;Двум виртуальным машинам нужно коммуницировать через внешний IP несмотря на то что они находятся в одном регионе.&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Детальнее можно ознакомится в &lt;a href="https://cloud.google.com/vpc/docs/vpc"&gt;документации&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;IP адреса&lt;/h2&gt;
&lt;p&gt;Каждая виртуальная машина в GCP может иметь два IP адреса: внутренний и внешний.&lt;/p&gt;
&lt;p&gt;Внутренние IP используются для коммуникации между ресурсами в одной сети. Их устанавливает DHCP и они являются эфемерными. Кроме IP адреса мы можем использовать имя вииртуальной машины, GCP автоматически прописывает его в DNS.&lt;/p&gt;
&lt;p&gt;Внешние IP адреса используются для коммуникации с интернетом или между сетями. По умолчанию внешние IP являются эфемерными, но мы можем зарезервировать статический адрес, правда это уже стоит денег.&lt;/p&gt;
&lt;p&gt;Если же статический IP адрес не закреплён ни за каким ресурсов, его цена будет выше, чем адреса, которые используются.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://www.stefaniuk.website/pictures/gcp-vpc-external-ip-prices.png" width="800" height="371" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;Можно настроить диапазон IP адресов для конкретного экземпляра VM. Это удобно, когда на одной машине крутится несколько сервисов и мы хотим, чтобы каждый имел свой IP.&lt;/p&gt;
&lt;h2&gt;Firewall&lt;/h2&gt;
&lt;p&gt;Каждая сеть имеет фаервол, в нём можно настроить правила для входящего(ingress) и исходящего(egress) трафика. По умолчанию весь ingress трафик запрещён, а egress разрешён. Поэтому для входящего трафика мы можем создать только разрешающие правила.&lt;/p&gt;
&lt;p&gt;Сами правила можно применять для конкретного IP адреса, множества или для тегов. Например, создать правило, которое разрешает HTTP трафик для экземпляров с тегом «allow-http».&lt;/p&gt;
&lt;p&gt;Все эти правила работают не на одной железке или роутере, а применяется для каждого экземпляра и обрабатываются на их уровне.&lt;/p&gt;
</description>
</item>


</channel>
</rss>