Slide 1

Slide 1 text

Patrick Koch AVL List GmbH (Headquarters) Public Don't give up just because it's legacy Migration of a containerized Legacy Application to the Cloud

Slide 2

Slide 2 text

Public Introduction

Slide 3

Slide 3 text

Patrick Koch | | 16 February 2024 | / 3 Public Patrick Koch • Email: [email protected] • Blog: patrickkoch.dev • LinkedIn: patkoch87 • GitHub: patkoch • Twitter/X: PK_Koch • Mastodon: @[email protected] Cloud Adoption Engineer, AVL List GmbH

Slide 4

Slide 4 text

Patrick Koch | | 16 February 2024 | / 4 Public Today’s agenda 4 3 2 Brief overview about the AVL, and the legacy software application Introduction 1 Once upon a time ... and it‘s still there What happened before the cloud? Why Windows containers? The cloud migration journey Let‘s follow the cloud native way! Next steps What’s next? We are still at the beginning ... Conclusion & outlook 6 5 Our derived key learnings Benefits of using IaC

Slide 5

Slide 5 text

Patrick Koch | | 16 February 2024 | / 5 Public AVL List GmbH Founded 1948 More than 11,000 worldwide 4,000 in Graz (headquarters) 45 affiliates worldwide Export quota of 97% AVL List GmbH (“AVL”) is the world’s largest independent company for development, simulation and testing in the automotive industry, and in other sectors. Drawing on its pioneering spirit, the company provides concepts, solutions and methodologies to shape future mobility trends.”

Slide 6

Slide 6 text

Patrick Koch | | 16 February 2024 | / 6 Public Evolved to platform product Container, K8s Automation Framework Web components Started > 25 years ago Python support REST interface 2014 New Generation (unmanaged legacy (C++) and managed (C#) code). Windows® application (component & full integration in internal products) 2018 ~ 8200 files ~ 2,9 Mio LOC Linux components (data, Python) 2022 ... “A legacy system is outdated computing software and/or hardware that is still in use. ” ~ 800 customers ~ 23000 users The application to migrate in the cloud: AVL CONCERTO

Slide 7

Slide 7 text

Public Once upon a time ... What happened before the cloud?

Slide 8

Slide 8 text

Patrick Koch | | 16 February 2024 | / 8 Public Traditional use case: the engine test bed

Slide 9

Slide 9 text

Patrick Koch | | 16 February 2024 | / 9 Public Data processing with AVL CONCERTO

Slide 10

Slide 10 text

Public The cloud migration journey starts…

Slide 11

Slide 11 text

Patrick Koch | | 16 February 2024 | / 11 Public An evolution happens – why even more automation, and more data? 2021 .. Huge testbed for single unit under test (UUT) 1 Operator per testbed Very high costs Exchanging of unit is labour-intesive One testing unit for multiple UUTs (Battery Cells) 1 Operator for whole lab Costs per UUT are much lower UUT exchange works automated 2021 ..

Slide 12

Slide 12 text

Patrick Koch | | 16 February 2024 | / 12 Public Short-term approach for migrating to the cloud Run your legacy SW as a Windows container on a hybrid cloud platform! Lift & Shift (Rehost) Whole application is taken and pushed into container not possible / would cause to much costs Refactoring Rebuild

Slide 13

Slide 13 text

Patrick Koch | | 16 February 2024 | / 14 Public The solution idea Source: https://docs.microsoft.com/de-de/azure/architecture/solution-ideas/articles/migrate-existing-applications-with-aks “Easily migrate existing application to container(s) and run within the Azure managed Kubernetes service (AKS)”

Slide 14

Slide 14 text

Patrick Koch | | 16 February 2024 | / 15 Public The goal of the first implementation Azure Container Registry Azure Kubernetes Service Azure Virtual Machine Azure File Share Container 1 2 3 4

Slide 15

Slide 15 text

Patrick Koch | | 16 February 2024 | / 16 Public The result of the first implementation

Slide 16

Slide 16 text

Public Next steps – go cloud native! Cloud Windows Containers

Slide 17

Slide 17 text

Patrick Koch | | 16 February 2024 | / 18 Public mid-term approach for migrating to the cloud Refactor core parts of your monolith and run them as Linux container Lift & Shift (Rehost) Whole application is taken and pushed into container Next logical step Refactoring Rebuild

Slide 18

Slide 18 text

Patrick Koch | | 16 February 2024 | / 19 Public Determine the core components selected for refactoring Native Data management subsytem COM .Net Managed subsytem Native application Managed GUI Native GUI COM REST Python Python pybind Python Python Python Python Native Data management subsytem Windows Linux

Slide 19

Slide 19 text

Public Benefits of using IaC

Slide 20

Slide 20 text

Patrick Koch | | 16 February 2024 | / 22 Public Empower the developer • Developers are capable of provisioning the resources they need • Having fun with provisioning/destroying/changing the infrastructure AKS icon source: https://learn.microsoft.com/en-us/azure/architecture/icons/ resource "azurerm_resource_group" "example" { name = "example-resources" location = "West Europe" } resource "azurerm_kubernetes_cluster" "example" { name = "patricks-aks" location = azurerm_resource_group.example.location resource_group_name = azurerm_resource_group.example.name dns_prefix = "exampleaks1" default_node_pool { name = "default" node_count = 1 vm_size = "Standard_D2_v2" }

Slide 21

Slide 21 text

Patrick Koch | | 16 February 2024 | / 23 Public Infrastructure can be version controlled • Version control the configurations • Be able to reproduce specific versions of your infrastructure • Feel free to experiment Git icon source: https://git-scm.com/downloads/logos resource "azurerm_resource_group" "example" { name = "example-resources" location = "West Europe" } resource "azurerm_kubernetes_cluster" "example" { name = "patricks-aks" location = azurerm_resource_group.example.location resource_group_name = azurerm_resource_group.example.name dns_prefix = "exampleaks1" default_node_pool { name = "default" node_count = 1 vm_size = "Standard_D2_v2" }

Slide 22

Slide 22 text

Patrick Koch | | 16 February 2024 | / 24 Public Increase the Automation – Establish Pipelines Terraform Configurations Azure Azure DevOps Pipeline • Create pipelines for triggering the Terraform commands • Controlled way of provisioning/destroying the resources • Everyone can trigger the pipeline

Slide 23

Slide 23 text

Patrick Koch | | 16 February 2024 | / 25 Public Increase the Automation – Establish Pipelines • Create pipelines for triggering the Terraform commands • Controlled way of provisioning/destroying the resources • Everyone can trigger the pipeline Video source: Azure Portal

Slide 24

Slide 24 text

Patrick Koch | | 16 February 2024 | / 26 Public Decrease the costs • Provision when you need it • Estimate costs upfront using dedicated tools

Slide 25

Slide 25 text

Patrick Koch | | 16 February 2024 | / 28 Public Conclusion Decide for a cloud migration strategy first Start lightweight with your first implementation Use an Infrastructure as Code approach Increase your automation

Slide 26

Slide 26 text

Public www.avl.com Thank you Change is the Essence of Innovation.

Slide 27

Slide 27 text

Patrick Koch | | 16 February 2024 | / 30 Public Picture Sources https://www.genardmethod.com/blog/ your-speechs-introduction-how-to- make-it-powerful https://www.avl.com Slide 1 Slide 2 https://pixabay.com/photos/car- citroen-france-vintage-vehicle- 2184905/ Slide 7 Windows: https://commons.wikimedia.org/wiki/Fi le:Windows_Logo_(1992-2001).svg PCs: https://www.impulse.de/wp- content/uploads/2015/10/gebrauchte- hardware_fotolia620-620x340.jpg Python: https://www.python.org/ Linux: https://upload.wikimedia.org/wikipedia /commons/d/dd/Linux_logo.jpg Slide 6 https://pixabay.com/de/photos/geb%C 3%A4ude-kran-baustelle- ger%C3%BCstbau-1804030/ Slide 10

Slide 28

Slide 28 text

Patrick Koch | | 16 February 2024 | / 31 Public Picture Sources Engine Test Bed: http://www.avl.com Battery Cell: https://www.avl.com/en/testing- solutions/e-mobility-testing/battery-testing/avl- battery-cell-ts Slide 11 https://www.pexels.com/photo/man- jumping-on-intermodal-container- 379964/ Slide 12 & Slide 18 https://learn.microsoft.com/de- de/azure/cloud-adoption- framework/migrate/ Slide 14 Azure VM Icon: https://learn.microsoft.com/en- us/azure/architecture/icons/ AKS Icon: https://learn.microsoft.com/en- us/azure/architecture/icons/ Azure Share Icon: https://learn.microsoft.com/en- us/azure/architecture/icons/ ACR Icon: https://learn.microsoft.com/en- us/azure/architecture/icons/ Container Icon: https://icons8.de/icons/set/container Slide 15 Azure: https://icons8.de/icons/set/azure- | Prefect: https://www.prefect.io/ | AKS: https://learn.microsoft.com/en- us/azure/architecture/icons/ | ACR: https://learn.microsoft.com/en- us/azure/architecture/icons/ | Kafka: https://kafka.apache.org/ | KEDA: https://keda.sh/ | Clickhouse: https://clickhouse.com/ | PostgreSQL: https://www.postgresql.org/ | MySQL: https://docs.azure.cn/en-us/mysql-database-on- azure/ | Elastic: https://www.elastic.co/de/elasticsearch/ | Terraform: https://www.terraform.io/ Slide 20

Slide 29

Slide 29 text

Patrick Koch | | 16 February 2024 | / 32 Public Picture Sources AKS Logo: https://learn.microsoft.com/en- us/azure/architecture/icons/ Slide 22 Slide 23 Git icon source: https://git- scm.com/downloads/logos Slide 27 Terraform icon: https://www.terraform.io/ Python: https://icons8.de/icons/set/python Linux: https://icons8.de/icons/set/linux Prefect: https://www.prefect.io/ Terraform: https://www.terraform.io/ Docker: https://icons8.de/icons/set/docker Kubernetes: https://icons8.de/icons/set/kubernetes AKS: https://learn.microsoft.com/en- us/azure/architecture/icons/ Azure DevOps Service: https://learn.microsoft.com/en- us/azure/architecture/icons/ Azure: https://icons8.de/icons/set/azure- Windows: https://icons8.de/icons/set/windows Slide 28 Slide 28