SlideShare una empresa de Scribd logo
1 de 33
Continuous Delivery. Continuous DevOps. KYIV, 2020
CONTINUOUS DELIVERY. CONTINUOUS DEVOPS.
20-21,MARCH 2020
KYIV, UKRAINE
Infrastructure as a code в реальному світі
Continuous Delivery. Continuous DevOps. KYIV, 2020
• SRE
• Azure consultant
• 2+ роки IaaC
About me
BOHDAN MATEIKO
@id27182
Continuous Delivery. Continuous DevOps. KYIV, 2020
Проблеми
• Зв’язок модулів компонентів /
Передача outputs між модулями
• Конфігурація backend
• Оркестрація модулів
• Georedundancy
• Патерни деплоймента інфраструктури
• Проблема організації команд /
розподіл обов’язків
• Формування артефактів
Continuous Delivery. Continuous DevOps. KYIV, 2020
Зв’язок модулів компонентів
Continuous Delivery. Continuous DevOps. KYIV, 2020
Remote state
data "terraform_remote_state" "backend" {
backend = "remote"
config = {
# ...
}
}
resource "aws_instance" "foo" {
# ...
subnet_id = data.terraform_remote_state.backend
.outputs.subnet_id
}
Continuous Delivery. Continuous DevOps. KYIV, 2020
Remote state
ПЛЮСИ:
• Не потрібно додаткової
інфраструктури, тільки backend
• Стандартне оголошення output
• Мало додаткового коду при
зчитуванні, один datasource на
модуль
МІНУСИ:
• Потрібно писати в datasource повну
конфігурацію бекенда
• Проблеми при реорганізації модулів
• Важко мокати залежності
Continuous Delivery. Continuous DevOps. KYIV, 2020
Remote state
Continuous Delivery. Continuous DevOps. KYIV, 2020
Key-Value Bus
data "azurerm_key_vault_secret" "backoffice_apim_key" {
name = "${var.environment_name}-backend-output-
apim-backofficekey"
key_vault_id = var.infra_vault_rid
}
resource "azurerm_app_service" "galaxy_app_service" {
name = "${var.environment_name}backoffice"
location = var.location
# ...
app_settings = {
# ...
BACKEND_APIM_KEY = data.azurerm_key_vault_secret.backof
fice_apim_key.value
}
}
Continuous Delivery. Continuous DevOps. KYIV, 2020
Key-Value Bus
ПЛЮСИ:
• Явна декларація залежностей
модуля (більш явна ніж з remote
state)
• Ідентифікатор output-a не залежить
від модуля
• Просто мокати залежності
• Вирішує додаткові проблеми
МІНУСИ:
• Додаткивий сервіс в інфраструктурі
• Окремий datasource на кожну
змінну, яка зчитується модулем
Continuous Delivery. Continuous DevOps. KYIV, 2020
Key-Value Bus: конфіги/сертифікати
Continuous Delivery. Continuous DevOps. KYIV, 2020
Напівавтоматизована інфарструктура
Continuous Delivery. Continuous DevOps. KYIV, 2020
Підготовка / передача конфігурації backend
> terraform init --backend-config 'storage_account_name=backend_storage_account' --
backend-config 'container_name=backend_container_name' --backend-config
'resource_group_name=tf_backend_rg’
> terraform apply -var 'vault_rid=/subscriptions/342c4f42-4425-4042-422a-
422cb42f242d/resourceGroups/backend_resource_group_name/providers/Microsoft.Key
Vault/vaults/backend_key_vault'
> terraform destroy -var 'vault_rid=/subscriptions/342c4f42-4425-4042-422a-
422cb42f242d/resourceGroups/backend_resource_group_name/providers/Microsoft.Key
Vault/vaults/backend_key_vault'
Continuous Delivery. Continuous DevOps. KYIV, 2020
Continuous Delivery. Continuous DevOps. KYIV, 2020
Приклад врапера
ПАРАМЕТРИ МОДУЛІВ:
• Environment
• Location
• Cloud provider credentials
• Backend configuration
• Key-value bus configuration
PRE-REQUIREMENTS:
• Azure
• В кожному сабскрібшені ресурсна
група, в якій storage account і key
vault
• В якості backend – azure storage
account.
• Для кожного енва – свій блоб
контейнер.
• В якості key-value – azure key-vault
Continuous Delivery. Continuous DevOps. KYIV, 2020
Приклад врапера
> Set-Environment -environment ‘dev’ -force
> terraform apply
> terraform destroy
Continuous Delivery. Continuous DevOps. KYIV, 2020
Оркестрація модулів
Continuous Delivery. Continuous DevOps. KYIV, 2020
Оркестрація модулів: terragrunt
 Запуск кількох модулів однією
командою
 Залежності модулів в коді
 Конфігурація бекенда в одному місці
 CLI флаги в одному місці
Continuous Delivery. Continuous DevOps. KYIV, 2020
terragrunt: залежності модулів
dependencies {
paths = ["../core-infrastructure", "../k8s-config"]
}
Continuous Delivery. Continuous DevOps. KYIV, 2020
terragrunt: backend конфіг
remote_state {
backend = "azurerm"
config = {
key = "${path_relative_to_include()}-
terraform.tfstate"
resource_group_name = "${get_env("TF_VAR_backend_storage_account
_rg", "")}"
storage_account_name = "${get_env("TF_VAR_backend_storage_accoun
t_name", "")}"
container_name = "${get_env("TF_VAR_backend_container_name", "")
}"
}
}
Continuous Delivery. Continuous DevOps. KYIV, 2020
terragrunt: cli опції terraform
terraform {
extra_arguments "common_var" {
commands = [
"apply",
]
arguments = [
"-var-
file=${get_terragrunt_dir()}/../vars/${get_env("TF_VAR_environment_
name", "")}.tfvars"
]
}
}
Continuous Delivery. Continuous DevOps. KYIV, 2020
Georedundancy
Continuous Delivery. Continuous DevOps. KYIV, 2020
Georedundancy – custom module structure
Continuous Delivery. Continuous DevOps. KYIV, 2020
Патерни деплоймента інфраструктури
• Blue-green deployment (terraform)
• Rolling updates (terraform)
Continuous Delivery. Continuous DevOps. KYIV, 2020
Патерни деплоймента інфраструктури
ROLLING UPDATE
1. Деплоймент InstanceHub
2. Для кожного регіону:
1) Terraform destroy InstanceLBRule
2) Terraform apply для Instance
3) Тест інстанса
4) Terraform apply InstanceLBRule
Continuous Delivery. Continuous DevOps. KYIV, 2020
Формування артефактів
Continuous Delivery. Continuous DevOps. KYIV, 2020
Версіонування модулів: опції
Module sources
• GitHub
• Bitbucket
• Generic Git, Mercurial repositories
• Terraform Registry
• HTTP URLs
• S3 buckets
• GCS buckets
Packaging options
• Git tags
• Збірка модулів в пакети (mbt)
Continuous Delivery. Continuous DevOps. KYIV, 2020
Git tags vs mbt
Плюси git tags:
• Просто версіонувати
• Не потрібно додаткового стореджа
для модулів
Мінуси git tags:
• Проблеми з організацією доступу
• Незручно організувати release
notes/package metadata
Плюси mbt:
• Легко поширювати/роздавати доступ
• Легко додавати в модуль metadata
• В пакет можна включати додаткові
модулі
Мінуси mbt:
• Потрібен сторедж/репозиторій
Continuous Delivery. Continuous DevOps. KYIV, 2020
Проблема організації команд / розподіл обов’язків
Continuous Delivery. Continuous DevOps. KYIV, 2020
Деспотія експлуатації VS анархія розробки
Devs IT
Continuous Delivery. Continuous DevOps. KYIV, 2020
Корисні ресурси
• Terraform / Terragrunt врапер і приклад для georedundancy:
https://github.com/id27182/devopsfest2020samples
• https://terragrunt.gruntwork.io/
• CI & тестування: https://www.contino.io/insights/top-3-terraform-testing-strategies-
for-ultra-reliable-infrastructure-as-code
• Branching workflow comparison: https://medium.com/@patrickporto/4-branching-
workflows-for-git-30d0aaee7bf
• Monorepo vs Polyrepo: https://danielkummer.github.io/git-flow-cheatsheet/
https://github.com/joelparkerhenderson/monorepo_vs_polyrepo
• Про клауд і IaaC: https://www.youtube.com/watch?v=BEZKub1BYCE&feature=youtu.be
Continuous Delivery. Continuous DevOps. KYIV, 2020
Q&A
Continuous Delivery. Continuous DevOps. KYIV, 2020
Continuous Delivery. Continuous DevOps. KYIV, 2020
Деспотія експлуатації VS анархія розробки

Más contenido relacionado

Más de DevOps_Fest

DevOps Fest 2020. Сергій Калінець. Building Data Streaming Platform with Apac...
DevOps Fest 2020. Сергій Калінець. Building Data Streaming Platform with Apac...DevOps Fest 2020. Сергій Калінець. Building Data Streaming Platform with Apac...
DevOps Fest 2020. Сергій Калінець. Building Data Streaming Platform with Apac...DevOps_Fest
 
DevOps Fest 2020. Kohsuke Kawaguchi. GitOps, Jenkins X & the Future of CI/CD
DevOps Fest 2020. Kohsuke Kawaguchi. GitOps, Jenkins X & the Future of CI/CDDevOps Fest 2020. Kohsuke Kawaguchi. GitOps, Jenkins X & the Future of CI/CD
DevOps Fest 2020. Kohsuke Kawaguchi. GitOps, Jenkins X & the Future of CI/CDDevOps_Fest
 
DevOps Fest 2020. Барух Садогурский и Леонид Игольник. Устраиваем DevOps без ...
DevOps Fest 2020. Барух Садогурский и Леонид Игольник. Устраиваем DevOps без ...DevOps Fest 2020. Барух Садогурский и Леонид Игольник. Устраиваем DevOps без ...
DevOps Fest 2020. Барух Садогурский и Леонид Игольник. Устраиваем DevOps без ...DevOps_Fest
 
DevOps Fest 2020. James Spiteri. Advanced Security Operations with Elastic Se...
DevOps Fest 2020. James Spiteri. Advanced Security Operations with Elastic Se...DevOps Fest 2020. James Spiteri. Advanced Security Operations with Elastic Se...
DevOps Fest 2020. James Spiteri. Advanced Security Operations with Elastic Se...DevOps_Fest
 
DevOps Fest 2020. Pavlo Repalo. Edge Computing: Appliance and Challanges
DevOps Fest 2020. Pavlo Repalo. Edge Computing: Appliance and ChallangesDevOps Fest 2020. Pavlo Repalo. Edge Computing: Appliance and Challanges
DevOps Fest 2020. Pavlo Repalo. Edge Computing: Appliance and ChallangesDevOps_Fest
 
DevOps Fest 2020. Максим Безуглый. DevOps - как архитектура в процессе. Две к...
DevOps Fest 2020. Максим Безуглый. DevOps - как архитектура в процессе. Две к...DevOps Fest 2020. Максим Безуглый. DevOps - как архитектура в процессе. Две к...
DevOps Fest 2020. Максим Безуглый. DevOps - как архитектура в процессе. Две к...DevOps_Fest
 
DevOps Fest 2020. Павел Жданов та Никора Никита. Построение процесса CI\CD дл...
DevOps Fest 2020. Павел Жданов та Никора Никита. Построение процесса CI\CD дл...DevOps Fest 2020. Павел Жданов та Никора Никита. Построение процесса CI\CD дл...
DevOps Fest 2020. Павел Жданов та Никора Никита. Построение процесса CI\CD дл...DevOps_Fest
 
DevOps Fest 2020. Станислав Коленкин. How to connect non-connectible: tips, t...
DevOps Fest 2020. Станислав Коленкин. How to connect non-connectible: tips, t...DevOps Fest 2020. Станислав Коленкин. How to connect non-connectible: tips, t...
DevOps Fest 2020. Станислав Коленкин. How to connect non-connectible: tips, t...DevOps_Fest
 
DevOps Fest 2020. Андрій Шабалін. Distributed Tracing for microservices with ...
DevOps Fest 2020. Андрій Шабалін. Distributed Tracing for microservices with ...DevOps Fest 2020. Андрій Шабалін. Distributed Tracing for microservices with ...
DevOps Fest 2020. Андрій Шабалін. Distributed Tracing for microservices with ...DevOps_Fest
 
DevOps Fest 2020. Дмитрий Кудрявцев. Реализация GitOps на Kubernetes. ArgoCD
DevOps Fest 2020. Дмитрий Кудрявцев. Реализация GitOps на Kubernetes. ArgoCDDevOps Fest 2020. Дмитрий Кудрявцев. Реализация GitOps на Kubernetes. ArgoCD
DevOps Fest 2020. Дмитрий Кудрявцев. Реализация GitOps на Kubernetes. ArgoCDDevOps_Fest
 
DevOps Fest 2020. Роман Орлов. Инфраструктура тестирования в Kubernetes
DevOps Fest 2020. Роман Орлов. Инфраструктура тестирования в KubernetesDevOps Fest 2020. Роман Орлов. Инфраструктура тестирования в Kubernetes
DevOps Fest 2020. Роман Орлов. Инфраструктура тестирования в KubernetesDevOps_Fest
 
DevOps Fest 2020. Андрей Шишенко. CI/CD for AWS Lambdas with Serverless frame...
DevOps Fest 2020. Андрей Шишенко. CI/CD for AWS Lambdas with Serverless frame...DevOps Fest 2020. Андрей Шишенко. CI/CD for AWS Lambdas with Serverless frame...
DevOps Fest 2020. Андрей Шишенко. CI/CD for AWS Lambdas with Serverless frame...DevOps_Fest
 
DevOps Fest 2020. Александр Глущенко. Modern Enterprise Network Architecture ...
DevOps Fest 2020. Александр Глущенко. Modern Enterprise Network Architecture ...DevOps Fest 2020. Александр Глущенко. Modern Enterprise Network Architecture ...
DevOps Fest 2020. Александр Глущенко. Modern Enterprise Network Architecture ...DevOps_Fest
 
DevOps Fest 2020. Виталий Складчиков. Сквозь монолитный enterprise к микросер...
DevOps Fest 2020. Виталий Складчиков. Сквозь монолитный enterprise к микросер...DevOps Fest 2020. Виталий Складчиков. Сквозь монолитный enterprise к микросер...
DevOps Fest 2020. Виталий Складчиков. Сквозь монолитный enterprise к микросер...DevOps_Fest
 
DevOps Fest 2020. Денис Медведенко. Управление сложными многокомпонентными ин...
DevOps Fest 2020. Денис Медведенко. Управление сложными многокомпонентными ин...DevOps Fest 2020. Денис Медведенко. Управление сложными многокомпонентными ин...
DevOps Fest 2020. Денис Медведенко. Управление сложными многокомпонентными ин...DevOps_Fest
 
DevOps Fest 2020. Павел Галушко. Что делать devops'у если у вас захотели mach...
DevOps Fest 2020. Павел Галушко. Что делать devops'у если у вас захотели mach...DevOps Fest 2020. Павел Галушко. Что делать devops'у если у вас захотели mach...
DevOps Fest 2020. Павел Галушко. Что делать devops'у если у вас захотели mach...DevOps_Fest
 
DevOps Fest 2020. Сергей Абаничев. Modern CI\CD pipeline with Azure DevOps
DevOps Fest 2020. Сергей Абаничев. Modern CI\CD pipeline with Azure DevOpsDevOps Fest 2020. Сергей Абаничев. Modern CI\CD pipeline with Azure DevOps
DevOps Fest 2020. Сергей Абаничев. Modern CI\CD pipeline with Azure DevOpsDevOps_Fest
 
DevOps Fest 2020. Philipp Krenn. Scale Your Auditing Events
DevOps Fest 2020. Philipp Krenn. Scale Your Auditing EventsDevOps Fest 2020. Philipp Krenn. Scale Your Auditing Events
DevOps Fest 2020. Philipp Krenn. Scale Your Auditing EventsDevOps_Fest
 
DevOps Fest 2020. Володимир Мельник. TuchaKube - перша українська DevOps/Host...
DevOps Fest 2020. Володимир Мельник. TuchaKube - перша українська DevOps/Host...DevOps Fest 2020. Володимир Мельник. TuchaKube - перша українська DevOps/Host...
DevOps Fest 2020. Володимир Мельник. TuchaKube - перша українська DevOps/Host...DevOps_Fest
 
DevOps Fest 2020. Денис Васильев. Let's make it KUL! Kubernetes Ultra Light
DevOps Fest 2020. Денис Васильев. Let's make it KUL! Kubernetes Ultra LightDevOps Fest 2020. Денис Васильев. Let's make it KUL! Kubernetes Ultra Light
DevOps Fest 2020. Денис Васильев. Let's make it KUL! Kubernetes Ultra LightDevOps_Fest
 

Más de DevOps_Fest (20)

DevOps Fest 2020. Сергій Калінець. Building Data Streaming Platform with Apac...
DevOps Fest 2020. Сергій Калінець. Building Data Streaming Platform with Apac...DevOps Fest 2020. Сергій Калінець. Building Data Streaming Platform with Apac...
DevOps Fest 2020. Сергій Калінець. Building Data Streaming Platform with Apac...
 
DevOps Fest 2020. Kohsuke Kawaguchi. GitOps, Jenkins X & the Future of CI/CD
DevOps Fest 2020. Kohsuke Kawaguchi. GitOps, Jenkins X & the Future of CI/CDDevOps Fest 2020. Kohsuke Kawaguchi. GitOps, Jenkins X & the Future of CI/CD
DevOps Fest 2020. Kohsuke Kawaguchi. GitOps, Jenkins X & the Future of CI/CD
 
DevOps Fest 2020. Барух Садогурский и Леонид Игольник. Устраиваем DevOps без ...
DevOps Fest 2020. Барух Садогурский и Леонид Игольник. Устраиваем DevOps без ...DevOps Fest 2020. Барух Садогурский и Леонид Игольник. Устраиваем DevOps без ...
DevOps Fest 2020. Барух Садогурский и Леонид Игольник. Устраиваем DevOps без ...
 
DevOps Fest 2020. James Spiteri. Advanced Security Operations with Elastic Se...
DevOps Fest 2020. James Spiteri. Advanced Security Operations with Elastic Se...DevOps Fest 2020. James Spiteri. Advanced Security Operations with Elastic Se...
DevOps Fest 2020. James Spiteri. Advanced Security Operations with Elastic Se...
 
DevOps Fest 2020. Pavlo Repalo. Edge Computing: Appliance and Challanges
DevOps Fest 2020. Pavlo Repalo. Edge Computing: Appliance and ChallangesDevOps Fest 2020. Pavlo Repalo. Edge Computing: Appliance and Challanges
DevOps Fest 2020. Pavlo Repalo. Edge Computing: Appliance and Challanges
 
DevOps Fest 2020. Максим Безуглый. DevOps - как архитектура в процессе. Две к...
DevOps Fest 2020. Максим Безуглый. DevOps - как архитектура в процессе. Две к...DevOps Fest 2020. Максим Безуглый. DevOps - как архитектура в процессе. Две к...
DevOps Fest 2020. Максим Безуглый. DevOps - как архитектура в процессе. Две к...
 
DevOps Fest 2020. Павел Жданов та Никора Никита. Построение процесса CI\CD дл...
DevOps Fest 2020. Павел Жданов та Никора Никита. Построение процесса CI\CD дл...DevOps Fest 2020. Павел Жданов та Никора Никита. Построение процесса CI\CD дл...
DevOps Fest 2020. Павел Жданов та Никора Никита. Построение процесса CI\CD дл...
 
DevOps Fest 2020. Станислав Коленкин. How to connect non-connectible: tips, t...
DevOps Fest 2020. Станислав Коленкин. How to connect non-connectible: tips, t...DevOps Fest 2020. Станислав Коленкин. How to connect non-connectible: tips, t...
DevOps Fest 2020. Станислав Коленкин. How to connect non-connectible: tips, t...
 
DevOps Fest 2020. Андрій Шабалін. Distributed Tracing for microservices with ...
DevOps Fest 2020. Андрій Шабалін. Distributed Tracing for microservices with ...DevOps Fest 2020. Андрій Шабалін. Distributed Tracing for microservices with ...
DevOps Fest 2020. Андрій Шабалін. Distributed Tracing for microservices with ...
 
DevOps Fest 2020. Дмитрий Кудрявцев. Реализация GitOps на Kubernetes. ArgoCD
DevOps Fest 2020. Дмитрий Кудрявцев. Реализация GitOps на Kubernetes. ArgoCDDevOps Fest 2020. Дмитрий Кудрявцев. Реализация GitOps на Kubernetes. ArgoCD
DevOps Fest 2020. Дмитрий Кудрявцев. Реализация GitOps на Kubernetes. ArgoCD
 
DevOps Fest 2020. Роман Орлов. Инфраструктура тестирования в Kubernetes
DevOps Fest 2020. Роман Орлов. Инфраструктура тестирования в KubernetesDevOps Fest 2020. Роман Орлов. Инфраструктура тестирования в Kubernetes
DevOps Fest 2020. Роман Орлов. Инфраструктура тестирования в Kubernetes
 
DevOps Fest 2020. Андрей Шишенко. CI/CD for AWS Lambdas with Serverless frame...
DevOps Fest 2020. Андрей Шишенко. CI/CD for AWS Lambdas with Serverless frame...DevOps Fest 2020. Андрей Шишенко. CI/CD for AWS Lambdas with Serverless frame...
DevOps Fest 2020. Андрей Шишенко. CI/CD for AWS Lambdas with Serverless frame...
 
DevOps Fest 2020. Александр Глущенко. Modern Enterprise Network Architecture ...
DevOps Fest 2020. Александр Глущенко. Modern Enterprise Network Architecture ...DevOps Fest 2020. Александр Глущенко. Modern Enterprise Network Architecture ...
DevOps Fest 2020. Александр Глущенко. Modern Enterprise Network Architecture ...
 
DevOps Fest 2020. Виталий Складчиков. Сквозь монолитный enterprise к микросер...
DevOps Fest 2020. Виталий Складчиков. Сквозь монолитный enterprise к микросер...DevOps Fest 2020. Виталий Складчиков. Сквозь монолитный enterprise к микросер...
DevOps Fest 2020. Виталий Складчиков. Сквозь монолитный enterprise к микросер...
 
DevOps Fest 2020. Денис Медведенко. Управление сложными многокомпонентными ин...
DevOps Fest 2020. Денис Медведенко. Управление сложными многокомпонентными ин...DevOps Fest 2020. Денис Медведенко. Управление сложными многокомпонентными ин...
DevOps Fest 2020. Денис Медведенко. Управление сложными многокомпонентными ин...
 
DevOps Fest 2020. Павел Галушко. Что делать devops'у если у вас захотели mach...
DevOps Fest 2020. Павел Галушко. Что делать devops'у если у вас захотели mach...DevOps Fest 2020. Павел Галушко. Что делать devops'у если у вас захотели mach...
DevOps Fest 2020. Павел Галушко. Что делать devops'у если у вас захотели mach...
 
DevOps Fest 2020. Сергей Абаничев. Modern CI\CD pipeline with Azure DevOps
DevOps Fest 2020. Сергей Абаничев. Modern CI\CD pipeline with Azure DevOpsDevOps Fest 2020. Сергей Абаничев. Modern CI\CD pipeline with Azure DevOps
DevOps Fest 2020. Сергей Абаничев. Modern CI\CD pipeline with Azure DevOps
 
DevOps Fest 2020. Philipp Krenn. Scale Your Auditing Events
DevOps Fest 2020. Philipp Krenn. Scale Your Auditing EventsDevOps Fest 2020. Philipp Krenn. Scale Your Auditing Events
DevOps Fest 2020. Philipp Krenn. Scale Your Auditing Events
 
DevOps Fest 2020. Володимир Мельник. TuchaKube - перша українська DevOps/Host...
DevOps Fest 2020. Володимир Мельник. TuchaKube - перша українська DevOps/Host...DevOps Fest 2020. Володимир Мельник. TuchaKube - перша українська DevOps/Host...
DevOps Fest 2020. Володимир Мельник. TuchaKube - перша українська DevOps/Host...
 
DevOps Fest 2020. Денис Васильев. Let's make it KUL! Kubernetes Ultra Light
DevOps Fest 2020. Денис Васильев. Let's make it KUL! Kubernetes Ultra LightDevOps Fest 2020. Денис Васильев. Let's make it KUL! Kubernetes Ultra Light
DevOps Fest 2020. Денис Васильев. Let's make it KUL! Kubernetes Ultra Light
 

Último

Проєкт «ІТ.UA: народжені в Україні». Єгор Анчишкін
Проєкт «ІТ.UA: народжені в Україні». Єгор Анчишкін Проєкт «ІТ.UA: народжені в Україні». Єгор Анчишкін
Проєкт «ІТ.UA: народжені в Україні». Єгор Анчишкін НБУ для дітей
 
Роберт Шеклі. Біографія письменника-фантаста
Роберт Шеклі. Біографія письменника-фантастаРоберт Шеклі. Біографія письменника-фантаста
Роберт Шеклі. Біографія письменника-фантастаAdriana Himinets
 
ніцше філософські погляди та бачення2.0.pptx
ніцше філософські погляди та бачення2.0.pptxніцше філософські погляди та бачення2.0.pptx
ніцше філософські погляди та бачення2.0.pptxBodia2
 
Автомат.звука с.інтегровані ігри для дітейpptx
Автомат.звука с.інтегровані ігри для дітейpptxАвтомат.звука с.інтегровані ігри для дітейpptx
Автомат.звука с.інтегровані ігри для дітейpptxvitalina6709
 
Kryterii otciniuvannia navchalnykh dosiahnen
Kryterii otciniuvannia navchalnykh dosiahnenKryterii otciniuvannia navchalnykh dosiahnen
Kryterii otciniuvannia navchalnykh dosiahnenolha1koval
 
Луцький центр ПТО соціальний проєкт .pptx
Луцький центр ПТО соціальний проєкт .pptxЛуцький центр ПТО соціальний проєкт .pptx
Луцький центр ПТО соціальний проєкт .pptxhome
 
Презентація роботи Осипенківської ЗОШ 2023-2024.pptx
Презентація роботи Осипенківської ЗОШ 2023-2024.pptxПрезентація роботи Осипенківської ЗОШ 2023-2024.pptx
Презентація роботи Осипенківської ЗОШ 2023-2024.pptxssuserc6cee7
 
Знайомтесь: книжкові бестселери: інформаційна книжкова візитка. Рекомендаційн...
Знайомтесь: книжкові бестселери: інформаційна книжкова візитка. Рекомендаційн...Знайомтесь: книжкові бестселери: інформаційна книжкова візитка. Рекомендаційн...
Знайомтесь: книжкові бестселери: інформаційна книжкова візитка. Рекомендаційн...Чернівецька обласна бібліотека для дітей
 
КНИЖКА ВЧИТЬ ЯК НА СВІТІ ЖИТЬ ЛІТОПИСИ.ppt
КНИЖКА ВЧИТЬ ЯК НА СВІТІ ЖИТЬ ЛІТОПИСИ.pptКНИЖКА ВЧИТЬ ЯК НА СВІТІ ЖИТЬ ЛІТОПИСИ.ppt
КНИЖКА ВЧИТЬ ЯК НА СВІТІ ЖИТЬ ЛІТОПИСИ.pptТаисия Папенчук
 
освітня програма 2023-2024 .
освітня програма  2023-2024                    .освітня програма  2023-2024                    .
освітня програма 2023-2024 .zaskalko111
 
критерії сооцінювання і взаємооцінюваннятехнології.pdf
критерії сооцінювання і взаємооцінюваннятехнології.pdfкритерії сооцінювання і взаємооцінюваннятехнології.pdf
критерії сооцінювання і взаємооцінюваннятехнології.pdfolha1koval
 
Критерії самоцінювання Іноземні мови.pdf
Критерії самоцінювання  Іноземні мови.pdfКритерії самоцінювання  Іноземні мови.pdf
Критерії самоцінювання Іноземні мови.pdfolha1koval
 
Імідж викладача ЗВО та шляхи його формування.pptx
Імідж викладача ЗВО та шляхи його формування.pptxІмідж викладача ЗВО та шляхи його формування.pptx
Імідж викладача ЗВО та шляхи його формування.pptxkatral1968
 
Черкаський художньо-технічний коледж оголошує про день відкритих дверей
Черкаський художньо-технічний коледж оголошує про день відкритих дверейЧеркаський художньо-технічний коледж оголошує про день відкритих дверей
Черкаський художньо-технічний коледж оголошує про день відкритих дверейvitaliyinformatik
 

Último (16)

17.04.2024.1.docx17.04.2024.1.docx17.04.2024.1.docx
17.04.2024.1.docx17.04.2024.1.docx17.04.2024.1.docx17.04.2024.1.docx17.04.2024.1.docx17.04.2024.1.docx
17.04.2024.1.docx17.04.2024.1.docx17.04.2024.1.docx
 
Проєкт «ІТ.UA: народжені в Україні». Єгор Анчишкін
Проєкт «ІТ.UA: народжені в Україні». Єгор Анчишкін Проєкт «ІТ.UA: народжені в Україні». Єгор Анчишкін
Проєкт «ІТ.UA: народжені в Україні». Єгор Анчишкін
 
17.04.2024.2.docx17.04.2024.2.docx17.04.2024.2.docx
17.04.2024.2.docx17.04.2024.2.docx17.04.2024.2.docx17.04.2024.2.docx17.04.2024.2.docx17.04.2024.2.docx
17.04.2024.2.docx17.04.2024.2.docx17.04.2024.2.docx
 
Роберт Шеклі. Біографія письменника-фантаста
Роберт Шеклі. Біографія письменника-фантастаРоберт Шеклі. Біографія письменника-фантаста
Роберт Шеклі. Біографія письменника-фантаста
 
ніцше філософські погляди та бачення2.0.pptx
ніцше філософські погляди та бачення2.0.pptxніцше філософські погляди та бачення2.0.pptx
ніцше філософські погляди та бачення2.0.pptx
 
Автомат.звука с.інтегровані ігри для дітейpptx
Автомат.звука с.інтегровані ігри для дітейpptxАвтомат.звука с.інтегровані ігри для дітейpptx
Автомат.звука с.інтегровані ігри для дітейpptx
 
Kryterii otciniuvannia navchalnykh dosiahnen
Kryterii otciniuvannia navchalnykh dosiahnenKryterii otciniuvannia navchalnykh dosiahnen
Kryterii otciniuvannia navchalnykh dosiahnen
 
Луцький центр ПТО соціальний проєкт .pptx
Луцький центр ПТО соціальний проєкт .pptxЛуцький центр ПТО соціальний проєкт .pptx
Луцький центр ПТО соціальний проєкт .pptx
 
Презентація роботи Осипенківської ЗОШ 2023-2024.pptx
Презентація роботи Осипенківської ЗОШ 2023-2024.pptxПрезентація роботи Осипенківської ЗОШ 2023-2024.pptx
Презентація роботи Осипенківської ЗОШ 2023-2024.pptx
 
Знайомтесь: книжкові бестселери: інформаційна книжкова візитка. Рекомендаційн...
Знайомтесь: книжкові бестселери: інформаційна книжкова візитка. Рекомендаційн...Знайомтесь: книжкові бестселери: інформаційна книжкова візитка. Рекомендаційн...
Знайомтесь: книжкові бестселери: інформаційна книжкова візитка. Рекомендаційн...
 
КНИЖКА ВЧИТЬ ЯК НА СВІТІ ЖИТЬ ЛІТОПИСИ.ppt
КНИЖКА ВЧИТЬ ЯК НА СВІТІ ЖИТЬ ЛІТОПИСИ.pptКНИЖКА ВЧИТЬ ЯК НА СВІТІ ЖИТЬ ЛІТОПИСИ.ppt
КНИЖКА ВЧИТЬ ЯК НА СВІТІ ЖИТЬ ЛІТОПИСИ.ppt
 
освітня програма 2023-2024 .
освітня програма  2023-2024                    .освітня програма  2023-2024                    .
освітня програма 2023-2024 .
 
критерії сооцінювання і взаємооцінюваннятехнології.pdf
критерії сооцінювання і взаємооцінюваннятехнології.pdfкритерії сооцінювання і взаємооцінюваннятехнології.pdf
критерії сооцінювання і взаємооцінюваннятехнології.pdf
 
Критерії самоцінювання Іноземні мови.pdf
Критерії самоцінювання  Іноземні мови.pdfКритерії самоцінювання  Іноземні мови.pdf
Критерії самоцінювання Іноземні мови.pdf
 
Імідж викладача ЗВО та шляхи його формування.pptx
Імідж викладача ЗВО та шляхи його формування.pptxІмідж викладача ЗВО та шляхи його формування.pptx
Імідж викладача ЗВО та шляхи його формування.pptx
 
Черкаський художньо-технічний коледж оголошує про день відкритих дверей
Черкаський художньо-технічний коледж оголошує про день відкритих дверейЧеркаський художньо-технічний коледж оголошує про день відкритих дверей
Черкаський художньо-технічний коледж оголошує про день відкритих дверей
 

DevOps Fest 2020. Богдан Матейко. Infrastructure as a Code в реальному світі

  • 1. Continuous Delivery. Continuous DevOps. KYIV, 2020 CONTINUOUS DELIVERY. CONTINUOUS DEVOPS. 20-21,MARCH 2020 KYIV, UKRAINE Infrastructure as a code в реальному світі
  • 2. Continuous Delivery. Continuous DevOps. KYIV, 2020 • SRE • Azure consultant • 2+ роки IaaC About me BOHDAN MATEIKO @id27182
  • 3. Continuous Delivery. Continuous DevOps. KYIV, 2020 Проблеми • Зв’язок модулів компонентів / Передача outputs між модулями • Конфігурація backend • Оркестрація модулів • Georedundancy • Патерни деплоймента інфраструктури • Проблема організації команд / розподіл обов’язків • Формування артефактів
  • 4. Continuous Delivery. Continuous DevOps. KYIV, 2020 Зв’язок модулів компонентів
  • 5. Continuous Delivery. Continuous DevOps. KYIV, 2020 Remote state data "terraform_remote_state" "backend" { backend = "remote" config = { # ... } } resource "aws_instance" "foo" { # ... subnet_id = data.terraform_remote_state.backend .outputs.subnet_id }
  • 6. Continuous Delivery. Continuous DevOps. KYIV, 2020 Remote state ПЛЮСИ: • Не потрібно додаткової інфраструктури, тільки backend • Стандартне оголошення output • Мало додаткового коду при зчитуванні, один datasource на модуль МІНУСИ: • Потрібно писати в datasource повну конфігурацію бекенда • Проблеми при реорганізації модулів • Важко мокати залежності
  • 7. Continuous Delivery. Continuous DevOps. KYIV, 2020 Remote state
  • 8. Continuous Delivery. Continuous DevOps. KYIV, 2020 Key-Value Bus data "azurerm_key_vault_secret" "backoffice_apim_key" { name = "${var.environment_name}-backend-output- apim-backofficekey" key_vault_id = var.infra_vault_rid } resource "azurerm_app_service" "galaxy_app_service" { name = "${var.environment_name}backoffice" location = var.location # ... app_settings = { # ... BACKEND_APIM_KEY = data.azurerm_key_vault_secret.backof fice_apim_key.value } }
  • 9. Continuous Delivery. Continuous DevOps. KYIV, 2020 Key-Value Bus ПЛЮСИ: • Явна декларація залежностей модуля (більш явна ніж з remote state) • Ідентифікатор output-a не залежить від модуля • Просто мокати залежності • Вирішує додаткові проблеми МІНУСИ: • Додаткивий сервіс в інфраструктурі • Окремий datasource на кожну змінну, яка зчитується модулем
  • 10. Continuous Delivery. Continuous DevOps. KYIV, 2020 Key-Value Bus: конфіги/сертифікати
  • 11. Continuous Delivery. Continuous DevOps. KYIV, 2020 Напівавтоматизована інфарструктура
  • 12. Continuous Delivery. Continuous DevOps. KYIV, 2020 Підготовка / передача конфігурації backend > terraform init --backend-config 'storage_account_name=backend_storage_account' -- backend-config 'container_name=backend_container_name' --backend-config 'resource_group_name=tf_backend_rg’ > terraform apply -var 'vault_rid=/subscriptions/342c4f42-4425-4042-422a- 422cb42f242d/resourceGroups/backend_resource_group_name/providers/Microsoft.Key Vault/vaults/backend_key_vault' > terraform destroy -var 'vault_rid=/subscriptions/342c4f42-4425-4042-422a- 422cb42f242d/resourceGroups/backend_resource_group_name/providers/Microsoft.Key Vault/vaults/backend_key_vault'
  • 13. Continuous Delivery. Continuous DevOps. KYIV, 2020
  • 14. Continuous Delivery. Continuous DevOps. KYIV, 2020 Приклад врапера ПАРАМЕТРИ МОДУЛІВ: • Environment • Location • Cloud provider credentials • Backend configuration • Key-value bus configuration PRE-REQUIREMENTS: • Azure • В кожному сабскрібшені ресурсна група, в якій storage account і key vault • В якості backend – azure storage account. • Для кожного енва – свій блоб контейнер. • В якості key-value – azure key-vault
  • 15. Continuous Delivery. Continuous DevOps. KYIV, 2020 Приклад врапера > Set-Environment -environment ‘dev’ -force > terraform apply > terraform destroy
  • 16. Continuous Delivery. Continuous DevOps. KYIV, 2020 Оркестрація модулів
  • 17. Continuous Delivery. Continuous DevOps. KYIV, 2020 Оркестрація модулів: terragrunt  Запуск кількох модулів однією командою  Залежності модулів в коді  Конфігурація бекенда в одному місці  CLI флаги в одному місці
  • 18. Continuous Delivery. Continuous DevOps. KYIV, 2020 terragrunt: залежності модулів dependencies { paths = ["../core-infrastructure", "../k8s-config"] }
  • 19. Continuous Delivery. Continuous DevOps. KYIV, 2020 terragrunt: backend конфіг remote_state { backend = "azurerm" config = { key = "${path_relative_to_include()}- terraform.tfstate" resource_group_name = "${get_env("TF_VAR_backend_storage_account _rg", "")}" storage_account_name = "${get_env("TF_VAR_backend_storage_accoun t_name", "")}" container_name = "${get_env("TF_VAR_backend_container_name", "") }" } }
  • 20. Continuous Delivery. Continuous DevOps. KYIV, 2020 terragrunt: cli опції terraform terraform { extra_arguments "common_var" { commands = [ "apply", ] arguments = [ "-var- file=${get_terragrunt_dir()}/../vars/${get_env("TF_VAR_environment_ name", "")}.tfvars" ] } }
  • 21. Continuous Delivery. Continuous DevOps. KYIV, 2020 Georedundancy
  • 22. Continuous Delivery. Continuous DevOps. KYIV, 2020 Georedundancy – custom module structure
  • 23. Continuous Delivery. Continuous DevOps. KYIV, 2020 Патерни деплоймента інфраструктури • Blue-green deployment (terraform) • Rolling updates (terraform)
  • 24. Continuous Delivery. Continuous DevOps. KYIV, 2020 Патерни деплоймента інфраструктури ROLLING UPDATE 1. Деплоймент InstanceHub 2. Для кожного регіону: 1) Terraform destroy InstanceLBRule 2) Terraform apply для Instance 3) Тест інстанса 4) Terraform apply InstanceLBRule
  • 25. Continuous Delivery. Continuous DevOps. KYIV, 2020 Формування артефактів
  • 26. Continuous Delivery. Continuous DevOps. KYIV, 2020 Версіонування модулів: опції Module sources • GitHub • Bitbucket • Generic Git, Mercurial repositories • Terraform Registry • HTTP URLs • S3 buckets • GCS buckets Packaging options • Git tags • Збірка модулів в пакети (mbt)
  • 27. Continuous Delivery. Continuous DevOps. KYIV, 2020 Git tags vs mbt Плюси git tags: • Просто версіонувати • Не потрібно додаткового стореджа для модулів Мінуси git tags: • Проблеми з організацією доступу • Незручно організувати release notes/package metadata Плюси mbt: • Легко поширювати/роздавати доступ • Легко додавати в модуль metadata • В пакет можна включати додаткові модулі Мінуси mbt: • Потрібен сторедж/репозиторій
  • 28. Continuous Delivery. Continuous DevOps. KYIV, 2020 Проблема організації команд / розподіл обов’язків
  • 29. Continuous Delivery. Continuous DevOps. KYIV, 2020 Деспотія експлуатації VS анархія розробки Devs IT
  • 30. Continuous Delivery. Continuous DevOps. KYIV, 2020 Корисні ресурси • Terraform / Terragrunt врапер і приклад для georedundancy: https://github.com/id27182/devopsfest2020samples • https://terragrunt.gruntwork.io/ • CI & тестування: https://www.contino.io/insights/top-3-terraform-testing-strategies- for-ultra-reliable-infrastructure-as-code • Branching workflow comparison: https://medium.com/@patrickporto/4-branching- workflows-for-git-30d0aaee7bf • Monorepo vs Polyrepo: https://danielkummer.github.io/git-flow-cheatsheet/ https://github.com/joelparkerhenderson/monorepo_vs_polyrepo • Про клауд і IaaC: https://www.youtube.com/watch?v=BEZKub1BYCE&feature=youtu.be
  • 31. Continuous Delivery. Continuous DevOps. KYIV, 2020 Q&A
  • 32. Continuous Delivery. Continuous DevOps. KYIV, 2020
  • 33. Continuous Delivery. Continuous DevOps. KYIV, 2020 Деспотія експлуатації VS анархія розробки

Notas del editor

  1. IaaC з terraform це круто і зручно, але в той же час і складно. В процесі роботи виникає багато проблем, рішення яких не очевидні і не описані в документації. Сьогодні я хочу поговорити про такі проблеми та як їх уникнути (на прикладі azure).
  2. Мене звуть БМ, і я працюю з проектами, які стосуються різних варіацій IaaC більше двох років. Давайте починати.
  3. Уявимо абстрактну компанію, яка використовує azure, та інфраструктура якої виглядає ось так Пройтись по компонентам і зв*язкам
  4. Компоненти можуть розроблятись і, відповідно, розгортають окремо, є сенс описувати кожен окремим модулем. Але що робити у випадку, коли треба зчитати якесь значення, яке генерується в модуді бекенд, наприклад з модуля бекофіс. Це значення може бути апі енндоінтом, ключем, сертифікатом і т д Є два рішення
  5. Тераформу необхідно зберігати дані про вашу інфраструктуру та конфігурацію. Стейт використовується тераформом для того щоб зберігати інформацію про зв*язок реальних ресурсів і ваших модулів, метадату та для інших цілей. Це означає, що всі динамічно згенеровані значення зберігаються в стейті, і цим можна скористатись. Як виглядає в коді (Т) Для цього потрібно описати датасорс
  6. і окрім всього, може статись (Т)
  7. Альтернатива цьому підходу – Key-Value шина Підхід полягає в тому, щоб використовувати якийсь KV (приклад) для запису аутпутів і їх зчитування Ось як виглядає (Т)
  8. Без kv – великі vars файли в сорс контролі або костилі З – централізований сторедж
  9. уявіть що проект тільки стартує .... (Т)
  10. Давайте розглянемо приклад Всі модулі приймають уніфікований список параметрів (решта в kv)
  11. Бувають ситуації, коли потрібно розбивати на окремі модулі Наприклад ... Потрібно уніфіковано запускати (Т)
  12. Цю проблему можна вирішити за допомогою терагрант Террагрант – це врапер, який дозволяє адекватно ...
  13. Адекватний спосіб описувати georedundant серидовища
  14. Зручно розділити ресурси по модулям
  15. Ще одна проблема, яку може вирішити такий підхід до організації модулів – деплоймент стратегія для продакшн Звісно, можна Але
  16. З вище описаною організацією модулів, можна зробити rolling update з можливістю протестувати перед тим, як повернути в балансувальник навантаження
  17. Якщо інфраструктура описється кодом – деплоймент повинен бути такий же, як для коду
  18. Одне з питань, яке може виникнути – хто повинен бути оунером коду , та кому можна контрібютити Хашикорп рекомендує
  19. Але хто ж Невизначеність може привести до двох крайностей Вихід є: Оунер той – хто найчастіше міняє
  20. Хашикорп рекомендує Різні види інфраструктури (легісі, cloud-native з функціями і т д, AKS) Немає чіткого алгоритму Оунер той – хто найчастіше міняє