Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Описание инфраструктуры с Terraform на будущее

207 views

Published on

Мой доклад на XPDays Ukraine 2018

Published in: Technology
  • Be the first to comment

  • Be the first to like this

Описание инфраструктуры с Terraform на будущее

  1. 1. Описание инфраструктуры с Terraform на будущее Антон Бабенко XP Days Ukraine 2018
  2. 2. Anton Babenko Terraform AWS-фанатик с 2015 года Я 💚 open-source: terraform-community-modules + terraform-aws-modules antonbabenko/pre-commit-terraform — автоформатирование кода и документации antonbabenko/modules.tf-lambda — генератор Terraform-кода из визуальных диаграм www.terraform-best-practices.com medium.com/@anton.babenko @antonbabenko - Twitter, и куча разных Slacks
  3. 3. Коллекция опен-сорс Terraform AWS модулей поддерживаемых сообществом. Более 2 млн загрузок c сентября 2017. (VPC, Autoscaling, RDS, Security Groups, ELB, ALB, Redshift, SNS, SQS, IAM, EKS, ECS…) github.com/terraform-aws-modules registry.terraform.io/modules/terraform-aws-modules
  4. 4. Пиши, планируй и управляй инфраструктурой, как кодом www.terraform.io
  5. 5. Google Cloud Deployment Manager Azure Resource Manager
  6. 6. +более100провайдеров
  7. 7. Terraform — универсальная утилита для всего, что имеет API GSuite Dropbox-файлы и доступы New Relic-метрики Datadog-пользователи, метрики Баги в Jira Все Terraform-провайдеры
  8. 8. Начало — всё влезло в main.tf
  9. 9. Проект растёт — main.tf: 20+ ресурсов и источников данных
  10. 10. Почему?
  11. 11. Ресурсы, регионы, провайдеры, …
  12. 12. main.tf
  13. 13. main.tf: 10-20 Kb 300+ LOC
  14. 14. Возникающие проблемы Размер кода растёт Зависимости между ресурсами усложняются
  15. 15. Решение — Terraform-модули
  16. 16. Terraform-модули — это самодостаточные Terraform-конфигурации, которые управляются, как группа.
  17. 17. Ресурсные модули Только создают ресурсы в очень гибкой форме Open-source
  18. 18. Ресурсные модули
  19. 19. Ресурсные модули
  20. 20. Ресурсные модули
  21. 21. Ресурсные модули
  22. 22. Ресурсные модули Q: Зачем использовать ресурсные модули вместо ресурсов? A: Ресурсы не могут быть версиоными, а модули могут.
  23. 23. Инфраструктурные модули Состоят из ресурсных модулей Теги, стандарты компании Препроцессоры, jsonnet, cookiecutter
  24. 24. Инфраструктурные модули
  25. 25. Инфраструктурные модули
  26. 26. Инфраструктурные модули
  27. 27. Типы Terraform-модулей Ресурсные модули (terraform-aws-modules, например) Инфраструктурные модули
  28. 28. - [ ] Как писать модули - [ ] Как вызывать модули - [ ] Как работать с кодом
  29. 29. Совет №0 Проверь Terraform Registry перед тем, как начать писать ресурсный модуль
  30. 30. Прячь специфику
  31. 31. Размер
  32. 32. Размер https://github.com/mbtproject/mbt
  33. 33. Избегай в модулях
  34. 34. Исключение: логические провайдеры (template, random, local, http, external) Провайдеры в модулях — зло
  35. 35. Provisioner — зло Избегайте provisioner во всех ресурсах
  36. 36. Provisioner — зло Избегайте provisioner во всех ресурсах
  37. 37. Provisioner — зло Избегайте provisioner даже в EC2-ресурсах
  38. 38. Provisioner — зло Избегайте provisioner даже в EC2-ресурсах
  39. 39. null_resource provisioner — добро
  40. 40. Признаки хороших Terraform-модулей Документация и примеры Полный функционал Разумные значения по умолчанию Чистый код Тесты Подробнее: http://bit.ly/common-traits-in-terraform-modules
  41. 41. - [x] Как писать модули - [x] Не пиши, если можешь - [x] Не используй: провайдеры в модулях, provisioner - [ ] Как вызывать модули - [ ] Как работать с кодом
  42. 42. Как вызывать Terraform-модули Ресурсов и кода уже много Как организовать и вызывать? Как оркестрировать?
  43. 43. Всё в одном Хорошо: Описывать переменные и значения в меньшем количестве мест Плохо: Большая область действия Блокируется всё сразу Нет возможности указать зависимости между модулями (depends_on)
  44. 44. 1-in-1 Хорошо: Меньше область действия Возможно связать вызовы Легче и быстрее работается Плохо: Описывать переменные в нескольких местах
  45. 45. А как у вас? "Всё в одном" или 1-in-1 ?
  46. 46. Правильный Самый частый ответ: где-то посередине
  47. 47. А как у вас с оркестрацией? -target Makefile …
  48. 48. Оркестрация в Terraform
  49. 49. Не повторяйте это дома!
  50. 50. Оркестрация = Terragrunt https://github.com/gruntwork-io/terragrunt/
  51. 51. Оркестрация = Terragrunt
  52. 52. Оркестрация = Terragrunt
  53. 53. Оркестрация = Terragrunt
  54. 54. Оркестрация = Terragrunt
  55. 55. Оркестрация = Terragrunt tfvars не может содержать динамические значения :(
  56. 56. Orchestration = Terragrunt tfvars не может содержать динамические значения, поэтому я это починил :)
  57. 57. before_hook + shell-скрипт Подробнее: https://github.com/antonbabenko/modules.tf-lambda/blob/ master/templates/terragrunt-common-layer/template/common/scripts/ update_dynamic_values_in_tfvars.sh или попробуйте modules.tf
  58. 58. - [x] Как писать модули - [x] Как вызывать модули - [x] 1-in-1 намного удобнее со временем - [x] Оркестрация = Terragrunt - [x] Динамические значения в tfvars - [ ] Как работать с кодом
  59. 59. Новые фичи Обычно это легко…
  60. 60. Новый или существующий
  61. 61. Новый или существующий
  62. 62. Новый или существующий
  63. 63. Новый или существующий
  64. 64. Работа со списками
  65. 65. Работа со списками
  66. 66. Работа со списками
  67. 67. Работа со списками (stateful) https://jsonnet.org/
  68. 68. Работа со списками (stateful)
  69. 69. Работа со списками (stateful)
  70. 70. Работа со списками (stateful)
  71. 71. Работа со списками (stateful)
  72. 72. Интеграция
  73. 73. Интеграция
  74. 74. Интеграция - авто
  75. 75. Гладко было на бумаге (edge cases) Разные AWS регионы (S3-подпись, EC2 ClassicLink, IPv6) Дата открытия AWS-аккаунта Лимиты на ресурсы в AWS
  76. 76. Избегай в Terraform Несекретных аргументов в командной строке => tfvars • -target • -parallelism "Terraform workspaces" зло => отдельная директория Ад зависимостей в модулях
  77. 77. - [x] Как писать модули - [x] Как вызывать модули - [x] Как работать с кодом - [x] Работа со спискам в Terraform 0.11 - боль - [x] Воспринимайте Terraform проще
  78. 78. - [x] Как писать модули - [x] Как вызывать модули - [x] Как работать с кодом - [ ] Что значит "на будущее"?
  79. 79. - [x] Как писать модули - [x] Как вызывать модули - [x] Как работать с кодом - [ ] Terraform 0.12
  80. 80. Terraform 0.12 HCL2 — упрощённый синтаксис Циклы ("for") Динамические блоки ("for_each") Правильные условные операции сравнения (… ? … : …) Расширенные типы переменных Шаблоны в значениях Ссылки на ресурсы поддерживаются везде (depends_on) Подробнее — https://www.hashicorp.com/blog/terraform-0-1-2-preview
  81. 81. Итоги Пиши меньше и проще (Terraform 0.12 не починит ваш код!) Используй готовые модули, код и утилиты
  82. 82. Бонус
  83. 83. Генератор Terraform-конфигураций из визуальных диаграм
  84. 84. ✓ cloudcraft.co — проектируй, планируй и рисуй ✓ terraform-aws-modules — кирпичики AWS инфраструктуры ✓ Terraform — инфраструктура, как код
  85. 85. modules.tf заметки ✓ Доступно для всех типов пользователей: https://cloudcraft.co/ ✓ Генерирует готовый код Terraform-конфигурации по визуальной диаграме ✓ Лучше всего подходит для начальной стадии проекта ✓ Навязывает лучшие практики Terraform ✓ Включает все нужные зависимости (terraform-aws-modules, terragrunt, pre-commit, …) ✓ 100% бесплатный и open-source (https://github.com/antonbabenko/ modules.tf-lambda )
  86. 86. cloudcraft.co
  87. 87. Спасибо! github.com/antonbabenko twitter.com/antonbabenko

×