SlideShare une entreprise Scribd logo
1  sur  102
Infrastructure-as-Code
bridging the gap between Devs and Ops
April 6th, 2019 - DevOps Fest 2019 - Kyiv, Ukraine
Who am I?
Mykyta Protsenko
Software developer @ Netflix
(Edge Developer Productivity)
Twitter: @mykyta_p
How long does it take
you to provision
infrastructure?
How many resources
do you need for one
microservice?
How many resources
do you need for one
microservice?
...and how many do you
need for all of them?
Do it now and
automate later?
Too much stuff for OPS
to handle
Bridging the gap
Empowering devs
Ensuring safety
What is
infrastructure?
Computing
Storage
Networking
Everything is software
Writing
Testing
Maintaining
12 factor apps
Codebase
Dependencies
Configuration
Backing services
Build, release, run
Processes
Port binding
Concurrency
Disposability
Dev/prod parity
Logs
Admin processes
12 factor apps
Codebase
Dependencies
Configuration
Backing services
Build, release, run
Processes
Port binding
Concurrency
Disposability
Logs
Dev/prod parity
Admin processes
12 factor apps Codebase
Configuration
Logs
Dev/Prod Parity
12 factor apps Codebase
Configuration
Logs
Dev/Prod Parity
12 factor apps Codebase
Configuration
Logs
Dev/Prod Parity
12 factor apps Codebase
Configuration
Logs
Dev/Prod Parity
12 factor apps Codebase
Configuration
Logs
Dev/Prod Parity
12 factor apps Codebase
Configuration
Logs
Dev/Prod Parity
Ansible
Chef
Puppet
Ansible
Chef
Puppet
Immutable
infrastructure
What tools do we need?
aws elb create-load-balancer
--load-balancer-name myELB
--listeners
"Protocol=HTTP,
LoadBalancerPort=80,
InstanceProtocol=HTTP,
InstancePort=80"
--subnets subnet-15aaab61
--security-groups sg-a61988c3
Imperative tools?
aws elb create-load-balancer
--load-balancer-name myELB
--listeners
"Protocol=HTTP,
LoadBalancerPort=80,
InstanceProtocol=HTTP,
InstancePort=80"
--subnets subnet-15aaab61
--security-groups sg-a61988c3
Declarative tools FTW!
Cloudformation?
"MyDNSRecord": {
"Type": "AWS::Route53::RecordSet",
"Properties": { "HostedZoneName":
{"Fn::Join":
["", [{"Ref":"HostedZone"},
"."]]},
"Comment" : "DNS for inst.",
"Name" : {"Fn::Join":
["",[{"Ref":"EC2Instance"},
".",{"Ref": "AWS::Region"},
".", {"Ref:"HostedZone"},"."]]},
"Type" : "A",
"TTL" : "300",
"ResourceRecords":
[{"Fn::GetAtt" :
["EC2Instance", PublicIp"]}]}
}
resource "aws_route53_record" "www"
{
zone_id = "${...}"
name = "www.example.com"
type = "A"
ttl = "300"
records =
["${aws_eip.lb.public_ip}"]
}
Terraform
Terraform
Simple
Human-friendly
What else?
@RestController
public class HelloWorld {
@GetMapping("/")
public String hello() {
return "Hello World!n";
}
}
https://github.com/iac-demo
Terraform FTW!
resource "aws_ecs_task_definition"
"hello-world" {
...
family = "hello-world"
cpu = "256" // 0.25 vCPU
memory = "512" // 512 MB
container_definitions = <<DEF
[
{
...
"image": "helloworld:latest",
...
}
]
DEF
}
https://github.com/iac-demo
Terraform FTW!
resource "aws_ecs_task_definition"
"hello-world" {
...
family = "hello-world"
cpu = "256" // 0.25 vCPU
memory = "512" // 512 MB
container_definitions = <<DEF
[
{
...
"image": "helloworld:latest",
...
}
]
DEF
}
https://github.com/iac-demo
Terraform FTW!
resource "aws_ecs_service" "hello-world" {
cluster = "${aws_ecs_cluster.main.id}"
task_definition =
"${aws_ecs_task_definition.hello-world.arn}"
desired_count = "2"
network_configuration {
subnets = ["${aws_subnet.sb_a.id}",...]
security_groups =
["${aws_security_group.web_ecs.id}"]
}
load_balancer {
target_group_arn =
"${aws_alb_target_group.hello-world.id}"
container_name = "helloworld"
container_port = "8080"
}
...
https://github.com/iac-demo
Terraform FTW!
resource "aws_ecs_service" "hello-world" {
cluster = "${aws_ecs_cluster.main.id}"
task_definition =
"${aws_ecs_task_definition.hello-world.arn}"
desired_count = "2"
network_configuration {
subnets = ["${aws_subnet.sb_a.id}",...]
security_groups =
["${aws_security_group.web_ecs.id}"]
}
load_balancer {
target_group_arn =
"${aws_alb_target_group.hello-world.id}"
container_name = "helloworld"
container_port = "8080"
}
...
https://github.com/iac-demo
Terraform FTW!
resource "aws_ecs_service" "hello-world" {
cluster = "${aws_ecs_cluster.main.id}"
task_definition =
"${aws_ecs_task_definition.hello-world.arn}"
desired_count = "2"
network_configuration {
subnets = ["${aws_subnet.sb_a.id}",...]
security_groups =
["${aws_security_group.web_ecs.id}"]
}
load_balancer {
target_group_arn =
"${aws_alb_target_group.hello-world.id}"
container_name = "helloworld"
container_port = "8080"
}
...
https://github.com/iac-demo
Terraform FTW!
resource "aws_alb" "hello-world" {
name = "hello-world"
subnets = [...]
security_groups = [...]
vpc_id = "${aws_vpc.iacdemo_vpc.id}"
}
https://github.com/iac-demo
Core Infrastructure
vs
Project Infrastructure
Core Infrastructure
resource "aws_vpc" "iacdemo_vpc" {
cidr_block = "10.0.0.0/16"
enable_dns_hostnames = true
}
resource "aws_internet_gateway"
"default" {
vpc_id = "${aws_vpc.iacdemo_vpc.id}"
}
...
https://github.com/iac-demo
Core Infrastructure
output "vpc_id" {
value = "${aws_vpc.iacdemo_vpc.id}"
}
terraform {
backend "s3" {
key = "iacdemo.tfstate"
region = "us-west-2"
bucket = "demobucket"
}
}
https://github.com/iac-demo
Project Infrastructuredata "terraform_remote_state" "core" {
backend = "s3"
config {
key = "iacdemo.tfstate"
region = "us-west-2"
bucket = "demobucket"
}
}
resource "aws_alb" "hello-world" {
name = "hello-world"
...
vpc_id =
"${data.
terraform_remote_state.core.vpc_id}"
}
https://github.com/iac-demo
Project Infrastructuredata "terraform_remote_state" "core" {
backend = "s3"
config {
key = "iacdemo.tfstate"
region = "us-west-2"
bucket = "demobucket"
}
}
resource "aws_alb" "hello-world" {
name = "hello-world"
...
vpc_id =
"${data.
terraform_remote_state.core.vpc_id}"
}
https://github.com/iac-demo
https://github.com/iac-demo
CELEBRATE!
CELEBRATE?
State of the world
local terraform.tfstate
State of the world
remote S3
local terraform.tfstate
State of the world
terraform {
backend "s3" {
key = "iacdemo.tfstate"
region = "us-west-2"
bucket = "demobucket"
dynamodb_table =
"table_for_locking"
}
}
State of the world
terraform init
Automated Pipeline
git clone git@github.com:my/repo.git
Automated Pipeline
git clone git@github.com:my/repo.git
terraform init
Automated Pipeline
git clone git@github.com:my/repo.git
terraform init
export TF_VAR_foo="bar"
terraform plan
Automated Pipeline
git clone git@github.com:my/repo.git
terraform init
export TF_VAR_foo="bar"
terraform plan
terraform apply
COPY-PASTE
Encapsulation
Hiding Complexity
Reusing Code
Terraform modules
variable "service_name" {}
variable "docker_image" {}
Terraform modules
variable "service_name" {}
variable "docker_image" {}
resource "aws_ecs_task_definition"
"service" {
family = "${var.service_name}"
container_definitions = <<DEF
[{
...
"image": "${var.docker_image}",
"name": "${var.service_name}"
...
}]DEF
}
Terraform modulesmodule "hello_world" {
source = "./microservice_module"
service_name = "helloworld1"
docker_image= "helloworld:latest"
}
Terraform modulesmodule "hello_world" {
source = "./microservice_module"
service_name = "helloworld1"
docker_image= "helloworld:latest"
}
module "another_hello_world" {
source = "./microservice_module"
service_name = "helloworld2"
docker_image= "helloworld:latest"
}
Where do I store modules?
Terraform modules
Local Storage
S3
Consul
Terraform Registry
Git
… and others
module "hello_world" {
source =
"git::https://example.com/srv.git"
...
}
Terraform modules
Local Storage
S3
Consul
Terraform Registry
Git
… and others
module "hello_world" {
source =
"git::https://example.com/srv.git
?ref=1.0.0"
...
}
Terraform modulesmodule "hello_world" {
source = ...
service_name = "helloworld"
docker_image= "helloworld:latest"
}
Breaking Changes?
...While Running 24/7?
Create Before Destroy
resource "aws_alb" "hello-world" {
...
lifecycle {
create_before_destroy = "true"
}
}
Create Before Destroy
resource "aws_alb" "hello-world" {
...
lifecycle {
create_before_destroy = "true"
}
}
resource "aws_ecs_service" "hello-world" {
...
lifecycle {
create_before_destroy = "true"
}
}
Green/Blue Deployments
V1
Green/Blue Deployments
V1
V2
Green/Blue Deployments
V1
V2
Safety
vs
Complexity/Cost
Life after Terraform
Kubernetes! And More!
Declarative K8S
k8s_template.yaml.sh
#!/bin/bash
cat <<YAML
apiVersion: apps/v1beta1
kind: Deployment
...
spec:
replicas: 1
template:
spec:
containers:
- name: $SERVICE_NAME
image: $DOCKER_IMAGE
imagePullPolicy: Always
ports:
- containerPort: 8090
...
YAML
Declarative K8S
k8s_template.yaml.sh
#!/bin/bash
cat <<YAML
apiVersion: apps/v1beta1
kind: Deployment
...
spec:
replicas: 1
template:
spec:
containers:
- name: $SERVICE_NAME
image: $DOCKER_IMAGE
imagePullPolicy: Always
ports:
- containerPort: 8090
...
YAML
Declarative K8S
$ export DOCKER_IMAGE=hello:latest
$ export SERVICE_NAME=helloworld
$ k8s_template.yaml.sh | 
kubectl apply -f -
Still Need Core Infra
provider "google" {
project = "breakme-europe"
region = "europe-west1"
}
resource "google_container_cluster"
"main" {
name = "k8s-cluster"
zone = "europe-west1-d"
initial_node_count = 4
node_config {
machine_type = "n1-standard-2"
...
}
...
}
Fear of Changes
Show, Don’t Tell
30-40 mins vs 3-4 mins
10x better!
Evolution
Small Changes
Learning Curve?
Show, Don’t Tell
Be Patient
Tooling Issues?
Centralize?
Centralize?
Centralize?
Vagrant?
Centralize?
Vagrant?
Package Repository?
Leverage Build System
build.gradle
buildscript {
dependencies {
classpath "com.roku:henka:1.0.0-RELEASE"
}
}
task terraformPlan(type: TerraformTask) {
description "Runs a terraform script"
tfDir = "${projectDir}/terraform"
tfAction = "plan -input=false"
terraformBaseDir = "/opt/terraform"
terraformVersion = "0.11.11"
}
// ...
Leverage Build System
$ ./gradlew build
$ ./gradlew terraformPlan
Best Practices
Unified Build Logic
Best Practices
Unified Build Logic
Unified Monitoring
Best Practices
Unified Build Logic
Unified Monitoring
Code Reviews
Best Practices
Unified Build Logic
Unified Monitoring
Code Reviews
CI/CD
Best Practices
Unified Build Logic
Unified Monitoring
Code Reviews
CI/CD
No Documentation
Deploy Faster!
Terraform https://www.terraform.io
12 factor app https://12factor.net/
Kubernetes https://kubernetes.io/
Gradle https://gradle.org/
Henka https://github.com/roku-oss/henka
Twitter @mykyta_p
Slides http://devopsfest2019.protsenko.com
Sources https://github.com/iac-demo

Contenu connexe

Plus de 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
 

Plus de DevOps_Fest (20)

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
 
DevOps Fest 2020. Даніель Яворович. Data pipelines: building an efficient ins...
DevOps Fest 2020. Даніель Яворович. Data pipelines: building an efficient ins...DevOps Fest 2020. Даніель Яворович. Data pipelines: building an efficient ins...
DevOps Fest 2020. Даніель Яворович. Data pipelines: building an efficient ins...
 
DevOps Fest 2020. Богдан Матейко. Infrastructure as a Code в реальному світі
DevOps Fest 2020. Богдан Матейко. Infrastructure as a Code в реальному світіDevOps Fest 2020. Богдан Матейко. Infrastructure as a Code в реальному світі
DevOps Fest 2020. Богдан Матейко. Infrastructure as a Code в реальному світі
 
DevOps Fest 2020. Николай Маржан. Consistent backups of multi-shard MongoDB
DevOps Fest 2020. Николай Маржан. Consistent backups of multi-shard MongoDBDevOps Fest 2020. Николай Маржан. Consistent backups of multi-shard MongoDB
DevOps Fest 2020. Николай Маржан. Consistent backups of multi-shard MongoDB
 
DevOps Fest 2020. Alexey Golub. GitHub Actions in action
DevOps Fest 2020. Alexey Golub. GitHub Actions in actionDevOps Fest 2020. Alexey Golub. GitHub Actions in action
DevOps Fest 2020. Alexey Golub. GitHub Actions in action
 
DevOps Fest 2020. Сергей Погорелов. Локально распределенное окружение разрабо...
DevOps Fest 2020. Сергей Погорелов. Локально распределенное окружение разрабо...DevOps Fest 2020. Сергей Погорелов. Локально распределенное окружение разрабо...
DevOps Fest 2020. Сергей Погорелов. Локально распределенное окружение разрабо...
 
DevOps Fest 2019. Alex Casalboni. Configuration management and service discov...
DevOps Fest 2019. Alex Casalboni. Configuration management and service discov...DevOps Fest 2019. Alex Casalboni. Configuration management and service discov...
DevOps Fest 2019. Alex Casalboni. Configuration management and service discov...
 
DevOps Fest 2019. Alex Thissen. Taking your .NET Core container solution from...
DevOps Fest 2019. Alex Thissen. Taking your .NET Core container solution from...DevOps Fest 2019. Alex Thissen. Taking your .NET Core container solution from...
DevOps Fest 2019. Alex Thissen. Taking your .NET Core container solution from...
 
DevOps Fest 2019. Philipp Krenn. Hands-On ModSecurity and Logging
DevOps Fest 2019. Philipp Krenn. Hands-On ModSecurity and LoggingDevOps Fest 2019. Philipp Krenn. Hands-On ModSecurity and Logging
DevOps Fest 2019. Philipp Krenn. Hands-On ModSecurity and Logging
 

Dernier

1029-Danh muc Sach Giao Khoa khoi 6.pdf
1029-Danh muc Sach Giao Khoa khoi  6.pdf1029-Danh muc Sach Giao Khoa khoi  6.pdf
1029-Danh muc Sach Giao Khoa khoi 6.pdf
QucHHunhnh
 
Seal of Good Local Governance (SGLG) 2024Final.pptx
Seal of Good Local Governance (SGLG) 2024Final.pptxSeal of Good Local Governance (SGLG) 2024Final.pptx
Seal of Good Local Governance (SGLG) 2024Final.pptx
negromaestrong
 
The basics of sentences session 3pptx.pptx
The basics of sentences session 3pptx.pptxThe basics of sentences session 3pptx.pptx
The basics of sentences session 3pptx.pptx
heathfieldcps1
 

Dernier (20)

Grant Readiness 101 TechSoup and Remy Consulting
Grant Readiness 101 TechSoup and Remy ConsultingGrant Readiness 101 TechSoup and Remy Consulting
Grant Readiness 101 TechSoup and Remy Consulting
 
INDIA QUIZ 2024 RLAC DELHI UNIVERSITY.pptx
INDIA QUIZ 2024 RLAC DELHI UNIVERSITY.pptxINDIA QUIZ 2024 RLAC DELHI UNIVERSITY.pptx
INDIA QUIZ 2024 RLAC DELHI UNIVERSITY.pptx
 
Explore beautiful and ugly buildings. Mathematics helps us create beautiful d...
Explore beautiful and ugly buildings. Mathematics helps us create beautiful d...Explore beautiful and ugly buildings. Mathematics helps us create beautiful d...
Explore beautiful and ugly buildings. Mathematics helps us create beautiful d...
 
Z Score,T Score, Percential Rank and Box Plot Graph
Z Score,T Score, Percential Rank and Box Plot GraphZ Score,T Score, Percential Rank and Box Plot Graph
Z Score,T Score, Percential Rank and Box Plot Graph
 
Key note speaker Neum_Admir Softic_ENG.pdf
Key note speaker Neum_Admir Softic_ENG.pdfKey note speaker Neum_Admir Softic_ENG.pdf
Key note speaker Neum_Admir Softic_ENG.pdf
 
1029-Danh muc Sach Giao Khoa khoi 6.pdf
1029-Danh muc Sach Giao Khoa khoi  6.pdf1029-Danh muc Sach Giao Khoa khoi  6.pdf
1029-Danh muc Sach Giao Khoa khoi 6.pdf
 
TỔNG ÔN TẬP THI VÀO LỚP 10 MÔN TIẾNG ANH NĂM HỌC 2023 - 2024 CÓ ĐÁP ÁN (NGỮ Â...
TỔNG ÔN TẬP THI VÀO LỚP 10 MÔN TIẾNG ANH NĂM HỌC 2023 - 2024 CÓ ĐÁP ÁN (NGỮ Â...TỔNG ÔN TẬP THI VÀO LỚP 10 MÔN TIẾNG ANH NĂM HỌC 2023 - 2024 CÓ ĐÁP ÁN (NGỮ Â...
TỔNG ÔN TẬP THI VÀO LỚP 10 MÔN TIẾNG ANH NĂM HỌC 2023 - 2024 CÓ ĐÁP ÁN (NGỮ Â...
 
Seal of Good Local Governance (SGLG) 2024Final.pptx
Seal of Good Local Governance (SGLG) 2024Final.pptxSeal of Good Local Governance (SGLG) 2024Final.pptx
Seal of Good Local Governance (SGLG) 2024Final.pptx
 
Food Chain and Food Web (Ecosystem) EVS, B. Pharmacy 1st Year, Sem-II
Food Chain and Food Web (Ecosystem) EVS, B. Pharmacy 1st Year, Sem-IIFood Chain and Food Web (Ecosystem) EVS, B. Pharmacy 1st Year, Sem-II
Food Chain and Food Web (Ecosystem) EVS, B. Pharmacy 1st Year, Sem-II
 
Energy Resources. ( B. Pharmacy, 1st Year, Sem-II) Natural Resources
Energy Resources. ( B. Pharmacy, 1st Year, Sem-II) Natural ResourcesEnergy Resources. ( B. Pharmacy, 1st Year, Sem-II) Natural Resources
Energy Resources. ( B. Pharmacy, 1st Year, Sem-II) Natural Resources
 
Asian American Pacific Islander Month DDSD 2024.pptx
Asian American Pacific Islander Month DDSD 2024.pptxAsian American Pacific Islander Month DDSD 2024.pptx
Asian American Pacific Islander Month DDSD 2024.pptx
 
ICT role in 21st century education and it's challenges.
ICT role in 21st century education and it's challenges.ICT role in 21st century education and it's challenges.
ICT role in 21st century education and it's challenges.
 
microwave assisted reaction. General introduction
microwave assisted reaction. General introductionmicrowave assisted reaction. General introduction
microwave assisted reaction. General introduction
 
The basics of sentences session 3pptx.pptx
The basics of sentences session 3pptx.pptxThe basics of sentences session 3pptx.pptx
The basics of sentences session 3pptx.pptx
 
This PowerPoint helps students to consider the concept of infinity.
This PowerPoint helps students to consider the concept of infinity.This PowerPoint helps students to consider the concept of infinity.
This PowerPoint helps students to consider the concept of infinity.
 
Holdier Curriculum Vitae (April 2024).pdf
Holdier Curriculum Vitae (April 2024).pdfHoldier Curriculum Vitae (April 2024).pdf
Holdier Curriculum Vitae (April 2024).pdf
 
Micro-Scholarship, What it is, How can it help me.pdf
Micro-Scholarship, What it is, How can it help me.pdfMicro-Scholarship, What it is, How can it help me.pdf
Micro-Scholarship, What it is, How can it help me.pdf
 
psychiatric nursing HISTORY COLLECTION .docx
psychiatric  nursing HISTORY  COLLECTION  .docxpsychiatric  nursing HISTORY  COLLECTION  .docx
psychiatric nursing HISTORY COLLECTION .docx
 
Unit-V; Pricing (Pharma Marketing Management).pptx
Unit-V; Pricing (Pharma Marketing Management).pptxUnit-V; Pricing (Pharma Marketing Management).pptx
Unit-V; Pricing (Pharma Marketing Management).pptx
 
Web & Social Media Analytics Previous Year Question Paper.pdf
Web & Social Media Analytics Previous Year Question Paper.pdfWeb & Social Media Analytics Previous Year Question Paper.pdf
Web & Social Media Analytics Previous Year Question Paper.pdf
 

DevOps Fest 2019. Mykyta Protsenko. Infrastructure-as-code: bridging the gap between Devs and Ops