Terraform, Infrastructure as Code management tool

Continuous Deployment · Continuous Integration · DevOps · IaC · SRE

264 words

2 minutes

IaC Concept

  • fast deployment for business requirement
  • infrastructure consistency
  • security compliance automation

Azure cloud infra architecture overview

https://learn.microsoft.com/en-us/azure/architecture/reference-architectures/containers/aks-microservices/aks-microservices

Proposed GitOps flow

  • change request
  • stakeholder notification, plan
  • IaC modularization for reusable purpose
  • version control, branch: main, dev, new_net, new_db, stg, prd, …
  • automating testing
  • continuous deployment
  • update process to related notificatition channel

HCL Code example

variable "aks_node_pool" {
  description = ""
  type = map(object({
    vm_size         = string
    node_count      = number
    zones           = list(string)
    os_disk_size_gb = number
    os_disk_type    = string
  }))
  default = {
    "mqpool" : { vm_size = "Standard_DS4_v2", node_count = 6, zones = ["1", "2"], os_disk_size_gb = 64, os_disk_type = "Ephemeral" }
    "tbcorepool" : { vm_size = "Standard_DS3_v2", node_count = 3, zones = ["1", "2"], os_disk_size_gb = 64, os_disk_type = "Ephemeral" }
    "tbrepool" : { vm_size = "Standard_DS3_v2", node_count = 25, zones = ["1", "2"], os_disk_size_gb = 64, os_disk_type = "Ephemeral" }
    "tbtranspool" : { vm_size = "Standard_DS3_v2", node_count = 12, zones = ["1", "2"], os_disk_size_gb = 64, os_disk_type = "Ephemeral" }
    "tbjspool" : { vm_size = "Standard_DS2_v2", node_count = 6, zones = ["1", "2"], os_disk_size_gb = 64, os_disk_type = "Ephemeral" }
  }
}
module "aks" {
  source                               = "../../modules/azure/kubernetes"
  resource_group                       = var.resource_group
  location                             = var.location
  vnet_app_name                        = local.vnet_app_name
  subnet_aks_name                      = var.subnet_aks_name
  aks_name                             = local.aks_name
  aks_namespace_admin_group_object_ids = var.aks_namespace_admin_group_object_ids
  aks_admin_group_object_ids           = var.aks_admin_group_object_ids
  apg_id                               = module.apg.apg_id
  acr_id                               = module.acr.acr_id
  aks_tags                             = var.aks_tags
  aks_default_node_pool                = var.aks_default_node_pool
  aks_node_pool                        = var.aks_node_pool

  vnet_depends_on = [
    module.network.vnet_app_name,
    module.apg.apg_id,
    module.acr.acr_id
  ]
}

Further IaC with documentation tool

Ref